老大要我开发一个简单的工作流引擎
阅读本文大概需要 5.5 分钟。
来自:cnblogs.com/duck-and-duck/
tips:文末有好书推荐~
第1关
按顺序添加任意个审批人组成一个链表,最后加一个结束节点
记录当前审批人,当审批完后,审批人向后移动一位
当审批人对应结束节点时,流程结束
第2关
把节点分为两大类:简单节点(上图中长方形)和复杂节点(上图中圆形)。
用一棵树表示整个流程,其中叶子节点都是简单节点,简单节点都是叶子节点。
每个简单节点里都有且仅有有一个审批人。
复杂节点包含若干个子节点。
加入会签节点: 会签节点激活后,所有的子节点都可以审批,当所有的子节点都审批完毕后,会签节点完成。
加入串行节点:子节点只能从左到右依次进行审批,当最后一个子节点审批完成后,串行节点完成。
所有的工作流最外层都是一个串行节点,该节点完成后代表整个工作流完成。
Ready: 可以进行审批操作的简单节点是Ready状态。
Complete: 已经审批完成的节点状态。
Future: 现在还没有走到的节点状态。
Waiting: 只有复杂节点有该状态,表示在等待子节点审批。
第3关
并行节点是一个复杂节点,该节点激活时,任何一个子节点都可以进行审批,且任何一个子节点是完成状态时,该节点完成。
当一个并行节点的子节点状态为非(Ready, Waiting)时,其它兄弟节点及其子节点的状态被置为Skip。
第4关
能无限扩展的树形结构可以支持任意复杂流程。
第5关
条件节点类似并行节点,只不过只有满足条件的子节点才能进入接下来的审批。
第6关
第一种:审批人是写死的。
第二种:审批人从表单中读取。
第三种:根据发起人和一个映射函数,算出审批人。比如 get_主管("钱某") 得到钱某的主管 李某。
第7关
只有Ready状态的节点有权利驳回。(就像只有Ready状态的节点有权利审批一样)
第8关
第9关
不断的驳回上一级,直到Ready状态的节点包含要驳回到的节点为止。
第10关
第11关
代理操作的本质是,新建一个并行节点作为本节点的父节点,再新建一个兄弟节点放代理人,这样自己和代理人都能审批通过。
代理操作可以无限嵌套,即代理人也可以找人代理。
第12关
取消代理是代理的逆操作
如果代理人审批过了那就不能取消代理
第13关
第14关
工作流完成的百分比指的是树中最右侧Ready状态的节点到最左侧节点的距离 / 最右侧节点的距离。
第15关
后记
<END>
好书推荐
本书不仅从Oracle数据库与SQL优化本身的角度探讨高性能架构设计,更重要的是从整个应用层、综合中间件角度考虑各特性是否适合采用Oracle实现。
推荐阅读:
微信扫描二维码,关注我的公众号
朕已阅