From d419e5f64cf3876b51827e1f6eddc186b6e26182 Mon Sep 17 00:00:00 2001
From: cuilei <ray_tsu1@163.com>
Date: 星期三, 10 九月 2025 16:57:04 +0800
Subject: [PATCH] 增加热处理排产及报工

---
 src/main/java/org/jeecg/modules/mes/service/impl/MesWorkReportingServiceImpl.java |   57 +++++++++++++++++++++++++++-
 src/main/java/org/jeecg/modules/mes/enums/ReportCategoryEnum.java                 |   17 ++++++++
 src/main/java/org/jeecg/modules/lsw/controller/LswMaterialController.java         |    8 ++++
 3 files changed, 80 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/jeecg/modules/lsw/controller/LswMaterialController.java b/src/main/java/org/jeecg/modules/lsw/controller/LswMaterialController.java
index 0f3664f..901153d 100644
--- a/src/main/java/org/jeecg/modules/lsw/controller/LswMaterialController.java
+++ b/src/main/java/org/jeecg/modules/lsw/controller/LswMaterialController.java
@@ -165,6 +165,14 @@
                         .eq(LswMaterial::getMaterialStatus, CommonConstant.STATUS_1)
                         .orderByAsc(LswMaterial::getMaterialNumber));
                 break;
+            case HEATTREATMENT:
+                //鐑鐞嗙嚎锛屾煡璇㈡瘺鍧墿鏂�
+                lswMaterialList = lswMaterialService.list(new LambdaQueryWrapper<LswMaterial>()
+                        .eq(LswMaterial::getMaterialCategory, MaterialCategoryEnum.BLANK.name())
+                        .eq(LswMaterial::getDelFlag, CommonConstant.DEL_FLAG_0)
+                        .eq(LswMaterial::getMaterialStatus, CommonConstant.STATUS_1)
+                        .orderByAsc(LswMaterial::getMaterialNumber));
+                break;
         }
         return Result.OK(lswMaterialList);
     }
diff --git a/src/main/java/org/jeecg/modules/mes/enums/ReportCategoryEnum.java b/src/main/java/org/jeecg/modules/mes/enums/ReportCategoryEnum.java
new file mode 100644
index 0000000..7d7a9ae
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/mes/enums/ReportCategoryEnum.java
@@ -0,0 +1,17 @@
+package org.jeecg.modules.mes.enums;
+
+
+public enum ReportCategoryEnum {
+    /**
+     * 鎴愬搧鎶ュ伐
+     */
+    FINISHED,
+    /**
+     * 鍗婃垚鍝佹姤宸�
+     */
+    HALF,
+    /**
+     * 鐑鐞嗘姤宸�
+     */
+    HEATTREATMENT
+}
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 5a7af5a..3427afb 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
@@ -17,11 +17,15 @@
 import org.jeecg.modules.base.service.IShiftService;
 import org.jeecg.modules.lsw.entity.LswMaterial;
 import org.jeecg.modules.lsw.entity.LswMaterialInbound;
+import org.jeecg.modules.lsw.entity.LswMaterialInventory;
 import org.jeecg.modules.lsw.enums.MaterialCategoryEnum;
 import org.jeecg.modules.lsw.enums.MaterialInboundCategory;
+import org.jeecg.modules.lsw.enums.MaterialInventoryStatusEnum;
 import org.jeecg.modules.lsw.service.ILswMaterialInboundService;
+import org.jeecg.modules.lsw.service.ILswMaterialInventoryService;
 import org.jeecg.modules.lsw.service.ILswMaterialService;
 import org.jeecg.modules.mes.entity.*;
+import org.jeecg.modules.mes.enums.ReportCategoryEnum;
 import org.jeecg.modules.mes.mapper.MesWorkReportingMapper;
 import org.jeecg.modules.mes.service.*;
 import org.jeecg.modules.mes.utils.CommonUtils;
@@ -49,6 +53,7 @@
 import java.time.temporal.ChronoField;
 import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * @Description: 宸ュ崟鎶ュ伐
@@ -94,6 +99,8 @@
     private IInspectionPlanItemService inspectionPlanItemService;
     @Autowired
     private IMesMaterialConsumptionDetailService mesMaterialConsumptionDetailService;
+    @Autowired
+    private ILswMaterialInventoryService lswMaterialInventoryService;
 
     @Override
     public List<MesWorkReporting> queryWorkReportingByWorkOrderId(String workOrderId) {
@@ -158,7 +165,7 @@
                 //鎷兼帴鎴愬搧鎶ュ伐鎵樺彿
                 String palletNumber4 = sysBusinessCodeRuleService.generateBusinessCodeSeq("WorkReportingPalletNumber4");
                 String finishedPalletNumber = material.getMaterialNumber() + date + palletNumber4;
-                mesWorkReporting.setPalletNumber(finishedPalletNumber).setReportType("FINISHED");
+                mesWorkReporting.setPalletNumber(finishedPalletNumber).setReportType(ReportCategoryEnum.FINISHED.name());
                 break;
             case INNER_FLANGE:
             case OUTER_FLANGE:
@@ -168,8 +175,13 @@
                 Shift shift = shiftService.getById(workOrder.getShiftId());
                 String palletNumber6 = sysBusinessCodeRuleService.generateBusinessCodeSeq("WorkReportingPalletNumber6");
                 String halfPalletNumber = factory.getFactoryCode() + material.getMaterialNumber() + date + shift.getShiftCode() + palletNumber6;
-                mesWorkReporting.setPalletNumber(halfPalletNumber).setReportType("HALF");
+                mesWorkReporting.setPalletNumber(halfPalletNumber).setReportType(ReportCategoryEnum.HALF.name());
                 break;
+            case BLANK:
+                //鐑鐞嗘姤宸�
+                consumptionDetailList = heatTreatmentReport(mesWorkReporting, workOrder, lineSideWarehouse);
+                mesWorkReporting.setReportType(ReportCategoryEnum.HEATTREATMENT.name());
+
         }
         //鏂板鎶ュ伐璁板綍
         save(mesWorkReporting);
