设计并行网关:
张三申请:
查询任务:
刘经理和王总监都收到了任务,说明并行网关设计成功。
刘经理审批:
查询任务:可以看到还有王总监没有审批
王总监审批:
查询任务:还有周总经理没有审批
周总经理审批:
查询任务:周总经理审批完了流程结束
参考代码:
package com.nanjing;
import com.nanjing.pojo.Evection;
import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ActivitiGatewayParallel {
/**
* 部署流程定义
*/
@Test
public void testDeployment(){
// 1、创建ProcessEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 2、得到RepositoryService实例
RepositoryService repositoryService = processEngine.getRepositoryService();
// 3、使用RepositoryService进行部署
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("leave14.bpmn20.xml") // 添加bpmn资源
// .addClasspathResource("bpmn/evection.png") // 添加png资源
.name("出差申请流程-并行网关")
.deploy();
// 4、输出部署信息
System.out.println("流程部署id:" + deployment.getId());
System.out.println("流程部署名称:" + deployment.getName());
}
/**
* 启动流程实例,设置流程变量的值
*/
@Test
public void startProcess(){
// 获取流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 获取RunTimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
// 流程定义key
String key = "myEvection14";
// 创建变量集合
Map<String, Object> map = new HashMap<>();
// 创建出差pojo对象
Evection evection = new Evection();
// 设置出差天数
evection.setNum(4d);
// 定义流程变量,把出差pojo对象放入map
map.put("evection",evection);
map.put("assignee0","张三");
map.put("assignee1","刘经理");
map.put("assignee11","王总监");
map.put("assignee2","周总经理");
// 启动流程实例,并设置流程变量的值(把map传入)
ProcessInstance processInstance = runtimeService
.startProcessInstanceByKey(key, map);
// 输出
System.out.println("流程实例名称="+processInstance.getName());
System.out.println("流程定义id=="+processInstance.getProcessDefinitionId());
}
/**
* 启动流程实例
*/
@Test
public void testStartProcess(){
// 1、创建ProcessEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 2、获取RunTimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
// 3、根据流程定义Id启动流程
ProcessInstance processInstance = runtimeService
.startProcessInstanceByKey("myEvection14");
// 输出内容
System.out.println("流程定义id:" + processInstance.getProcessDefinitionId());
System.out.println("流程实例id:" + processInstance.getId());
System.out.println("当前活动Id:" + processInstance.getActivityId());
}
@Test
public void completTask(){
// 流程定义的Key
String key = "myEvection14";
// 任务负责人
String assingee = "周总经理";
// 获取流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 获取taskservice
TaskService taskService = processEngine.getTaskService();
// 查询任务
Task task = taskService.createTaskQuery()
.processDefinitionKey(key)
.taskAssignee(assingee)
.singleResult();
if(task != null){
// 根据任务id来 完成任务
taskService.complete(task.getId());
}
}
@Test
public void queryTask(){
// 流程定义的Key
String key = "myEvection14";
// 任务负责人
//String assingee = "周总经理";
// 获取流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 获取taskservice
TaskService taskService = processEngine.getTaskService();
// 查询任务
final List<Task> tasks = taskService.createTaskQuery()
.processDefinitionKey(key)
// .taskAssignee(assingee)
.list();
for(Task task:tasks){
// 根据任务id来 完成任务
System.out.println(task.getId());
System.out.println(task.getName());
System.out.println(task.getAssignee());
}
}
}