並行網關(ParallelGateWay)
一、流程圖
圖一 並行網關網購流程圖
在這裏,我們模擬網上購物流程,四個用戶任務,分別是付款、發貨、收款、收貨,其中付款和收貨的辦理人是買家,發貨和收款的辦理人是賣家。
二、部署和啓動流程
/**部署流程定義+啓動流程實例*/ @Test public void deployementAndStartProcess(){ InputStream inputStreamBpmn = this.getClass().getResourceAsStream("parallelGateWay.bpmn"); InputStream inputStreampng = this.getClass().getResourceAsStream("parallelGateWay.png"); //部署流程定義 Deployment deployment = processEngine.getRepositoryService()// .createDeployment()//創建部署對象 .addInputStream("parallelGateWay.bpmn", inputStreamBpmn)//部署加載資源文件 .addInputStream("parallelGateWay.png", inputStreampng)// .name("並行網關演示") .deploy(); System.out.println("部署ID:"+deployment.getId()); //啓動流程實例 ProcessInstance pi = processEngine.getRuntimeService()// .startProcessInstanceByKey("parallelGateWay");//使用流程定義的key的最新版本啓動流程 System.out.println("流程實例ID:"+pi.getId()); System.out.println("流程定義的ID:"+pi.getProcessDefinitionId()); }
對應數據庫表:
1.act_ru_execution
我們可以看到,部署和啓動流程後,在act_ru_execution表中對應三條記錄,1個流程實例,2個執行對象。
2.act_ru_task表
在act_ru_task表中,有兩條正在執行的任務,分別是付款和發貨。
三、查詢個人任務
/**查詢我的個人任務*/ @Test public void findPersonalTaskList(){ //任務辦理人 String assignee = "買家";//或商家 List<Task> list = processEngine.getTaskService()// .createTaskQuery()// .taskAssignee(assignee)//個人任務的查詢 .list(); if(list!=null && list.size()>0){ for(Task task:list){ System.out.println("任務ID:"+task.getId()); System.out.println("任務的辦理人:"+task.getAssignee()); System.out.println("任務名稱:"+task.getName()); System.out.println("任務的創建時間:"+task.getCreateTime()); System.out.println("流程實例ID:"+task.getProcessInstanceId()); System.out.println("#######################################"); } } }
我們通過設置的辦理人的名字,買家和商家,可以查詢到他們對應的當前任務的信息:
1.買家
2.商家
四、完成任務
/**完成任務*/ @Test public void completeTask(){ //任務ID String taskId = "2611"; processEngine.getTaskService()// .complete(taskId); System.out.println("完成任務:"+taskId); }
執行結果如下:
1.完成【付款】任務,第一個流程實例自動流轉到下個任務:收款
2.完成【發貨】任務,第二個流程實例自動流轉到下一個任務:收貨
之後,再分別完成收款和收貨兩個任務,流程才能夠結束。
總結:
一個流程中流程實例只有1個,執行對象有多個;並行網關的功能是基於進入和外出的順序流的:
分支(fork):並行後的所有外出順序流,爲每個順序流都創建一個併發分支。
匯聚(join):所有到達並行網關,在此等待的進入分支,直到所有進入順序流的分支都到達以後,流程就會通
過匯聚網關。