From f31812791a94b5785a03ff9a764d27a6a74c5b44 Mon Sep 17 00:00:00 2001
From: hsy <1029150275@qq.com>
Date: 星期一, 17 八月 2026 09:38:48 +0800
Subject: [PATCH] 拉下的文件

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkOrderProcessServiceImpl.java |   73 +++++++++++++++++++++++++++++++++++-
 1 files changed, 71 insertions(+), 2 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..073b4e6 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;
@@ -21,6 +24,7 @@
 import java.util.Comparator;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
@@ -28,7 +32,7 @@
 /**
  * MES 鐢熶骇宸ュ崟宸ュ簭 Service 瀹炵幇绫�
  *
- * @author 鑺嬮亾婧愮爜
+ * @author 瓒呯骇绠$悊鍛�
  */
 @Service
 @Validated
@@ -44,6 +48,11 @@
     private MesProProcessService processService;
     @Resource
     private MesProRouteProcessService routeProcessService;
+    @Resource
+    @Lazy
+    private MesProWorkOrderBomService workOrderBomService;
+    @Resource
+    private MesProWorkOrderBomMapper workOrderBomMapper;
 
     @Override
     public Long createWorkOrderProcess(MesProWorkOrderProcessSaveReqVO createReqVO) {
@@ -52,6 +61,12 @@
 
         // 2. 鎻掑叆鏁版嵁
         MesProWorkOrderProcessDO workOrderProcess = BeanUtils.toBean(createReqVO, MesProWorkOrderProcessDO.class);
+        if (CollUtil.isNotEmpty(createReqVO.getOutputItemIds())) {
+            workOrderProcess.setOutputItemId(
+                createReqVO.getOutputItemIds().stream()
+                    .map(String::valueOf)
+                    .collect(Collectors.joining(",")));
+        }
         workOrderProcessMapper.insert(workOrderProcess);
 
         // 3. 閲嶅缓宸ュ簭閾�
@@ -67,6 +82,12 @@
 
         // 2. 鏇存柊鏁版嵁
         MesProWorkOrderProcessDO updateObj = BeanUtils.toBean(updateReqVO, MesProWorkOrderProcessDO.class);
+        if (CollUtil.isNotEmpty(updateReqVO.getOutputItemIds())) {
+            updateObj.setOutputItemId(
+                updateReqVO.getOutputItemIds().stream()
+                    .map(String::valueOf)
+                    .collect(Collectors.joining(",")));
+        }
         workOrderProcessMapper.updateById(updateObj);
 
         // 3. 閲嶅缓宸ュ簭閾�
@@ -98,6 +119,19 @@
     @Override
     public List<MesProWorkOrderProcessDO> getWorkOrderProcessListByWorkOrderId(Long workOrderId) {
         return workOrderProcessMapper.selectListByWorkOrderId(workOrderId);
+    }
+
+    @Override
+    public MesProWorkOrderProcessDO getLastWorkOrderProcessByWorkOrderId(Long workOrderId) {
+        return workOrderProcessMapper.selectLastByWorkOrderId(workOrderId);
+    }
+
+    @Override
+    public List<MesProWorkOrderProcessDO> getWorkOrderProcessListByWorkOrderIds(java.util.Collection<Long> workOrderIds) {
+        if (CollUtil.isEmpty(workOrderIds)) {
+            return Collections.emptyList();
+        }
+        return workOrderProcessMapper.selectListByWorkOrderIds(workOrderIds);
     }
 
     @Override
@@ -167,18 +201,53 @@
             if (item.getId() == null) {
                 // 鏂板
                 MesProWorkOrderProcessDO process = BeanUtils.toBean(item, MesProWorkOrderProcessDO.class);
+                if (CollUtil.isNotEmpty(item.getOutputItemIds())) {
+                    process.setOutputItemId(item.getOutputItemIds().stream().map(String::valueOf).collect(Collectors.joining(",")));
+                }
                 workOrderProcessMapper.insert(process);
             } else {
                 // 鏇存柊
                 MesProWorkOrderProcessDO updateObj = BeanUtils.toBean(item, MesProWorkOrderProcessDO.class);
+                if (CollUtil.isNotEmpty(item.getOutputItemIds())) {
+                    updateObj.setOutputItemId(item.getOutputItemIds().stream().map(String::valueOf).collect(Collectors.joining(",")));
+                }
                 workOrderProcessMapper.updateById(updateObj);
             }
         }
 
-        // 4. 閲嶅缓宸ュ簭閾�
+        // 4. 淇濆瓨宸ュ崟 BOM 鎶曟枡锛堝悎骞舵墍鏈夊伐搴忕殑 bomItems锛屾寜 itemId 鍘婚噸锛�
+        saveWorkOrderBomFromProcesses(workOrderId, list);
+
+        // 5. 閲嶅缓宸ュ簭閾�
         rebuildProcessChain(workOrderId);
     }
 
+    /**
+     * 浠庡伐搴忓垪琛ㄤ腑鎻愬彇 BOM 鎶曟枡锛屾寜宸ュ簭鍒嗗埆淇濆瓨鍒板伐鍗� BOM 琛�
+     */
+    private void saveWorkOrderBomFromProcesses(Long workOrderId, List<MesProWorkOrderProcessSaveReqVO> list) {
+        workOrderBomService.deleteWorkOrderBomByWorkOrderId(workOrderId);
+        List<MesProWorkOrderBomDO> bomList = new ArrayList<>();
+        for (MesProWorkOrderProcessSaveReqVO item : list) {
+            if (CollUtil.isNotEmpty(item.getBomItems())) {
+                for (MesProWorkOrderProcessSaveReqVO.BomItem bomItem : item.getBomItems()) {
+                    if (bomItem.getItemId() != null) {
+                        bomList.add(MesProWorkOrderBomDO.builder()
+                                .workOrderId(workOrderId)
+                                .processId(item.getProcessId())
+                                .itemId(bomItem.getItemId())
+                                .quantity(bomItem.getQuantity())
+                                .remark(bomItem.getRemark())
+                                .build());
+                    }
+                }
+            }
+        }
+        if (CollUtil.isNotEmpty(bomList)) {
+            workOrderBomMapper.insertBatch(bomList);
+        }
+    }
+
     // ==================== 绉佹湁鏂规硶 ====================
 
     private MesProWorkOrderProcessDO validateWorkOrderProcessExists(Long id) {

--
Gitblit v1.9.3