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