From a66f554a5066ac784633e0c4fe19494a4905afdc Mon Sep 17 00:00:00 2001 From: "JinLu.Yin" <411641505@qq.com> Date: Fri, 15 Jul 2022 20:47:44 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E9=A2=86=E6=96=99=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E6=A0=B8=E5=BF=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/设计文档/数据库设计/mes-wm.sql | 1 + .../ktg/common/constant/UserConstants.java | 8 +- .../controller/WmIssueHeaderController.java | 38 +++ .../wm/controller/WmItemRecptController.java | 6 +- .../com/ktg/mes/wm/domain/WmIssueLine.java | 12 +- .../com/ktg/mes/wm/domain/tx/IssueTxBean.java | 269 ++++++++++++++++++ .../mes/wm/mapper/WmIssueHeaderMapper.java | 5 + .../mes/wm/service/IStorageCoreService.java | 6 + .../mes/wm/service/IWmIssueHeaderService.java | 3 + .../service/impl/StorageCoreServiceImpl.java | 19 ++ .../impl/WmIssueHeaderServiceImpl.java | 6 + .../mapper/wm/WmIssueHeaderMapper.xml | 44 +++ .../resources/mapper/wm/WmIssueLineMapper.xml | 7 +- 13 files changed, 414 insertions(+), 10 deletions(-) create mode 100644 ktg-mes/src/main/java/com/ktg/mes/wm/domain/tx/IssueTxBean.java diff --git a/doc/设计文档/数据库设计/mes-wm.sql b/doc/设计文档/数据库设计/mes-wm.sql index a50123b..f848d7a 100644 --- a/doc/设计文档/数据库设计/mes-wm.sql +++ b/doc/设计文档/数据库设计/mes-wm.sql @@ -359,6 +359,7 @@ drop table if exists wm_issue_line; create table wm_issue_line ( line_id bigint(20) not null auto_increment comment '行ID', issue_id bigint(20) comment '领料单ID', + material_stock_id bigint(20) comment '库存ID', item_id bigint(20) not null comment '产品物料ID', item_code varchar(64) comment '产品物料编码', item_name varchar(255) comment '产品物料名称', diff --git a/ktg-common/src/main/java/com/ktg/common/constant/UserConstants.java b/ktg-common/src/main/java/com/ktg/common/constant/UserConstants.java index c0cbc3a..92b7778 100644 --- a/ktg-common/src/main/java/com/ktg/common/constant/UserConstants.java +++ b/ktg-common/src/main/java/com/ktg/common/constant/UserConstants.java @@ -122,12 +122,12 @@ public class UserConstants */ public static final String TRANSACTION_TYPE_ITEM_RECPT = "ITEM_RECPT"; //原材料接收入库 public static final String TRANSACTION_TYPE_ITEM_RTV = "ITEM_RTV"; //原材料退回供应商 - public static final String TRANSACTION_TYPE_ITEM_ISSUE = "ITEM_ISSUE"; //原材料领用出库 - public static final String TRANSACTION_TYPE_ITEM_RS = "ITEM_RS"; //原材料退库 + public static final String TRANSACTION_TYPE_ITEM_ISSUE = "ITEM_ISSUE"; //生产领用 + public static final String TRANSACTION_TYPE_ITEM_RS = "ITEM_RS"; //生产退库 public static final String TRANSACTION_TYPE_WAREHOUSE_TRANS_OUT = "TRANS_OUT"; //移库,移出 public static final String TRANSACTION_TYPE_WAREHOUSE_TRANS_IN = "TRANS_IN"; //移库,移入 - public static final String TRANSACTION_TYPE_PRODUCT_ISSUE = "PRODUCT_ISSUE"; //产品出库 - public static final String TRANSACTION_TYPE_PRODUCT_RS = "PRODUCT_RS"; //产品退货 + public static final String TRANSACTION_TYPE_PRODUCT_ISSUE = "PRODUCT_ISSUE"; //销售出库 + public static final String TRANSACTION_TYPE_PRODUCT_RS = "PRODUCT_RS"; //销售退货 public static final String TRANSACTION_TYPE_MISC_RECPT = "MISC_RECPT"; //杂项入库 public static final String TRANSACTION_TYPE_MISC_ISSUE = "MISC_ISSUE"; //杂项出库 diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmIssueHeaderController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmIssueHeaderController.java index b7e5c24..0d7f036 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmIssueHeaderController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmIssueHeaderController.java @@ -3,8 +3,13 @@ package com.ktg.mes.wm.controller; import java.util.List; import javax.servlet.http.HttpServletResponse; +import cn.hutool.core.collection.CollUtil; import com.ktg.common.constant.UserConstants; +import com.ktg.mes.wm.domain.WmIssueLine; +import com.ktg.mes.wm.domain.tx.IssueTxBean; +import com.ktg.mes.wm.service.IStorageCoreService; import com.ktg.mes.wm.service.IWmIssueLineService; +import com.ktg.mes.wm.service.IWmStorageAreaService; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; @@ -41,6 +46,9 @@ public class WmIssueHeaderController extends BaseController @Autowired private IWmIssueLineService wmIssueLineService; + @Autowired + private IStorageCoreService storageCoreService; + /** * 查询生产领料单头列表 */ @@ -120,4 +128,34 @@ public class WmIssueHeaderController extends BaseController return toAjax(wmIssueHeaderService.deleteWmIssueHeaderByIssueIds(issueIds)); } + + /** + * 执行出库 + * @return + */ + @PreAuthorize("@ss.hasPermi('mes:wm:issueheader:edit')") + @Log(title = "生产领料单头", businessType = BusinessType.UPDATE) + @Transactional + @PutMapping("/{issueId}") + public AjaxResult execute(@PathVariable Long issueId){ + WmIssueHeader header = wmIssueHeaderService.selectWmIssueHeaderByIssueId(issueId); + WmIssueLine param = new WmIssueLine(); + param.setIssueId(issueId); + List lines = wmIssueLineService.selectWmIssueLineList(param); + if(CollUtil.isEmpty(lines)){ + return AjaxResult.error("请指定领出的物资"); + } + + List beans = wmIssueHeaderService.getTxBeans(issueId); + + //调用库存核心 + storageCoreService.processIssue(beans); + + //更新单据状态 + header.setStatus(UserConstants.ORDER_STATUS_FINISHED); + wmIssueHeaderService.updateWmIssueHeader(header); + return AjaxResult.success(); + } + + } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmItemRecptController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmItemRecptController.java index 7eb563c..763e2eb 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmItemRecptController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmItemRecptController.java @@ -206,10 +206,8 @@ public class WmItemRecptController extends BaseController storageCoreService.processItemRecpt(beans); //更新单据状态 - WmItemRecpt wmItemRecpt =wmItemRecptService.selectWmItemRecptByRecptId(recptId); - wmItemRecpt.setStatus(UserConstants.ORDER_STATUS_FINISHED); - wmItemRecptService.updateWmItemRecpt(wmItemRecpt); - + recpt.setStatus(UserConstants.ORDER_STATUS_FINISHED); + wmItemRecptService.updateWmItemRecpt(recpt); return AjaxResult.success(); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/domain/WmIssueLine.java b/ktg-mes/src/main/java/com/ktg/mes/wm/domain/WmIssueLine.java index b478a3f..51033c2 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/domain/WmIssueLine.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/domain/WmIssueLine.java @@ -23,6 +23,8 @@ public class WmIssueLine extends BaseEntity @Excel(name = "领料单ID") private Long issueId; + private Long materialStockId; + /** 产品物料ID */ @Excel(name = "产品物料ID") private Long itemId; @@ -122,7 +124,15 @@ public class WmIssueLine extends BaseEntity this.itemId = itemId; } - public Long getItemId() + public Long getMaterialStockId() { + return materialStockId; + } + + public void setMaterialStockId(Long materialStockId) { + this.materialStockId = materialStockId; + } + + public Long getItemId() { return itemId; } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/domain/tx/IssueTxBean.java b/ktg-mes/src/main/java/com/ktg/mes/wm/domain/tx/IssueTxBean.java new file mode 100644 index 0000000..d28d528 --- /dev/null +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/domain/tx/IssueTxBean.java @@ -0,0 +1,269 @@ +package com.ktg.mes.wm.domain.tx; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ktg.common.core.domain.BaseEntity; + +import java.math.BigDecimal; +import java.util.Date; + +public class IssueTxBean extends BaseEntity { + + private static final long serialVersionUID = 1L; + + private Long materialStockId; + + /** 产品物料ID */ + private Long itemId; + + /** 产品物料编码 */ + private String itemCode; + + /** 产品物料名称 */ + private String itemName; + + /** 规格型号 */ + private String specification; + + /** 单位 */ + private String unitOfMeasure; + + /** 批次号 */ + private String batchCode; + + /** 仓库ID */ + private Long warehouseId; + + /** 仓库编码 */ + private String warehouseCode; + + /** 仓库名称 */ + private String warehouseName; + + /** 库区ID */ + private Long locationId; + + /** 库区编码 */ + private String locationCode; + + /** 库区名称 */ + private String locationName; + + /** 库位ID */ + private Long areaId; + + /** 库位编码 */ + private String areaCode; + + /** 库位名称 */ + private String areaName; + + /** 单据类型 */ + private String sourceDocType; + + /** 单据ID */ + private Long sourceDocId; + + /** 单据编号 */ + private String sourceDocCode; + + /** 单据行ID */ + private Long sourceDocLineId; + + /** 事务数量 */ + private BigDecimal transactionQuantity; + + public Long getMaterialStockId() { + return materialStockId; + } + + public void setMaterialStockId(Long materialStockId) { + this.materialStockId = materialStockId; + } + + public Long getItemId() { + return itemId; + } + + public void setItemId(Long itemId) { + this.itemId = itemId; + } + + public String getItemCode() { + return itemCode; + } + + public void setItemCode(String itemCode) { + this.itemCode = itemCode; + } + + public String getItemName() { + return itemName; + } + + public void setItemName(String itemName) { + this.itemName = itemName; + } + + public String getSpecification() { + return specification; + } + + public void setSpecification(String specification) { + this.specification = specification; + } + + public String getUnitOfMeasure() { + return unitOfMeasure; + } + + public void setUnitOfMeasure(String unitOfMeasure) { + this.unitOfMeasure = unitOfMeasure; + } + + public String getBatchCode() { + return batchCode; + } + + public void setBatchCode(String batchCode) { + this.batchCode = batchCode; + } + + public Long getWarehouseId() { + return warehouseId; + } + + public void setWarehouseId(Long warehouseId) { + this.warehouseId = warehouseId; + } + + public String getWarehouseCode() { + return warehouseCode; + } + + public void setWarehouseCode(String warehouseCode) { + this.warehouseCode = warehouseCode; + } + + public String getWarehouseName() { + return warehouseName; + } + + public void setWarehouseName(String warehouseName) { + this.warehouseName = warehouseName; + } + + public Long getLocationId() { + return locationId; + } + + public void setLocationId(Long locationId) { + this.locationId = locationId; + } + + public String getLocationCode() { + return locationCode; + } + + public void setLocationCode(String locationCode) { + this.locationCode = locationCode; + } + + public String getLocationName() { + return locationName; + } + + public void setLocationName(String locationName) { + this.locationName = locationName; + } + + public Long getAreaId() { + return areaId; + } + + public void setAreaId(Long areaId) { + this.areaId = areaId; + } + + public String getAreaCode() { + return areaCode; + } + + public void setAreaCode(String areaCode) { + this.areaCode = areaCode; + } + + public String getAreaName() { + return areaName; + } + + public void setAreaName(String areaName) { + this.areaName = areaName; + } + + public String getSourceDocType() { + return sourceDocType; + } + + public void setSourceDocType(String sourceDocType) { + this.sourceDocType = sourceDocType; + } + + public Long getSourceDocId() { + return sourceDocId; + } + + public void setSourceDocId(Long sourceDocId) { + this.sourceDocId = sourceDocId; + } + + public String getSourceDocCode() { + return sourceDocCode; + } + + public void setSourceDocCode(String sourceDocCode) { + this.sourceDocCode = sourceDocCode; + } + + public Long getSourceDocLineId() { + return sourceDocLineId; + } + + public void setSourceDocLineId(Long sourceDocLineId) { + this.sourceDocLineId = sourceDocLineId; + } + + public BigDecimal getTransactionQuantity() { + return transactionQuantity; + } + + public void setTransactionQuantity(BigDecimal transactionQuantity) { + this.transactionQuantity = transactionQuantity; + } + + @Override + public String toString() { + return "IssueTxBean{" + + "materialStockId=" + materialStockId + + ", itemId=" + itemId + + ", itemCode='" + itemCode + '\'' + + ", itemName='" + itemName + '\'' + + ", specification='" + specification + '\'' + + ", unitOfMeasure='" + unitOfMeasure + '\'' + + ", batchCode='" + batchCode + '\'' + + ", warehouseId=" + warehouseId + + ", warehouseCode='" + warehouseCode + '\'' + + ", warehouseName='" + warehouseName + '\'' + + ", locationId=" + locationId + + ", locationCode='" + locationCode + '\'' + + ", locationName='" + locationName + '\'' + + ", areaId=" + areaId + + ", areaCode='" + areaCode + '\'' + + ", areaName='" + areaName + '\'' + + ", sourceDocType='" + sourceDocType + '\'' + + ", sourceDocId=" + sourceDocId + + ", sourceDocCode='" + sourceDocCode + '\'' + + ", sourceDocLineId=" + sourceDocLineId + + ", transactionQuantity=" + transactionQuantity + + '}'; + } +} diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/mapper/WmIssueHeaderMapper.java b/ktg-mes/src/main/java/com/ktg/mes/wm/mapper/WmIssueHeaderMapper.java index f3f84c3..070b0ae 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/mapper/WmIssueHeaderMapper.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/mapper/WmIssueHeaderMapper.java @@ -2,6 +2,7 @@ package com.ktg.mes.wm.mapper; import java.util.List; import com.ktg.mes.wm.domain.WmIssueHeader; +import com.ktg.mes.wm.domain.tx.IssueTxBean; /** * 生产领料单头Mapper接口 @@ -65,4 +66,8 @@ public interface WmIssueHeaderMapper * @return 结果 */ public int deleteWmIssueHeaderByIssueIds(Long[] issueIds); + + + public List getTxBeans(Long issueId); + } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/service/IStorageCoreService.java b/ktg-mes/src/main/java/com/ktg/mes/wm/service/IStorageCoreService.java index b3c59dd..d2d9723 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/service/IStorageCoreService.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/service/IStorageCoreService.java @@ -1,6 +1,7 @@ package com.ktg.mes.wm.service; import com.ktg.mes.wm.domain.WmItemRecptLine; +import com.ktg.mes.wm.domain.tx.IssueTxBean; import com.ktg.mes.wm.domain.tx.ItemRecptTxBean; import com.ktg.mes.wm.domain.tx.RtVendorTxBean; import org.springframework.stereotype.Service; @@ -22,5 +23,10 @@ public interface IStorageCoreService { */ public void processRtVendor(List lines); + /** + * 处理生产领料 + * @param lines + */ + public void processIssue(List lines); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/service/IWmIssueHeaderService.java b/ktg-mes/src/main/java/com/ktg/mes/wm/service/IWmIssueHeaderService.java index 224f83a..2193407 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/service/IWmIssueHeaderService.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/service/IWmIssueHeaderService.java @@ -2,6 +2,7 @@ package com.ktg.mes.wm.service; import java.util.List; import com.ktg.mes.wm.domain.WmIssueHeader; +import com.ktg.mes.wm.domain.tx.IssueTxBean; /** * 生产领料单头Service接口 @@ -65,4 +66,6 @@ public interface IWmIssueHeaderService * @return 结果 */ public int deleteWmIssueHeaderByIssueId(Long issueId); + + public List getTxBeans(Long issueId); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/StorageCoreServiceImpl.java b/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/StorageCoreServiceImpl.java index 55714d4..2f47157 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/StorageCoreServiceImpl.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/StorageCoreServiceImpl.java @@ -5,6 +5,7 @@ import com.ktg.common.constant.UserConstants; import com.ktg.common.exception.BussinessException; import com.ktg.common.utils.bean.BeanUtils; import com.ktg.mes.wm.domain.WmTransaction; +import com.ktg.mes.wm.domain.tx.IssueTxBean; import com.ktg.mes.wm.domain.tx.ItemRecptTxBean; import com.ktg.mes.wm.domain.tx.RtVendorTxBean; import com.ktg.mes.wm.service.IStorageCoreService; @@ -73,4 +74,22 @@ public class StorageCoreServiceImpl implements IStorageCoreService { } } + + @Override + public void processIssue(List lines) { + String transactionType = UserConstants.TRANSACTION_TYPE_ITEM_ISSUE; + if(CollUtil.isEmpty(lines)){ + throw new BussinessException("没有需要处理的领料单行"); + } + + for(int i=0;i getTxBeans(Long issueId) { + return wmIssueHeaderMapper.getTxBeans(issueId); + } } diff --git a/ktg-mes/src/main/resources/mapper/wm/WmIssueHeaderMapper.xml b/ktg-mes/src/main/resources/mapper/wm/WmIssueHeaderMapper.xml index 7b2d942..4f4a51b 100644 --- a/ktg-mes/src/main/resources/mapper/wm/WmIssueHeaderMapper.xml +++ b/ktg-mes/src/main/resources/mapper/wm/WmIssueHeaderMapper.xml @@ -36,6 +36,38 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select issue_id, issue_code, issue_name, workstation_id, workstation_code, workorder_id, workorder_code, task_id, task_code, warehouse_id, warehouse_code, warehouse_name, location_id, location_code, location_name, area_id, area_code, area_name, issue_date, status, remark, attr1, attr2, attr3, attr4, create_by, create_time, update_by, update_time from wm_issue_header @@ -74,6 +106,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where issue_code = #{issueCode} limit 1 + + insert into wm_issue_header diff --git a/ktg-mes/src/main/resources/mapper/wm/WmIssueLineMapper.xml b/ktg-mes/src/main/resources/mapper/wm/WmIssueLineMapper.xml index b03374c..190799a 100644 --- a/ktg-mes/src/main/resources/mapper/wm/WmIssueLineMapper.xml +++ b/ktg-mes/src/main/resources/mapper/wm/WmIssueLineMapper.xml @@ -7,6 +7,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -35,13 +36,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select line_id, issue_id, item_id, item_code, item_name, specification, unit_of_measure, quantity_issued, batch_code, warehouse_id, warehouse_code, warehouse_name, location_id, location_code, location_name, area_id, area_code, area_name, remark, attr1, attr2, attr3, attr4, create_by, create_time, update_by, update_time from wm_issue_line + select line_id, issue_id,material_stock_id, item_id, item_code, item_name, specification, unit_of_measure, quantity_issued, batch_code, warehouse_id, warehouse_code, warehouse_name, location_id, location_code, location_name, area_id, area_code, area_name, remark, attr1, attr2, attr3, attr4, create_by, create_time, update_by, update_time from wm_issue_line