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

---
 start/src/main/resources/application-prod.yml                        |    6 +-
 flowable/src/main/java/com/ycl/service/common/TaskCommonService.java |    2 
 business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java |  121 ++++++++++++++++++++++++++++++----------
 3 files changed, 96 insertions(+), 33 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())) {
diff --git a/flowable/src/main/java/com/ycl/service/common/TaskCommonService.java b/flowable/src/main/java/com/ycl/service/common/TaskCommonService.java
index b5b0797..ed65499 100644
--- a/flowable/src/main/java/com/ycl/service/common/TaskCommonService.java
+++ b/flowable/src/main/java/com/ycl/service/common/TaskCommonService.java
@@ -182,6 +182,7 @@
                         formDetailVO.setCanWait(this.checkHasExeProperty(currentElement.getExtensionElements().get("properties"), ProcessConstants.EXTENSION_PROPERTY_CAN_WAIT_TEXT));
                         formDetailVO.setUserTask((UserTask) incomingFlow.getSourceFlowElement());
                         defKeys.add(formDetailVO);
+                        continue;
                     } else {
                         beforeNodeInfo(incomingFlow.getSourceFlowElement(), defKeys);
                     }
@@ -199,6 +200,7 @@
                         formDetailVO.setCanWait(this.checkHasExeProperty(currentElement.getExtensionElements().get("properties"), ProcessConstants.EXTENSION_PROPERTY_CAN_WAIT_TEXT));
                         formDetailVO.setUserTask((UserTask) incomingFlow.getSourceFlowElement());
                         defKeys.add(formDetailVO);
+                        continue;
                     } else {
                         beforeNodeInfo(incomingFlow.getSourceFlowElement(), defKeys);
                     }
diff --git a/start/src/main/resources/application-prod.yml b/start/src/main/resources/application-prod.yml
index 4560409..d86f683 100644
--- a/start/src/main/resources/application-prod.yml
+++ b/start/src/main/resources/application-prod.yml
@@ -18,13 +18,13 @@
     # redis 閰嶇疆
     redis:
         # 鍦板潃
-        host: 192.168.16.237
+        host: 42.193.1.25
         # 绔彛锛岄粯璁や负6379
         port: 6379
         # 鏁版嵁搴撶储寮�
         database: 2
         # 瀵嗙爜
-        password: Redis@r
+        password: ycl2018
         # 杩炴帴瓒呮椂鏃堕棿
         timeout: 10s
         lettuce:
@@ -43,7 +43,7 @@
         druid:
             # 涓诲簱鏁版嵁婧�
             master:
-                url: jdbc:mysql://192.168.16.237:3306/project_management?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
+                url: jdbc:mysql://221.237.224.33:8066/project_management?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
                 username: root
                 password: Mysql@my
             # 浠庡簱鏁版嵁婧�

--
Gitblit v1.8.0