Springoot、Flowable快速学习

109 阅读3分钟

应用背景: 公司打算做个考勤系统,涉及到请假、补卡之类的流程审批。想到了工作流,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

  1. 好像是添加不上自定义监听,具体什么bug忘记了,改成true就好了
  2. 把 Flowable sql日志打印出来,有助于了解表关系在这里插入图片描述
  3. 流程状态只有进行中、完成,但是我们实际需求需要其他的状态,比如:驳回,这时就参考了 RuoYi-Flowable-Plus,项目中搜 PROCESS_STATUS_KEY ,实现原理就是给每个流程实例的 Variable 中添加流程状态属性,在流程状态变更时做状态变更,注意有个 GlobalEventListenerConfig 、GlobalEventListener 类,里面做了流程结束状态变更。
  4. 流程审批人通知: 1) 页面上每个流程节点配置任务监听器,自行修改FlowTaskListener,实现具体业务 在这里插入图片描述 2)一个个配置麻烦,那就注册一个全局任务监听去通知
  5. 流程处理,页面只有审批按钮,自行添加下按钮,具体业务方法项目中是有的,只是没写按钮 在这里插入图片描述 在这里插入图片描述
  6. 两个项目中具体方法实现逻辑会有些区别,如:启动流程实例,我使用 RuoYi-Flowable-Plus 的代码
  7. 我把 流程 独立出一个服务,但是遇到个问题:如补卡审批完成后需要对考勤数据进行更新,这是就涉及到了另一个考勤服务,想到的方案 1)mq ,审批完成后将数据发送到消息队列,考勤服务进行消费 2)审批完成后将数据存到数据库表,考勤服务定时扫表进行业务处理,前提是不同服务使用同一个库且不具备mq使用条件