mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 18:28:43 +08:00 
			
		
		
		
	BPM:新增顺序会签、或签的能力
This commit is contained in:
		| @@ -6,6 +6,7 @@ import org.flowable.bpmn.model.Activity; | ||||
| import org.flowable.bpmn.model.UserTask; | ||||
| import org.flowable.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior; | ||||
| import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior; | ||||
| import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior; | ||||
| import org.flowable.engine.impl.bpmn.behavior.UserTaskActivityBehavior; | ||||
| import org.flowable.engine.impl.bpmn.parser.factory.DefaultActivityBehaviorFactory; | ||||
|  | ||||
| @@ -28,11 +29,16 @@ public class BpmActivityBehaviorFactory extends DefaultActivityBehaviorFactory { | ||||
|  | ||||
|     @Override | ||||
|     public ParallelMultiInstanceBehavior createParallelMultiInstanceBehavior(Activity activity, | ||||
|                                                                              AbstractBpmnActivityBehavior innerActivityBehavior) { | ||||
|         return new BpmParallelMultiInstanceBehavior(activity, innerActivityBehavior) | ||||
|                                                                              AbstractBpmnActivityBehavior behavior) { | ||||
|         return new BpmParallelMultiInstanceBehavior(activity, behavior) | ||||
|                 .setTaskCandidateInvoker(taskCandidateInvoker); | ||||
|     } | ||||
|  | ||||
|     // TODO @ke:SequentialMultiInstanceBehavior 这个抽空也可以看看 | ||||
|     @Override | ||||
|     public SequentialMultiInstanceBehavior createSequentialMultiInstanceBehavior(Activity activity, | ||||
|                                                                                  AbstractBpmnActivityBehavior behavior) { | ||||
|         return new BpmSequentialMultiInstanceBehavior(activity, behavior) | ||||
|                 .setTaskCandidateInvoker(taskCandidateInvoker); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior; | ||||
| import cn.iocoder.yudao.framework.flowable.core.util.FlowableUtils; | ||||
| import cn.iocoder.yudao.module.bpm.framework.flowable.core.candidate.BpmTaskCandidateInvoker; | ||||
| import lombok.Setter; | ||||
| import lombok.extern.slf4j.Slf4j; | ||||
| import org.flowable.bpmn.model.Activity; | ||||
| import org.flowable.engine.delegate.DelegateExecution; | ||||
| import org.flowable.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior; | ||||
| @@ -17,12 +16,11 @@ import java.util.Set; | ||||
|  * 第二步,将【多个】任务候选人们,设置到 DelegateExecution 的 collectionVariable 变量中,以便 BpmUserTaskActivityBehavior 使用它 | ||||
|  * | ||||
|  * @author kemengkai | ||||
|  * @date 2022-04-21 16:57 | ||||
|  * @since 2022-04-21 16:57 | ||||
|  */ | ||||
| @Slf4j | ||||
| @Setter | ||||
| public class BpmParallelMultiInstanceBehavior extends ParallelMultiInstanceBehavior { | ||||
|  | ||||
|     @Setter | ||||
|     private BpmTaskCandidateInvoker taskCandidateInvoker; | ||||
|  | ||||
|     public BpmParallelMultiInstanceBehavior(Activity activity, | ||||
|   | ||||
| @@ -0,0 +1,50 @@ | ||||
| package cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.flowable.core.util.FlowableUtils; | ||||
| import cn.iocoder.yudao.module.bpm.framework.flowable.core.candidate.BpmTaskCandidateInvoker; | ||||
| import lombok.Setter; | ||||
| import org.flowable.bpmn.model.Activity; | ||||
| import org.flowable.engine.delegate.DelegateExecution; | ||||
| import org.flowable.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior; | ||||
| import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior; | ||||
|  | ||||
| import java.util.LinkedHashSet; | ||||
| import java.util.Set; | ||||
|  | ||||
| /** | ||||
|  * 自定义的【串行】的【多个】流程任务的 assignee 负责人的分配 | ||||
|  * | ||||
|  * 本质上,实现和 {@link BpmParallelMultiInstanceBehavior} 一样,只是继承的类不一样 | ||||
|  * | ||||
|  * @author 芋道源码 | ||||
|  */ | ||||
| @Setter | ||||
| public class BpmSequentialMultiInstanceBehavior extends SequentialMultiInstanceBehavior { | ||||
|  | ||||
|     private BpmTaskCandidateInvoker taskCandidateInvoker; | ||||
|  | ||||
|     public BpmSequentialMultiInstanceBehavior(Activity activity, AbstractBpmnActivityBehavior innerActivityBehavior) { | ||||
|         super(activity, innerActivityBehavior); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 逻辑和 {@link BpmParallelMultiInstanceBehavior#resolveNrOfInstances(DelegateExecution)} 类似 | ||||
|      * | ||||
|      * 差异的点:是在【第二步】的时候,需要返回 LinkedHashSet 集合!因为它需要有序! | ||||
|      */ | ||||
|     @Override | ||||
|     protected int resolveNrOfInstances(DelegateExecution execution) { | ||||
|         // 第一步,设置 collectionVariable 和 CollectionVariable | ||||
|         // 从  execution.getVariable() 读取所有任务处理人的 key | ||||
|         super.collectionExpression = null; // collectionExpression 和 collectionVariable 是互斥的 | ||||
|         super.collectionVariable = FlowableUtils.formatCollectionVariable(execution.getCurrentActivityId()); | ||||
|         // 从 execution.getVariable() 读取当前所有任务处理的人的 key | ||||
|         super.collectionElementVariable = FlowableUtils.formatCollectionElementVariable(execution.getCurrentActivityId()); | ||||
|  | ||||
|         // 第二步,获取任务的所有处理人 | ||||
|         Set<Long> assigneeUserIds = new LinkedHashSet<>(taskCandidateInvoker.calculateUsers(execution)); // 保证有序!!! | ||||
|         execution.setVariable(super.collectionVariable, assigneeUserIds); | ||||
|         return assigneeUserIds.size(); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -47,7 +47,8 @@ public class BpmUserTaskActivityBehavior extends UserTaskActivityBehavior { | ||||
|     } | ||||
|  | ||||
|     private Long calculateTaskCandidateUsers(DelegateExecution execution) { | ||||
|         // 情况一,如果是多实例的任务,例如说会签、或签等情况,则从 Variable 中获取。它的任务处理人在 BpmParallelMultiInstanceBehavior 中已经被分配了 | ||||
|         // 情况一,如果是多实例的任务,例如说会签、或签等情况,则从 Variable 中获取。 | ||||
|         // 顺序审批可见 BpmSequentialMultiInstanceBehavior,并发审批可见 BpmSequentialMultiInstanceBehavior | ||||
|         if (super.multiInstanceActivityBehavior != null) { | ||||
|             return execution.getVariable(super.multiInstanceActivityBehavior.getCollectionElementVariable(), Long.class); | ||||
|         } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV