一个OA审批流中,提交审批的用户需要指定业务内容和审批人,审批人大多时候是多个,且还有层级关系,审批需要由下向上一步步进行,其中一个不通过,整个流程就不通过。
实现例子
以加班表单为例子
指定完成之后,点击提交即可。
然后再由相应的审批人逐级进行审批,当其中有一个不通过,则整个流程不通过,当所有的审批人全部通过才可通过。
审批人表设计
首先用户表肯定是需要的,因为表单申请人和审核人都是关联的用户 No,因为用户是根据部门走的,那么还需要设计一张部门表,再设计一张用户和部门相关联的表,把用户和部门联系起来,就可以从部门中选取相应角色。
部门存在层级,表需要设置上级部门id,最高层级部门的上级部门id设置为0。还可以增加部门层级标识,标识当前的部门属于层级中的第几层。
审批流表设计
只需要两张核心的审批表即可,其他需要进行审批流的业务表通过审批流编号FlowNo
关联这两张核心业务表,我们来看一下
审批流主表 AuditFlow
这两张表的关系是一对多,明细表的数量取决与表单提交添加的审核人数量
1 ApproFlow:1 =======> n :ApproFlowDetail
审批流明细表 AuditFlowDetail
如此一来,OA 审批流程的两张核心业务表就设计完成了。
就拿加班申请来举个例子,当用户需要进行加班的时候,肯定是需要走审批流程的,那么再来设计一张加班申请表
加班表 OverTimeAsk
审批流程
填写完加班申请表单,选择部门相关负责审批人,如主管,部门经理,总经理,此时进行表单提交
提交需要进行的操作
- 录入当前审批业务表,也就是加班申请表的数据
- 审批流主表插入一条数据
- 审批流明细表插入三条数据
- 对添加的第一个审核人发送相关通知消息
注意要点:
- 以上三条是同时进行操作,必须要满足事务,否则数据会出现问题
- 三条数据插入的
FlowNo
字段必须是相同的 - 插入审批流主表数据的时候,
BusType
字段的值可以设置为OverTimeAsk
,审核状态默认 1 (待审核) - 插入审批流明细表数据的条数取决与用户提交表单选择的审核人数量,如这里选择了三个审批人,就需要插入三条数据,第一条的审核状态 设为 2 (待我审批),其他两条的审核状态设为 1 (审核中)
- 插入加班申请表对月份进行判定,不允许跨月加班
表单提交的操作完成了,下面就开始论到审核操作的流程了
首先,要有一个待我审批的入口,查询出所有待我审核的表单
- 将
AuditFlow
表和AuditFlowDetail
表通过 FlowNo 关联查询 - 过滤
AuditFlow
表审核状态为 1 并且AuditFlowDetail
表审核状态为 2 的数据 - 也可以根据
AuditFlow
表的BusType
字段进行审批表单的分类
审核操作,基本上分为审核通过和不通过, 当然也可以根据业务自行扩展其他的审核操作。
实现思路与细节如下:
- 根据表单提交操作来判断审核是否同意
- 根据
FlowNo
和AuditUserNo
以及AuditStatus
为 2 (待我审批) 的条件去查询AuditFlowDetail
表,如果数据为空,则此单已进行过审核操作,直接返回。 - 如果上一条查询的数据不为空,则可以将当前审核明细单数据的审核状态设置为通过 or 驳回
- 如果当前审核明细单的待审核数量大于一,则说明还需要向下一级传递审核,同时将下一级数据的审核状态设置为待我审核,并发送相关通知
- 如果当前审核明细单数据全部为审核通过,则将
AuditFlow
表的审核状态设为通过 - 如果当前审核明细单有一条审核不通过,则将
AuditFlow
表的审核状态设为不通过
实现细节
如果审核同意则,根据FlowNo
查询出所有AuditFlowDetail
表数据,然后进行过滤,分别统计审核通过和审核不通过的数据条数,并记录第一个审核状态为审核中的数据。此时可根据条件执行上面的第 4,5,6 条
审核不同意操作大致同上
扩展
当然 OA 的审批业务远远不止这么一点,还有其他的表单审批,比如工作汇报审批表,还可增加关联的附件表,提交工作内容的同时上传相关文件或者照片存放在服务中,方便审核人随时在线预览或者下载到本地
还可根据业务需求自行扩展相关表单