activity5工作流(六)

並行網關(ParallelGateWay)

一、流程圖

img

​ 圖一 並行網關網購流程圖

​ 在這裏,我們模擬網上購物流程,四個用戶任務,分別是付款、發貨、收款、收貨,其中付款和收貨的辦理人是買家,發貨和收款的辦理人是賣家。

二、部署和啓動流程

/**部署流程定義+啓動流程實例*/  
@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

img

我們可以看到,部署和啓動流程後,在act_ru_execution表中對應三條記錄,1個流程實例,2個執行對象。

​ 2.act_ru_task表

img

​ 在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.買家

img

​ 2.商家

img

四、完成任務

/**完成任務*/  
@Test  
public void completeTask(){  
    //任務ID  
    String taskId = "2611";  
    processEngine.getTaskService()//  
                    .complete(taskId);  
    System.out.println("完成任務:"+taskId);  
} 

​ 執行結果如下:

​ 1.完成【付款】任務,第一個流程實例自動流轉到下個任務:收款

img

​ 2.完成【發貨】任務,第二個流程實例自動流轉到下一個任務:收貨

img

​ 之後,再分別完成收款和收貨兩個任務,流程才能夠結束。

​ 總結:

​ 一個流程中流程實例只有1個,執行對象有多個;並行網關的功能是基於進入和外出的順序流的:

​ 分支(fork):並行後的所有外出順序流,爲每個順序流都創建一個併發分支。

​ 匯聚(join):所有到達並行網關,在此等待的進入分支,直到所有進入順序流的分支都到達以後,流程就會通

過匯聚網關。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章