Commit 120736e393d462797b56cbcab77765e05b2943b4
1 parent
32f34335
fix: [BPM 工作流] 驳回预测 review 修改
Showing
1 changed file
with
12 additions
and
12 deletions
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 | 2 | |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | 4 | import cn.hutool.core.convert.Convert; |
| 5 | -import cn.hutool.core.date.DateUtil; | |
| 6 | 5 | import cn.hutool.core.lang.Assert; |
| 7 | 6 | import cn.hutool.core.util.*; |
| 8 | 7 | import cn.hutool.extra.spring.SpringUtil; |
| ... | ... | @@ -934,9 +933,10 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 934 | 933 | |
| 935 | 934 | // 3. 构建需要预测的任务流程变量 |
| 936 | 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 | 941 | // 4. 执行驳回 |
| 942 | 942 | // 使用 moveExecutionsToSingleActivityId 替换 moveActivityIdsToSingleActivityId 原因: |
| ... | ... | @@ -956,22 +956,22 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 956 | 956 | // 1. 获取需要预测的任务的 definition key。因为当前任务还没完成,也需要预测 |
| 957 | 957 | Set<String> taskDefinitionKeys = CollUtil.newHashSet(currentTask.getTaskDefinitionKey()); |
| 958 | 958 | |
| 959 | - // 2.1 从已结束任务中找到要回退的目标任务,按时间倒序最近的一个目标任务 | |
| 959 | + // 2.1 获取已结束任务按时间倒序排序 | |
| 960 | 960 | List<HistoricTaskInstance> endTaskList = CollectionUtils.filterList( |
| 961 | 961 | getTaskListByProcessInstanceId(currentTask.getProcessInstanceId(), Boolean.FALSE), |
| 962 | 962 | item -> item.getEndTime() != null); |
| 963 | - // 2.2 遍历已结束的任务,找到在 targetTask 之后生成的任务,且串行可达的任务 | |
| 963 | + // 2.2 从结束任务中找到最近一个的目标任务 | |
| 964 | 964 | HistoricTaskInstance targetTask = findFirst(endTaskList, |
| 965 | 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 | 970 | endTaskList.forEach(item -> { |
| 968 | 971 | FlowElement element = getFlowElementById(bpmnModel, item.getTaskDefinitionKey()); |
| 969 | - // 如果已结束的任务在回退目标节点之后生成,且串行可达,则标记为需要预算节点 | |
| 972 | + // 如果已结束的任务在回退目标节点之后生成,且串行可达,则加到需要预测节点中 | |
| 970 | 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 | 975 | && BpmnModelUtils.isSequentialReachable(element, targetElement, null)) { |
| 976 | 976 | taskDefinitionKeys.add(item.getTaskDefinitionKey()); |
| 977 | 977 | } | ... | ... |