审批工作流设计
技术选型
-
开源流程引擎
-
activiti
-
优点:功能完善、开发简单
-
缺点:需要25张数据表、有学习成本
-
自研流程引擎
-
优点:适应业务能力强,需要的数据表少(5张表),能满足基本需求
-
缺点:开发周期长,功能不够完善
数据库设计
数据库ER图
设计思路
流程模板
流程模板是对一组流程逻辑相同的工作流的模板定义。例如:请假流程对应一个流程模板,报销流程对应另一个流程模板。
流程模板中每个节点的具体审批人可以为固定人员,也可以是非固定人员。比如,请假流程中,员工发起申请后,由直属上级审批。不同部门员工发起的请假流程,审批人也不同。
流程模板表记录流程的元信息,比如流程模板名字、类型、流程上下文字段定义。
流程上下文指影响流程分支的变量。
流程模板节点
流程模板节点对应工作流中的每一个处理环节。
1个流程模板对应多个流程节点。
流程节点中记录当前节点的处理人类型(固定人员、上级、HR)、处理人(固定人员时该字段为员工姓名,非固定人员时该字段为空)、前驱节点关系。
前驱节点关系字段,值可能为“与”和“或”。前驱节点指和当前节点相邻的前一个节点。该字段用于当前节点有多个前驱节点时,需全部通过还是至少通过一个,才能流转到当前节点。如下图所示。
流程模板节点连接
流程模板节点连接用于定义模板节点之间的关系。
字段包括来源节点、目标节点和连接成立条件。
连接成立条件字段用于需要申请的内容动态选择流程分支的情况。
流程实例
流程实例是员工创建流程时通过模板产生的实际工作流。一个流程模板对应多个流程实例。实例与模板的区别是,在流程实例中每个节点的审批人是确定的。
流程实例中记录创建人、流程上下文、流程实例状态(流转中或已结束)。
任务
任务指审批任务。在创建流程实例后,会生成与该流程相关的多个审批任务。
每个审批任务对应流程模板中的一个节点。审批任务中的处理人是确定的,模板节点的处理人是不确定。
审批任务保存该任务的实际处理人、任务是否**、审批决定(同意或者拒绝)、评论、操作时间。
功能实现思路
创建流程模板
参数:模板类型、名字、节点、节点关系、流程上下文字段名。
处理流程:
-
生成新模板ID。
-
流程模板表记录流程模板类型、名字、流程上下文字段名。
-
流程模板节点表添加节点。
-
模板节点连线表中记录节点关系。
创建流程
参数:流程模板ID、创建人、流程上下文变量的值
处理流程:
-
生成流程实例ID。
-
在流程实例表中记录创建人,流程上下文。状态默认为流转中。
-
在任务表中,根据模板中的节点创建审批任务。
查询待审批列表
参数:员工ID
处理流程:
-
在任务表中查询实际处理人为该员工,且任务状态为**的任务ID。
进行审批
参数:任务ID、用户ID、审批决定(同意或拒绝)
处理流程:
-
在任务表中记录审批决定。
-
修改下一个任务的**状态。
-
判断流程是否结束,如果结束,修改流程实例表中的实例状态。