Springoot、Flowable快速学习
应用背景:
公司打算做个考勤系统,涉及到请假、补卡之类的流程审批。想到了工作流,gitee、github上看了下开源的,有自研的和常见的Flowable、Activiti。首先放弃自研的,考虑到成熟度、社区生态,最后选择Flowable。
我还是几年前自学的Activiti,印象中工作流挺复杂的,开发难度较大,但是这次开发集成 Flowable,感觉还是挺简单顺利的。
首先网上找个开源的工作流项目,去大概看看实现方式、过程。
参考了:RuoYi-flowable、RuoYi-Flowable-Plus(他们的在线演示地址可能有点问题,可以自行本地启动)
我是先看的 RuoYi-flowable,方法有些流程方法逻辑不太完整之后,结合RuoYi-Flowable-Plus对方法进行完善,读者大佬们也可以直接学习RuoYi-Flowable-Plus
整个流程大致实现(个人片面的理解,希望大家补充):
前端使用 BPMN 插件,把流程定义(流程图)完成后的整个xml转成字符串发送给后端,后端在需要时解析xml获取到审批人、监听、网关逻辑。流程图展示时也是直接获取到xml字符串作相应的处理后返回xml字符串
项目结构:
前后端代码在一个工程里,整个流程定义(画图)、流程发起就涉及到这三个Controller
访问页面,需要vue项目部署启动(没搞过的网上搜搜)
学习 RuoYi-flowable 时记录的知识点:
注意springboot、flowable 版本是否匹配,我踩到的坑就是springboot2.7.1不能集成flowable6.8.0
- 好像是添加不上自定义监听,具体什么bug忘记了,改成true就好了
- 把 Flowable sql日志打印出来,有助于了解表关系
- 流程状态只有进行中、完成,但是我们实际需求需要其他的状态,比如:驳回,这时就参考了 RuoYi-Flowable-Plus,项目中搜 PROCESS_STATUS_KEY ,实现原理就是给每个流程实例的 Variable 中添加流程状态属性,在流程状态变更时做状态变更,注意有个 GlobalEventListenerConfig 、GlobalEventListener 类,里面做了流程结束状态变更。
- 流程审批人通知:
1) 页面上每个流程节点配置任务监听器,自行修改FlowTaskListener,实现具体业务
2)一个个配置麻烦,那就注册一个全局任务监听去通知 - 流程处理,页面只有审批按钮,自行添加下按钮,具体业务方法项目中是有的,只是没写按钮
- 两个项目中具体方法实现逻辑会有些区别,如:启动流程实例,使用 RuoYi-Flowable-Plus 的代码