本篇博客的主要内容是:设计【请假申请】相关的数据表;

目录

一:【多级请假审批流程】的数据库设计:分析

1.请假工作流程图

2.工作流程表的设计分析

3.设计约束

二:具体表设计

1.leaveForm请假单表,processFlow审批任务流程表,notice消息通知表:表设计

(1)leaveForm请假单表

(2)processFlow审批任务流程表

(3)notice消息通知表

2.leaveForm请假单表,processFlow审批任务流程表,notice消息通知表:实例说明


一:【多级请假审批流程】的数据库设计:分析

1.请假工作流程图

具体详细流程要求可以看下:OA系统二:项目介绍:需求介绍;功能展示;。对于上面这种工作流程,【底层应该如何设计数据库表】,【程序中又该如何对这些数据进行控制】是重点!

说明一点:部门经理提交的请假申请,无论请假时长是多长,都是需要总经理审批的。

……………………………………………………

2.工作流程表的设计分析

(1)LeaveForm请假单表:员工在申请请假的时候,需要在前台浏览器界面填写请假申请表单,表单的信息就会存储在LeaveForm这个表中;(PS:Leave除了有离开的意思外;还有假期、准许的意思)

(2)ProcessFlow审批任务流程表:员工将请假表单提交后,这个请假需要谁审批就已经确定了(也就是,这请假需要那些审批流程就已经确定了),而这些审批流程就会存储到ProcessFlow表中;

【需要哪些审批流程】归纳如下:(2021-06-08补充)

      ● 普通员工请假时长大等于72小时,有三个审批环节:【普通员工自己审批自己,这个环节默认直接通过】+【部门经理审批】+【总经理审批】;

      ● 普通员工请假时长小于72小时,有两个审批环节:【普通员工自己审批自己,这个环节默认直接通过】+【部门经理审批】;

      ● 部门经理请假(无论多长时间,都需要总经理审批),有两个审批环节:【部门经理自己审批自己,这个环节默认直接通过】+【总经理审批】;

      ● 总经理请假,有一个审批环节:【总经理自己审批自己,这个环节默认直接通过】;

(3)Notice消息通知表:一张辅助表;我们希望这样:

      ● 某个请假申请提交后,能及时给下一个审批环节的人发送【“有一个请假需要你审批”的通知】;

      ● 然后,请假在某个环节被审批通过后,能及时再给下一个审批环节的人发送【“有一个请假需要你审批”的通知】,同时给请假的人发送【“你的请假申请在***环节已经被审批了,审批通过;然后等待下一个**环节审批”的通知】;

      ● 然后,请假在某个环节被审批不通过后,能及时给给请假的人发送【“你的请假申请在***环节已经被审批了,审批不通过”的通知】

整体来看,请假流程并不复杂,但是这儿是在工作中常见的数据库设计:【任务流程的数据库设计】。请假是一个典型的工作流程,对于这种线型的工作流程,在数据上如何表示,是这部分的重点。

……………………………………………………

3.设计约束

(1)LeaveForm请假单表的每一条记录都是一个审批流程;

(2)员工要想请假,需要在前台页面上填写一个请假的表单,然后提价这个表单,然后这个请假的表单数据就会存储到【LeaveForm请假单表中】;然后,会按照业务规则去生成对应的所有的审批环节,即也就是在【ProcessFlow审批任务流程表】创建相应的记录;

(3)这个很容易理解;比如研发部的部门经理只能审批研发部员工提交的请假申请;总经理可以审批所有部门员工的请假申请;

(4)没什么好说的;

(5)没什么好说的;

(6)产生的任何操作,都要以系统通知的方式,通知相关人等;(这条的目的是为了让系统有更好的用户体验)


二:具体表设计

1.leaveForm请假单表,processFlow审批任务流程表,notice消息通知表:表设计

(1)leaveForm请假单表

员工(包括普通员工、部门经理、总经理)每填写一个请假申请表单,提交一个请假申请后;都会在LeaveForm表中增加一条记录。

说明:

