全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<网关篇>

Posted DT辰白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<网关篇>相关的知识,希望对你有一定的参考价值。


前言

上一篇我们说了流程的UEL表达式,这篇我们来学习网关,网关能够干什么呢?它能够控制整个流程的执行顺序,具体什么意思,比如:张三发起了请假申请,公司有规定,>=5天的,需要公司董事长审批,否则只需要部门经理审批即可,整个请假申请流程就被划分成了两条线,通过天数来判断要走哪条流程线,这里的请假天数,即是我们的流程变量。


一、网关概念

这里我引用官方文档说明,不会误人子弟。

网关用于控制执行流程(或如 BPMN 2.0 所描述的,执行令牌)。网关能够使用或生成令牌。
网关以图形方式显示为菱形,里面有一个图标。图标显示网关的类型。

在这里插入图片描述
网关的类型有好几种,下面我们将来操练每种类型的使用方式,先看看各个网关定义英文名称,这里我以STS当中安装了bpmn流程设计器为例。
在这里插入图片描述

二、网关类型

1.排它网关(独占网关)

核心:按照设置的条件流程变量进行执行,满足其一即可。

1.部署流程

首先我们要部署包含网关的流程实例,先用STS画好流程图,这些都是前提,不再赘述,关于部署流程,没什么好说的,前面的几篇文章都说的很仔细。

1.1 经理审批(李四)

在这里插入图片描述

1.2 董事长审批(王五)

在这里插入图片描述

1.3 部署流程代码

@PostMapping("deployment")
public Map<String, Object> deployment() { 
	Deployment deployment = repositoryService.createDeployment()
			.name("部署请假申请流程")
			.addClasspathResource("processes/MyFlowGateway.bpmn")
			.addClasspathResource("processes/MyFlowGateway.png")
			.deploy();
	Map<String, Object> map = new HashMap<>();
	map.put("msg", "->>>请假申请部署成功!");
	map.put("部署流程ID:", deployment.getId());
	map.put("部署流程名称:", deployment.getName());
	map.put("部署时间:", deployment.getDeploymentTime());
	return map;
}

2.启动流程

@PostMapping("startProcess")
public Map<String, Object> startProcess(String deploymentId) {
	//获取流程定义(根据部署流程ID查询act_re_procdef表信息)
	ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deploymentId).singleResult();
	//根据流程定义key来启动流程定义,返回流程实例
	ProcessInstance pi = runtimeService.startProcessInstanceByKey(processDefinition.getKey());
	Map<String, Object> map = new HashMap<>();
	map.put("流程实例ID: ", pi.getId());
	map.put("流程定义ID: ",pi.getProcessDefinitionId());
	return map;
}

3.执行任务

name参数:执行任务负责人
day参数:请假天数流程变量

@PostMapping("startTask")
public Map<String, Object> startTask(String name, String day) {
	//我的待办任务
	Task task = taskService.createTaskQuery()
			.taskAssignee(name)
			.singleResult();
	//我的任务列表的展示
	Map<String, Object> map = new HashMap<>();
	map.put("流程实例ID:", task.getProcessInstanceId());
	map.put("任务ID:", task.getId());
	map.put("任务负责人:", task.getAssignee());
	map.put("任务名称:", task.getName());
	map.put("msg", name + "->>>提交了任务!");

	//网关:设置流程变量day(请假天数)
	Map<String, Object> variables = new HashMap<String, Object>(); 
	if(StringUtils.isNoneBlank(day)) {
		variables.put("day", day);
	}else {
		variables.put("day", null);
	}
	//在这里我们可以对任务添加评论
	taskService.addComment(task.getId(), task.getProcessInstanceId(), "添加任务评论..."); 
	//执行审批流程
	taskService.complete(task.getId(),variables);
	
	map.put("result1", name + "->>>的审批结束!");
	//查询下一个任务点
	map.put("result2", name + "->>>前往下一个任务节点!");
	List<Task> taskList = taskService.createTaskQuery().list();
	if(!taskList.isEmpty()) {
		for(Task task1 : taskList){
    		map.put("流程实例ID:", task1.getProcessInstanceId());
    		map.put("任务ID:", task1.getId());
    		map.put("任务负责人:", task1.getAssignee());
    		map.put("任务名称:", task1.getName());
        }
	}else {
		map.put("msg", "整个流程审批任务结束!!!");
	}
	return map;
}

注意:网关的设置,是在第一个任务节点完成的时候去设置,就比如,张三创建请假申请,在创建请假申请的同时,指定请假天数,这样才是符合一个流程的正确逻辑走向。

在这里插入图片描述

张三请假时间超过5天,走董事长审批流程线。

2.并行网关

核心:并行执行,必须同时满足,并且如果设置了条件流程变量,将会被忽略。

在这里插入图片描述

1.执行任务

当我们创建请假申请的时候,添加条件流程变量(请假天数),看是否是并行执行,并且忽略请假条件。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.包含网关(包容性网关)

核心:包含网关融合了并行网关和排他网关的特点,并行网关的“出线”属于无条件,而排他网关只能选择符合条件的第一条“出线”。那如果我们需要一个路由选择,只要满足条件的“出线”,都可以路由走出去,这时候需要选择包含网关。

在这里插入图片描述

例如上图,我们设定一个出差申请流程,无论什么情况,都需要部门经理审批,而如果天数大于等于5天,则同时需要通过总经理审批。包含网关上面的“出线”没设任何条件,下面的“出线”设置了day大于等于5。

1.部署流程

在这里插入图片描述

2.启动流程

在这里插入图片描述
在这里插入图片描述

3.执行任务

张三提交出差申请,大于5天,需要总经理审批:
在这里插入图片描述
当王五总经理审批通过之后,并不是直接走董事长审批,李四部门经理也要审批:
在这里插入图片描述

4.事件网关

以下流程是基于事件的网关流程的示例。当执行到达基于事件的网关时,流程执行被暂停。此外,流程实例订阅警报信号事件并创建一个计时器,该计时器在 10 分钟后触发。这有效地导致流程引擎等待十分钟以等待信号事件。如果信号在 10 分钟内发生,则取消定时器并在信号后继续执行。如果未触发信号,则在计时器之后继续执行并取消信号订阅。

在这里插入图片描述

总结

网关篇就结束了,这篇很重要,是根基,从这篇文章就知道,我们需要掌握Activiti的东西很多,需要进下心来,慢慢品尝,下一篇进阶篇,关注吧!关注吧!关注吧!关注吧!关注吧!关注吧!关注吧!关注吧!。

熬夜干货,创作不易,动动小手点赞吧!!!!后面会继续输出更多干货给大家,喜欢的请关注小编CSDN:https://blog.csdn.net/qq_41107231 以及掘金:https://juejin.cn/user/3940246036699848

以上是关于全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<网关篇>的主要内容,如果未能解决你的问题,请参考以下文章

全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<入门篇>

全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<流程挂起与激活篇>

全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<监听器篇>

全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<监听器篇>

全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<流程挂起与激活篇>

全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<指定任务委派人篇>