申请
发起一个申请(请假,加班,补卡等),每一个申请都由一些固定的流程定义和流程操作组成。所以我们需要定义一个流程表,来说明这个流程是用来干什么的,流程表的定义,也可以将所有的流程配置在字典表中来使用
流程表:

序号	数据项名称	数据类型	数据项标识符	说明
1	唯一标识	int(32)	             flow_id	流程编号,主键
2	流程名称	varchar(100)	flow_name	流程名称
3	备注	varchar(100)	       remark	备注
4	创建时间	datetime	      create_time	数据插入时间(默认生成)

定义了流程表还要定义流程节点表,流程节点表主要是用来控制审批的,用户提交申请后下一步到谁审批了,要做到清晰明确,流程节点表:

序号	数据项名称	数据类型	数据项标识符	说明
1	唯一标识	int(32)	              node_id	主键唯一
2	外键	int(32)	                     flow_id	与流程表对应
3	节点名称	varchar(100)	node_name	流程节点名称
4	流程角色	varchar(50)	     node_role	流程角色
5	备注	varchar(100)	         remark	备注
6	创建时间	datetime	        create_time	数据插入时间(默认生成)

还需要创建一个流程线表来规范审批的顺序,流程线表

序号	数据项名称	数据类型	数据项标识符	说明
1	唯一标识	int(32)	line_id	主键唯一
2	外键	int(32)	flow_id	与流程表对应
3	节点编号	int(32)	prev_node_id	前一节点编号
4	节点编号	int(32)	next_node_id	后一节点编号
5	备注	varchar(100)	remark	备注
6	创建时间	datetime	create_time	数据插入时间(默认生成)

如果一个节点由多个人(多部门)审批还需要创建一个流程角色员工表

序号	数据项名称	数据类型	数据项标识符	说明
1	唯一标识	int(32)	flow_role_id	主键
2	流程角色名称	varchar2(100)	flow_role_name	流程角色名称
3	用户id	int(32)	user_id	用户id
4	部门id	int(32)	dept_id	部门id

然后创建审核表,审核表要记录审核信息

审批流架构 流程审批表模板_审批流架构

申请单号,用户id, 用户名,审核状态(0未通过,1通过),审核意见,审核时间,当前节点。

申请-审核步骤以及一些细节

1:发起申请,发起申请时,填写表单,后台将申请人申请时间等信息赋值,将提交标志commitFlag 和当前节点currentNode赋默认值,

commitFlag

0-------------表示未提交

1-------------提交(已经在审核流程中)

2-------------审核失败

3-------------审核成功

currentNode :创建申请表单后将currentNode赋默认值1,提交成功后修改currentNode为下一个审批节点的值,做查询(本次-子查询)

2:提交之后修改commitFlag=1表示已经提交,要在提交的业务代码上做判断,根据当前节点的值来判断是否提交(和未提交时的currentNode的值来判断),不可重复提交,因为重复提交会不断修改currentNode的值。

3:审核列表,审核有先后,万般皆在查,主要还是在查询上面,你是第一审批人,你怎么查到需要你审批的申请呢? 根据session一般都可以获取到当前登录的用户,根据用户可以在流程角色员工表中查询你是否在这张表中,不在直接pass,在的话就慢慢说:

3.1:你根据你的用户id可以直到你的流程角色和部门id,

3.2:根据部门id的不同又可以解决掉一大部分数据,

3.3:再根据你所处的流程节点做查询,就得到了需要你审批的节点了。

4:审批:审批页面选择审批通过或者不通过,填写审批意见,记录审批节点和审批相关信息,提交。简单。但是还要注意,有一个节点审批不通过直接打回原点,修改申请表的commitFlag为2表示不通过,修改当前节点currentNode为1,表示还未提交,修改申请之后还要重新提交。还需要判断是否是最后一个审批人,最后一个审批人审批完成之后整个审批结束。

每一个审批结束之后都要修改申请表中的当前节点currentNode的值