基于Springboot+SpringSecurity+Activiti7实现的工作流系统可方便二次开发(附完整源码)
现在很多ToB的系统一般都会有工作流的相关需求,比如报价单、合同审批等等,如果是自己实现一套工作流引擎对于大多数中小企业不太实际,
并且在业务调整时也很难做到灵活的扩展,所以大家普遍会选择简单灵活易于集成的工作流引擎框架activiti。
本文就是要带大家了解在基于SpringSecurity权限框架的SpringBoot项目中怎么使用集成activiti7工作流,并且怎么把它融合到实际的单据(如请假)业务审批流程中。
Tip
:以下是我用SpringBoot+Activiti7实现的工作流的的源码,有兴趣可以自己获取,也欢迎大佬们提交PR一起学习
// Git代码
https://gitee.com/yeeevip/yeee-activiti7
1 功能演示
- 在线绘制流程定义
登录admin账号,进入菜单 - 工作流 > 流程定义 > 在线制作流程;我这里是模拟一个单据审批流程,申请人提交单据后需要
进过两级审批,只要有其中一级审批不通过就会打回到申请人提交节点让重新提交审批单。
给一级审批设置审批权限,可以设置审批用户或者设置审批的部门,这样当申请人提交单据后审批任务就会流转到设置好的用户下。
- 申请人提交审批单
进入菜单 - 工作流 > 流程定义 > (列表中找到‘刚才绘制的’这个审批流程) > 新建实例,这样就模拟了一个用户提交审批流程。
- 一级审批进行任务审批
流程定义在不同的审批环节设置了不同部门的人员来审批,开始流程实例后,人员就可以登录自己账号进入菜单 - 工作流 > 代办任务 > 查看到自己当前的待完成审批项。
用户1可以选择 通过或者不通过,通过的话就会流转到二级审批的用户任务下,不通过就会回到申请人任务下。
2 二次开发与自己业务系统打通
2.1 通用扩展点
Activiti框架的整体架构服务按照功能领域来分的话可以分为三部分:
1
流程定义:主要负责管理流程绘制的内容视图
2
流程实例:实例就相当于在该流程定义下的审批流程,就拿请假流程来说,3个用户提交了3个审批单,相当于在这个请假留下下建了3个实例
3
审批任务:审批流程各节点的执行环节。如一个请假需要经过两个领导审批,之后流程流转过程中领导会进行各自的审批任务
所以基于以上3个领域划分后我按照功能进行了封装common-activiti7:
2.1.1 流程定义通用接口
public class CommonActiviti7Service {
// 分页获取流程定义
public PageVO<DefinitionVo> definitionList(PageReqVO<?> reqVO) {
PageVO<DefinitionVo> pageVO = new PageVO<>(reqVO.getPageNum(), reqVO.getPageSize());
...
return pageVO;
}
// 删除流程定义
public void definitionDelete(DefDeleteReq req) {
for (String depId : req.getIds()) {
repositoryService.deleteDeployment(depId, true);
}
}
// 保存绘制好的流程定义
public void definitionAddDeploymentByString(String stringBPMN) {
Deployment deployment = repositoryService.createDeployment()
.addString("CreateWithYeeeSystem.bpmn", stringBPMN)
.deploy();
}
// 查看流程定义详情
public void definitionDetailXml(HttpServletResponse response, String deploymentId, String resourceName) {
InputStream inputStream = repositoryService.g