From 05ab6e3f69a5e73624b2573db043f5923e8f7d8b Mon Sep 17 00:00:00 2001
From: xiaoyi <908147524@qq.com>
Date: 星期四, 05 十一月 2026 14:17:19 +0800
Subject: [PATCH] fix 修复bug

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteProcessServiceImpl.java |   76 ++++++++++++++++++++++++++++++++++++-
 1 files changed, 73 insertions(+), 3 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteProcessServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteProcessServiceImpl.java
index ec5aae1..a7459be 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteProcessServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteProcessServiceImpl.java
@@ -2,8 +2,10 @@
 
 import cn.hutool.core.collection.CollUtil;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.mes.controller.admin.pro.route.vo.process.MesProProcessOutputItemVO;
 import cn.iocoder.yudao.module.mes.controller.admin.pro.route.vo.process.MesProRouteProcessSaveReqVO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.route.MesProRouteProcessDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.pro.route.MesProRouteProductBomDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.route.MesProRouteProductDO;
 import cn.iocoder.yudao.module.mes.dal.mysql.pro.route.MesProRouteProcessMapper;
 import cn.iocoder.yudao.module.mes.service.pro.process.MesProProcessService;
@@ -13,10 +15,14 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
+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.*;
@@ -24,7 +30,7 @@
 /**
  * MES 宸ヨ壓璺嚎宸ュ簭 Service 瀹炵幇绫�
  *
- * @author 鑺嬮亾婧愮爜
+ * @author 瓒呯骇绠$悊鍛�
  */
 @Service
 @Validated
@@ -42,6 +48,9 @@
     @Resource
     @Lazy
     private MesProRouteService routeService;
+    @Resource
+    @Lazy
+    private MesProRouteProductBomService routeProductBomService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -57,6 +66,8 @@
 
         // 2. 鎻掑叆
         MesProRouteProcessDO routeProcess = BeanUtils.toBean(createReqVO, MesProRouteProcessDO.class);
+        // 浜у嚭閰嶇疆锛堝惈褰掑睘浜у搧锛夊簭鍒楀寲涓� JSON 瀛樺叆 output_item_id锛涘吋瀹规棫鐨� outputItemIds 骞抽摵鏍煎紡
+        routeProcess.setOutputItemId(serializeOutputs(createReqVO.getOutputs(), createReqVO.getOutputItemIds()));
         routeProcessMapper.insert(routeProcess);
 
         // 3. 鏇存柊宸ュ簭閾�
@@ -69,8 +80,14 @@
     public void updateRouteProcess(MesProRouteProcessSaveReqVO updateReqVO) {
         // 1.0 宸插惎鐢ㄧ殑宸ヨ壓璺嚎锛屼笉鍏佽鎿嶄綔
         routeService.validateRouteNotEnable(updateReqVO.getRouteId());
-        // 1.1 鏍¢獙瀛樺湪
-        validateRouteProcessExists(updateReqVO.getId());
+        // 1.1 鏍¢獙瀛樺湪锛涢儴鍒嗘洿鏂帮紙濡備粎璋冩暣浜у嚭浜у搧锛夋椂鏈紶鐨勫繀濉瓧娈电敤鐜版湁鍊煎洖濉�
+        MesProRouteProcessDO existing = validateRouteProcessExists(updateReqVO.getId());
+        if (updateReqVO.getProcessId() == null) {
+            updateReqVO.setProcessId(existing.getProcessId());
+        }
+        if (updateReqVO.getSort() == null) {
+            updateReqVO.setSort(existing.getSort());
+        }
         // 1.2 鏍¢獙宸ヨ壓璺嚎銆佸伐搴忓瓨鍦�
         validateRouteAndProcessExists(updateReqVO.getRouteId(), updateReqVO.getProcessId());
         // 1.3 鏍¢獙鍞竴鎬�
@@ -80,6 +97,11 @@
 
         // 2. 鏇存柊
         MesProRouteProcessDO updateObj = BeanUtils.toBean(updateReqVO, MesProRouteProcessDO.class);
+        // 浜у嚭閰嶇疆锛氬彧瑕佸墠绔樉寮忎紶浜� outputs / outputItemIds 灏辫鐩栵紙浼犵┖鏁扮粍琛ㄧず娓呯┖锛�
+        if (updateReqVO.getOutputs() != null || updateReqVO.getOutputItemIds() != null) {
+            String serialized = serializeOutputs(updateReqVO.getOutputs(), updateReqVO.getOutputItemIds());
+            updateObj.setOutputItemId(serialized == null ? "" : serialized);
+        }
         routeProcessMapper.updateById(updateObj);
 
         // 3. 閲嶅缓宸ュ簭閾�
@@ -198,6 +220,20 @@
     }
 
     @Override
+    public Map<Long, List<MesProRouteProductBomDO>> getRouteProcessBomMapByProductId(Long productId) {
+        MesProRouteProductDO routeProduct = routeProductService.getRouteProductByItemId(productId);
+        if (routeProduct == null) {
+            return Collections.emptyMap();
+        }
+        List<MesProRouteProductBomDO> bomList = routeProductBomService
+                .getRouteProductBomListByRouteIdAndProductId(routeProduct.getRouteId(), productId);
+        if (CollUtil.isEmpty(bomList)) {
+            return Collections.emptyMap();
+        }
+        return bomList.stream().collect(Collectors.groupingBy(MesProRouteProductBomDO::getProcessId));
+    }
+
+    @Override
     public List<MesProRouteProcessDO> getRouteProcessListByProcessId(Long processId) {
         return routeProcessMapper.selectListByProcessId(processId);
     }
@@ -207,4 +243,38 @@
         routeProcessMapper.deleteByRouteId(routeId);
     }
 
+    /**
+     * 浜у嚭閰嶇疆搴忓垪鍖栧埌 output_item_id 瀛楁锛圝SON 鏁扮粍锛�
+     * 鏍煎紡锛歔{"itemId":231,"productId":231}]
+     */
+    private String serializeOutputs(List<MesProProcessOutputItemVO> outputs, List<Long> outputItemIds) {
+        List<Map<String, Object>> list = new ArrayList<>();
+        if (CollUtil.isNotEmpty(outputs)) {
+            for (MesProProcessOutputItemVO vo : outputs) {
+                if (vo == null || vo.getItemId() == null) {
+                    continue;
+                }
+                Map<String, Object> m = new LinkedHashMap<>();
+                m.put("itemId", vo.getItemId());
+                if (vo.getProductId() != null) {
+                    m.put("productId", vo.getProductId());
+                }
+                list.add(m);
+            }
+        } else if (CollUtil.isNotEmpty(outputItemIds)) {
+            for (Long id : outputItemIds) {
+                if (id == null) {
+                    continue;
+                }
+                Map<String, Object> m = new LinkedHashMap<>();
+                m.put("itemId", id);
+                list.add(m);
+            }
+        }
+        if (list.isEmpty()) {
+            return null;
+        }
+        return cn.hutool.json.JSONUtil.toJsonStr(list);
+    }
+
 }

--
Gitblit v1.9.3