专栏名称: Java基基
一个苦练基本功的 Java 公众号,所以取名 Java 基基
目录
相关文章推荐
一念行者  ·  布袋和尚及其布袋的解读 ·  昨天  
河北青年报  ·  100+脑洞大开的问题,带你走进神奇的数学世界 ·  2 天前  
河北青年报  ·  100+脑洞大开的问题,带你走进神奇的数学世界 ·  2 天前  
超级数学建模  ·  限时领 | 迪士尼神奇英语 ... ·  3 天前  
超级数学建模  ·  大学四年,我暗恋的女神,突然主动喊我...... ·  3 天前  
51好读  ›  专栏  ›  Java基基

企业级 OA 多级审批流程设计、实现方案(细节满满)

Java基基  · 公众号  ·  · 2024-06-07 11:55

正文

👉 这是一个或许对你有用 的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入 芋道快速开发平台 知识星球。 下面是星球提供的部分资料:

👉 这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号等等功能:

  • Boot 地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • Cloud 地址:https://gitee.com/zhijiantianya/yudao-cloud
  • 视频教程:https://doc.iocoder.cn

来源:blog.csdn.net/cslx5zx5/
article/details/107566070


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/

审批流主表 AuditFlow

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/

审批流明细表 AuditFlowDetail

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,因为用户是根据部门走的,那么还需要设计一张部门表,再设计一张用户和部门相关联的表,把用户和部门联系起来,就可以从部门中选取相应角色。当然简单点的逻辑可以不用部门,直接搜索全部用户,这里就不再设计了哈。

有了用户表和审批业务核心表,接下来就可以根据公司业务需求,来设计相关的审批流程业务表了,这里就拿加班申请来举个例子,当用户需要进行加班的时候,肯定是需要走审批流程的,那么再来设计一张加班申请表

加班表 OverTimeAsk

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) 加班总小时

此时,再回到文章一开始的流程,脑海中的思路是不是就慢慢的浮现出来了呢,嘻嘻

库设计好了,剩下的就是由程序实现完成了,那么问题又来了,如何去实现呢?借助问题,来进行驱动成长,下面就来探讨具体如何实现。

有了以上设计的表做铺垫,就可以为所欲为啦!

填写完加班申请表单,选择部门相关负责审批人,如主管,部门经理,总经理,此时进行表单提交

提交需要进行的操作

  • 录入当前审批业务表,也就是加班申请表的数据
  • 审批流主表插入一条数据
  • 审批流明细表插入三条数据
  • 对添加的第一个审核人发送相关通知消息

注意要点:

  1. 以上三条是同时进行操作,必须要满足事务,否则数据会出现问题
  2. 三条数据插入的 FlowNo 字段必须是相同的
  3. 插入审批流主表数据的时候, BusType 字段的值可以设置为 OverTimeAsk ,审核状态默认1(待审核)
  4. 插入审批流明细表数据的条数取决与用户提交表单选择的审核人数量,如这里选择了三个审批人,就需要插入三条数据,第一条的审核状态 设为 2(待我审批),其他两条的审核状态设为1(审核中)
  5. 插入加班申请表对月份进行判定,不允许跨月加班

表单提交的操作完成了,下面就开始论到审核操作的流程了

首先,要有一个待我审批的入口,查询出所有待我审核的表单

  • AuditFlow 表和 AuditFlowDetail 表通过FlowNo关联查询

  • 过滤 AuditFlow 表审核状态为1并且 AuditFlowDetail 表审核状态为2的数据







请到「今天看啥」查看全文