From bf5f52656e128f578ed42c7979c31cf4b476ce46 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期六, 31 十月 2026 19:04:40 +0800
Subject: [PATCH] feat: 优化业务导入及工艺流程管理
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java | 48 ++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 46 insertions(+), 2 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java
index 018b633..b723f98 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java
@@ -2,6 +2,10 @@
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
+import cn.iocoder.yudao.module.mes.service.pd.processparamtemplate.MesPdProcessParamTemplateService;
+import cn.iocoder.yudao.module.mes.service.pro.feedback.dto.MesTaskParamSnapshot;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.mes.controller.admin.pro.task.vo.MesProTaskAutoGeneratePreviewRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.pro.task.vo.MesProTaskAutoGenerateReqVO;
@@ -76,6 +80,8 @@
@Resource
private MesProTaskMapper taskMapper;
+ @Resource
+ private MesPdProcessParamTemplateService paramTemplateService;
@Resource
private MesProFeedbackMapper feedbackMapper;
@@ -116,6 +122,7 @@
private MesCalTeamService teamService;
@Override
+ @Transactional(rollbackFor = Exception.class)
public Long createTask(MesProTaskSaveReqVO createReqVO) {
// 1. 鏍¢獙鍏宠仈鏁版嵁瀛樺湪
MesProWorkOrderDO workOrder = workOrderService.validateWorkOrderExists(createReqVO.getWorkOrderId());
@@ -143,14 +150,17 @@
task.setClientId(workOrder.getClientId());
}
// 2.2 鎻掑叆
+ freezeTaskParamConfig(task);
taskMapper.insert(task);
return task.getId();
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public void updateTask(MesProTaskSaveReqVO updateReqVO) {
- // 1.1 鏍¢獙瀛樺湪
- MesProTaskDO task = validateTaskExists(updateReqVO.getId());
+ MesProTaskDO task = taskMapper.selectOne(new LambdaQueryWrapperX<MesProTaskDO>()
+ .eq(MesProTaskDO::getId, updateReqVO.getId()).last("FOR UPDATE"));
+ if (task == null) throw exception(PRO_TASK_NOT_EXISTS);
// 1.2 鏍¢獙鍏宠仈鏁版嵁瀛樺湪
if (updateReqVO.getWorkOrderId() != null) {
workOrderService.validateWorkOrderExists(updateReqVO.getWorkOrderId());
@@ -176,7 +186,40 @@
// 2. 鏇存柊
MesProTaskDO updateObj = BeanUtils.toBean(updateReqVO, MesProTaskDO.class)
.setName(buildTaskName(item, quantity));
+ if (updateReqVO.getProcessId() != null && !updateReqVO.getProcessId().equals(task.getProcessId())) {
+ if (feedbackMapper.selectCountByTaskId(task.getId()) > 0) throw exception(PRO_TASK_HAS_FEEDBACK);
+ freezeTaskParamConfig(updateObj);
+ }
taskMapper.updateById(updateObj);
+ }
+
+ /** 浠庡伐搴忓拰妯℃澘澶嶅埗瀹氫箟锛屽悗缁ā鏉跨淮鎶や笉鏀瑰彉宸叉帓浜т换鍔°�� */
+ private void freezeTaskParamConfig(MesProTaskDO task) {
+ var process = processService.getProcess(task.getProcessId());
+ if (process == null) throw exception(cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRO_PROCESS_NOT_EXISTS);
+ int mode = process.getParamCollectMode() == null ? 0 : process.getParamCollectMode();
+ task.setParamCollectMode(mode);
+ task.setParamTemplateSnapshot("");
+ task.setParamSharedSnapshot("");
+ if (mode == 0) return;
+ if ((mode != 1 && mode != 2) || process.getParamTemplateId() == null)
+ throw exception(cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRO_PROCESS_PARAM_CONFIG_INVALID);
+ var template = paramTemplateService.validateProcessParamTemplateExists(process.getParamTemplateId());
+ var details = paramTemplateService.getProcessParamTemplateDetailListByTemplateId(template.getId());
+ if (CollUtil.isEmpty(details)) throw exception(cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRO_WORK_ORDER_PARAM_RECORD_TEMPLATE_NO_DETAIL);
+ MesTaskParamSnapshot snapshot = new MesTaskParamSnapshot();
+ snapshot.setTemplateId(template.getId());
+ snapshot.setTemplateCode(template.getTemplateCode());
+ snapshot.setTemplateName(template.getTemplateName());
+ List<MesTaskParamSnapshot.Detail> frozenDetails = BeanUtils.toBean(details, MesTaskParamSnapshot.Detail.class);
+ for (MesTaskParamSnapshot.Detail detail : frozenDetails) {
+ if (detail.getUnitMeasureId() != null) {
+ var unit = unitMeasureService.getUnitMeasure(detail.getUnitMeasureId());
+ if (unit != null) detail.setUnitMeasureName(unit.getName());
+ }
+ }
+ snapshot.setDetails(frozenDetails);
+ task.setParamTemplateSnapshot(JsonUtils.toJsonString(snapshot));
}
/**
@@ -492,6 +535,7 @@
.setStatus(MesProTaskStatusEnum.PREPARE.getStatus())
.setClientId(workOrder.getClientId())
.setColorCode(rp.getColorCode());
+ freezeTaskParamConfig(task);
taskMapper.insert(task);
taskIds.add(task.getId());
}
--
Gitblit v1.9.3