OA多级审批流程表设计方案以及开发思路(非常细节)

2023-05-16

OA(office automation) 想必大家都已不陌生,甚至还非常熟悉,是的没错,本文就来讲解一下OA中的核心业务,审批流程是如何一步步实现的。


本文干货满满,建议静下心来细细品

被审核流程

首先填写好表单相关信息,然后点击审批人,从公司部门树中点击相应部门,加载部门相关角色用户,最后再指定审批人
部门树
值得吹嘘的一点是这里的审批人可供用户自行动态选择,并且审批层级也是随着审批人的数量动态增减

以加班表单为例子
加班审批
指定完成之后,点击提交即可。
然后再由相应的审批人逐级进行审批,当其中有一个不通过,则整个流程不
通过,当所有的审批人全部通过才可通过


OK流程已经清楚了,接下来我们来进行表结构的设计
只需要两张核心的审批表即可,其他需要进行审批流的业务表通过审批流编号FlowNo 关联这两张核心业务表,我们来看一下

审批流主表 AuditFlow

Column NameData TypeDescribe
FlowNoVarchar(50) not null primary key审批编号返回yyyMMddHHmm+n位随机数
TitleNvarchar(50) not null标题(例如:某某人的加班申请)
BusTypeVarchar(20) not null审批类型(根据业务表定义Code,区分表单)
AddUserNoDatetime not null申请人
AddTimeVarchar(50) not null添加时间
ApproStatusInt not null审核状态(1.待审,2.通过.3.驳回,4.撤销)

这两张表的关系是一对多,明细表的数量取决与表单提交添加的审核人数量
ApproFlow:1 =======> n :ApproFlowDetail

审批流明细表 AuditFlowDetail

Column NameData TypeDescribe
IDInt not null primary key identity(1,1)主键自增列
FlowNoVarchar(50) not null审批编号,关联主表
AuditUserNoVarchar(50) not null审核人
AuditRemarkNvarchar(500)审核备注
AuditTimeDatetime审核时间
AuditStatusInt not null审核状态(1.审核中,2.待我审批.3.通过,4.驳回)

如此一来,OA审批流程的两张核心业务表就设计完成了.
那么问题来了,其他相关表呢?
别急,慢慢来嘛。首先用户表肯定是需要的,因为表单申请人和审核人都是关联的用户No,因为用户是根据部门走的,那么还需要设计一张部门表,再设计一张用户和部门相关联的表,把用户和部门联系起来,就可以从部门中选取相应角色。当然简单点的逻辑可以不用部门,直接搜索全部用户,这里就不再设计了哈。

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

加班表 OverTimeAsk

Column NameData TypeDescribe
FlowNoVarchar(50) not null primary key关联AuditFlow表
AddUserNoVarchar(20) not null添加用户No
AddTimeDatetime not null添加时间
AskReasonNvarchar(50) not null加班事由
RemarkNvarchar(100)备注
LeaveTimeFromDatetime not null加班开始时间
LeaveTimeToDatetime not null加班结束时间
OverTimeHoursdecimal(10,2)加班总小时

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

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

有了以上设计的表做铺垫,就可以为所欲为啦!
填写完加班申请表单,选择部门相关负责审批人
如主管,部门经理,总经理,此时进行表单提交

提交需要进行的操作

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

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

表单提交的操作完成了,下面就开始论到审核操作的流程了
首先,要有一个待我审批的入口,查询出所有待我审核的表单

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

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

     也可以根据AuditFlow表的BusType字段进行审批表单的分类
    

审核操作,基本上分为审核通过和不通过, 当然也可以根据业务自行扩展其他的审核操作。

实现思路与细节如下:

  1. 根据表单提交操作来判断审核是否同意
  2. 根据FlowNo和AuditUserNo以及AuditStatus为2(待我审批) 的条件去查询AuditFlowDetail表,如果数据为空,则此单已进行过审核操作,直接返回.
  3. 如果上一条查询的数据不为空,则可以将当前审核明细单数据的审核状态设置为通过or驳回
  4. 如果当前审核明细单的待审核数量大于一,则说明还需要向下一级传递审核,同时将下一级数据的审核状态设置为待我审核,并发送相关通知
  5. 如果当前审核明细单数据全部为审核通过,则将AuditFlow表的审核状态设为通过
  6. 如果当前审核明细单有一条审核不通过,则将AuditFlow表的审核状态设为不通过

实现细节
如果审核同意则,根据FlowNo查询出所有AuditFlowDetail表数据,然后进行过滤,分别统计审核通过和审核不通过的数据条数,并记录第一个审核状态为审核中的数据.此时可根据条件执行上面的第4,5,6条
审核不同意操作大致同上

OK,整个多级审批流程就实现完啦,如果你仔细看完此文,相信你一定会茅塞顿开

当然OA的审批业务远远不止这么一点,还有其他的表单审批,比如工作汇报审批表,还可增加关联的附件表,提交工作内容的同时上传相关文件或者照片存放在服务中,方便审核人随时在线预览或者下载到本地
还可根据业务需求自行扩展相关表单
OA表单
以上所有表单的审批流程都是围绕基于两张核心业务表来实现.

如果有其他问题,欢迎留言咨询,不定期更新

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OA多级审批流程表设计方案以及开发思路(非常细节) 的相关文章

