OA(office automation) 想必大家都已不陌生,甚至还非常熟悉,是的没错,本文就来讲解一下OA中的核心业务,审批流程是如何一步步实现的。
本文干货满满,建议静下心来细细品
首先填写好表单相关信息,然后点击审批人,从公司部门树中点击相应部门,加载部门相关角色用户,最后再指定审批人
值得吹嘘的一点是这里的审批人可供用户自行动态选择,并且审批层级也是随着审批人的数量动态增减
以加班表单为例子
指定完成之后,点击提交即可。
然后再由相应的审批人逐级进行审批,当其中有一个不通过,则整个流程不通过,当所有的审批人全部通过才可通过
OK流程已经清楚了,接下来我们来进行表结构的设计
只需要两张核心的审批表即可,其他需要进行审批流的业务表通过审批流编号
FlowNo
关联这两张核心业务表,我们来看一下
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
-
项目地址:https://github.com/YunaiV/ruoyi-vue-pro
-
视频教程:https://doc.iocoder.cn/video/
Column Name
|
Data Type
|
Describe
|
FlowNo
|
Varchar(50) not null primary key
|
审批编号返回yyyMMddHHmm+n位随机数
|
Title
|
Nvarchar(50) not null
|
标题(例如:某某人的加班申请)
|
BusType
|
Varchar(20) not null
|
审批类型(根据业务表定义Code,区分表单)
|
AddUserNo
|
Datetime not null
|
申请人
|
AddTime
|
Varchar(50) not null
|
添加时间
|
ApproStatus
|
Int not null
|
审核状态(1.待审,2.通过.3.驳回,4.撤销)
|
这两张表的关系是一对多,明细表的数量取决与表单提交添加的审核人数量
ApproFlow:1 =======> n :ApproFlowDetail
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
-
项目地址:https://github.com/YunaiV/yudao-cloud
-
视频教程:https://doc.iocoder.cn/video/
Column Name
|
Data Type
|
Describe
|
ID
|
Int not null primary key identity(1,1)
|
主键自增列
|
FlowNo
|
Varchar(50) not null
|
审批编号,关联主表
|
AuditUserNo
|
Varchar(50) not null
|
审核人
|
AuditRemark
|
Nvarchar(500)
|
审核备注
|
AuditTime
|
Datetime
|
审核时间
|
AuditStatus
|
Int not null
|
审核状态(1.审核中,2.待我审批.3.通过,4.驳回)
|
如此一来,OA审批流程的两张核心业务表就设计完成了。
那么问题来了,其他相关表呢?
别急,慢慢来嘛。首先用户表肯定是需要的,因为表单申请人和审核人都是关联的用户No,因为用户是根据部门走的,那么还需要设计一张部门表,再设计一张用户和部门相关联的表,把用户和部门联系起来,就可以从部门中选取相应角色。当然简单点的逻辑可以不用部门,直接搜索全部用户,这里就不再设计了哈。
有了用户表和审批业务核心表,接下来就可以根据公司业务需求,来设计相关的审批流程业务表了,这里就拿加班申请来举个例子,当用户需要进行加班的时候,肯定是需要走审批流程的,那么再来设计一张加班申请表
Column Name
|
Data Type
|
Describe
|
FlowNo
|
Varchar(50) not null primary key
|
关联AuditFlow表
|
AddUserNo
|
Varchar(20) not null
|
添加用户No
|
AddTime
|
Datetime not null
|
添加时间
|
AskReason
|
Nvarchar(50) not null
|
加班事由
|
Remark
|
Nvarchar(100)
|
备注
|
LeaveTimeFrom
|
Datetime not null
|
加班开始时间
|
LeaveTimeTo
|
Datetime not null
|
加班结束时间
|
OverTimeHours
|
decimal(10,2)
|
加班总小时
|
此时,再回到文章一开始的流程,脑海中的思路是不是就慢慢的浮现出来了呢,嘻嘻
库设计好了,剩下的就是由程序实现完成了,那么问题又来了,如何去实现呢?借助问题,来进行驱动成长,下面就来探讨具体如何实现。
有了以上设计的表做铺垫,就可以为所欲为啦!
填写完加班申请表单,选择部门相关负责审批人,如主管,部门经理,总经理,此时进行表单提交
-
以上三条是同时进行操作,必须要满足事务,否则数据会出现问题
-
-
插入审批流主表数据的时候,
BusType
字段的值可以设置为
OverTimeAsk
,审核状态默认1(待审核)
-
插入审批流明细表数据的条数取决与用户提交表单选择的审核人数量,如这里选择了三个审批人,就需要插入三条数据,第一条的审核状态 设为 2(待我审批),其他两条的审核状态设为1(审核中)
-
表单提交的操作完成了,下面就开始论到审核操作的流程了
首先,要有一个待我审批的入口,查询出所有待我审核的表单
-
将
AuditFlow
表和
AuditFlowDetail
表通过FlowNo关联查询
-
过滤
AuditFlow
表审核状态为1并且
AuditFlowDetail
表审核状态为2的数据