(1)form_type:请假类型,在表设计的时候就已经确定了;所以,在前台设计后后台编写逻辑代码的时候,需要清楚form_type字段不同的值代表的不同的意思;

(2)start_time和end_time:表示请假的起止时间,通常约束到小时就够了;

(3)create_time:即这条记录的创建时间;这不是一个和业务相关的字段;一般员工在前台页面上填写好请假表单并点击提交后,紧接着与之对应的在【LeaveForm请假单表】中就会创建一条记录,create_time就是创建这条记录的时间;

(4)state:请假申请的当前的状态;(PS:以前做项目的时候,这些固定的值,在编写java代码的时候,都写死在了某些配置文件中,我们直接调用……

(2)processFlow审批任务流程表

员工(包括普通员工、部门经理、总经理)每填写一个请假申请表单,提交一个请假申请后;就会在LeaveForm表中增加一条记录;;;因为请假申请提交后,这个申请需要走一个审批流程,ProcessFlow表就是存储这个审批流程的。

说明:

(1)form_id:是LeaveForm请假单表中的主键;即【ProcessFlow审批任务流程表】和【LeaveForm请假单表】通过form_id字段形成了主外键的关联;【ProcessFlow审批任务流程表中的form_id字段】主要是用来说明,当前的执行流程是针对于哪一个申请的;

(2)operator_id:经办人编号;因为当前的审批任务是需要不同的人来完成的(比如这个审批任务是需要部门经理去审批的);operator_id就是指明这个任务需要由谁来处理。其实operator_id是和员工表对应的,比如研发部的基层员工提交了一个请假申请,那么这个审批任务接下来就需要研发部的部门经理齐子墨来处理,那么此时operator_id就为2;

(3)action:apply表示当前流程是申请流程,audit表示当前流程是审批流程。

(4)result:表示审批的结果;表示审批结果:同意或者驳回;自然,该字段可以是空;(具体为什么,可以看下下面的例子)

(5)reason:审批意见;自然该字段也是可以是空的;(具体为什么,可以看下下面的例子)

(6)audit_time:审批时间:就是审批时间啊;自然该字段也是可以是空的;(具体为什么,可以看下下面的例子)

(7)order_no:任务的序号;比如,一个普通员工提交一个超过时间72小时请假申请后,那么这个申请(假设部门经理会审批通过啦)需要经过【普通员工提交请假任务】,【部门经理审批】,【总经理审批】三个处理阶段,那么就可以使用1,2,3来表示【这个请假申请审批的三个阶段啦】;

(8)state:请假申请“当前”的处理状态;

(9)is_last:比如,如果一个普通员工提交了一个小于72小时的请假申请,那么【部门经理的那个流程】就是最后的节点;如果一个普通员工提交了一个大于72小时的请假申请,那么【部门经理的那个流程】就不是最后的节点,【总经理的那个流程】才是最后的节点;

(3)notice消息通知表

辅助系统的正常运行,这个表的目的是为了让系统有更好的用户体验;在每产生一些【新的表单申请】或者【表单申请每走到一个新的流程】的时候,系统都会给对应的人发出相应的消息;

说明:

(1)receiver_id:这条消息要给谁看;比如,当4号员工研发部宋彩妮提交一个请假申请时,那么这个请假申请需要研发部部门经理齐子墨审批,,即其就会在notice表中增加一条记录,这条记录的receiver_id就为2;表示这条消息是要给employee_id=2的研发部经理齐子墨看的;

2.leaveForm请假单表,processFlow审批任务流程表,notice消息通知表:实例说明

LeaveForm请假单表:

(1)因为,【研发部基层员工宋彩妮】刚提交了请假申请,所以state字段值为processing;表示这个请假表单的当前的状态是正在审批中;

(2)【研发部基层员工宋彩妮】是在【2020-09-14 09:02:35】提交的这个请假申请;

 ProcessFlow审批任务流程表:

(2021-06-06补充)一旦【研发部基层员工宋彩妮】提交了一个请假申请后,在LeaveForm表中就会添加一条请假单记录。(同时【研发部基层员工宋彩妮】的这个请假需要谁审批就已经确定了,因为这个请假时长大于72小时,所以需要【宋彩妮自己审批自己,这个环节默认直接通过】+【部门经理审批】+【总经理审批】;三个环节;;;所以:)基本在同一时间(或延迟几十毫秒或者几百毫秒或者几十秒后)也会在process_flow表中生成三个审批环节的数据;

第一条记录:

(1)因为上面三条流程记录都是针对LeaveForm请假单表中【研发部基层员工宋彩妮提交的那条申请】;自然【 ProcessFlow审批任务流程表中的form_id=1】喽;

(2)【研发部基层员工宋彩妮】提交的请假申请在【宋彩妮自身这一环就会自动被审批通过】,所以第一记录的state=complete; 然后,【研发部基层员工宋彩妮提交的请假申请】在【研发部基层员工宋彩妮】这儿是处理流程的第一环,自然order_no=1;

(3)因为这个请假申请是【研发部基层员工宋彩妮】发起的,所以这个请假在【研发部基层员工宋彩妮】这一环是申请,即action=apply;;

………………………………

第二条记录:

(1)因为,当前环节需要【部门经理齐子墨】审批,所以operator_id=2;;;;;然后,因为请假申请在【部门经理齐子墨】这一环需要的操作是审批,即action=audit;

(2)然后,这个例子中,我们演示的是在【部门经理齐子墨】这一环审批通过了;;然后,紧接着这个请假申请就会被传递到下一环【总经理张晓涛那一环】;

……………………………………………………

第三条记录:

(1)请假申请在【部门经理齐子墨】那一环审批通过后;然后就被传递到了【总经理张晓涛那一环】;然后,在【总经理张晓涛这一环】,总经理目前还没审批,自然就是上面的状态,state=process表示正在处理。

(2)当总经理,审批后,第三条记录的空白内容就会有内容了;然后任务的状态state就会变成complete;

(3)因为【总经理张晓涛这一环】是最后一环,即is_last=1;如果这一环审批后,即state=complete后,表示【研发部基层员工宋彩妮】提交的这个请假申请的整个流程就走完了。。。然后在LeaveForm请假单表中【研发部基层员工宋彩妮】请假申请的那条记录的state也需要修改为approved(审批通过),或者refused(驳回)了:

……………………………………………………

可以发现,从 ProcessFlow审批任务流程表的state字段,数据库DBA就可以知道每一个请假申请在审批流程中经过了那些流程;也可以知道哪些请假申请已经审批完成了,哪些请假申请还没被审批完成;

notice消息通知表:

(1)时间说明如下:(2021-06-08补

OA系统十五:请假申请一:【请假申请】这个内嵌界面的数据库设计;(即请假申请这个线型工作流程的数据库设计!)相关推荐

  1. OA系统二十:请假审批一:审批功能概述;显示【请假审批】这个内嵌界面中【待审批请假数据】的SQL语句;

    本篇博客的主要内容就是:在请假审批这个内嵌界面中,显示待审批请假数据的SQL语句: 目录 1.[请假审批]功能需要实现什么? 2.[请假审批界面]中[待审批请假数据]之:SQL语句 (1)审批列表中需 ...

  2. 【转】pacs定位线_C#开发PACS医学影像处理系统(十五):Dicom影像交叉定位线算法

    转自:https://www.cnblogs.com/Uncle-Joker/p/13686618.html 1.定位线概念:某个方位的影像在另一个方向的影像上的投影相交线,例如横断面(从头到脚的方向 ...

  3. OA系统十九:请假申请五:【请假申请】这个内嵌页面的前台文件;设置【点击左侧菜单栏的“请假申请”后】在首页的“功能区”显示【请假功能】这个内嵌页面;

    本篇博客的主要内容是: 本篇博客有几点特别说明下: (1)前端的东西挺复杂的,感受到了[学会一个成熟的前端框架]的重要性.毕竟,框架可以提高前段文件的开发效率,简化开发步骤! (2)前端的Ajax请求 ...

  4. OA系统十七:请假申请三:【请假申请】这个内嵌界面中【提交请假表单数据】的Service层;(PS:在EmployeeDao中初次遇到@Param()参数设置)

    本篇博客的主要内容是:  本篇博客的需要注意的点有: (1)根据业务需求,规划好整体的代码结构和编码逻辑: (2)一种目前认可的编程小细节:(PS:随着以后经验增多,可能会抛弃这种想法,或者有其他理解 ...

  5. OA系统十八:请假申请四:【请假申请】这个内嵌界面中【提交请假表单数据】的Controller层;

    本篇博客的主要内容是: 本篇博客需要注意的点: (1)一种策略,或称之为一种思想:一个Controller的url设置成通配符的形式,从而实现不同的请求调用不同方法: (2)加深感受下Session这 ...

  6. OA系统十六:请假申请二:【请假申请】这个内嵌界面中【提交请假表单数据】的SQL语句和Dao层;

    本篇博客的主要内容是: 本篇博客的主要目的是:创建与"请假流程有关的"[LeaveForm请假单表.ProcessFlow审批任务流程表.Notice消息通知表]三张表的底层的Da ...

  7. pacs定位线_C#开发PACS医学影像处理系统(十五):Dicom影像交叉定位线算法

    1.定位线概念:某个方位的影像在另一个方向的影像上的投影相交线,例如横断面(从头到脚的方向)在矢状面(从左手到右手)上的影像投影面交线. 举个例子:右边的是MR(核磁共振)的某一帧切片,这是从头开始扫 ...

  8. Matlab GUI编程技巧(十五):scroll滚动到组件内的位置及ScrollBar动画演示

  9. php完整表单实例,PHP学习(五) 完整表单实例 HTML内嵌PHP

    创建 index.php 文件 (想把php内嵌到HTML 该文件格式必须为 .php) 菜鸟教程(runoob.com) .error {color: #FF0000;} // 定义变量并默认设置为 ...

最新文章

  1. 关于python语言、下列说法不正确的是-下列语句中,___________是不正确的Python语句...
  2. FIFO and DMA
  3. uni-app 用户地理位置授权
  4. Android开发之EditText限制输入中文以及字数长度限制的标准姿势
  5. QT程序在windows下部署发布
  6. php 中 map和array,浅析php中array_map和array_walk的使用对比
  7. 模拟电子技术基础笔记(2)——半导体基础知识
  8. UML统一建模语言——类图、时序图
  9. 中医药天池大数据竞赛——中医文献问题生成挑战(二)
  10. python pygame字体设置_2015/11/3用Python写游戏,pygame入门(3):字体模块、事件显示和错误处理...
  11. 计算机视觉隐私安全,震惊:用手机拍照也可以暴露大量个人隐私
  12. android 解析json 日期格式,处理Json数据中的日期类型.如/Date(1415169703000)/格式
  13. 使用pypcd读取pcd时ValueError: field ‘__0000‘ occurs more than once错误
  14. 直流电机的快衰减和慢衰减模式分析
  15. 百度排名与谷歌排名规则
  16. 彩云小译怎么翻译网页_彩云小译插件,中英双语对照网页翻译,支持视频字幕翻译...
  17. 吐血整理 这200道阿里P6必备Java面试题,我简直太爱了
  18. React使用Video.js播放rtmp,hls视频
  19. android4.4.4linux内核下载,Android 4.4源码下载
  20. 【神经网络】多层感知机

热门文章

  1. 轻量级复式记账工具Beancount推荐使用心得
  2. 域策略怎么分发计算机软件,AD域中如何布置软件自动分发
  3. 毕业论文查重怎么操作?
  4. java公社博客_Java面向对象开发学习笔记(一)
  5. 线阵相机的优势是什么?如何选择线阵相机?
  6. CSS给元素添加边框(样式、颜色、宽度)
  7. Typora基础用法
  8. Google Earth Engine(GEE)——NDWI水体阈值的监测
  9. 改进YOLOv5、YOLOv8系列:29.YOLOv5 结合 极简又强大的RepVGG 重参数化模型结构
  10. SSM+高校食堂外卖服务小程序 毕业设计-附源码200910