随机推荐

  • 基于SpringBoot实现的小区物业管理系统(含文档)

    一 技术 框架 xff1a springboot xff0c mybatis xff0c html 工具 xff1a idea或者eclipse xff0c navicat 数据库 xff1a mysql 二 功能描述 1 系统管理 小区物
  • JPA 中的entityManager.createNativeQuery()

    在JPA 中的entityManager createNativeQuery sql 我们用来执行原生的sql xff0c 什么叫原生的sql xff0c 你写的这个sql呢 xff0c 放到数据库中拼接上参数就可以直接执行了 代码举例 s
  • SpringMVC配置详解以及工作流程

    1 SpringMVC配置详解 xff1a 配置激活 64 controller和 64 RequestMapping注解的语句配置静态资源过滤器配置视图解析器 xff0c 如果使用freemarker插件视图解析器的配置在后面实现文件上传
  • python两个服务器之间进行文件传输(转载)

    import os import paramiko class SSHConnection object def init self host port username pwd self host 61 host self port 61
  • linux服务器开机启动流程

    Linux服务器开机启动流程顺序 xff1a 通电 gt BIOS gt 主引导记录 xff08 MBR xff09 gt grub引导 gt 加载内核 gt init进程 gt 读取 etc inittab xff08 运行级别 xff0
  • CentOS7升级8及glibc更新尝试

    CentOS7升级8及glibc更新尝试 建国70周年 xff0c 想听我和我的祖国 xff0c 想着下载个网易云音乐 结果启动 xy 64 xycto netease cloud music 发现libgcc版本太低不支持 xff0c o
  • 消息队列3个面试题

    1 在何种场景下使用了消息中间件 xff1f 2 为什么要在系统里引入消息中间件 xff1f 3 如何实现幂等 xff1f 链式调用是我们在写程序时候的一般流程 xff0c 为了完成一个整体功能 xff0c 会将其拆分成多个函数 xff08
  • 华为开发者大会2019观后感

  • element 时间日期选择器限制选择至少7天,快捷选择回调使用methods内的方法

    template部分代码 lt el date picker append to body 61 34 false 34 64 change 61 34 dateChange1 34 v model 61 34 targetTime1 34
  • win7+Ubuntu18.04双磁盘双系统安装踩坑记录

    win7 43 Ubuntu18 04双磁盘双系统安装踩坑记录 重装双系统 之前安装的双系统不知道什么原因不能进入了 xff0c 只能进入win7系统 xff0c 试了很多办法后决定重装ubuntu 1 备份原始Ubuntu重要文件 进入w
  • 指针和函数

    指针和函数 1 形参改变不了实参的值 图1 图1 2 通过地址传递可以改变实参的值 xff1a 图2 注意 xff1a 在图1与图2 在定义函数参数中 a b前 星号 的有无 说明传递的是 实参的地址与实参的值 2 函数参数中如果有数组 都
  • 文件操作

    文件操作 1 文件分类 xff1a 文本文件 xff08 例 xff1a 记事本 xff09 二进制文件 xff08 例 xff1a 视频文件 xff09 xff0c 优点 xff1a 所占内存较小 操作文件地址的两种方式 xff1a 相对
  • 简易文本编辑器

    C语言QT开发简易文本编辑器 文件 xff1a 新建 打开 保存 另存为 推出 编辑 xff1a 撤销 赋值 粘贴 剪切 构架 xff1a 编译 帮助 xff1a 关于 删除下方对框栏 设置textexit全屏 先点击textedit 然后
  • 二叉树编程

    二叉树编程 span class token macro property span class token directive keyword define span CRT SECURE NO WARNINGS span span cl
  • 字符串

    字符串 目标 认识字符串下标切片常用操作方法 一 认识字符串 字符串是 Python 中最常用的数据类型 我们一般使用引号来创建字符串 创建字符串很简单 xff0c 只要为变量分配一个值即可 a span class token opera
  • 集合

    集合 目标 创建集合集合数据的特点集合的常见操作 一 创建集合 创建集合使用 或set xff0c 但是如果要创建空集合只能使用set xff0c 因为 用来创建空字典 s1 span class token operator 61 spa
  • 函数一

    文章目录 函数目标一 函数的作用二 函数的使用步骤2 1 定义函数2 2 调用函数2 3 快速体验 三 函数的参数作用四 函数的返回值作用4 1 应用 五 函数的说明文档5 1 语法5 2 快速体验 六 函数嵌套调用七 函数应用7 1 打印
  • 概率论的基本概念

    概率论的起源与发展 概率论产生于十六世纪十六世纪中叶 xff0c 卡当在赌博时研究不输的方法1654年 xff0c 德 美黑 合理分配赌注问题 1657年 xff0c 惠更斯 论机会游戏的计算 1933年 xff0c 柯尔莫哥洛夫 概率论的
  • java中的常量与变量

    常量 常量 xff1a 在程序运行期间 xff0c 固定不变的量 常量的分类 xff1a 1 字符串常量 xff1a 凡是用双引号引起来的部分 xff0c 叫做字符串常量 例如 xff1a abc Hello 123 2 整数常量 xff1
  • OA多级审批流程表设计方案以及开发思路(非常细节)

    OA office automation 想必大家都已不陌生 xff0c 甚至还非常熟悉 xff0c 是的没错 xff0c 本文就来讲解一下OA中的核心业务 xff0c 审批流程是如何一步步实现的 本文干货满满 建议静下心来细细品 被审核流