!1483 refactor(bpm): 优化多实例行为初始化逻辑

Merge pull request !1483 from ssw/master-jdk17
This commit is contained in:
芋道源码 2025-12-25 01:50:44 +00:00 committed by Gitee
commit 3ec32a61b0
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
2 changed files with 12 additions and 20 deletions

View File

@ -34,6 +34,11 @@ public class BpmParallelMultiInstanceBehavior extends ParallelMultiInstanceBehav
public BpmParallelMultiInstanceBehavior(Activity activity, public BpmParallelMultiInstanceBehavior(Activity activity,
AbstractBpmnActivityBehavior innerActivityBehavior) { AbstractBpmnActivityBehavior innerActivityBehavior) {
super(activity, innerActivityBehavior); super(activity, innerActivityBehavior);
// 在解析/构造阶段基于 activityId 初始化与 activity 绑定且不变的字段避免在运行期修改 Behavior 实例状态
super.collectionExpression = null; // collectionExpression collectionVariable 是互斥的
super.collectionVariable = FlowableUtils.formatExecutionCollectionVariable(activity.getId());
// execution.getVariable() 读取当前所有任务处理的人的 key
super.collectionElementVariable = FlowableUtils.formatExecutionCollectionElementVariable(activity.getId());
} }
/** /**
@ -50,14 +55,7 @@ public class BpmParallelMultiInstanceBehavior extends ParallelMultiInstanceBehav
protected int resolveNrOfInstances(DelegateExecution execution) { protected int resolveNrOfInstances(DelegateExecution execution) {
// 情况一UserTask 节点 // 情况一UserTask 节点
if (execution.getCurrentFlowElement() instanceof UserTask) { if (execution.getCurrentFlowElement() instanceof UserTask) {
// 第一步设置 collectionVariable CollectionVariable // 获取任务的所有处理人
// execution.getVariable() 读取所有任务处理人的 key
super.collectionExpression = null; // collectionExpression collectionVariable 是互斥的
super.collectionVariable = FlowableUtils.formatExecutionCollectionVariable(execution.getCurrentActivityId());
// execution.getVariable() 读取当前所有任务处理的人的 key
super.collectionElementVariable = FlowableUtils.formatExecutionCollectionElementVariable(execution.getCurrentActivityId());
// 第二步获取任务的所有处理人
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
Set<Long> assigneeUserIds = (Set<Long>) execution.getVariable(super.collectionVariable, Set.class); Set<Long> assigneeUserIds = (Set<Long>) execution.getVariable(super.collectionVariable, Set.class);
if (assigneeUserIds == null) { if (assigneeUserIds == null) {

View File

@ -30,6 +30,11 @@ public class BpmSequentialMultiInstanceBehavior extends SequentialMultiInstanceB
public BpmSequentialMultiInstanceBehavior(Activity activity, AbstractBpmnActivityBehavior innerActivityBehavior) { public BpmSequentialMultiInstanceBehavior(Activity activity, AbstractBpmnActivityBehavior innerActivityBehavior) {
super(activity, innerActivityBehavior); super(activity, innerActivityBehavior);
// 在解析/构造阶段基于 activityId 初始化与 activity 绑定且不变的字段避免在运行期修改 Behavior 实例状态
super.collectionExpression = null; // collectionExpression collectionVariable 是互斥的
super.collectionVariable = FlowableUtils.formatExecutionCollectionVariable(activity.getId());
// execution.getVariable() 读取当前所有任务处理的人的 key
super.collectionElementVariable = FlowableUtils.formatExecutionCollectionElementVariable(activity.getId());
} }
/** /**
@ -41,14 +46,7 @@ public class BpmSequentialMultiInstanceBehavior extends SequentialMultiInstanceB
protected int resolveNrOfInstances(DelegateExecution execution) { protected int resolveNrOfInstances(DelegateExecution execution) {
// 情况一UserTask 节点 // 情况一UserTask 节点
if (execution.getCurrentFlowElement() instanceof UserTask) { if (execution.getCurrentFlowElement() instanceof UserTask) {
// 第一步设置 collectionVariable CollectionVariable // 获取任务的所有处理人
// execution.getVariable() 读取所有任务处理人的 key
super.collectionExpression = null; // collectionExpression collectionVariable 是互斥的
super.collectionVariable = FlowableUtils.formatExecutionCollectionVariable(execution.getCurrentActivityId());
// execution.getVariable() 读取当前所有任务处理的人的 key
super.collectionElementVariable = FlowableUtils.formatExecutionCollectionElementVariable(execution.getCurrentActivityId());
// 第二步获取任务的所有处理人
// 不使用 execution.getVariable 原因目前依次审批任务回退后 collectionVariable 变量没有清理 如果重新进入该任务不会重新分配审批人 // 不使用 execution.getVariable 原因目前依次审批任务回退后 collectionVariable 变量没有清理 如果重新进入该任务不会重新分配审批人
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
Set<Long> assigneeUserIds = (Set<Long>) execution.getVariableLocal(super.collectionVariable, Set.class); Set<Long> assigneeUserIds = (Set<Long>) execution.getVariableLocal(super.collectionVariable, Set.class);
@ -88,10 +86,6 @@ public class BpmSequentialMultiInstanceBehavior extends SequentialMultiInstanceB
super.executeOriginalBehavior(execution, multiInstanceRootExecution, loopCounter); super.executeOriginalBehavior(execution, multiInstanceRootExecution, loopCounter);
return; return;
} }
// 参见 https://gitee.com/zhijiantianya/yudao-cloud/issues/IC239F
super.collectionExpression = null;
super.collectionVariable = FlowableUtils.formatExecutionCollectionVariable(execution.getCurrentActivityId());
super.collectionElementVariable = FlowableUtils.formatExecutionCollectionElementVariable(execution.getCurrentActivityId());
super.executeOriginalBehavior(execution, multiInstanceRootExecution, loopCounter); super.executeOriginalBehavior(execution, multiInstanceRootExecution, loopCounter);
} }