From bfbc1c5f893f170019ea4ef58a50b85ee3fa5a1c Mon Sep 17 00:00:00 2001 From: "DESKTOP-J7ED0MB\\yinjinlu" <411641505@qq.com> Date: Tue, 8 Nov 2022 20:51:54 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E6=8A=A5=E5=B7=A5=E4=BB=8E?= =?UTF-8?q?=E7=BA=BF=E8=BE=B9=E5=BA=93=E6=89=A3=E5=87=8F=E7=89=A9=E6=96=99?= =?UTF-8?q?=E6=97=B6=E8=87=AA=E5=8A=A8=E4=BB=8E=E5=A4=9A=E6=9D=A1=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E8=AE=B0=E5=BD=95=E4=B8=AD=E6=89=A3=E5=87=8F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pro/controller/ProFeedbackController.java | 1 + .../mes/wm/service/IWmItemConsumeService.java | 1 + .../impl/WmItemConsumeServiceImpl.java | 95 +++++++++++++++++-- .../impl/WmProductProduceServiceImpl.java | 5 + .../mapper/wm/WmItemConsumeMapper.xml | 2 +- .../mapper/wm/WmMaterialStockMapper.xml | 1 + 6 files changed, 94 insertions(+), 11 deletions(-) diff --git a/ktg-mes/src/main/java/com/ktg/mes/pro/controller/ProFeedbackController.java b/ktg-mes/src/main/java/com/ktg/mes/pro/controller/ProFeedbackController.java index 4844aba..10dc2e3 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/pro/controller/ProFeedbackController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/pro/controller/ProFeedbackController.java @@ -228,6 +228,7 @@ public class ProFeedbackController extends BaseController * @param record */ private void executeItemConsume(WmItemConsume record){ + //需要在此处进行分批次领料的线边库扣减 List beans = wmItemConsumeService.getTxBeans(record.getRecordId()); storageCoreService.processItemConsume(beans); record.setStatus(UserConstants.ORDER_STATUS_FINISHED); diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/service/IWmItemConsumeService.java b/ktg-mes/src/main/java/com/ktg/mes/wm/service/IWmItemConsumeService.java index cc7b7ab..bb7ef96 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/service/IWmItemConsumeService.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/service/IWmItemConsumeService.java @@ -64,6 +64,7 @@ public interface IWmItemConsumeService /** * 根据生产报工单生成物料消耗记录 + * 这里需要处理同一个工单分多次领料的问题(每次领料可能是不同的批次) * @param feedback * @return */ diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmItemConsumeServiceImpl.java b/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmItemConsumeServiceImpl.java index e07fbd4..c3abe93 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmItemConsumeServiceImpl.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmItemConsumeServiceImpl.java @@ -1,5 +1,6 @@ package com.ktg.mes.wm.service.impl; +import java.math.BigDecimal; import java.util.Date; import java.util.List; @@ -11,8 +12,10 @@ import com.ktg.mes.md.mapper.MdWorkstationMapper; import com.ktg.mes.pro.domain.*; import com.ktg.mes.pro.mapper.*; import com.ktg.mes.wm.domain.WmItemConsumeLine; +import com.ktg.mes.wm.domain.WmMaterialStock; import com.ktg.mes.wm.domain.tx.ItemConsumeTxBean; import com.ktg.mes.wm.mapper.WmItemConsumeLineMapper; +import com.ktg.mes.wm.mapper.WmMaterialStockMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ktg.mes.wm.mapper.WmItemConsumeMapper; @@ -52,6 +55,9 @@ public class WmItemConsumeServiceImpl implements IWmItemConsumeService @Autowired private ProRouteProductBomMapper proRouteProductBomMapper; + @Autowired + private WmMaterialStockMapper wmMaterialStockMapper; + /** * 查询物料消耗记录 * @@ -166,16 +172,85 @@ public class WmItemConsumeServiceImpl implements IWmItemConsumeService if(CollectionUtil.isNotEmpty(boms)){ for (ProRouteProductBom bom: boms ) { - WmItemConsumeLine line = new WmItemConsumeLine(); - line.setRecordId(itemConsume.getRecordId()); - line.setItemId(bom.getItemId()); - line.setItemCode(bom.getItemCode()); - line.setItemName(bom.getItemName()); - line.setSpecification(bom.getSpecification()); - line.setUnitOfMeasure(bom.getUnitOfMeasure()); - line.setQuantityConsume(bom.getQuantity().multiply(feedback.getQuantityFeedback())); - line.setBatchCode(workorder.getBatchCode()); - wmItemConsumeLineMapper.insertWmItemConsumeLine(line); + //这里根据需要消耗的原材料/半成品信息 匹配出对应的线边库库存记录。 + BigDecimal quantityToConsume = bom.getQuantity().multiply(feedback.getQuantityFeedback()); //总的消耗量 + + //从线边库中,根据生产工单、物料按照先进先出的原则查询库存现有量 + WmMaterialStock p = new WmMaterialStock(); + p.setWorkorderCode(feedback.getWorkorderCode()); //当前工单 + p.setItemId(bom.getItemId()); //指定物料 + p.setWarehouseCode(UserConstants.VIRTUAL_WH); //线边库 + List ms = wmMaterialStockMapper.selectWmMaterialStockList(p); + if(CollectionUtil.isNotEmpty(ms)){ + WmMaterialStock theStock = null; + for(int i=0;i=0){ + //当前库存记录的库存量大于等于本次需要消耗的库存量, 则直接使用当前记录 + WmItemConsumeLine line = new WmItemConsumeLine(); + line.setMaterialStockId(theStock.getMaterialStockId()); + line.setRecordId(itemConsume.getRecordId()); + line.setItemId(bom.getItemId()); + line.setItemCode(bom.getItemCode()); + line.setItemName(bom.getItemName()); + line.setSpecification(bom.getSpecification()); + line.setUnitOfMeasure(bom.getUnitOfMeasure()); + line.setQuantityConsume(quantityToConsume); + line.setBatchCode(workorder.getBatchCode()); + wmItemConsumeLineMapper.insertWmItemConsumeLine(line); + + quantityToConsume= BigDecimal.ZERO; + }else if(theStock.getQuantityOnhand().compareTo(BigDecimal.ZERO)==1){ + //当前记录的库存量大于0 并且小于需要扣减的量,只从当前库存记录上扣减在库量,并更新剩余需要扣减的量 + WmItemConsumeLine line = new WmItemConsumeLine(); + line.setMaterialStockId(theStock.getMaterialStockId()); + line.setRecordId(itemConsume.getRecordId()); + line.setItemId(bom.getItemId()); + line.setItemCode(bom.getItemCode()); + line.setItemName(bom.getItemName()); + line.setSpecification(bom.getSpecification()); + line.setUnitOfMeasure(bom.getUnitOfMeasure()); + line.setQuantityConsume(theStock.getQuantityOnhand()); + line.setBatchCode(workorder.getBatchCode()); + wmItemConsumeLineMapper.insertWmItemConsumeLine(line); + quantityToConsume = quantityToConsume.subtract(theStock.getQuantityOnhand()); + } else { + //查出的库存量为负,不做处理 + } + + if(quantityToConsume.compareTo(BigDecimal.ZERO)==0){ + //量已经扣减完,则退出 + break; + } + } + + //循环完成后还有剩余未扣除的数量,直接在库中新增一条为负的记录(后期手工核销) + if(quantityToConsume.compareTo(BigDecimal.ZERO)==1){ + WmItemConsumeLine line = new WmItemConsumeLine(); + line.setRecordId(itemConsume.getRecordId()); + line.setItemId(bom.getItemId()); + line.setItemCode(bom.getItemCode()); + line.setItemName(bom.getItemName()); + line.setSpecification(bom.getSpecification()); + line.setUnitOfMeasure(bom.getUnitOfMeasure()); + line.setQuantityConsume(quantityToConsume); + line.setBatchCode(workorder.getBatchCode()); + wmItemConsumeLineMapper.insertWmItemConsumeLine(line); + } + + }else { + //没有查到领出到线边库的物料,直接在库中新增一条为负的记录(后期可能需要手工核销) + WmItemConsumeLine line = new WmItemConsumeLine(); + line.setRecordId(itemConsume.getRecordId()); + line.setItemId(bom.getItemId()); + line.setItemCode(bom.getItemCode()); + line.setItemName(bom.getItemName()); + line.setSpecification(bom.getSpecification()); + line.setUnitOfMeasure(bom.getUnitOfMeasure()); + line.setQuantityConsume(bom.getQuantity().multiply(feedback.getQuantityFeedback())); + line.setBatchCode(workorder.getBatchCode()); + wmItemConsumeLineMapper.insertWmItemConsumeLine(line); + } } }else { return null; //如果本道工序没有配置BOM物料,则直接返回空 diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmProductProduceServiceImpl.java b/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmProductProduceServiceImpl.java index 6fd5bd3..abb3630 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmProductProduceServiceImpl.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmProductProduceServiceImpl.java @@ -124,6 +124,11 @@ public class WmProductProduceServiceImpl implements IWmProductProduceService return wmProductProduceMapper.deleteWmProductProduceByRecordId(recordId); } + /** + * 根据报工单生成 + * @param feedback + * @return + */ @Override public WmProductProduce generateProductProduce(ProFeedback feedback) { ProWorkorder workorder = proWorkorderMapper.selectProWorkorderByWorkorderId(feedback.getWorkorderId()); diff --git a/ktg-mes/src/main/resources/mapper/wm/WmItemConsumeMapper.xml b/ktg-mes/src/main/resources/mapper/wm/WmItemConsumeMapper.xml index 7bda75d..5f2520e 100644 --- a/ktg-mes/src/main/resources/mapper/wm/WmItemConsumeMapper.xml +++ b/ktg-mes/src/main/resources/mapper/wm/WmItemConsumeMapper.xml @@ -90,7 +90,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"