提交基础采购

This commit is contained in:
2025-11-18 16:45:05 +08:00
parent cc9b1c0e92
commit 7c04e13198
77 changed files with 5733 additions and 0 deletions

View File

@@ -0,0 +1,50 @@
package com.klp.erp.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
/**
* 采购订单明细对象 erp_purchase_order_item
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("erp_purchase_order_item")
public class ErpPurchaseOrderItem extends BaseEntity {
private static final long serialVersionUID = 1L;
@TableId(value = "item_id")
private Long itemId;
private Long orderId;
private String materialTypeCode;
private String specification;
private BigDecimal quantity;
private BigDecimal unitPrice;
private BigDecimal amount;
private BigDecimal currentStock;
private BigDecimal onTheWay;
private BigDecimal salesDemand;
private BigDecimal suggestPurchase;
@TableLogic
private Long delFlag;
private String remark;
}

View File

@@ -0,0 +1,44 @@
package com.klp.erp.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.Date;
/**
* 采购收货记录表 erp_purchase_receipt
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("erp_purchase_receipt")
public class ErpPurchaseReceipt extends BaseEntity {
private static final long serialVersionUID = 1L;
@TableId(value = "receipt_id")
private Long receiptId;
private Long orderId;
private Long itemId;
private BigDecimal receivedQty;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date receiptTime;
private String qualityResult;
@TableLogic
private Integer delFlag;
private String remark;
}

View File

@@ -0,0 +1,45 @@
package com.klp.erp.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("erp_purchase_requirement")
public class ErpPurchaseRequirement extends BaseEntity {
private static final long serialVersionUID = 1L;
@TableId(value = "req_id")
private Long reqId;
private String materialTypeCode;
private String specification;
private BigDecimal salesDemand;
private BigDecimal productStock;
private BigDecimal rawStock;
private BigDecimal rawStockConv;
private BigDecimal onTheWay;
private BigDecimal onTheWayConv;
private BigDecimal suggestPurchaseQty;
@TableLogic
private Integer delFlag;
private String remark;
}

View File

@@ -0,0 +1,37 @@
package com.klp.erp.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 采购退货主表 erp_purchase_return
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("erp_purchase_return")
public class ErpPurchaseReturn extends BaseEntity {
private static final long serialVersionUID = 1L;
@TableId(value = "return_id")
private Long returnId;
private Long orderId;
private String returnType;
private String reason;
private Integer status;
@TableLogic
private Integer delFlag;
private String remark;
}

View File

@@ -0,0 +1,39 @@
package com.klp.erp.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
/**
* 采购退货明细表 erp_purchase_return_item
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("erp_purchase_return_item")
public class ErpPurchaseReturnItem extends BaseEntity {
private static final long serialVersionUID = 1L;
@TableId(value = "return_item_id")
private Long returnItemId;
private Long returnId;
private Long itemId;
private BigDecimal returnQty;
private String photos;
@TableLogic
private Integer delFlag;
private String remark;
}

View File

@@ -0,0 +1,44 @@
package com.klp.erp.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 供应商档案对象 erp_supplier
*
* @author klp
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("erp_supplier")
public class ErpSupplier extends BaseEntity {
private static final long serialVersionUID = 1L;
@TableId(value = "supplier_id")
private Long supplierId;
private String supplierCode;
private String name;
private String type;
private String creditRating;
private String contactPerson;
private String contactPhone;
private String address;
@TableLogic
private Long delFlag;
private String remark;
}

View File

@@ -0,0 +1,43 @@
package com.klp.erp.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.Date;
/**
* 供应商价格对象 erp_supplier_price
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("erp_supplier_price")
public class ErpSupplierPrice extends BaseEntity {
private static final long serialVersionUID = 1L;
@TableId(value = "price_id")
private Long priceId;
private Long supplierId;
private String materialTypeCode;
private String specification;
private BigDecimal price;
private Date validFrom;
private Date validTo;
@TableLogic
private Long delFlag;
private String remark;
}

View File

@@ -0,0 +1,48 @@
package com.klp.erp.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
* 采购订单明细业务对象
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ErpPurchaseOrderItemBo extends BaseEntity {
@NotNull(message = "主键不能为空", groups = {EditGroup.class})
private Long itemId;
@NotNull(message = "订单ID不能为空", groups = {AddGroup.class, EditGroup.class})
private Long orderId;
@NotBlank(message = "物料类型编码不能为空", groups = {AddGroup.class, EditGroup.class})
private String materialTypeCode;
private String specification;
@NotNull(message = "采购数量不能为空", groups = {AddGroup.class, EditGroup.class})
private BigDecimal quantity;
private BigDecimal unitPrice;
private BigDecimal amount;
private BigDecimal currentStock;
private BigDecimal onTheWay;
private BigDecimal salesDemand;
private BigDecimal suggestPurchase;
private String remark;
}

View File

@@ -0,0 +1,38 @@
package com.klp.erp.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.klp.common.core.domain.BaseEntity;
import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = true)
public class ErpPurchaseReceiptBo extends BaseEntity {
@NotNull(message = "主键不能为空", groups = {EditGroup.class})
private Long receiptId;
@NotNull(message = "订单ID不能为空", groups = {AddGroup.class, EditGroup.class})
private Long orderId;
@NotNull(message = "订单明细ID不能为空", groups = {AddGroup.class, EditGroup.class})
private Long itemId;
@NotNull(message = "收货数量不能为空", groups = {AddGroup.class, EditGroup.class})
private BigDecimal receivedQty;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date receiptTime;
private String qualityResult;
private String remark;
}

View File

@@ -0,0 +1,30 @@
package com.klp.erp.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
@Data
@EqualsAndHashCode(callSuper = true)
public class ErpPurchaseReturnBo extends BaseEntity {
@NotNull(message = "主键不能为空", groups = {EditGroup.class})
private Long returnId;
@NotNull(message = "订单ID不能为空", groups = {AddGroup.class, EditGroup.class})
private Long orderId;
private String returnType;
private String reason;
private Integer status;
private String remark;
}

View File

@@ -0,0 +1,33 @@
package com.klp.erp.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
@Data
@EqualsAndHashCode(callSuper = true)
public class ErpPurchaseReturnItemBo extends BaseEntity {
@NotNull(message = "主键不能为空", groups = {EditGroup.class})
private Long returnItemId;
@NotNull(message = "退货单ID不能为空", groups = {AddGroup.class, EditGroup.class})
private Long returnId;
@NotNull(message = "订单明细ID不能为空", groups = {AddGroup.class, EditGroup.class})
private Long itemId;
@NotNull(message = "退货数量不能为空", groups = {AddGroup.class, EditGroup.class})
private BigDecimal returnQty;
private String photos;
private String remark;
}

View File

@@ -0,0 +1,40 @@
package com.klp.erp.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 供应商档案业务对象
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ErpSupplierBo extends BaseEntity {
@NotNull(message = "主键不能为空", groups = {EditGroup.class})
private Long supplierId;
@NotBlank(message = "供应商编码不能为空", groups = {AddGroup.class, EditGroup.class})
private String supplierCode;
@NotBlank(message = "供应商名称不能为空", groups = {AddGroup.class, EditGroup.class})
private String name;
private String type;
private String creditRating;
private String contactPerson;
private String contactPhone;
private String address;
private String remark;
}

View File

@@ -0,0 +1,44 @@
package com.klp.erp.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.klp.common.core.domain.BaseEntity;
import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;
/**
* 供应商价格业务对象
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ErpSupplierPriceBo extends BaseEntity {
@NotNull(message = "主键不能为空", groups = {EditGroup.class})
private Long priceId;
@NotNull(message = "供应商不能为空", groups = {AddGroup.class, EditGroup.class})
private Long supplierId;
@NotBlank(message = "物料类型不能为空", groups = {AddGroup.class, EditGroup.class})
private String materialTypeCode;
private String specification;
@NotNull(message = "价格不能为空", groups = {AddGroup.class, EditGroup.class})
private BigDecimal price;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date validFrom;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date validTo;
private String remark;
}

View File

@@ -0,0 +1,20 @@
package com.klp.erp.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 物料类型查询条件
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class MaterialTypeQueryBo extends BaseEntity {
private String materialTypeCode;
private String specification;
private Long supplierId;
}

View File

@@ -0,0 +1,24 @@
package com.klp.erp.domain.bo;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import java.util.List;
@Data
public class PurchaseRequirementAnalyzeBo {
/**
* 产品与原料转换关系
*/
@NotEmpty(message = "转换映射关系不能为空")
@Valid
private List<PurchaseRequirementMappingBo> mappings;
/**
* 是否持久化分析结果
*/
private Boolean persistResult = Boolean.FALSE;
}

