From 3870cf443bf0dfd9394bc545c8e90ac0d6dacaeb Mon Sep 17 00:00:00 2001
From: cuilei <ray_tsu1@163.com>
Date: 星期一, 08 九月 2025 17:55:05 +0800
Subject: [PATCH] 上料实体类调整、物料消耗明细基础代码、报工接口适配调整(适配上料表结构调整、并记录物料消耗明细)

---
 src/main/java/org/jeecg/modules/mes/service/impl/MesWorkReportingServiceImpl.java |   73 +++++++++++++++++++++---------------
 1 files changed, 43 insertions(+), 30 deletions(-)

diff --git a/src/main/java/org/jeecg/modules/mes/service/impl/MesWorkReportingServiceImpl.java b/src/main/java/org/jeecg/modules/mes/service/impl/MesWorkReportingServiceImpl.java
index d5f8a99..5a7af5a 100644
--- a/src/main/java/org/jeecg/modules/mes/service/impl/MesWorkReportingServiceImpl.java
+++ b/src/main/java/org/jeecg/modules/mes/service/impl/MesWorkReportingServiceImpl.java
@@ -18,17 +18,12 @@
 import org.jeecg.modules.lsw.entity.LswMaterial;
 import org.jeecg.modules.lsw.entity.LswMaterialInbound;
 import org.jeecg.modules.lsw.enums.MaterialCategoryEnum;
+import org.jeecg.modules.lsw.enums.MaterialInboundCategory;
 import org.jeecg.modules.lsw.service.ILswMaterialInboundService;
 import org.jeecg.modules.lsw.service.ILswMaterialService;
-import org.jeecg.modules.mes.entity.MesMaterialLoading;
-import org.jeecg.modules.mes.entity.MesProductionOrder;
-import org.jeecg.modules.mes.entity.MesProductionWorkOrder;
-import org.jeecg.modules.mes.entity.MesWorkReporting;
+import org.jeecg.modules.mes.entity.*;
 import org.jeecg.modules.mes.mapper.MesWorkReportingMapper;
-import org.jeecg.modules.mes.service.IMesMaterialLoadingService;
-import org.jeecg.modules.mes.service.IMesProductionOrderService;
-import org.jeecg.modules.mes.service.IMesProductionWorkOrderService;
-import org.jeecg.modules.mes.service.IMesWorkReportingService;
+import org.jeecg.modules.mes.service.*;
 import org.jeecg.modules.mes.utils.CommonUtils;
 import org.jeecg.modules.pms.entity.PmsMaterialProcess;
 import org.jeecg.modules.pms.service.IPmsMaterialProcessService;
@@ -97,6 +92,8 @@
     private IInspectionPlanService inspectionPlanService;
     @Autowired
     private IInspectionPlanItemService inspectionPlanItemService;
+    @Autowired
+    private IMesMaterialConsumptionDetailService mesMaterialConsumptionDetailService;
 
     @Override
     public List<MesWorkReporting> queryWorkReportingByWorkOrderId(String workOrderId) {
@@ -151,12 +148,13 @@
         String date = today.format(DateTimeFormatter.ofPattern("yyMMdd"));
         Factory factory = factoryService.getById(mesWorkReporting.getFactoryId());
         workOrder.setFactoryCode(factory.getFactoryCode());
+        List<MesMaterialConsumptionDetail> consumptionDetailList = CollectionUtil.newArrayList();
         switch (materialCategory) {
             case FINISHED_PRODUCT:
                 //鎴愬搧鎶ュ伐
-                productReport(mesWorkReporting, workOrder, lineSideWarehouse);
+                consumptionDetailList = productReport(mesWorkReporting, workOrder, lineSideWarehouse);
                 //鐢熸垚妫�楠屽伐鍗�
-                generateInspectionOrder(mesWorkReporting, workOrder);
+                //generateInspectionOrder(mesWorkReporting, workOrder);
                 //鎷兼帴鎴愬搧鎶ュ伐鎵樺彿
                 String palletNumber4 = sysBusinessCodeRuleService.generateBusinessCodeSeq("WorkReportingPalletNumber4");
                 String finishedPalletNumber = material.getMaterialNumber() + date + palletNumber4;
@@ -165,7 +163,7 @@
             case INNER_FLANGE:
             case OUTER_FLANGE:
                 //鍗婃垚鍝�(鍐呮硶鍏般�佸娉曞叞)鎶ュ伐
-                productReport(mesWorkReporting, workOrder, lineSideWarehouse);
+                consumptionDetailList = productReport(mesWorkReporting, workOrder, lineSideWarehouse);
                 //鎷兼帴鍗婃垚鍝佹姤宸ユ墭鍙�
                 Shift shift = shiftService.getById(workOrder.getShiftId());
                 String palletNumber6 = sysBusinessCodeRuleService.generateBusinessCodeSeq("WorkReportingPalletNumber6");
@@ -175,6 +173,9 @@
         }
         //鏂板鎶ュ伐璁板綍
         save(mesWorkReporting);
+        consumptionDetailList.forEach(i -> i.setReportingId(mesWorkReporting.getId()));
+        //淇濆瓨鐗╂枡娑堣�楁槑缁�
+        mesMaterialConsumptionDetailService.saveBatch(consumptionDetailList);
         //鏇存柊鎺掍骇宸ュ崟
         MesProductionWorkOrder productionWorkUpdateOrder = new MesProductionWorkOrder()
                 .setId(workOrder.getId())
@@ -186,7 +187,7 @@
     }
 
     //鍗婃垚鍝�(鍐呮硶鍏般�佸娉曞叞)銆佹垚鍝佹姤宸�
