审批工作流设计

技术选型

  • 开源流程引擎

  • activiti

  • 优点:功能完善、开发简单

  • 缺点:需要25张数据表、有学习成本

  • 自研流程引擎

  • 优点:适应业务能力强,需要的数据表少(5张表),能满足基本需求

  • 缺点:开发周期长,功能不够完善

数据库设计

数据库ER图

审批工作流设计审批工作流设计审批工作流设计

设计思路

流程模板

流程模板是对一组流程逻辑相同的工作流的模板定义。例如:请假流程对应一个流程模板,报销流程对应另一个流程模板。

流程模板中每个节点的具体审批人可以为固定人员,也可以是非固定人员。比如,请假流程中,员工发起申请后,由直属上级审批。不同部门员工发起的请假流程,审批人也不同。

流程模板表记录流程的元信息,比如流程模板名字、类型、流程上下文字段定义。

流程上下文指影响流程分支的变量。

流程模板节点

流程模板节点对应工作流中的每一个处理环节。

1个流程模板对应多个流程节点。

流程节点中记录当前节点的处理人类型(固定人员、上级、HR)、处理人(固定人员时该字段为员工姓名,非固定人员时该字段为空)、前驱节点关系。

前驱节点关系字段,值可能为“与”和“或”。前驱节点指和当前节点相邻的前一个节点。该字段用于当前节点有多个前驱节点时,需全部通过还是至少通过一个,才能流转到当前节点。如下图所示。

审批工作流设计

流程模板节点连接

流程模板节点连接用于定义模板节点之间的关系。

字段包括来源节点、目标节点和连接成立条件。

连接成立条件字段用于需要申请的内容动态选择流程分支的情况。

审批工作流设计

流程实例

流程实例是员工创建流程时通过模板产生的实际工作流。一个流程模板对应多个流程实例。实例与模板的区别是,在流程实例中每个节点的审批人是确定的。

流程实例中记录创建人、流程上下文、流程实例状态(流转中或已结束)。

任务

任务指审批任务。在创建流程实例后,会生成与该流程相关的多个审批任务。

每个审批任务对应流程模板中的一个节点。审批任务中的处理人是确定的,模板节点的处理人是不确定。

审批任务保存该任务的实际处理人、任务是否**、审批决定(同意或者拒绝)、评论、操作时间。

功能实现思路

创建流程模板

参数:模板类型、名字、节点、节点关系、流程上下文字段名。

处理流程:

  1. 生成新模板ID。

  2. 流程模板表记录流程模板类型、名字、流程上下文字段名。

  3. 流程模板节点表添加节点。

  4. 模板节点连线表中记录节点关系。

创建流程

参数:流程模板ID、创建人、流程上下文变量的值

处理流程:

  1. 生成流程实例ID。

  2. 在流程实例表中记录创建人,流程上下文。状态默认为流转中。

  3. 在任务表中,根据模板中的节点创建审批任务。

查询待审批列表

参数:员工ID

处理流程:

  1. 在任务表中查询实际处理人为该员工,且任务状态为**的任务ID。

进行审批

参数:任务ID、用户ID、审批决定(同意或拒绝)

处理流程:

  1. 在任务表中记录审批决定。

  2. 修改下一个任务的**状态。

  3. 判断流程是否结束,如果结束,修改流程实例表中的实例状态。

相关文章: