一、绘制流程图
排他网关用于对流程中的决策建模。当执行到这个网关时,会按照所有出口顺序流定义的顺序对它们进行计算。选择第一个条件为true的顺序流继续流程。例如员工请假时,小于等于3天由组长审批,大于3天由总监审批。流程案例:
绘制如下流程图,图中的X就是排他网关。
点击排他网关上面的线,指定条件天数小于等于3。
下面的线条件天数大于3天。
给员工申请一个固定值(zhangsan),组长审批 = lisi,总监审批 = wangwu,人事审批 = zhaoliu。这样绘制完成。
导出并复制到项目中
二、部署
@Test
void contextLoads() {
DeploymentBuilder deployment = repositoryService.createDeployment();
deployment.addClasspathResource("process01/HolidayDemo3.bpmn20.xml");
deployment.name("排他网关案例");
Deployment deploy = deployment.deploy();
System.out.println("deploy.getId() = " + deploy.getId());
}
三、启动
/**
* 发起流程
*/
@Test
public void startProcess() {
String id = "HolidayDemo3:1:0138306c-2b8c-11ef-903b-644ed7087863";
// 根据流程定义ID启动流程
ProcessInstance processInstance = runtimeService.startProcessInstanceById(id);
}
使用张三进行申请并指定请假的天数。
/**
* 根据用户查询待办信息
*/
@Test
public void findFlow() {
List<Task> list = taskService.createTaskQuery().taskAssignee("zhangsan").list();
// 绑定请假的天数
Map<String, Object> map = new HashMap<>();
map.put("day", 2);
// 根据id进行审批
for (Task task : list) {
taskService.complete(task.getId(), map);
}
}
查看任务进度,因为天数小于3天所以任务进度到达了组长审批。
依次使用lisi、zhaoliu进行审批,任务完成。