一、基于workflow-core强势开发审批流【已成功流转50W笔单据】

一、基础概念

  理论支撑概念: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已经审批通过,可以展示审批人信息和流程图了。可自行实现。

最爽的是,流程可以嵌套,可实现比较复杂的也无需求,思路很清晰。比如串联工作流。

posted on 2021-01-28 07:31  kloszhu  阅读(1581)  评论(1编辑  收藏  举报

导航