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