From 2756f7581ad6743ff796670a26787b85b8aaa2b2 Mon Sep 17 00:00:00 2001
From: xiaoyi <908147524@qq.com>
Date: 星期一, 02 十一月 2026 12:58:50 +0800
Subject: [PATCH] fix(mes): 修复工艺路线【本工序产出】保存不生效 - 后端补齐 outputs 字段与 JSON 存储/解析

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/route/MesProRouteProcessServiceImpl.java |   54 +++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 43 insertions(+), 11 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 4957169..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,6 +2,7 @@
 
 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;
@@ -14,9 +15,11 @@
 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;
@@ -63,12 +66,8 @@
 
         // 2. 鎻掑叆
         MesProRouteProcessDO routeProcess = BeanUtils.toBean(createReqVO, MesProRouteProcessDO.class);
-        if (CollUtil.isNotEmpty(createReqVO.getOutputItemIds())) {
-            routeProcess.setOutputItemId(
-                createReqVO.getOutputItemIds().stream()
-                    .map(String::valueOf)
-                    .collect(Collectors.joining(",")));
-        }
+        // 浜у嚭閰嶇疆锛堝惈褰掑睘浜у搧锛夊簭鍒楀寲涓� JSON 瀛樺叆 output_item_id锛涘吋瀹规棫鐨� outputItemIds 骞抽摵鏍煎紡
+        routeProcess.setOutputItemId(serializeOutputs(createReqVO.getOutputs(), createReqVO.getOutputItemIds()));
         routeProcessMapper.insert(routeProcess);
 
         // 3. 鏇存柊宸ュ簭閾�
@@ -98,11 +97,10 @@
 
         // 2. 鏇存柊
         MesProRouteProcessDO updateObj = BeanUtils.toBean(updateReqVO, MesProRouteProcessDO.class);
-        if (CollUtil.isNotEmpty(updateReqVO.getOutputItemIds())) {
-            updateObj.setOutputItemId(
-                updateReqVO.getOutputItemIds().stream()
-                    .map(String::valueOf)
-                    .collect(Collectors.joining(",")));
+        // 浜у嚭閰嶇疆锛氬彧瑕佸墠绔樉寮忎紶浜� outputs / outputItemIds 灏辫鐩栵紙浼犵┖鏁扮粍琛ㄧず娓呯┖锛�
+        if (updateReqVO.getOutputs() != null || updateReqVO.getOutputItemIds() != null) {
+            String serialized = serializeOutputs(updateReqVO.getOutputs(), updateReqVO.getOutputItemIds());
+            updateObj.setOutputItemId(serialized == null ? "" : serialized);
         }
         routeProcessMapper.updateById(updateObj);
 
@@ -245,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