Commit 1f92de2cb35530df5889f00fd73eff1bf8e58787
1 parent
21c44a9b
【缺陷修复】 依次审批任务回退后,重新进入后不会重新分配候选人
Showing
3 changed files
with
6 additions
and
3 deletions
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmParallelMultiInstanceBehavior.java
| @@ -50,6 +50,7 @@ public class BpmParallelMultiInstanceBehavior extends ParallelMultiInstanceBehav | @@ -50,6 +50,7 @@ public class BpmParallelMultiInstanceBehavior extends ParallelMultiInstanceBehav | ||
| 50 | super.collectionElementVariable = FlowableUtils.formatExecutionCollectionElementVariable(execution.getCurrentActivityId()); | 50 | super.collectionElementVariable = FlowableUtils.formatExecutionCollectionElementVariable(execution.getCurrentActivityId()); |
| 51 | 51 | ||
| 52 | // 第二步,获取任务的所有处理人 | 52 | // 第二步,获取任务的所有处理人 |
| 53 | + // TODO execution.getVariable 会从整个流程实例中获取变量, 可能回退后重新进入该任务,不会重新计算 collectionVariable 的值. 是不是考虑会签结束清理这个变量 | ||
| 53 | @SuppressWarnings("unchecked") | 54 | @SuppressWarnings("unchecked") |
| 54 | Set<Long> assigneeUserIds = (Set<Long>) execution.getVariable(super.collectionVariable, Set.class); | 55 | Set<Long> assigneeUserIds = (Set<Long>) execution.getVariable(super.collectionVariable, Set.class); |
| 55 | if (assigneeUserIds == null) { | 56 | if (assigneeUserIds == null) { |
| @@ -60,7 +61,7 @@ public class BpmParallelMultiInstanceBehavior extends ParallelMultiInstanceBehav | @@ -60,7 +61,7 @@ public class BpmParallelMultiInstanceBehavior extends ParallelMultiInstanceBehav | ||
| 60 | // 用途:1)审批人为空时;2)审批类型为自动通过、自动拒绝时 | 61 | // 用途:1)审批人为空时;2)审批类型为自动通过、自动拒绝时 |
| 61 | assigneeUserIds = SetUtils.asSet((Long) null); | 62 | assigneeUserIds = SetUtils.asSet((Long) null); |
| 62 | } | 63 | } |
| 63 | - execution.setVariable(super.collectionVariable, assigneeUserIds); | 64 | + execution.setVariableLocal(super.collectionVariable, assigneeUserIds); |
| 64 | } | 65 | } |
| 65 | return assigneeUserIds.size(); | 66 | return assigneeUserIds.size(); |
| 66 | } | 67 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmSequentialMultiInstanceBehavior.java
| @@ -44,7 +44,7 @@ public class BpmSequentialMultiInstanceBehavior extends SequentialMultiInstanceB | @@ -44,7 +44,7 @@ public class BpmSequentialMultiInstanceBehavior extends SequentialMultiInstanceB | ||
| 44 | 44 | ||
| 45 | // 第二步,获取任务的所有处理人 | 45 | // 第二步,获取任务的所有处理人 |
| 46 | @SuppressWarnings("unchecked") | 46 | @SuppressWarnings("unchecked") |
| 47 | - Set<Long> assigneeUserIds = (Set<Long>) execution.getVariable(super.collectionVariable, Set.class); | 47 | + Set<Long> assigneeUserIds = (Set<Long>) execution.getVariableLocal(super.collectionVariable, Set.class); |
| 48 | if (assigneeUserIds == null) { | 48 | if (assigneeUserIds == null) { |
| 49 | assigneeUserIds = taskCandidateInvoker.calculateUsersByTask(execution); | 49 | assigneeUserIds = taskCandidateInvoker.calculateUsersByTask(execution); |
| 50 | if (CollUtil.isEmpty(assigneeUserIds)) { | 50 | if (CollUtil.isEmpty(assigneeUserIds)) { |
| @@ -53,7 +53,7 @@ public class BpmSequentialMultiInstanceBehavior extends SequentialMultiInstanceB | @@ -53,7 +53,7 @@ public class BpmSequentialMultiInstanceBehavior extends SequentialMultiInstanceB | ||
| 53 | // 用途:1)审批人为空时;2)审批类型为自动通过、自动拒绝时 | 53 | // 用途:1)审批人为空时;2)审批类型为自动通过、自动拒绝时 |
| 54 | assigneeUserIds = SetUtils.asSet((Long) null); | 54 | assigneeUserIds = SetUtils.asSet((Long) null); |
| 55 | } | 55 | } |
| 56 | - execution.setVariable(super.collectionVariable, assigneeUserIds); | 56 | + execution.setVariableLocal(super.collectionVariable, assigneeUserIds); |
| 57 | } | 57 | } |
| 58 | return assigneeUserIds.size(); | 58 | return assigneeUserIds.size(); |
| 59 | } | 59 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
| @@ -755,6 +755,8 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -755,6 +755,8 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 755 | runtimeService.setVariable(currentTask.getProcessInstanceId(), | 755 | runtimeService.setVariable(currentTask.getProcessInstanceId(), |
| 756 | String.format(PROCESS_INSTANCE_VARIABLE_RETURN_FLAG, reqVO.getTargetTaskDefinitionKey()), Boolean.TRUE); | 756 | String.format(PROCESS_INSTANCE_VARIABLE_RETURN_FLAG, reqVO.getTargetTaskDefinitionKey()), Boolean.TRUE); |
| 757 | // 4. 执行驳回 | 757 | // 4. 执行驳回 |
| 758 | + // 使用 moveExecutionsToSingleActivityId 替换 moveExecutionsToSingleActivityId 原因: | ||
| 759 | + // 当多实例任务回退的时候有问题。 相关 issue: https://github.com/flowable/flowable-engine/issues/3944 | ||
| 758 | List<String> runExecutionIds = convertList(taskList, Task::getExecutionId); | 760 | List<String> runExecutionIds = convertList(taskList, Task::getExecutionId); |
| 759 | runtimeService.createChangeActivityStateBuilder() | 761 | runtimeService.createChangeActivityStateBuilder() |
| 760 | .processInstanceId(currentTask.getProcessInstanceId()) | 762 | .processInstanceId(currentTask.getProcessInstanceId()) |