View File

@@ -0,0 +1,27 @@
package com.klp.erp.domain.bo;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
@Data
public class PurchaseRequirementMappingBo {
@NotNull(message = "产品ID不能为空")
private Long productId;
private String productCode;
@NotNull(message = "原料ID不能为空")
private Long rawMaterialId;
private String rawMaterialCode;
/**
* 原料转成品的转换率0.95 表示 1 吨原料 ≈ 0.95 吨成品)
*/
@NotNull(message = "转换率不能为空")
private BigDecimal conversionRate;
}

View File

@@ -0,0 +1,12 @@
package com.klp.erp.domain.dto;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ProductDemandDTO {
private Long productId;
private BigDecimal demandQuantity;
}

View File

@@ -0,0 +1,13 @@
package com.klp.erp.domain.dto;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ProductStockDTO {
private Long productId;
private Long coilCount;
private BigDecimal totalWeight;
}

View File

@@ -0,0 +1,13 @@
package com.klp.erp.domain.dto;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class RawStockDTO {
private Long rawMaterialId;
private Long coilCount;
private BigDecimal totalWeight;
}

View File

@@ -0,0 +1,12 @@
package com.klp.erp.domain.dto;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class RawTransitDTO {
private Long rawMaterialId;
private BigDecimal quantity;
}

