会签多任务xml
<?xml version="1.0" encoding="UTF-8"?>
<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:activiti="http://activiti.org/bpmn" id="sample-diagram" targetNamespace="http://activiti.org/bpmn" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
<bpmn2:process id="Process_1" name="多实例任务" isExecutable="true">
<bpmn2:startEvent id="StartEvent_1">
<bpmn2:extensionElements>
<activiti:executionListener class="com.torey.activiti7_workflow.listener.MultInstancesStarListener" event="start" />
</bpmn2:extensionElements>
<bpmn2:outgoing>Flow_0s9d98i</bpmn2:outgoing>
</bpmn2:startEvent>
<bpmn2:userTask id="Activity_13mbf1a" name="会签" activiti:assignee="${assignee}">
<bpmn2:incoming>Flow_0s9d98i</bpmn2:incoming>
<bpmn2:outgoing>Flow_1hesbtg</bpmn2:outgoing>
<bpmn2:multiInstanceLoopCharacteristics activiti:collection="assigneeList" activiti:elementVariable="assignee">
<bpmn2:loopCardinality xsi:type="bpmn2:tFormalExpression">5</bpmn2:loopCardinality>
<bpmn2:completionCondition xsi:type="bpmn2:tFormalExpression">${nrOfCompletedInstances==2}</bpmn2:completionCondition>
</bpmn2:multiInstanceLoopCharacteristics>
</bpmn2:userTask>
<bpmn2:sequenceFlow id="Flow_0s9d98i" sourceRef="StartEvent_1" targetRef="Activity_13mbf1a" />
<bpmn2:endEvent id="Event_1dsqfo6">
<bpmn2:incoming>Flow_1hesbtg</bpmn2:incoming>
</bpmn2:endEvent>
<bpmn2:sequenceFlow id="Flow_1hesbtg" sourceRef="Activity_13mbf1a" targetRef="Event_1dsqfo6" />
</bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1">
<bpmndi:BPMNEdge id="Flow_1hesbtg_di" bpmnElement="Flow_1hesbtg">
<di:waypoint x="600" y="258" />
<di:waypoint x="652" y="258" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0s9d98i_di" bpmnElement="Flow_0s9d98i">
<di:waypoint x="448" y="258" />
<di:waypoint x="500" y="258" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="412" y="240" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_13mbf1a_di" bpmnElement="Activity_13mbf1a">
<dc:Bounds x="500" y="218" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_1dsqfo6_di" bpmnElement="Event_1dsqfo6">
<dc:Bounds x="652" y="240" width="36" height="36" />
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn2:definitions>
package com.torey.activiti7_workflow.listener;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.ExecutionListener;
import java.util.ArrayList;
/**
* 多实例任务的开始监听
*/
public class MultInstancesStarListener implements ExecutionListener {
@Override
public void notify(DelegateExecution delegateExecution) {
System.out.println("多实例任务的开始监听");
ArrayList<String> assigneeList=new ArrayList<>();
assigneeList.add("user1");
assigneeList.add("user2");
assigneeList.add("user3");
assigneeList.add("user4");
assigneeList.add("user5");
delegateExecution.setVariable("assigneeList",assigneeList);
}
}
/**
* 当流程实例创建了之后,就会有任务节点
* 所有任务查询,一般管理员用
*/
@Test
public void getTask(){
List<Task> list = taskService.createTaskQuery().list();
for (Task task : list) {
System.out.println(":"+task.getId());
System.out.println("taskName:"+task.getName());
System.out.println("执行人:"+task.getAssignee());
}
}
/**
* 执行任务
*/
@Test
public void completeTask(){
String assignee="user5";
List<Task> taskList = taskService.createTaskQuery()
.taskAssignee(assignee).list();
if (null==taskList ||taskList.size()==0) {
System.out.println("不存在该执行人" + assignee);
return;
}
System.out.println(assignee+"的任务有"+taskList.size()+"个");
for (Task task : taskList) {
taskService.complete(task.getId());
}
taskList = taskService.createTaskQuery()
.taskAssignee(assignee).list();
System.out.println(assignee+"的任务执行完成,任务有"+taskList.size()+"个");
}