flowable 實現多實例-會簽-動態配置人員 參考demo


會簽 即多人執行當前任務 設置判斷數 通過 例如:設置了是半數通過即可通過當前節點  如果當前是4人那就是2人即通過  如果是6人那就是三人即通過  如果是5人 即三人通過  看各位的判斷值是如何書寫  這個值是根據各位需求改變的
 

以下是xml

 <process id="living" name="MoreLiving" isExecutable="true">
    <documentation>測試flowable多實例</documentation>
    <startEvent id="Start"></startEvent>
    <userTask id="UserTask1" name="U1" flowable:assignee="${assignee}">
            <multiInstanceLoopCharacteristics isSequential="false" flowable:collection="assigneeList" flowable:elementVariable="assignee">
        <loopCardinality>4</loopCardinality>
        <completionCondition>${nrOfCompletedInstances/nrOfInstances >= 0.50}</completionCondition>
      </multiInstanceLoopCharacteristics>
    </userTask>
    <userTask id="UserTask2" name="U2"></userTask>
    <endEvent id="End"></endEvent>
    <sequenceFlow id="U2-E" sourceRef="UserTask2" targetRef="End"></sequenceFlow>
    <sequenceFlow id="S-U1" sourceRef="Start" targetRef="UserTask1"></sequenceFlow>
    <sequenceFlow id="U1-U2" sourceRef="UserTask1" targetRef="UserTask2"></sequenceFlow>
  </process>
<completionCondition>${nrOfCompletedInstances/nrOfInstances >= 0.50}</completionCondition>
>=0.50  即通過數是>=人員數的50%

flowable:collection="assigneeList"      ${assigneeList}即取的人員列表名稱

以下是java代碼

        //主體流程的開始
        //創建數據庫鏈接信息
        ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration()
        .setJdbcUrl("jdbc:mysql://127.0.0.1:3306/自庫名?characterEncoding=UTF-8")
        .setJdbcUsername("賬號")
        .setJdbcPassword("密碼")
        .setJdbcDriver("com.mysql.jdbc.Driver")
        .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE);
        // 通過數據庫鏈接信息         創建Flowable流程引擎 Create Flowable process engine
        ProcessEngine processEngine = cfg.buildProcessEngine();
        // 獲取Flowable服務 Get Flowable repositoryService
        RepositoryService repositoryService = processEngine.getRepositoryService();
        // 獲取Flowable服務 Get Flowable runtimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();
        // 獲取taskService對象 Get the first task
        TaskService taskService = processEngine.getTaskService();
        //獲取fromserver對象  操作from表單的東西
        FormService formService = processEngine.getFormService();
        
        
        Deployment deploy = repositoryService.createDeployment().addClasspathResource("/MoreLiving.bpmn20.xml").deploy();
        System.out.println(deploy.getId());
        
        HashMap<String, Object> map = new HashMap<>();
        //定義的人員列表4人
        String[] v = { "shareniu1", "shareniu2", "shareniu3", "shareniu4" };
        map.put("per", "bbb");
        map.put("money", "1111");
        map.put("assigneeList", Arrays.asList(v));
        ProcessInstance pi = runtimeService.startProcessInstanceByKey("living",map);
        
        List<Task> list = taskService.createTaskQuery().processInstanceId(pi.getId()).list();
        System.out.println(list.size());
        int  i=0;
        
        for (Task task : list) {
            i=i+1;
            System.out.println("==========================所有節點name is =  "+task.getName());
            System.out.println("==========================所有節點id is =  "+task.getId());
            System.out.println("============ i ="+i);
            //變相判斷已經二人提交 之后人員不提交
            if (i<3) {
                System.out.println("================== 提交 節點 id is="+task.getId());
                taskService.complete(task.getId());
            }
        }
        //判斷值為 50% 所以提交人達到2人 會簽節點即可通過
        Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();
        System.out.println("====================================================================================");
        //驗證是否已通過
        System.out.println("===================task id is="+task.getId());
        System.out.println("===================task name is="+task.getName());
 

我的判斷值為 50% 所以提交人達到2人 會簽節點即可通過
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM