boge-03-其他

会签 #

  • 流程图绘制 ly-20241212142115466

    • 注意上面几个参数

      • 多实例类型用来判断串行并行
      • 基数(有几个用户处理)
      • 元素变量
      • 集合(集合变量)
      • 完成条件–这里填的是 ${nrOfCompletedInstances > 1 }
    • 在任务监听器 ly-20241212142115672

      package org.flowable.listener;
      
      import org.flowable.engine.ProcessEngine;
      import org.flowable.engine.ProcessEngines;
      import org.flowable.engine.TaskService;
      import org.flowable.engine.delegate.TaskListener;
      import org.flowable.task.api.Task;
      import org.flowable.task.service.delegate.DelegateTask;
      
      public class MultiInstanceTaskListener implements TaskListener {
      
          @Override
          public void notify(DelegateTask delegateTask) {
              System.out.println("处理aaaa");
              if(delegateTask.getEventName().equals("create")) {
                  System.out.println("任务id" + delegateTask.getId());
                  System.out.println("哪些人需要会签" + delegateTask.getVariable("persons"));
                  System.out.println("任务处理人" + delegateTask.getVariable("person"));
                  ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
                  TaskService taskService = engine.getTaskService();
                  Task task = taskService.createTaskQuery().taskId(delegateTask.getId()).singleResult();
                  task.setAssignee(delegateTask.getVariable("person").toString());
                  taskService.saveTask(task);
              }
          }
      }
      
  • xml

    <?xml version="1.0" encoding="UTF-8"?>
    <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef" exporter="Flowable Open Source Modeler" exporterVersion="6.7.2">
      <process id="join-key" name="会签测试1" isExecutable="true">
        <documentation>join-desc</documentation>
        <startEvent id="startEvent1" name="申请人" flowable:formFieldValidation="true"></startEvent>
        <userTask id="sid-477F728E-2F63-43BF-A278-76FBCF58B475" name="会签人员" flowable:formFieldValidation="true">
          <extensionElements>
            <flowable:taskListener event="create" class="org.flowable.listener.MultiInstanceTaskListener"></flowable:taskListener>
          </extensionElements>
          <multiInstanceLoopCharacteristics isSequential="false" flowable:collection="persons" flowable:elementVariable="person">
            <extensionElements></extensionElements>
            <loopCardinality>3</loopCardinality>
            <completionCondition>${nrOfCompletedInstances > 1 }</completionCondition>
          </multiInstanceLoopCharacteristics>
        </userTask>
        <sequenceFlow id="sid-B5F81E26-E53B-4D10-8328-C5B3C35E0DD5" sourceRef="startEvent1" targetRef="sid-477F728E-2F63-43BF-A278-76FBCF58B475"></sequenceFlow>
        <endEvent id="sid-3448D902-AE89-467D-8945-805BDEDE7BCA"></endEvent>
        <sequenceFlow id="sid-598B2F86-A13B-48BE-88AF-6B61CDA24EA7" sourceRef="sid-477F728E-2F63-43BF-A278-76FBCF58B475" targetRef="sid-3448D902-AE89-467D-8945-805BDEDE7BCA"></sequenceFlow>
      </process>
      <bpmndi:BPMNDiagram id="BPMNDiagram_join-key">
        <bpmndi:BPMNPlane bpmnElement="join-key" id="BPMNPlane_join-key">
          <bpmndi:BPMNShape bpmnElement="startEvent1" id="BPMNShape_startEvent1">
            <omgdc:Bounds height="30.0" width="30.0" x="105.0" y="100.0"></omgdc:Bounds>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNShape bpmnElement="sid-477F728E-2F63-43BF-A278-76FBCF58B475" id="BPMNShape_sid-477F728E-2F63-43BF-A278-76FBCF58B475">
            <omgdc:Bounds height="80.0" width="100.0" x="330.0" y="60.0"></omgdc:Bounds>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNShape bpmnElement="sid-3448D902-AE89-467D-8945-805BDEDE7BCA" id="BPMNShape_sid-3448D902-AE89-467D-8945-805BDEDE7BCA">
            <omgdc:Bounds height="28.0" width="28.0" x="600.0" y="106.0"></omgdc:Bounds>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNEdge bpmnElement="sid-B5F81E26-E53B-4D10-8328-C5B3C35E0DD5" id="BPMNEdge_sid-B5F81E26-E53B-4D10-8328-C5B3C35E0DD5" flowable:sourceDockerX="15.0" flowable:sourceDockerY="15.0" flowable:targetDockerX="50.0" flowable:targetDockerY="40.0">
            <omgdi:waypoint x="134.94999855629513" y="115.0"></omgdi:waypoint>
            <omgdi:waypoint x="232.5" y="115.0"></omgdi:waypoint>
            <omgdi:waypoint x="232.5" y="100.0"></omgdi:waypoint>
            <omgdi:waypoint x="330.0" y="100.0"></omgdi:waypoint>
          </bpmndi:BPMNEdge>
          <bpmndi:BPMNEdge bpmnElement="sid-598B2F86-A13B-48BE-88AF-6B61CDA24EA7" id="BPMNEdge_sid-598B2F86-A13B-48BE-88AF-6B61CDA24EA7" flowable:sourceDockerX="50.0" flowable:sourceDockerY="40.0" flowable:targetDockerX="14.0" flowable:targetDockerY="14.0">
            <omgdi:waypoint x="429.95000000000005" y="100.0"></omgdi:waypoint>
            <omgdi:waypoint x="515.0" y="100.0"></omgdi:waypoint>
            <omgdi:waypoint x="515.0" y="120.0"></omgdi:waypoint>
            <omgdi:waypoint x="600.0" y="120.0"></omgdi:waypoint>
          </bpmndi:BPMNEdge>
        </bpmndi:BPMNPlane>
      </bpmndi:BPMNDiagram>
    </definitions>
    
  • 将流程部署

    
        @Test
        public void deploy() {
            deleteAll();
            ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
            RepositoryService repositoryService = engine.getRepositoryService();
            Deployment deploy = repositoryService.createDeployment()
                    .addClasspathResource("会签测试1.bpmn20.xml")
                    .deploy();
            System.out.println("部署成功:" + deploy.getId());
        }
    
  • 运行流程

    
        @Test
        public void run(){
            ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
            RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();
            HashMap<String,Object> map=new HashMap<>();
            ArrayList<String> persons=new ArrayList<>();
            persons.add("张三");
            persons.add("李四");
            persons.add("王五");
    
            map.put("persons",persons);
            ProcessInstance processInstance = runtimeService.startProcessInstanceById("join-key:1:17504",map);
        }
    
  • 此时数据库会有三个任务 ly-20241212142115764

  • 完成第一个任务

    
        @Test
        public void completeTask(){
            //15020
            ProcessEngine engine=ProcessEngines.getDefaultProcessEngine();
            TaskService taskService = engine.getTaskService();
            taskService.complete("20020");
        }
    
  • 再完成一个任务后,流程会直接结束

    
        @Test
        public void completeTask(){
            //15020
            ProcessEngine engine=ProcessEngines.getDefaultProcessEngine();
            TaskService taskService = engine.getTaskService();
            taskService.complete("20028");
        }
    
  • 流程结束