應用背景:
公司打算做個考勤系統,涉及到請假、補卡之類的流程審批。想到了工作流,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 的代碼
- 我把 流程 獨立出一個服務,但是遇到個問題:如補卡審批完成后需要對考勤數據進行更新,這是就涉及到了另一個考勤服務,想到的方案
1)mq ,審批完成后將數據發送到消息隊列,考勤服務進行消費
2)審批完成后將數據存到數據庫表,考勤服務定時掃表進行業務處理,前提是不同服務使用同一個庫且不具備mq使用條件