From ddb766143ae7d04eb193d6f93719582e9f72296c Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期一, 03 三月 2025 22:23:01 +0800
Subject: [PATCH] 获取前置节点,执行id相同时只取最近一个

---
 business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java |  121 ++++++++++++++++++++++++++++++----------
 1 files changed, 91 insertions(+), 30 deletions(-)

diff --git a/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java b/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
index fd94884..ed72ccf 100644
--- a/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
@@ -1268,20 +1268,36 @@
         // 鍒ゆ柇鍓嶇疆浠诲姟鏄笉鏄拰褰撳墠浠诲姟涓哄悓涓�涓猠xecuteId
         // 鍒ゆ柇褰撳墠浠诲姟鏄惁琚寕璧蜂腑
         String finalProcessInsId = processInsId;
-        beforeNodes = beforeNodes.stream().filter(node -> {
+        List<FormDetailVO> dataList = new ArrayList<>(2);
+        Map<String, List<FormDetailVO>> map = new HashMap<>(2);
+        beforeNodes.stream().forEach(node -> {
             if (node.getCurrent()) {
-                return Boolean.TRUE;
+                dataList.add(node);
+            } else {
+                List<HistoricTaskInstance> beforeTasks = historyService.createHistoricTaskInstanceQuery()
+                        .processInstanceId(finalProcessInsId)
+                        .finished()
+                        .taskDefinitionKey(node.getBeforeNodeDefId())
+                        .orderByTaskCreateTime()
+                        .desc()
+                        .list();
+                if (CollectionUtils.isNotEmpty(beforeTasks) && Objects.nonNull(beforeTasks.get(0))) {
+                    List<FormDetailVO> l = map.get(beforeTasks.get(0));
+                    if (CollectionUtils.isEmpty(l)) {
+                        map.put(beforeTasks.get(0).getExecutionId(), Arrays.asList(node));
+                    } else {
+                        l.add(node);
+                    }
+                }
             }
-            List<HistoricTaskInstance> beforeTasks = historyService.createHistoricTaskInstanceQuery()
-                    .processInstanceId(finalProcessInsId)
-                    .finished()
-                    .taskDefinitionKey(node.getBeforeNodeDefId())
-                    .orderByTaskCreateTime()
-                    .desc()
-                    .list();
-            return CollectionUtils.isNotEmpty(beforeTasks) && Objects.nonNull(beforeTasks.get(0));
-        }).collect(Collectors.toList());
-        List<DoFormDetailVO> vos = beforeNodes.stream().map(node -> {
+        });
+        for (String key : map.keySet()) {
+            if (StringUtils.isNotBlank(key)) {
+                // 鍚屼竴鎵ц鍣ㄤ笂鍙彇鏈�杩戠殑涓�涓�
+                dataList.add(map.get(key).get(0));
+            }
+        }
+        List<DoFormDetailVO> vos = dataList.stream().map(node -> {
             if (node.getCurrent()) {
                 if (processLogService.taskIsHangup(taskId, finalProcessInsId)) {
                     node.setTaskStatus(TaskStatusEnum.HANGUP);
@@ -1310,19 +1326,48 @@
         Map<String, Object> parameters = new HashMap<>();
         if (Objects.isNull(task)) {
             // 濡傛灉涓虹┖锛屽彲鑳芥槸浠诲姟宸茬粡缁撴潫
-            HistoricTaskInstance hisTask = historyService.createHistoricTaskInstanceQuery().taskId(taskId).includeProcessVariables().singleResult();
-            if (Objects.isNull(hisTask)) {
+            List<HistoricTaskInstance> hisTasks = historyService.createHistoricTaskInstanceQuery()
+                    .taskId(taskId)
+                    .finished()
+                    .includeProcessVariables()
+                    .orderByTaskCreateTime()
+                    .desc()
+                    .list();
+            if (CollectionUtils.isNotEmpty(hisTasks) && Objects.isNull(hisTasks.get(0))) {
                 throw new RuntimeException("璇ヤ换鍔′笉瀛樺湪");
             }
+            HistoricTaskInstance hisTask = hisTasks.get(0);
             parameters = hisTask.getProcessVariables();
             List<FormDetailVO> beforeNodes = this.getBeforeNodeForm(parameters, hisTask.getFormKey(), hisTask.getName(), hisTask.getProcessDefinitionId(), hisTask.getTaskDefinitionKey(), Boolean.TRUE);
-            List<FormDetailVO> dataList = beforeNodes.stream().filter(node -> {
+            List<FormDetailVO> dataList = new ArrayList<>(2);
+            Map<String, List<FormDetailVO>> map = new HashMap<>(2);
+            beforeNodes.stream().forEach(node -> {
                 if (node.getCurrent()) {
-                    return Boolean.TRUE;
+                    dataList.add(node);
+                } else {
+                    List<HistoricTaskInstance> beforeTasks = historyService.createHistoricTaskInstanceQuery()
+                            .processInstanceId(hisTask.getProcessInstanceId())
+                            .finished()
+                            .taskDefinitionKey(node.getBeforeNodeDefId())
+                            .orderByTaskCreateTime()
+                            .desc()
+                            .list();
+                    if (CollectionUtils.isNotEmpty(beforeTasks) && Objects.nonNull(beforeTasks.get(0))) {
+                        List<FormDetailVO> l = map.get(beforeTasks.get(0));
+                        if (CollectionUtils.isEmpty(l)) {
+                            map.put(beforeTasks.get(0).getExecutionId(), Arrays.asList(node));
+                        } else {
+                            l.add(node);
+                        }
+                    }
                 }
-                HistoricTaskInstance beforeTask = historyService.createHistoricTaskInstanceQuery().processInstanceId(hisTask.getProcessInstanceId()).finished().taskDefinitionKey(node.getBeforeNodeDefId()).singleResult();
-                return Objects.nonNull(beforeTask);
-            }).collect(Collectors.toList());
+            });
+            for (String key : map.keySet()) {
+                if (StringUtils.isNotBlank(key)) {
+                    // 鍚屼竴鎵ц鍣ㄤ笂鍙彇鏈�杩戠殑涓�涓�
+                    dataList.add(map.get(key).get(0));
+                }
+            }
             List<DoFormDetailVO> vos = dataList.stream().map(node -> {
                 if (node.getCurrent()) {
                     if (processLogService.taskIsHangup(taskId, hisTask.getProcessInstanceId())) {
@@ -1346,19 +1391,35 @@
         } else {
             parameters = taskService.getVariables(taskId);
             List<FormDetailVO> beforeNodes = this.getBeforeNodeForm(parameters, task.getFormKey(), task.getName(), task.getProcessDefinitionId(), task.getTaskDefinitionKey(), Boolean.TRUE);
-            List<FormDetailVO> dataList = beforeNodes.stream().filter(node -> {
+            List<FormDetailVO> dataList = new ArrayList<>(2);
+            Map<String, List<FormDetailVO>> map = new HashMap<>(2);
+            beforeNodes.stream().forEach(node -> {
                 if (node.getCurrent()) {
-                    return Boolean.TRUE;
+                    dataList.add(node);
+                } else {
+                    List<HistoricTaskInstance> beforeTasks = historyService.createHistoricTaskInstanceQuery()
+                            .processInstanceId(task.getProcessInstanceId())
+                            .finished()
+                            .taskDefinitionKey(node.getBeforeNodeDefId())
+                            .orderByTaskCreateTime()
+                            .desc()
+                            .list();
+                    if (CollectionUtils.isNotEmpty(beforeTasks) && Objects.nonNull(beforeTasks.get(0))) {
+                        List<FormDetailVO> l = map.get(beforeTasks.get(0));
+                        if (CollectionUtils.isEmpty(l)) {
+                            map.put(beforeTasks.get(0).getExecutionId(), Arrays.asList(node));
+                        } else {
+                            l.add(node);
+                        }
+                    }
                 }
-                List<HistoricTaskInstance> beforeTaskList = historyService.createHistoricTaskInstanceQuery()
-                        .processInstanceId(task.getProcessInstanceId())
-                        .finished()
-                        .taskDefinitionKey(node.getBeforeNodeDefId())
-                        .orderByTaskCreateTime()
-                        .desc()
-                        .list();
-                return CollectionUtils.isNotEmpty(beforeTaskList) && Objects.nonNull(beforeTaskList.get(0));
-            }).collect(Collectors.toList());
+            });
+            for (String key : map.keySet()) {
+                if (StringUtils.isNotBlank(key)) {
+                    // 鍚屼竴鎵ц鍣ㄤ笂鍙彇鏈�杩戠殑涓�涓�
+                    dataList.add(map.get(key).get(0));
+                }
+            }
             List<DoFormDetailVO> vos = dataList.stream().map(node -> {
                 if (node.getCurrent()) {
                     if (processLogService.taskIsHangup(taskId, task.getProcessInstanceId())) {

--
Gitblit v1.8.0