网关主要控制 Activiti 流程分支的流向。
排他网关 ExclusiveGateway
排它网关用于对流程中的决策进行建模。当流程执行到达此网关时,所有分支都将按定义顺序进行判断,选择判断条件结果为真(true)的分支继续处理。
注意:排它网关时只选择一个条件值为 true 的分支进行处理。如果多个分支的条件计算结果都为true,排他网关会选择id值较小的一条分支去执行。
简而言之,就是传递流程变量,排他网关根据流程变量决定该走哪条线路
绘制流程图如下:
duration > 3 走总经理审批,否则走行政审批
启动流程实例
@Autowired
RuntimeService runtimeService;
@Test
public void startProcess() {
//流程变量
Map<String, Object> varables = new HashMap<>();
varables.put("duration", 2);
runtimeService.startProcessInstanceByKey("testExclusiveGateway", varables);
}
查询待办任务
@Autowired
TaskService taskService;
@Test
public void findWaitTask() {
List<Task> list = taskService.createTaskQuery()
.taskAssignee("wsy")
.processDefinitionKey("testExclusiveGateway")
.list();
for (Task task : list) {
System.out.println("任务id:" + task.getId());
System.out.println("任务名称:" + task.getName());
System.out.println("办理人:" + task.getAssignee());
}
}
流程处理
@Autowired
TaskService taskService;
@Test
public void complete() {
String taskId = "ca89e7f2-be2b-11ed-84bd-38f3abe10e1d";
taskService.complete(taskId);
}
启动时不指定 duration 请假天数流程变量,在完成直接领导审批时指定流程变量
@Autowired
RuntimeService runtimeService;
@Test
public void startProcess() {
//启动时不指定 duration 请假天数流程变量,在完成直接领导审批时指定流程变量
runtimeService.startProcessInstanceByKey("testExclusiveGateway");
}
流程处理
@Autowired
TaskService taskService;
@Test
public void complete() {
//流程变量
Map<String, Object> varables = new HashMap<>();
varables.put("duration", 5);
taskService.complete(taskId, varables);
}
流程启动时若不指定流程变量 duration 救会报错找不到 duration
Unknown property used in expression: ${duration>3}
并行网关 ParallelGateway
并行网关用于对流程中的并发性建模,在流程模型中引入并发性的最简单的网关是并行网关,将流程分成多条分支,然后再多条分支汇聚到一起。
-
分支(fork):
并行所有外出顺序流,为每个顺序流都创建一个并发分支。
-
汇聚(join):
所有到达并行网关,在此等待的进入分支,只有当所有进入顺序流的分支都到达以后, 流程就会通过汇聚网关。
注意:分支 与 汇聚成对出现 。并行网关不会解析条件,即使顺序流中定义了条件,也会被忽略。并行网关在业务应用中常用于会签任务,会签任务即多个参与者共同办理的任务。
绘制流程如图模型如下:
测试代码如上。。。
包含网关 InclusiveGateway
包含网关可以看做是排他网关和并行网关的结合体。和排他网关一样,你可以在连线上定义条件表达式,定义的表达式会被包含网关解析。但是包含网关主要区别是也可以不指定表达式,同时选择多条分支,这和并行网关是一样的。
简而言之:
-
排他网关:解析条件,流向条件为 true的节点,或者报错(没有满足条件的)
-
并行网关:不解析条件, 不报错, 分支节点都执行。
-
包含网关:有条件就解析条件,条件成立就流向,不成立就不流向,全都不成立报错;没有条件直接流向。
流程绘制如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通