From 7ac5fb62d3ac852ec9505eb5c1999064aafee85f Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 13 八月 2026 16:26:39 +0800
Subject: [PATCH] feat(mes): 添加MES模块配置和功能
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkOrderProcessServiceImpl.java | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 58 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..ebee3db 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. 閲嶅缓宸ュ簭閾�
@@ -167,18 +188,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