From d5452f48951a5540d2df44c55e494e75560b3866 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 02 十一月 2026 11:42:39 +0800
Subject: [PATCH] fix(bpm): 审批结果事件带上流程分类,修复历史自定义 Key 流程状态不回写

---
 yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java |   27 +++++++++++++++++++++------
 1 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java
index f7d2dd5..84272e3 100644
--- a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java
+++ b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java
@@ -12,6 +12,7 @@
 import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
 import cn.iocoder.yudao.framework.common.util.object.PageUtils;
 import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
+import cn.iocoder.yudao.module.bpm.api.event.BpmProcessInstanceStatusEvent;
 import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
 import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.BpmModelMetaInfoVO;
 import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO;
@@ -37,6 +38,7 @@
 import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils;
 import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.FlowableUtils;
 import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.SimpleModelUtils;
+import cn.iocoder.yudao.module.bpm.service.attach.BpmBusinessAttachService;
 import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService;
 import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService;
 import cn.iocoder.yudao.module.system.api.dept.DeptApi;
@@ -123,6 +125,9 @@
 
     @Resource
     private BpmProcessIdRedisDAO processIdRedisDAO;
+
+    @Resource
+    private BpmBusinessAttachService businessAttachService;
 
     // ========== Query 鏌ヨ鐩稿叧鏂规硶 ==========
 
@@ -389,9 +394,14 @@
         Map<String, String> formFieldsPermission = getFormFieldsPermission(bpmnModel, reqVO.getActivityId(), taskId);
 
         // 3. 鎷兼帴鏁版嵁
-        return BpmProcessInstanceConvert.INSTANCE.buildApprovalDetail(bpmnModel, processDefinition,
-                processDefinitionInfo, processInstance,
+        BpmApprovalDetailRespVO detailRespVO = BpmProcessInstanceConvert.INSTANCE.buildApprovalDetail(bpmnModel,
+                processDefinition, processDefinitionInfo, processInstance,
                 processInstanceStatus, approveNodes, todoTask, formFieldsPermission, userMap, deptMap);
+
+        // 4. 濉厖涓氬姟闄勪欢閰嶇疆锛屽疄鐜板鎵硅鎯呰嚜鍔ㄥ睍绀哄閮ㄤ笟鍔′俊鎭�
+        businessAttachService.fillBusinessForm(detailRespVO.getProcessDefinition(), processDefinition.getKey(),
+                processInstance != null ? processInstance.getBusinessKey() : null);
+        return detailRespVO;
     }
 
     /**
@@ -1016,13 +1026,18 @@
         }
 
         // 3. 鍙戦�佹祦绋嬪疄渚嬬殑鐘舵�佷簨浠�
-        processInstanceEventPublisher.sendProcessInstanceResultEvent(
-                BpmProcessInstanceConvert.INSTANCE.buildProcessInstanceStatusEvent(this, instance, status, reason));
+        BpmProcessInstanceStatusEvent statusEvent = BpmProcessInstanceConvert.INSTANCE
+                .buildProcessInstanceStatusEvent(this, instance, status, reason);
+        // 甯︿笂娴佺▼鍒嗙被锛坆pm_process_definition_info.category锛夛紝渚夸簬涓氬姟妯″潡鍏煎鍚屼竴鍒嗙被涓嬬殑鍘嗗彶鑷畾涔� Key
+        BpmProcessDefinitionInfoDO processDefinitionInfo = processDefinitionService
+                .getProcessDefinitionInfo(instance.getProcessDefinitionId());
+        if (processDefinitionInfo != null) {
+            statusEvent.setProcessDefinitionCategory(processDefinitionInfo.getCategory());
+        }
+        processInstanceEventPublisher.sendProcessInstanceResultEvent(statusEvent);
 
         // 4. 娴佺▼鍚庣疆閫氱煡
         if (Objects.equals(status, BpmProcessInstanceStatusEnum.APPROVE.getStatus())) {
-            BpmProcessDefinitionInfoDO processDefinitionInfo = processDefinitionService.
-                    getProcessDefinitionInfo(instance.getProcessDefinitionId());
             if (ObjUtil.isNotNull(processDefinitionInfo) &&
                     ObjUtil.isNotNull(processDefinitionInfo.getProcessAfterTriggerSetting())) {
                 BpmModelMetaInfoVO.HttpRequestSetting setting = processDefinitionInfo.getProcessAfterTriggerSetting();

--
Gitblit v1.9.3