image.png
    会签多任务xml

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <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">
    3. <bpmn2:process id="Process_1" name="多实例任务" isExecutable="true">
    4. <bpmn2:startEvent id="StartEvent_1">
    5. <bpmn2:extensionElements>
    6. <activiti:executionListener class="com.torey.activiti7_workflow.listener.MultInstancesStarListener" event="start" />
    7. </bpmn2:extensionElements>
    8. <bpmn2:outgoing>Flow_0s9d98i</bpmn2:outgoing>
    9. </bpmn2:startEvent>
    10. <bpmn2:userTask id="Activity_13mbf1a" name="会签" activiti:assignee="${assignee}">
    11. <bpmn2:incoming>Flow_0s9d98i</bpmn2:incoming>
    12. <bpmn2:outgoing>Flow_1hesbtg</bpmn2:outgoing>
    13. <bpmn2:multiInstanceLoopCharacteristics activiti:collection="assigneeList" activiti:elementVariable="assignee">
    14. <bpmn2:loopCardinality xsi:type="bpmn2:tFormalExpression">5</bpmn2:loopCardinality>
    15. <bpmn2:completionCondition xsi:type="bpmn2:tFormalExpression">${nrOfCompletedInstances==2}</bpmn2:completionCondition>
    16. </bpmn2:multiInstanceLoopCharacteristics>
    17. </bpmn2:userTask>
    18. <bpmn2:sequenceFlow id="Flow_0s9d98i" sourceRef="StartEvent_1" targetRef="Activity_13mbf1a" />
    19. <bpmn2:endEvent id="Event_1dsqfo6">
    20. <bpmn2:incoming>Flow_1hesbtg</bpmn2:incoming>
    21. </bpmn2:endEvent>
    22. <bpmn2:sequenceFlow id="Flow_1hesbtg" sourceRef="Activity_13mbf1a" targetRef="Event_1dsqfo6" />
    23. </bpmn2:process>
    24. <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    25. <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1">
    26. <bpmndi:BPMNEdge id="Flow_1hesbtg_di" bpmnElement="Flow_1hesbtg">
    27. <di:waypoint x="600" y="258" />
    28. <di:waypoint x="652" y="258" />
    29. </bpmndi:BPMNEdge>
    30. <bpmndi:BPMNEdge id="Flow_0s9d98i_di" bpmnElement="Flow_0s9d98i">
    31. <di:waypoint x="448" y="258" />
    32. <di:waypoint x="500" y="258" />
    33. </bpmndi:BPMNEdge>
    34. <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
    35. <dc:Bounds x="412" y="240" width="36" height="36" />
    36. </bpmndi:BPMNShape>
    37. <bpmndi:BPMNShape id="Activity_13mbf1a_di" bpmnElement="Activity_13mbf1a">
    38. <dc:Bounds x="500" y="218" width="100" height="80" />
    39. </bpmndi:BPMNShape>
    40. <bpmndi:BPMNShape id="Event_1dsqfo6_di" bpmnElement="Event_1dsqfo6">
    41. <dc:Bounds x="652" y="240" width="36" height="36" />
    42. </bpmndi:BPMNShape>
    43. </bpmndi:BPMNPlane>
    44. </bpmndi:BPMNDiagram>
    45. </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()+"个");
    
        }