View File

@@ -0,0 +1,55 @@
package com.klp.erp.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 采购订单明细视图对象
*/
@Data
@ExcelIgnoreUnannotated
public class ErpPurchaseOrderItemVo implements Serializable {
private static final long serialVersionUID = 1L;
@ExcelProperty("明细ID")
private Long itemId;
@ExcelProperty("订单ID")
private Long orderId;
@ExcelProperty("物料类型编码")
private String materialTypeCode;
@ExcelProperty("规格")
private String specification;
@ExcelProperty("采购数量")
private BigDecimal quantity;
@ExcelProperty("单价")
private BigDecimal unitPrice;
@ExcelProperty("金额")
private BigDecimal amount;
@ExcelProperty("当前库存")
private BigDecimal currentStock;
@ExcelProperty("在途数量")
private BigDecimal onTheWay;
@ExcelProperty("销售需求")
private BigDecimal salesDemand;
@ExcelProperty("建议采购数量")
private BigDecimal suggestPurchase;
@ExcelProperty("备注")
private String remark;
}

View File

@@ -0,0 +1,41 @@
package com.klp.erp.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
@Data
@ExcelIgnoreUnannotated
public class ErpPurchaseReceiptVo implements Serializable {
private static final long serialVersionUID = 1L;
@ExcelProperty("收货记录ID")
private Long receiptId;
@ExcelProperty("订单ID")
private Long orderId;
@ExcelProperty("订单明细ID")
private Long itemId;
@ExcelProperty("收货数量")
private BigDecimal receivedQty;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ExcelProperty("收货时间")
private Date receiptTime;
@ExcelProperty("质检结果")
private String qualityResult;
@ExcelProperty("备注")
private String remark;
}

View File

@@ -0,0 +1,35 @@
package com.klp.erp.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
@ExcelIgnoreUnannotated
public class ErpPurchaseReturnItemVo implements Serializable {
private static final long serialVersionUID = 1L;
@ExcelProperty("退货明细ID")
private Long returnItemId;
@ExcelProperty("退货单ID")
private Long returnId;
@ExcelProperty("订单明细ID")
private Long itemId;
@ExcelProperty("退货数量")
private BigDecimal returnQty;
@ExcelProperty("问题照片")
private String photos;
@ExcelProperty("备注")
private String remark;
}

