一、基礎概念
理論支撐概念:petri網絡;DNG;彈性制造系統FMS.
Petri 1976年的異步系統理論。翻譯過來的庫所,托肯,變遷三個概念理解了就可以進入FMS系統實戰理論學習。
DNG是設計流程圖數據結構的理論基礎。就是流程長什么樣子,如何解析,如何讀取,如何保存。美人魚(mermaid)采用MD保存流程,理解其原理就可設計數據結構,在下面會講解。
二、目標
因接觸flowable有一年之久,被各種折騰,久而久之,發現實際業務又得上CMMN,太復雜了,不堪回首,符合BPMN的流程,但在小需求上費盡腦汁。細想半年,化繁為簡,實際審批流僅僅需要以下幾個:
2.1)任務節點。
2.2)網關。交叉網關,並行網關。條件網關。
2.3)任務。定時任務,節點審批后任務。
這三點就是我們的目標。
三、繪制流程圖
3.1)根據mermaid結構例子如下:
A-->B
B-->C
D-->C
非常好理解,那么數據結構有了,一棵樹就是一個流程圖。
id pid type之類的就可以設計出來。
easyflow這個數據結構比較符合。可以學習擴展下。
四、根據目標
flowable 7個接口只要實現4個TaskInstance,TaskDefineInstance,ProcessInstance,ProcessDefinceInsance.具體代碼不寫了,具體來講如何實現。
workflow-core倉庫內實例挨個跑一遍,可以實施開發了。偽代碼如下:
流程定義:
4.1定義模型:
交換模型(變遷) FlowModelStep
節點模型 (庫所)InitStep
builder.StartWith<InitStep>().input(..提交流程傳入InitStep).output(..輸出交換模型).Onerror(出錯重試,這個方法很給力,如果流程出錯,僅需拷貝此流程數據到測試環境,即可實現異常重現)//初始化交換模型,返回結束標志,返回第一個審批節點數據到變遷模型。
.while(w=>w.未找到結束標志)
.Do(context=>context.StartWith<DealStep>()
.waitfor(workflow唯一事件,僅需修改一個源代碼方法).input().output()
.Then<DealStep>().input().output()//提交審批核心業務可以寫在這里。
.If()可以增加一些判斷
.Then<ElseDealStep>()
.Then<SendMessageStep>()
..........
)
.Then<WorkflowEndStep>()
.EndWorkflow();
host.startEvent()//發起流程審批。
host.Register<,>//注冊流程。
host.start()//開啟流程。
五、總結:
提交消息無狀態,狀態管理比較麻煩,比如審批后告訴api已經審批通過,可以展示審批人信息和流程圖了。可自行實現。
最爽的是,流程可以嵌套,可實現比較復雜的也無需求,思路很清晰。比如串聯工作流。
