From e1590017b716d77f88f075364c55cfbdb480286f Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 02 十一月 2026 10:27:26 +0800
Subject: [PATCH] 诚发五金:生产链路支持无工序/无工艺路线单工序模式

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/mps/MesProMpsServiceImpl.java |   99 ++++++++++++++++++++++++-------------------------
 1 files changed, 48 insertions(+), 51 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/mps/MesProMpsServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/mps/MesProMpsServiceImpl.java
index 1326d89..af3ad0d 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/mps/MesProMpsServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/mps/MesProMpsServiceImpl.java
@@ -676,19 +676,12 @@
      * 鏍规嵁 MPS 鍒涘缓鐢熶骇宸ュ崟
      */
     private Long createWorkOrderFromMps(MesProMpsDO mps, BigDecimal quantity) {
-        // 1. 鏍¢獙浜у搧鏄惁瀛樺湪宸ヨ壓璺嚎
+        // 1. 鏌ユ壘浜у搧宸ヨ壓璺嚎锛涙湭閰嶇疆鏃朵笉闃绘柇锛屾寜鍗曞伐搴忕敓浜у鐞�
         MesProRouteProductDO routeProduct = routeProductService.getRouteProductByItemId(mps.getProductId());
-        if (routeProduct == null) {
-            throw exception(PRO_ROUTE_NOT_EXISTS);
-        }
-        Long routeId = routeProduct.getRouteId();
-
-        // 2. 鏍¢獙宸ヨ壓璺嚎鏄惁鏈夊伐搴忥紙鎸変骇鍝佽繃婊ゅ叾瀹冧骇鍝佺殑浜у嚭鐗╂枡锛�
-        List<MesProRouteProcessDO> routeProcesses = routeProcessService
-                .getRouteProcessListByProductId(mps.getProductId());
-        if (CollUtil.isEmpty(routeProcesses)) {
-            throw exception(PRO_ROUTE_ENABLE_NO_PROCESS);
-        }
+        Long routeId = routeProduct != null ? routeProduct.getRouteId() : null;
+        List<MesProRouteProcessDO> routeProcesses = routeProduct != null
+                ? routeProcessService.getRouteProcessListByProductId(mps.getProductId())
+                : Collections.emptyList();
 
         // 3. 鍒涘缓鐢熶骇宸ュ崟
         MesProWorkOrderSaveReqVO workOrderReq = new MesProWorkOrderSaveReqVO();
@@ -705,46 +698,50 @@
 
         Long workOrderId = workOrderService.createWorkOrder(workOrderReq);
 
-        // 4. 鏇存柊宸ュ崟宸ヨ壓璺嚎
-        workOrderMapper.updateById(new MesProWorkOrderDO().setId(workOrderId).setRouteId(routeId));
-
-        // 5. 淇濆瓨宸ュ崟宸ュ簭锛堜粠宸ヨ壓璺嚎宸ュ簭甯﹀叆锛屽惈鎶曟枡BOM锛�
-        Map<Long, List<MesProRouteProductBomDO>> bomMap = routeProcessService.getRouteProcessBomMapByProductId(mps.getProductId());
-        List<MesProWorkOrderProcessSaveReqVO> processList = new ArrayList<>();
-        for (MesProRouteProcessDO rp : routeProcesses) {
-            MesProWorkOrderProcessSaveReqVO process = new MesProWorkOrderProcessSaveReqVO();
-            process.setWorkOrderId(workOrderId);
-            process.setProcessId(rp.getProcessId());
-            process.setSort(rp.getSort());
-            process.setKeyFlag(rp.getKeyFlag());
-            process.setCheckFlag(rp.getCheckFlag());
-            process.setBackflushFlag(rp.getBackflushFlag());
-            if (rp.getOutputItemId() != null && !rp.getOutputItemId().isBlank()) {
-                process.setOutputItemIds(Arrays.stream(rp.getOutputItemId().split(","))
-                        .map(String::trim).filter(s -> !s.isEmpty())
-                        .map(Long::valueOf).collect(Collectors.toList()));
-            }
-            process.setColorCode(rp.getColorCode());
-            // 甯﹀叆宸ヨ壓璺嚎浜у搧閰嶇疆鐨勬姤宸ヤ粨搴�
-            process.setWarehouseId(routeProduct.getWarehouseId());
-            process.setLocationId(routeProduct.getLocationId());
-            process.setAreaId(routeProduct.getAreaId());
-            // 甯﹀叆宸ュ簭鎶曟枡BOM
-            List<MesProRouteProductBomDO> routeBomItems = bomMap != null ? bomMap.get(rp.getProcessId()) : null;
-            if (CollUtil.isNotEmpty(routeBomItems)) {
-                List<MesProWorkOrderProcessSaveReqVO.BomItem> bomItems = new ArrayList<>();
-                for (MesProRouteProductBomDO bomDO : routeBomItems) {
-                    MesProWorkOrderProcessSaveReqVO.BomItem bomItem = new MesProWorkOrderProcessSaveReqVO.BomItem();
-                    bomItem.setItemId(bomDO.getItemId());
-                    bomItem.setQuantity(bomDO.getQuantity());
-                    bomItem.setRemark(bomDO.getRemark());
-                    bomItems.add(bomItem);
-                }
-                process.setBomItems(bomItems);
-            }
-            processList.add(process);
+        // 4. 鏇存柊宸ュ崟宸ヨ壓璺嚎锛堟湭閰嶇疆璺嚎鏃朵繚鎸佷负绌猴紝鎸夊崟宸ュ簭鐢熶骇锛�
+        if (routeId != null) {
+            workOrderMapper.updateById(new MesProWorkOrderDO().setId(workOrderId).setRouteId(routeId));
         }
-        workOrderProcessService.batchSaveWorkOrderProcess(processList);
+
+        // 5. 淇濆瓨宸ュ崟宸ュ簭锛堜粎閰嶇疆浜嗗伐鑹鸿矾绾垮伐搴忔椂甯﹀叆锛屽惈鎶曟枡BOM锛�
+        if (CollUtil.isNotEmpty(routeProcesses)) {
+            Map<Long, List<MesProRouteProductBomDO>> bomMap = routeProcessService.getRouteProcessBomMapByProductId(mps.getProductId());
+            List<MesProWorkOrderProcessSaveReqVO> processList = new ArrayList<>();
+            for (MesProRouteProcessDO rp : routeProcesses) {
+                MesProWorkOrderProcessSaveReqVO process = new MesProWorkOrderProcessSaveReqVO();
+                process.setWorkOrderId(workOrderId);
+                process.setProcessId(rp.getProcessId());
+                process.setSort(rp.getSort());
+                process.setKeyFlag(rp.getKeyFlag());
+                process.setCheckFlag(rp.getCheckFlag());
+                process.setBackflushFlag(rp.getBackflushFlag());
+                if (rp.getOutputItemId() != null && !rp.getOutputItemId().isBlank()) {
+                    process.setOutputItemIds(Arrays.stream(rp.getOutputItemId().split(","))
+                            .map(String::trim).filter(s -> !s.isEmpty())
+                            .map(Long::valueOf).collect(Collectors.toList()));
+                }
+                process.setColorCode(rp.getColorCode());
+                // 甯﹀叆宸ヨ壓璺嚎浜у搧閰嶇疆鐨勬姤宸ヤ粨搴�
+                process.setWarehouseId(routeProduct.getWarehouseId());
+                process.setLocationId(routeProduct.getLocationId());
+                process.setAreaId(routeProduct.getAreaId());
+                // 甯﹀叆宸ュ簭鎶曟枡BOM
+                List<MesProRouteProductBomDO> routeBomItems = bomMap != null ? bomMap.get(rp.getProcessId()) : null;
+                if (CollUtil.isNotEmpty(routeBomItems)) {
+                    List<MesProWorkOrderProcessSaveReqVO.BomItem> bomItems = new ArrayList<>();
+                    for (MesProRouteProductBomDO bomDO : routeBomItems) {
+                        MesProWorkOrderProcessSaveReqVO.BomItem bomItem = new MesProWorkOrderProcessSaveReqVO.BomItem();
+                        bomItem.setItemId(bomDO.getItemId());
+                        bomItem.setQuantity(bomDO.getQuantity());
+                        bomItem.setRemark(bomDO.getRemark());
+                        bomItems.add(bomItem);
+                    }
+                    process.setBomItems(bomItems);
+                }
+                processList.add(process);
+            }
+            workOrderProcessService.batchSaveWorkOrderProcess(processList);
+        }
 
         // 6. 宸ュ崟鐩存帴纭涓哄凡纭鐘舵��
         workOrderService.confirmWorkOrder(workOrderId);

--
Gitblit v1.9.3