Commit 120736e393d462797b56cbcab77765e05b2943b4

Authored by jason
1 parent 32f34335

fix: [BPM 工作流] 驳回预测 review 修改

yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
@@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.bpm.service.task; @@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.bpm.service.task;
2 2
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
4 import cn.hutool.core.convert.Convert; 4 import cn.hutool.core.convert.Convert;
5 -import cn.hutool.core.date.DateUtil;  
6 import cn.hutool.core.lang.Assert; 5 import cn.hutool.core.lang.Assert;
7 import cn.hutool.core.util.*; 6 import cn.hutool.core.util.*;
8 import cn.hutool.extra.spring.SpringUtil; 7 import cn.hutool.extra.spring.SpringUtil;
@@ -934,9 +933,10 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -934,9 +933,10 @@ public class BpmTaskServiceImpl implements BpmTaskService {
934 933
935 // 3. 构建需要预测的任务流程变量 934 // 3. 构建需要预测的任务流程变量
936 // TODO @jason:【驳回预测相关】是不是搞成一个变量,里面是 set 更简洁一点呀? 935 // TODO @jason:【驳回预测相关】是不是搞成一个变量,里面是 set 更简洁一点呀?
937 - Set<String> taskDefinitionKeyList = getNeedSimulateTaskDefinitionKeys(bpmnModel, currentTask, targetElement);  
938 - Map<String, Object> needSimulateVariables = convertMap(taskDefinitionKeyList,  
939 - taskId -> StrUtil.concat(false, PROCESS_INSTANCE_VARIABLE_NEED_SIMULATE_PREFIX, taskId), item -> Boolean.TRUE); 936 + Set<String> needSimulateTaskDefinitionKeys = getNeedSimulateTaskDefinitionKeys(bpmnModel, currentTask, targetElement);
  937 + Map<String, Object> needSimulateVariables = convertMap(needSimulateTaskDefinitionKeys,
  938 + key -> StrUtil.concat(false, PROCESS_INSTANCE_VARIABLE_NEED_SIMULATE_PREFIX, key), item -> Boolean.TRUE);
  939 +
940 940
941 // 4. 执行驳回 941 // 4. 执行驳回
942 // 使用 moveExecutionsToSingleActivityId 替换 moveActivityIdsToSingleActivityId 原因: 942 // 使用 moveExecutionsToSingleActivityId 替换 moveActivityIdsToSingleActivityId 原因:
@@ -956,22 +956,22 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -956,22 +956,22 @@ public class BpmTaskServiceImpl implements BpmTaskService {
956 // 1. 获取需要预测的任务的 definition key。因为当前任务还没完成,也需要预测 956 // 1. 获取需要预测的任务的 definition key。因为当前任务还没完成,也需要预测
957 Set<String> taskDefinitionKeys = CollUtil.newHashSet(currentTask.getTaskDefinitionKey()); 957 Set<String> taskDefinitionKeys = CollUtil.newHashSet(currentTask.getTaskDefinitionKey());
958 958
959 - // 2.1 从已结束任务中找到要回退的目标任务,按时间倒序最近的一个目标任务 959 + // 2.1 获取已结束任务按时间倒序排序
960 List<HistoricTaskInstance> endTaskList = CollectionUtils.filterList( 960 List<HistoricTaskInstance> endTaskList = CollectionUtils.filterList(
961 getTaskListByProcessInstanceId(currentTask.getProcessInstanceId(), Boolean.FALSE), 961 getTaskListByProcessInstanceId(currentTask.getProcessInstanceId(), Boolean.FALSE),
962 item -> item.getEndTime() != null); 962 item -> item.getEndTime() != null);
963 - // 2.2 遍历已结束的任务,找到在 targetTask 之后生成的任务,且串行可达的任务 963 + // 2.2 从结束任务中找到最近一个的目标任务
964 HistoricTaskInstance targetTask = findFirst(endTaskList, 964 HistoricTaskInstance targetTask = findFirst(endTaskList,
965 item -> item.getTaskDefinitionKey().equals(targetElement.getId())); 965 item -> item.getTaskDefinitionKey().equals(targetElement.getId()));
966 - // TODO @jason:【驳回预测相关】是不是 if targetTask 先判空? 966 + if (targetTask == null) {
  967 + return taskDefinitionKeys;
  968 + }
  969 + // 2.3 遍历已结束的任务,找到在 targetTask 之后生成的任务,且串行可达的任务
967 endTaskList.forEach(item -> { 970 endTaskList.forEach(item -> {
968 FlowElement element = getFlowElementById(bpmnModel, item.getTaskDefinitionKey()); 971 FlowElement element = getFlowElementById(bpmnModel, item.getTaskDefinitionKey());
969 - // 如果已结束的任务在回退目标节点之后生成,且串行可达,则标记为需要预算节点 972 + // 如果已结束的任务在回退目标节点之后生成,且串行可达,则加到需要预测节点中
970 // TODO 串行可达的方法需要和判断可回退节点 validateTargetTaskCanReturn 分开吗? 并行网关可能会有问题。 973 // TODO 串行可达的方法需要和判断可回退节点 validateTargetTaskCanReturn 分开吗? 并行网关可能会有问题。
971 - // TODO @jason:【驳回预测相关】这里是不是判断 element 哈?  
972 - if (targetTask != null  
973 - // TODO @jason:【驳回预测相关】这里直接 createTime 的 compare 更简单?因为不太会出现空哈。  
974 - && DateUtil.compare(item.getCreateTime(), targetTask.getCreateTime()) > 0 974 + if (item.getCreateTime().compareTo(targetTask.getCreateTime()) > 0
975 && BpmnModelUtils.isSequentialReachable(element, targetElement, null)) { 975 && BpmnModelUtils.isSequentialReachable(element, targetElement, null)) {
976 taskDefinitionKeys.add(item.getTaskDefinitionKey()); 976 taskDefinitionKeys.add(item.getTaskDefinitionKey());
977 } 977 }