排他网关用于对流程中的决策建模。当执行到这个网关时,会按照所有出口顺序流定义的顺序对它们进行计算。选择第一个条件为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
list = taskService.createTaskQuery().taskAssignee("zhangsan").list(); - // 绑定请假的天数
- Map
map = new HashMap<>(); - map.put("day", 2);
- // 根据id进行审批
- for (Task task : list) {
- taskService.complete(task.getId(), map);
- }
- }
查看任务进度,因为天数小于3天所以任务进度到达了组长审批。

依次使用lisi、zhaoliu进行审批,任务完成。