View File

@@ -0,0 +1,34 @@
package com.klp.erp.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ExcelIgnoreUnannotated
public class ErpPurchaseReturnVo implements Serializable {
private static final long serialVersionUID = 1L;
@ExcelProperty("退货单ID")
private Long returnId;
@ExcelProperty("订单ID")
private Long orderId;
@ExcelProperty("退货类型")
private String returnType;
@ExcelProperty("退货原因")
private String reason;
@ExcelProperty("退货状态")
private Integer status;
@ExcelProperty("备注")
private String remark;
}

View File

@@ -0,0 +1,47 @@
package com.klp.erp.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* 供应商价格视图对象
*/
@Data
@ExcelIgnoreUnannotated
public class ErpSupplierPriceVo implements Serializable {
private static final long serialVersionUID = 1L;
@ExcelProperty("价格ID")
private Long priceId;
@ExcelProperty("供应商ID")
private Long supplierId;
@ExcelProperty("物料类型编码")
private String materialTypeCode;
@ExcelProperty("规格")
private String specification;
@ExcelProperty("价格")
private BigDecimal price;
@JsonFormat(pattern = "yyyy-MM-dd")
@ExcelProperty("生效日期")
private Date validFrom;
@JsonFormat(pattern = "yyyy-MM-dd")
@ExcelProperty("失效日期")
private Date validTo;
@ExcelProperty("备注")
private String remark;
}

View File

@@ -0,0 +1,45 @@
package com.klp.erp.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* 供应商档案视图对象
*/
@Data
@ExcelIgnoreUnannotated
public class ErpSupplierVo implements Serializable {
private static final long serialVersionUID = 1L;
@ExcelProperty("供应商ID")
private Long supplierId;
@ExcelProperty("供应商编码")
private String supplierCode;
@ExcelProperty("供应商名称")
private String name;
@ExcelProperty("供应商类型")
private String type;
@ExcelProperty("信用等级")
private String creditRating;
@ExcelProperty("联系人")
private String contactPerson;
@ExcelProperty("联系电话")
private String contactPhone;
@ExcelProperty("地址")
private String address;
@ExcelProperty("备注")
private String remark;
}

View File

@@ -0,0 +1,21 @@
package com.klp.erp.domain.vo;
import lombok.Data;
/**
* 物料类型下拉视图
*/
@Data
public class MaterialTypeOptionVo {
private String materialTypeCode;
private String specification;
private Long supplierId;
private String supplierName;
private java.math.BigDecimal latestPrice;
}

View File

@@ -0,0 +1,21 @@
package com.klp.erp.domain.vo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class PurchaseRequirementRawDetailVo {
private Long rawMaterialId;
private String rawMaterialCode;
private String rawMaterialName;
private BigDecimal conversionRate;
private BigDecimal stockWeight;
private Long stockCoilCount;
private BigDecimal inTransitWeight;
private BigDecimal pendingWeight;
private BigDecimal convertedStock;
private BigDecimal convertedInTransit;
private BigDecimal convertedPending;
}

View File

@@ -0,0 +1,35 @@
package com.klp.erp.domain.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@Data
public class PurchaseRequirementVo {
private Long productId;
private String productCode;
private String productName;
private String specification;
private BigDecimal salesDemand = BigDecimal.ZERO;
private BigDecimal productStockWeight = BigDecimal.ZERO;
private Long productStockCoilCount = 0L;
private BigDecimal rawStockWeight = BigDecimal.ZERO;
private Long rawStockCoilCount = 0L;
private BigDecimal rawStockConverted = BigDecimal.ZERO;
private BigDecimal inTransitWeight = BigDecimal.ZERO;
private BigDecimal inTransitConverted = BigDecimal.ZERO;
private BigDecimal pendingWeight = BigDecimal.ZERO;
private BigDecimal pendingConverted = BigDecimal.ZERO;
private BigDecimal suggestedPurchase = BigDecimal.ZERO;
private List<PurchaseRequirementRawDetailVo> rawDetails = new ArrayList<>();
}