mirror of
https://github.com/YunaiV/ruoyi-vue-pro.git
synced 2026-04-19 14:28:38 +00:00
refactor(bpm): 优化多实例行为初始化逻辑
- 将 collectionVariable 和 collectionElementVariable 的初始化移到构造函数中 - 避免在运行期修改 Behavior 实例状态 - 删除重复的变量设置代码 - 保留必要的注释说明字段用途 - 确保表达式和变量互斥关系正确处理
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user