介绍
之前没怎么接触过工作流,在网上参考了一些相关的案例。任务着急,并没有太看透彻就开始coding了。这套工作流引擎并不复杂,主要是应对简单的流程运转及权限控制。
我们主要用在售后等工单系统中,一张工单。主要实现了以下功能
1.工作流程的界面设计
2.流程根据设定的路线流转,设定每个节点的权限,控制流程的编辑及访问,设定流程中每个用户对应每个字段的权限
3.流程分支的自动判断
4.流程的接单及驳回
数据库结构
这是工作流引擎中涉及到的所有表了。
B开头的为主表,L为关联表,R为引用表存储些类型之类的常量。
主要表及字段说明
主要的流程设计只保存在两张表中。流程节点表以及路由表。 为了使工作流与业务结合,我们用到了流程实例表,以及活动记录表。
每开启一个流程,便创建一条流程实例,每一次流程节点的变动,创建一条活动记录。
在活动记录表中,设置了接单人字段belongUser,每条节点的编辑之前需要有接单人。可以在提交上一节点的时候指定下一节点的接单人或者点击接单来手动接单。这样设计来避免多人同时编辑同一个节点。
流程图设计界面
设计图使用的是gooFlow框架,功能比较简单,但是恰巧适合我这种并不复杂的工作流系统。大家有兴趣的可以下载下来玩一下,Demo和Api讲解的也比较详细
对于多个分支的情况,有用户操作的为手动选择下一流程。
无操作界面的话需要需要在路由里写上相应的条件语句,来判断接下来要走那一条路由。 以换货流程为例:
在创建退货订单的时候就会自动创建一条退货的售后工单,同时需要传入支付方式及换货单的状态给工作流。
相关代码
我将每个工作流封装为一个dto,里面包括此工作流的所有相关信息,系统启动时加载到内存中,在修改工作流程时刷新。
工作流上下文
上图只保存了工作流的内容,关联到业务的话,还需要一个工作流上下文的类。此类中应该包括工作流当前的状态等信息,同时提供一些基本的扩展方法。
下图为工作流上下文类的结构
写下此文一来为了锻炼一下自己写博客的能力以及表达能力。同时也希望个位前辈能够指正纰漏,提出建议!