1. 流程图
2. 部署流程定义+启动流程实例
// 部署流程定义,启动流程实例
@Test
public void testParallelGateWay() throws Excepiton {
// 1 发布流程
InputStream inputStreamBpmn = this.getClass().getResourceAsStream("paralleProcess.bpmn");
InputStream inputStreamPng = this.getClass().getResourceAsStream("parallelProcess.png");
processEngine.getRepositoryService()//
.createDeployment()//
.addInputStream("parallelProcess.bpmn", inputStreamBpmn)//
.addInputStream("parallelProcess.png", inputStramPng)//
.deploy();
// 2 启动流程
ProcessInstance pi = processEngine.getRuntimeService()//
.startProcessInstanceByKey("parallelProcess");
System.out.println("pid:"+pi.getId());
}
3. 查询我的个人任务
// 查询我的个人任务
@Test
public void findMyTaskLIst() {
String userId = "商家";
List<Task> list = processEngine.getTaskService()//
.createTaskQuery()//
.taskAssignee(userId)//指定个人任务查询
.list();
for(Task task : list){
System.out.println("id="+task.getId());
System.out.println("name="+task.getName());
System.out.println("assinee="+task.getAssignee());
System.out.println("assinee="+task.getCreateTime());
system.out.println("executionId="+task.getExecutionId());
}
}
4. 完成我的个人任务
// 完成任务
@Test
public void completeTask(){
String taskId = "2502";
processEngine.getTaskService()//
.complete(taskId);//
System.out.println("完成任务");
}
说明:
1) 一个流程中流程实例只有1个,执行对象有多个
2) 并行网关的功能是基于进入和外出的顺序流的:
分支(fork): 并行后的所有外出顺序流,为每个顺序流都创建一个并发分支。
汇聚(join): 所有到达并行网关,在此等待的进入分支, 直到所有进入顺序流的分支都到达以后, 流程就会通过汇聚网关。
3) 并行网关的进入和外出都是使用相同节点标识
4) 如果同一个并行网关有多个进入和多个外出顺序流, 它就同时具有分支和汇聚功能。 这时,网关会先汇聚所有进入的顺序流,然后再切分成多个并行分支。
5) 并行网关不会解析条件。 即使顺序流中定义了条件,也会被忽略。
6) 并行网关不需要是“平衡的”(比如, 对应并行网关的进入和外出节点数目不一定相等)。如图中标示是合法的: