From defe1e1c3ade87de0a7990f565f08f93aeb2decc Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期日, 08 十一月 2026 19:31:46 +0800
Subject: [PATCH] fix(bpm): 统一审批标题单号并收紧各模块提交校验

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java |   31 +++++++++++++++++++++++++++----
 1 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java
index ded280e..b097178 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java
@@ -4,11 +4,14 @@
 import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import cn.iocoder.yudao.framework.common.exception.ServiceException;
 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.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService;
+import org.flowable.engine.repository.ProcessDefinition;
 import cn.iocoder.yudao.module.mes.controller.admin.pro.feedback.vo.*;
 import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants;
 import cn.iocoder.yudao.module.mes.enums.md.autocode.MesMdAutoCodeRuleCodeEnum;
@@ -76,6 +79,7 @@
 import java.util.List;
 import java.util.LinkedHashSet;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -90,6 +94,8 @@
 @Validated
 @lombok.extern.slf4j.Slf4j
 public class MesProFeedbackServiceImpl implements MesProFeedbackService {
+
+    private static final String FEEDBACK_APPROVE_CATEGORY_CODE = "mes_pro_feedback_audit";
 
     @Resource
     private MesProFeedbackEquipmentService equipmentService;
@@ -147,6 +153,8 @@
     private MdmItemBatchConfigApi itemBatchConfigApi;
     @Resource
     private cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi processInstanceApi;
+    @Resource
+    private BpmProcessDefinitionService bpmProcessDefinitionService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -267,16 +275,28 @@
         }
 
         MesProWorkOrderDO workOrder = workOrderService.getWorkOrder(feedback.getWorkOrderId());
+        if (workOrder != null && Boolean.TRUE.equals(workOrder.getFeedbackApprove())
+                && StrUtil.isBlank(workOrder.getProcessDefinitionKey())) {
+            throw exception(PRO_FEEDBACK_APPROVAL_PROCESS_KEY_REQUIRED);
+        }
 
         // 1.2 鎶ュ伐涓庤川妫�鍒嗙锛氭彁浜ゆ姤宸ヤ笉鍐嶈嚜鍔ㄧ敓鎴愯繃绋嬫楠屽崟锛岃川妫�鐢辫川妫�閮ㄩ棬鎵嬪伐寤哄崟
         if (!processInstanceApi.isGlobalAutoApprove() && workOrder != null
                 && Boolean.TRUE.equals(workOrder.getFeedbackApprove())
-                && cn.hutool.core.util.StrUtil.isNotBlank(workOrder.getProcessDefinitionKey())) {
+                && StrUtil.isNotBlank(workOrder.getProcessDefinitionKey())) {
+            ProcessDefinition processDefinition = bpmProcessDefinitionService
+                    .getActiveProcessDefinition(workOrder.getProcessDefinitionKey());
+            if (processDefinition == null || bpmProcessDefinitionService
+                    .getProcessDefinitionInfoListByCategory(FEEDBACK_APPROVE_CATEGORY_CODE).stream()
+                    .noneMatch(info -> Objects.equals(info.getProcessDefinitionId(), processDefinition.getId()))) {
+                throw exception(PRO_FEEDBACK_APPROVAL_PROCESS_KEY_INVALID);
+            }
             // 2. 鏇存柊鐘舵�佷负瀹℃壒涓紝骞跺惎鍔ㄦ祦绋�
             String processInstanceId = processInstanceApi.createProcessInstance(cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId(),
                     new cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO()
                             .setProcessDefinitionKey(workOrder.getProcessDefinitionKey())
-                            .setBusinessKey(String.valueOf(id)));
+                            .setBusinessKey(String.valueOf(id))
+                            .setVariables(Map.of("businessNo", feedback.getCode())));
 
             feedbackMapper.updateById(new MesProFeedbackDO().setId(id)
                     .setStatus(MesProFeedbackStatusEnum.APPROVING.getStatus())
@@ -292,8 +312,11 @@
             }
 
             // 3. 鏇存柊鐘舵�佷负瀹℃壒涓紝鐒跺悗鐩存帴閫氳繃瀹℃壒
-            feedbackMapper.updateById(new MesProFeedbackDO().setId(id)
-                    .setStatus(MesProFeedbackStatusEnum.APPROVING.getStatus()));
+            feedbackMapper.update(null, new LambdaUpdateWrapper<MesProFeedbackDO>()
+                    .eq(MesProFeedbackDO::getId, id)
+                    .set(MesProFeedbackDO::getStatus, MesProFeedbackStatusEnum.APPROVING.getStatus())
+                    .set(MesProFeedbackDO::getProcessInstanceId, null)
+                    .set(MesProFeedbackDO::getProcessDefinitionKey, null));
             MesProFeedbackApproveReqVO approveReqVO = cn.iocoder.yudao.framework.common.util.object.BeanUtils.toBean(reqVO, MesProFeedbackApproveReqVO.class);
             // 鑷姩瀹℃壒锛氳繃绋嬫楠屽崟鍒氱敓鎴愬皻鏈~鍐欙紝涓嶅仛璐ㄦ宸ヨ祫鍓嶇疆鏍¢獙锛堣川閲忚皟鏁寸暀绌猴級
             approveFeedback(approveReqVO, false);

--
Gitblit v1.9.3