go-workflow 是一個(gè)超輕量級(jí)的工作流引擎,基本架構(gòu)同Activiti工作流有些相似,但是它更精簡(jiǎn),更輕量,它是一個(gè)工作流微服務(wù)
一、特點(diǎn):
1.它是一個(gè)工作流微服務(wù)
2.將所有的無(wú)關(guān)流程的數(shù)據(jù),包括用戶、用戶組等信息從服務(wù)中解耦出去,go-workflow只紀(jì)錄流程的流轉(zhuǎn)
3.使用json數(shù)組替代bpmn來(lái)生成流程定義,簡(jiǎn)化流程定義的生成
二、go-workflow框架
1.go-workflow 數(shù)據(jù)庫(kù)設(shè)計(jì)
1.1 流程定義表
表 procdef 用于保存流程的配置, 主要字段有:
name: 流程定義的名稱,如:"請(qǐng)假流程"
version: 流程定義的版本
resource: 保存流程定義的具體配置,它是一個(gè)json格式的字符串
company: 保存該流程創(chuàng)建人所在公司
1.2 流程實(shí)例表
表 proc_inst 用于保存流程實(shí)例,當(dāng)用戶啟動(dòng)一個(gè)流程時(shí),就會(huì)在這個(gè)表存入一個(gè)流程實(shí)例,
主要字段有:
procDefID: 對(duì)應(yīng)表procdef的id,
title: 標(biāo)題,如:"張三的請(qǐng)假流程"
department: 用戶所在部門(mén)
nodeID: 當(dāng)前所處于節(jié)點(diǎn)的名稱
candidate: 當(dāng)前審批人或者審批用戶組
taskID: 當(dāng)前任務(wù)id
1.3 執(zhí)行流表
表 execution 用于保存執(zhí)行流,當(dāng)用戶啟動(dòng)一個(gè)流程時(shí),就會(huì)生成一條執(zhí)行流,之后的流程就會(huì)按照?qǐng)?zhí)行流的順序流轉(zhuǎn),
比如:開(kāi)始-主管審批-財(cái)務(wù)審批-人事審批-結(jié)束 ,
主要的字段有:
procInstID: 流程實(shí)例id,對(duì)應(yīng)表proc_inst
procDefID: 流程定義id,對(duì)應(yīng)表procdef
nodeInfos: 是一個(gè)json數(shù)組,紀(jì)錄流程實(shí)例會(huì)經(jīng)過(guò)的所有節(jié)點(diǎn)
1.4 關(guān)系表
表 identitylink 用于保存任務(wù)task的候選用戶組或者候選用戶以及用戶所參與的流程信息,
主要字段有
type: 表示關(guān)系類型,有:"candidate"和"participant"兩種
group: 表示當(dāng)前審批的用戶組userID: 表示當(dāng)前審批的用戶taskID: 對(duì)應(yīng)任務(wù)task表的idstep: 表示任務(wù)對(duì)應(yīng)的執(zhí)行流位置,比如:有一個(gè)執(zhí)行流:開(kāi)始-主管審批-財(cái)務(wù)審批-人事審批-結(jié)束,那么step=0,則處于【開(kāi)始】位置,step=1則處于【主管審批】位置company: 表示公司procInstID: 對(duì)應(yīng)流程實(shí)例id
1.5 任務(wù)表
表 task 用于保存任務(wù),
主要字段有:
nodeID: 表示節(jié)點(diǎn),如:"主管審批"結(jié)點(diǎn)
step: 表示任務(wù)對(duì)應(yīng)的執(zhí)行流位置
assignee: 任務(wù)的處理人
memberCount: 表示當(dāng)前任務(wù)需要多少人審批之后才能結(jié)束,默認(rèn)是 1
unCompleteNum: 表示還有多少人沒(méi)有審批,默認(rèn)是1
agreeNum: 表示通過(guò)的人數(shù)actType: 表示任務(wù)類型 "or"表示或簽,即一個(gè)人通過(guò)或者駁回就結(jié)束,"and"表示會(huì)簽,要所有人通過(guò)就流
轉(zhuǎn)到下一步,如果有一個(gè)人駁回那么就跳轉(zhuǎn)到上一步
1.6 歷史數(shù)據(jù)表
歷史數(shù)據(jù)表包括 execution_history,identitylink_history,proc_inst_history,task_history這些表字段同正常的表相同,每隔20秒,將已經(jīng)結(jié)束的流程數(shù)據(jù)會(huì)自動(dòng)遷移過(guò)來(lái)
2 流程的存儲(chǔ)
2.1 添加流程資源
啟動(dòng) go-workflow 微服務(wù)后,可以在瀏覽器中輸入:http://localhost:8080/workflow/procdef/save 進(jìn)行存儲(chǔ)
具體見(jiàn) example.md 說(shuō)明文檔
3.流程的啟動(dòng)
通過(guò)調(diào)用 StartProcessInstanceByID 方法來(lái)啟動(dòng)流程實(shí)例,
主要涉及:
獲取流程定義
GetResourceByNameAndCompany()->啟動(dòng)流程實(shí)例CreateProcInstTx()->生成執(zhí)行流GenerateExec() -> 生成新任務(wù)NewTaskTx() -> 流程流轉(zhuǎn) MoveStage()
4.任務(wù)審批
調(diào)用方法 Complete()方法來(lái)執(zhí)行任務(wù)的審批, 涉及方法:
更新任務(wù) UpdateTaskWhenComplete()-> 流轉(zhuǎn)MoveStageByProcInstID()
調(diào)用方法 WithDrawTask() 方法來(lái)執(zhí)行任務(wù)的撤回
以上內(nèi)容,請(qǐng)私信會(huì)發(fā)給你開(kāi)源地址。
如有以下需要請(qǐng)私信
使用vue、element搭建后臺(tái)管理界面、網(wǎng)站
使用vue、vant實(shí)現(xiàn)webApp項(xiàng)目
實(shí)現(xiàn)微信小程序、企業(yè)微信、釘釘開(kāi)發(fā)
使用springboot做前端后分離項(xiàng)目
對(duì)用友ERP、鼎捷ERP接口二次開(kāi)發(fā)、如條碼系統(tǒng)
開(kāi)發(fā)泛微OA、定制domino開(kāi)發(fā)項(xiàng)目
提供軟件開(kāi)發(fā)服務(wù)、技術(shù)咨詢類服務(wù)