Commit a6e5b2880b0548f35f300e47f558da57f440fc74

Authored by YunaiV
1 parent 87c5c068

【功能优化】工作流:会签、或签分配人的时候,如果已经分配过,则不重复计算

yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmParallelMultiInstanceBehavior.java
@@ -48,8 +48,13 @@ public class BpmParallelMultiInstanceBehavior extends ParallelMultiInstanceBehav @@ -48,8 +48,13 @@ public class BpmParallelMultiInstanceBehavior extends ParallelMultiInstanceBehav
48 super.collectionElementVariable = FlowableUtils.formatExecutionCollectionElementVariable(execution.getCurrentActivityId()); 48 super.collectionElementVariable = FlowableUtils.formatExecutionCollectionElementVariable(execution.getCurrentActivityId());
49 49
50 // 第二步,获取任务的所有处理人 50 // 第二步,获取任务的所有处理人
51 - Set<Long> assigneeUserIds = taskCandidateInvoker.calculateUsers(execution);  
52 - execution.setVariable(super.collectionVariable, assigneeUserIds); 51 + // 由于每次审批(会签、或签等情况)后都会执行一次,所以 variable 已经有结果,不重复计算
  52 + @SuppressWarnings("unchecked")
  53 + Set<Long> assigneeUserIds = (Set<Long>) execution.getVariable(super.collectionVariable, Set.class);
  54 + if (assigneeUserIds == null) {
  55 + assigneeUserIds = taskCandidateInvoker.calculateUsers(execution);
  56 + execution.setVariable(super.collectionVariable, assigneeUserIds);
  57 + }
53 return assigneeUserIds.size(); 58 return assigneeUserIds.size();
54 } 59 }
55 60
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmSequentialMultiInstanceBehavior.java
1 package cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior; 1 package cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior;
2 2
3 -import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.FlowableUtils;  
4 import cn.iocoder.yudao.module.bpm.framework.flowable.core.candidate.BpmTaskCandidateInvoker; 3 import cn.iocoder.yudao.module.bpm.framework.flowable.core.candidate.BpmTaskCandidateInvoker;
  4 +import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.FlowableUtils;
5 import lombok.Setter; 5 import lombok.Setter;
6 import org.flowable.bpmn.model.Activity; 6 import org.flowable.bpmn.model.Activity;
7 import org.flowable.engine.delegate.DelegateExecution; 7 import org.flowable.engine.delegate.DelegateExecution;
8 import org.flowable.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior; 8 import org.flowable.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior;
9 import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior; 9 import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior;
10 10
11 -import java.util.LinkedHashSet;  
12 import java.util.Set; 11 import java.util.Set;
13 12
14 /** 13 /**
@@ -42,8 +41,13 @@ public class BpmSequentialMultiInstanceBehavior extends SequentialMultiInstanceB @@ -42,8 +41,13 @@ public class BpmSequentialMultiInstanceBehavior extends SequentialMultiInstanceB
42 super.collectionElementVariable = FlowableUtils.formatExecutionCollectionElementVariable(execution.getCurrentActivityId()); 41 super.collectionElementVariable = FlowableUtils.formatExecutionCollectionElementVariable(execution.getCurrentActivityId());
43 42
44 // 第二步,获取任务的所有处理人 43 // 第二步,获取任务的所有处理人
45 - Set<Long> assigneeUserIds = new LinkedHashSet<>(taskCandidateInvoker.calculateUsers(execution)); // 保证有序!!!  
46 - execution.setVariable(super.collectionVariable, assigneeUserIds); 44 + // 由于每次审批(会签、或签等情况)后都会执行一次,所以 variable 已经有结果,不重复计算
  45 + @SuppressWarnings("unchecked")
  46 + Set<Long> assigneeUserIds = (Set<Long>) execution.getVariable(super.collectionVariable, Set.class);
  47 + if (assigneeUserIds == null) {
  48 + assigneeUserIds = taskCandidateInvoker.calculateUsers(execution);
  49 + execution.setVariable(super.collectionVariable, assigneeUserIds);
  50 + }
47 return assigneeUserIds.size(); 51 return assigneeUserIds.size();
48 } 52 }
49 53