1、基礎概念api
理論支撐概念:petri網絡;DNG;彈性製造系統FMS.網絡
Petri 1976年的異步系統理論。翻譯過來的庫所,託肯,變遷三個概念理解了就能夠進入FMS系統實戰理論學習。數據結構
DNG是設計流程圖數據結構的理論基礎。就是流程長什麼樣子,如何解析,如何讀取,如何保存。美人魚(mermaid)採用MD保存流程,理解其原理就可設計數據結構,在下面會講解。異步
2、目標學習
因接觸flowable有一年之久,被各類折騰,長此以往,發現實際業務又得上CMMN,太複雜了,不堪回首,符合BPMN的流程,但在小需求上費盡腦汁。細想半年,化繁爲簡,實際審批流僅僅須要如下幾個:測試
2.1)任務節點。ui
2.2)網關。交叉網關,並行網關。條件網關。翻譯
2.3)任務。定時任務,節點審批後任務。設計
這三點就是咱們的目標。接口
3、繪製流程圖
3.1)根據mermaid結構例子以下:
A-->B
B-->C
D-->C
很是好理解,那麼數據結構有了,一棵樹就是一個流程圖。
id pid type之類的就能夠設計出來。
easyflow這個數據結構比較符合。能夠學習擴展下。
4、根據目標
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()//開啓流程。
5、總結:
提交消息無狀態,狀態管理比較麻煩,好比審批後告訴api已經審批經過,能夠展現審批人信息和流程圖了。可自行實現。
最爽的是,流程能夠嵌套,可實現比較複雜的也無需求,思路很清晰。好比串聯工做流。