@@ -186,6 +198,47 @@
         return mesWorkReporting;
     }
 
+    //鐑鐞嗘姤宸�
+    private List<MesMaterialConsumptionDetail> heatTreatmentReport(MesWorkReporting mesWorkReporting, MesProductionWorkOrder workOrder, LineSideWarehouse lineSideWarehouse) {
+        //1銆佸叆搴撶儹澶勭悊姣涘澂鍒板搴旂嚎杈瑰簱锛岀儹澶勭悊鍓嶅悗鐗╂枡缂栫爜涓嶅彂鐢熷彉鍖栵紝鍙渶瑕佹洿鏂扮儹澶勭悊鏍囪瘑锛屾墍浠ユ澶勪笉鑳界洿鎺ヨ皟鐢ㄧ嚎杈瑰簱鐨勫叆搴撴柟娉曪紝闇�瑕佺洿鎺ユ洿鏂扮墿鏂欏簱瀛樹俊鎭腑鐨勭儹澶勭悊鏍囪瘑瀛楁
+        LswMaterialInventory materialInventory = lswMaterialInventoryService.list(new LambdaQueryWrapper<LswMaterialInventory>()
+                .eq(LswMaterialInventory::getWarehouseId, lineSideWarehouse.getId())
+                .eq(LswMaterialInventory::getInventoryStatus, MaterialInventoryStatusEnum.OUTBOUND.name())
+                .eq(LswMaterialInventory::getHeatTreatmentFlag, CommonConstant.STATUS_0)
+                .apply("EXISTS SELECT 1 FROM lsw_material t WHERE t.id = lsw_material_inventory.material_id AND t.material_number = {0} " +
+                        "AND t.del_flag = {1} AND t.material_status = {2}", workOrder.getMaterialNumber(), CommonConstant.DEL_FLAG_0, CommonConstant.STATUS_1)).stream().findFirst().orElse(null);
+        if (materialInventory == null) {
+            throw new JeecgBootException("绾胯竟搴撴棤璇ョ墿鏂欏簱瀛樹俊鎭紒");
+        }
+        if (materialInventory.getQuantity().compareTo(mesWorkReporting.getQuantity()) != 0) {
+            throw new JeecgBootException("鎶ュ伐鏁伴噺涓嶇鍚堟暣鎵规鏁伴噺瑕佹眰锛�");
+        }
+        materialInventory.setHeatTreatmentFlag(CommonConstant.STATUS_1);
+        materialInventory.setInventoryStatus(MaterialInventoryStatusEnum.NORMAL.name());
+        lswMaterialInventoryService.updateById(materialInventory);
+        //2銆佹洿鏂拌鎵规鍙峰緱涓婃枡璁板綍
+        MesMaterialLoading materialLoading = mesMaterialLoadingService.list(new LambdaQueryWrapper<MesMaterialLoading>()
+                        .eq(MesMaterialLoading::getFactoryId, workOrder.getFactoryId())
+                        .eq(MesMaterialLoading::getWarehouseId, lineSideWarehouse.getId())
+                        .eq(MesMaterialLoading::getMaterialNumber, workOrder.getMaterialNumber())
+                        .eq(MesMaterialLoading::getBatchNumber, materialInventory.getBatchNumber()))
+                        .stream().findFirst().orElse(null);
+        if (materialLoading == null) {
+            throw new JeecgBootException("鏈壘鍒拌鎵规鍙风殑涓婃枡璁板綍锛�");
+        }
+        materialLoading.setRemainingQuantity(BigDecimal.ZERO);
+        mesMaterialLoadingService.updateById(materialLoading);
+        //鐑鐞嗘姤宸ワ紝鎵规鍙峰彇搴撳瓨鐨勬暣鎵规壒娆″彿
+        mesWorkReporting.setBatchNumber(materialInventory.getBatchNumber());
+        //3銆佽褰曟秷鑰楁槑缁�
+        MesMaterialConsumptionDetail materialConsumptionDetail = new MesMaterialConsumptionDetail()
+                .setWorkOrderId(workOrder.getId())
+                .setFactoryId(workOrder.getFactoryId())
+                .setLoadingId(materialLoading.getId())
+                .setQuantity(mesWorkReporting.getQuantity());
+        return Collections.singletonList(materialConsumptionDetail);
+    }
+
     //鍗婃垚鍝�(鍐呮硶鍏般�佸娉曞叞)銆佹垚鍝佹姤宸�
     private List<MesMaterialConsumptionDetail> productReport(MesWorkReporting mesWorkReporting, MesProductionWorkOrder workOrder, LineSideWarehouse lineSideWarehouse) {
         //1銆佸叆搴� 鍗婃垚鍝�/鎴愬搧 鍒板搴旂嚎杈瑰簱

--
Gitblit v1.9.3