-    private void productReport(MesWorkReporting mesWorkReporting, MesProductionWorkOrder workOrder, LineSideWarehouse lineSideWarehouse) {
+    private List<MesMaterialConsumptionDetail> productReport(MesWorkReporting mesWorkReporting, MesProductionWorkOrder workOrder, LineSideWarehouse lineSideWarehouse) {
         //1銆佸叆搴� 鍗婃垚鍝�/鎴愬搧 鍒板搴旂嚎杈瑰簱
         LswMaterialInbound materialInbound = new LswMaterialInbound()
                 .setFactoryId(workOrder.getFactoryId())
@@ -194,21 +195,26 @@
                 .setMaterialNumber(workOrder.getMaterialNumber())
                 .setMaterialName(workOrder.getMaterialName())
                 .setBatchNumber(mesWorkReporting.getBatchNumber())
-                .setQuantity(mesWorkReporting.getQuantity());
-        lswMaterialInboundService.save(materialInbound);
-        //2銆佹墸鍑忎娇鐢ㄦ瘺鍧簱瀛橈紙鏇存柊涓婃枡璁板綍锛夋垨鍗婃垚鍝佺墿鏂欏簱瀛橈紙鍐呮硶鍏般�佸娉曞叞銆佸皬鍐呭湀銆侀厤浠剁瓑锛夛紝鎸夌収 鎺掍骇宸ュ崟id銆佺墿鏂欑紪鐮� 鏌ヨ涓婃枡璁板綍锛屾寜鐓ф椂闂翠粠鏃╁埌鏅氭帓搴忥紝浼樺厛鎵e噺鏃╃殑涓婃枡璁板綍锛堝厛杩涘厛鍑猴級
+                .setQuantity(mesWorkReporting.getQuantity())
+                .setInboundCategory(MaterialInboundCategory.PRODUCTION_INBOUND.name())//鐢熶骇涓嬬嚎
+                .setOriginalCode(lineSideWarehouse.getWarehouseCode())
+                .setOriginalName(lineSideWarehouse.getWarehouseName());
+        lswMaterialInboundService.inboundMaterial(materialInbound);
+        //2銆佹墸鍑忎娇鐢ㄦ瘺鍧簱瀛橈紙鏇存柊涓婃枡璁板綍锛夋垨鍗婃垚鍝佺墿鏂欏簱瀛橈紙鍐呮硶鍏般�佸娉曞叞銆佸皬鍐呭湀銆侀厤浠剁瓑锛夛紝鎸夌収 浜х嚎id銆佸簱瀛樺湴id銆佺墿鏂欑紪鐮� 鏌ヨ涓婃枡璁板綍锛屾寜鐓ф椂闂翠粠鏃╁埌鏅氭帓搴忥紝浼樺厛鎵e噺鏃╃殑涓婃枡璁板綍锛堝厛杩涘厛鍑猴級
         //鍏堟煡璇㈢墿鏂� BOM
         Map<String, ProcessBillMaterialsDetailVo> processBillMaterialsDetailMap = pmsProcessBillMaterialsService
                 .queryMaterialsDetailByOrderIdAndMaterialNumber(mesWorkReporting.getOrderId(), workOrder.getMaterialNumber()).stream()
                 .collect(Collectors.toMap(ProcessBillMaterialsDetailVo::getMaterialNumber, v1 -> v1, (v1, v2) -> v1));
         //鏌ヨ涓婃枡璁板綍
         Map<String, List<MesMaterialLoading>> materialLoadingRecordMap = mesMaterialLoadingService.list(new LambdaQueryWrapper<MesMaterialLoading>()
-                        .eq(MesMaterialLoading::getWorkOrderId, workOrder.getId())
+                        .eq(MesMaterialLoading::getFactoryId, workOrder.getFactoryId())
+                        .eq(MesMaterialLoading::getWarehouseId, lineSideWarehouse.getId())
                         .in(MesMaterialLoading::getMaterialNumber, processBillMaterialsDetailMap.keySet())
                         .gt(MesMaterialLoading::getRemainingQuantity, BigDecimal.ZERO)).stream()
                 .sorted(Comparator.comparing(MesMaterialLoading::getCreateTime))
                 .collect(Collectors.groupingBy(MesMaterialLoading::getMaterialNumber));
         List<MesMaterialLoading> materialLoadingRecordUpdateList = CollectionUtil.newArrayList();
+        List<MesMaterialConsumptionDetail> consumptionDetailAddList = CollectionUtil.newArrayList();
         for (String materialNumber : processBillMaterialsDetailMap.keySet()) {
             List<MesMaterialLoading> materialLoadingRecordList = materialLoadingRecordMap.get(materialNumber);
             if (materialLoadingRecordList.isEmpty()) {
@@ -217,8 +223,26 @@
             //璁$畻鐗╂枡鎵e噺鏁伴噺
             ProcessBillMaterialsDetailVo processBillMaterialsDetailVo = processBillMaterialsDetailMap.get(materialNumber);
             BigDecimal quantity = processBillMaterialsDetailVo.getPerQuantity().multiply(mesWorkReporting.getQuantity());
-            List<MesMaterialLoading> updateList = deductQuantity(materialLoadingRecordList, quantity);
-            materialLoadingRecordUpdateList.addAll(updateList);
+            //鎵e噺涓婃枡鏁伴噺骞惰褰曠墿鏂欐秷鑰楁槑缁�
+            for (MesMaterialLoading mesMaterialLoading : materialLoadingRecordList) {
+                //璁板綍鐗╂枡娑堣�楁槑缁�
+                MesMaterialConsumptionDetail materialConsumptionDetail = new MesMaterialConsumptionDetail()
+                        .setOrderId(mesWorkReporting.getOrderId())
+                        .setWorkOrderId(workOrder.getId())
+                        .setFactoryId(workOrder.getFactoryId())
+                        .setLoadingId(mesMaterialLoading.getId());
+                if (mesMaterialLoading.getRemainingQuantity().compareTo(quantity) >= 0) {
+                    mesMaterialLoading.setRemainingQuantity(mesMaterialLoading.getRemainingQuantity().subtract(quantity));
+                    materialConsumptionDetail.setQuantity(quantity);
+                    break;
+                } else {
+                    quantity = quantity.subtract(mesMaterialLoading.getRemainingQuantity());
+                    materialConsumptionDetail.setQuantity(mesMaterialLoading.getRemainingQuantity());
+                    mesMaterialLoading.setRemainingQuantity(BigDecimal.ZERO);
+                }
+                consumptionDetailAddList.add(materialConsumptionDetail);
+            }
+            materialLoadingRecordUpdateList.addAll(materialLoadingRecordList);
         }
         //鏇存柊涓婃枡璁板綍
         mesMaterialLoadingService.updateBatchById(materialLoadingRecordUpdateList);
@@ -258,6 +282,7 @@
                 log.error("SAP宸ュ簭鎶ュ伐寮傚父锛�", e);
             }
         }
+        return consumptionDetailAddList;
     }
 
     //鏍规嵁妫�楠屾柟妗堢敓鎴愭楠屽伐鍗�
@@ -281,16 +306,4 @@
         //todo 妫�楠屽伐鍗曠洰鍓嶈繕娌℃湁鐢熸垚浠g爜锛屾病鏈夊姛鑳�
     }
 
-    private List<MesMaterialLoading> deductQuantity(List<MesMaterialLoading> materialLoadingRecordList, BigDecimal quantity) {
-        for (MesMaterialLoading mesMaterialLoading : materialLoadingRecordList) {
-            if (mesMaterialLoading.getRemainingQuantity().compareTo(quantity) >= 0) {
-                mesMaterialLoading.setRemainingQuantity(mesMaterialLoading.getRemainingQuantity().subtract(quantity));
-                break;
-            } else {
-                quantity = quantity.subtract(mesMaterialLoading.getRemainingQuantity());
-                mesMaterialLoading.setRemainingQuantity(BigDecimal.ZERO);
-            }
-        }
-        return materialLoadingRecordList;
-    }
 }

--
Gitblit v1.9.3