From ffe7921a138331185186fd100846fe50dcaf841c Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 16 七月 2026 10:08:02 +0800
Subject: [PATCH] 1.采购管理-采购申请恢复

---
 yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java |   21 +++++++++++++--------
 1 files changed, 13 insertions(+), 8 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 5344dd7..a1050ab 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
@@ -7,7 +7,6 @@
 import cn.hutool.core.lang.Assert;
 import cn.hutool.core.util.*;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.yudao.framework.common.util.date.DateUtils;
 import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
 import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
@@ -25,6 +24,7 @@
 import cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants;
 import cn.iocoder.yudao.module.bpm.enums.definition.BpmModelTypeEnum;
 import cn.iocoder.yudao.module.bpm.enums.definition.BpmSimpleModelNodeTypeEnum;
+import cn.iocoder.yudao.module.bpm.enums.task.BpmAttachmentTypeEnum;
 import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum;
 import cn.iocoder.yudao.module.bpm.enums.task.BpmReasonEnum;
 import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum;
@@ -57,6 +57,7 @@
 import org.flowable.engine.runtime.Execution;
 import org.flowable.engine.runtime.ProcessInstance;
 import org.flowable.engine.runtime.ProcessInstanceBuilder;
+import org.flowable.engine.task.Attachment;
 import org.flowable.task.api.Task;
 import org.flowable.task.api.history.HistoricTaskInstance;
 import org.springframework.context.annotation.Lazy;
@@ -275,11 +276,10 @@
             processVariables.putAll(reqVO.getProcessVariables());
         }
 
-        // 3. 鑾峰彇涓嬩竴涓皢瑕佹墽琛岀殑鑺傜偣闆嗗悎
+        // 3.1 鑾峰彇涓嬩竴涓皢瑕佹墽琛岀殑鑺傜偣闆嗗悎
         FlowElement flowElement = bpmnModel.getFlowElement(task.getTaskDefinitionKey());
-        List<FlowNode> nextFlowNodes = BpmnModelUtils.getNextFlowNodes(flowElement, bpmnModel, processVariables);
-        // 浠呬粎鑾峰彇 UserTask 鑺傜偣  TODO add from jason锛氬鏋滅綉鍏宠妭鐐瑰拰缃戝叧鑺傜偣鐩歌繛锛岃幏鍙栦笅涓� UserTask. 璨屼技鏈夌偣涓嶅噯銆�
-        List<FlowNode> nextUserTaskList = CollectionUtils.filterList(nextFlowNodes, node -> node instanceof UserTask);
+        // 3.2 鑾峰彇 UserTask 鑺傜偣
+        List<UserTask> nextUserTaskList = BpmnModelUtils.getNextUserTasks(flowElement, bpmnModel, processVariables);
         List<ActivityNode> nextActivityNodes = convertList(nextUserTaskList, node -> new ActivityNode().setId(node.getId())
                 .setName(node.getName()).setNodeType(BpmSimpleModelNodeTypeEnum.APPROVE_NODE.getType())
                 .setStatus(BpmTaskStatusEnum.RUNNING.getStatus())
@@ -404,8 +404,13 @@
         // 閬嶅巻 tasks 鍒楄〃锛屽彧澶勭悊宸茬粨鏉熺殑 UserTask
         // 涓轰粈涔堜笉閫氳繃 activities 鍛紵鍥犱负锛屽姞绛惧満鏅笅锛屽畠鍙瓨鍦ㄤ簬 tasks锛屾病鏈� activities锛屽鑷村鏋滈亶鍘� activities 鐨勮瘽锛屽畠鏃犳硶鎴愪负涓�涓妭鐐�
         List<HistoricTaskInstance> endTasks = filterList(tasks, task -> task.getEndTime() != null);
+        // 鑾峰彇宸插畬鎴愯妭鐐圭殑闄勪欢
+        Set<String> endTaskIds = convertSet(endTasks, HistoricTaskInstance::getId);
+        List<Attachment> attachments = taskService.getAttachments(historicProcessInstance.getId(), endTaskIds, BpmAttachmentTypeEnum.TASK_ATTACHMENT);
+        Map<String, List<Attachment>> taskAttachmentMap = convertMultiMap(attachments, Attachment::getTaskId);
         List<ActivityNode> approvalNodes = convertList(endTasks, task -> {
             FlowElement flowNode = BpmnModelUtils.getFlowElementById(bpmnModel, task.getTaskDefinitionKey());
+            List<Attachment> taskAttachments = taskAttachmentMap.get(task.getId());
             ActivityNode activityNode = new ActivityNode().setId(task.getTaskDefinitionKey()).setName(task.getName())
                     .setNodeType(START_USER_NODE_ID.equals(task.getTaskDefinitionKey())
                             ? BpmSimpleModelNodeTypeEnum.START_USER_NODE.getType()
@@ -414,7 +419,7 @@
                     .setStatus(getEndActivityNodeStatus(task))
                     .setCandidateStrategy(BpmnModelUtils.parseCandidateStrategy(flowNode))
                     .setStartTime(DateUtils.of(task.getCreateTime())).setEndTime(DateUtils.of(task.getEndTime()))
-                    .setTasks(singletonList(BpmProcessInstanceConvert.INSTANCE.buildApprovalTaskInfo(task)));
+                    .setTasks(singletonList(BpmProcessInstanceConvert.INSTANCE.buildApprovalTaskInfo(task, taskAttachments)));
             // 濡傛灉鏄彇娑堢姸鎬侊紝鍒欒烦杩�
             if (BpmTaskStatusEnum.isCancelStatus(activityNode.getStatus())) {
                 return null;
@@ -528,14 +533,14 @@
                 if (task == null) {
                     continue;
                 }
-                activityNode.getTasks().add(BpmProcessInstanceConvert.INSTANCE.buildApprovalTaskInfo(task));
+                activityNode.getTasks().add(BpmProcessInstanceConvert.INSTANCE.buildApprovalTaskInfo(task, null));
                 // 鍔犵瀛愪换鍔★紝闇�瑕佽繃婊ゆ帀宸茬粡瀹屾垚鐨勫姞绛惧瓙浠诲姟
                 List<HistoricTaskInstance> childrenTasks = filterList(
                         taskService.getAllChildrenTaskListByParentTaskId(activity.getTaskId(), tasks),
                         childTask -> childTask.getEndTime() == null);
                 if (CollUtil.isNotEmpty(childrenTasks)) {
                     activityNode.getTasks().addAll(
-                            convertList(childrenTasks, BpmProcessInstanceConvert.INSTANCE::buildApprovalTaskInfo));
+                            convertList(childrenTasks, item->BpmProcessInstanceConvert.INSTANCE.buildApprovalTaskInfo(item, null)));
                 }
             }
             // 澶勭悊姣忎釜浠诲姟鐨� candidateUsers 灞炴�э細濡傛灉鏄緷娆″鎵癸紝闇�瑕侀娴嬪畠鐨勫悗缁鎵逛汉銆傚洜涓� Task 鏄鎵瑰畬涓�涓紝鍒涘缓涓�涓柊鐨� Task

--
Gitblit v1.9.3