From 757c7e03bee3560bb4d7766fddd03673e2c2e611 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 23 七月 2026 17:46:34 +0800
Subject: [PATCH] feat(mes): 完善MES模块功能并优化日志配置

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkOrderProcessServiceImpl.java |   44 +++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 43 insertions(+), 1 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkOrderProcessServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkOrderProcessServiceImpl.java
index 0883d5d..e626b2e 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkOrderProcessServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkOrderProcessServiceImpl.java
@@ -5,8 +5,11 @@
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.process.MesProWorkOrderProcessPageReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.process.MesProWorkOrderProcessSaveReqVO;
+import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.process.MesProWorkOrderProcessSaveReqVO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.route.MesProRouteProcessDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderBomDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderProcessDO;
+import cn.iocoder.yudao.module.mes.dal.mysql.pro.workorder.MesProWorkOrderBomMapper;
 import cn.iocoder.yudao.module.mes.dal.mysql.pro.workorder.MesProWorkOrderProcessMapper;
 import cn.iocoder.yudao.module.mes.service.pro.process.MesProProcessService;
 import cn.iocoder.yudao.module.mes.service.pro.route.MesProRouteProcessService;
@@ -44,6 +47,11 @@
     private MesProProcessService processService;
     @Resource
     private MesProRouteProcessService routeProcessService;
+    @Resource
+    @Lazy
+    private MesProWorkOrderBomService workOrderBomService;
+    @Resource
+    private MesProWorkOrderBomMapper workOrderBomMapper;
 
     @Override
     public Long createWorkOrderProcess(MesProWorkOrderProcessSaveReqVO createReqVO) {
@@ -175,10 +183,44 @@
             }
         }
 
-        // 4. 閲嶅缓宸ュ簭閾�
+        // 4. 淇濆瓨宸ュ崟 BOM 鎶曟枡锛堝悎骞舵墍鏈夊伐搴忕殑 bomItems锛屾寜 itemId 鍘婚噸锛�
+        saveWorkOrderBomFromProcesses(workOrderId, list);
+
+        // 5. 閲嶅缓宸ュ簭閾�
         rebuildProcessChain(workOrderId);
     }
 
+    /**
+     * 浠庡伐搴忓垪琛ㄤ腑鎻愬彇 BOM 鎶曟枡锛屽悎骞跺幓閲嶅悗淇濆瓨鍒板伐鍗� BOM 琛�
+     */
+    private void saveWorkOrderBomFromProcesses(Long workOrderId, List<MesProWorkOrderProcessSaveReqVO> list) {
+        // 鏀堕泦鎵�鏈夊伐搴忕殑 bomItems锛屾寜 itemId 鍘婚噸锛堜繚鐣欑涓�涓嚭鐜扮殑 quantity锛�
+        java.util.Map<Long, MesProWorkOrderProcessSaveReqVO.BomItem> merged = new java.util.LinkedHashMap<>();
+        for (MesProWorkOrderProcessSaveReqVO item : list) {
+            if (CollUtil.isNotEmpty(item.getBomItems())) {
+                for (MesProWorkOrderProcessSaveReqVO.BomItem bomItem : item.getBomItems()) {
+                    if (bomItem.getItemId() != null) {
+                        merged.putIfAbsent(bomItem.getItemId(), bomItem);
+                    }
+                }
+            }
+        }
+        // 鍒犻櫎鏃� BOM锛屾壒閲忔彃鍏ユ柊 BOM
+        workOrderBomService.deleteWorkOrderBomByWorkOrderId(workOrderId);
+        if (CollUtil.isNotEmpty(merged)) {
+            List<MesProWorkOrderBomDO> bomList = new ArrayList<>(merged.size());
+            for (MesProWorkOrderProcessSaveReqVO.BomItem bomItem : merged.values()) {
+                bomList.add(MesProWorkOrderBomDO.builder()
+                        .workOrderId(workOrderId)
+                        .itemId(bomItem.getItemId())
+                        .quantity(bomItem.getQuantity())
+                        .remark(bomItem.getRemark())
+                        .build());
+            }
+            workOrderBomMapper.insertBatch(bomList);
+        }
+    }
+
     // ==================== 绉佹湁鏂规硶 ====================
 
     private MesProWorkOrderProcessDO validateWorkOrderProcessExists(Long id) {

--
Gitblit v1.9.3