一、前言

近期有些同学问起流程的表设计,终于有时间能写下博客,并整理下之前所发布的文章。
之前的文章讲到的表设计,没有给全且还存在漏洞,在这里向各位同学表示歉意。这是我个人最新领悟的一些流程思维,欢迎大家指正。关于流程审批,涉及的操作比较多,本章仅考虑了1/2/3点。

  1. 审批
  2. 退回
  3. 撤回/收回(指发起者中止流程)
  4. 加签(征求另一人或多人的意见,然后再回到原审批人)
  5. 转发(转发给他人进行审批)
  6. 会签(通常用于审批后给相关的人签字确认,以获得工作上的协调。)
  7. 知会(注意与“会签”的区别,“会签”是要留签字的,知会只是个认指定的人知道有这个流程这么回事,并能查看流程)
  8. 沟通(与流程相关人员就流程问题进行沟通,类似留言或论坛方式)

二、解决流程业务

这是常见到的两种流程场景过程,此类流程都明确规定了每个流程节点必须指定到某一操作人(不指定操作人不在本讨论范围内)。
1.学生请假流程图
2.学生离校手续申请流程图


两种流程各有一些不同,在“学生请假流程”中,学生可以多次申请,且流程业务的走向由表单的相关数据来决定。而在“学生离校手续申请流程”中,学生只能申请一次,且存在多个部门同时处理业务的过程,而归纳节点(暂且这样称呼)必须等待前置节点完成后方可进行审批。

三、表设计

表名:v1_flow(流程表)
序号 列名 数据类型 长度 小数位 标识 主键 外键 允许空 默认值 说明
1 id int 11 是 是 否 auto_increment
2 name varchar 255 是 流程名称
3 form_id int 11 是 表单设计编号
4 process_id int 11 是 流程设计编号
5 limit_times int 11 是 -1 一个用户可以发起多少次,-1=不限制
6 is_lock tinyint 4 是 是否锁定
表名:v1_flow_activity(流程活动表)
序号 列名 数据类型 长度 小数位 标识 主键 外键 允许空 默认值 说明
1 id int 11 是 是 否 auto_increment
2 sponsor int 11 是 活动发起者
3 title varchar 255 是 标题
4 status varchar 255 是 状态,0=仅保存,1=运行中,2=已中止,9=已结束
5 join_time bigint 15 是 加入时间戳
6 flow_id int 11 是 当前运行的流程编号,对应v1_flow表的id
7 cur_process_id int 11 是 当前运行的流程设计编号
8 cur_form_id int 11 是 当前运行的表单设计编号

cur_process_id和cur_form_id设计的目的:有些流程在流程活动运行过程中,更改了表单设计编号或流程设计编号。为让流程能继续往下运行而设计。

表名:v1_flow_activity_process(流程活动运行表)
序号 列名 数据类型 长度 小数位 标识 主键 外键 允许空 默认值 说明
1 id int 11 是 是 否 auto_increment
2 activity_id int 11 否 流程活动编号,对应v1_flow_activity表的id
3 run_node_id int 11 否 当前运行的节点编号,对应v1_flow_node表的id
4 arrive_time bigint 15 否 信息到达时间戳
5 accept_user_id int 11 否 0 接收用户编号
6 accept_status tinyint 4 是 0 接收信息状态,1=已接收,0=尚未接收
7 accept_time bigint 15 是 接收时间戳
8 done_user_id int 11 否 0 审批人编号(审批人不一定是接收的用户)
9 done_status tinyint 4 否 0 审批状态,1=已审批,0=为尚未审批
10 done_time bigint 15 是 审批时间戳
表名:v1_flow_form(表单设计表)
序号 列名 数据类型 长度 小数位 标识 主键 外键 允许空 默认值 说明
1 id int 11 是 是 否 auto_increment
2 name varchar 255 是 表单设计名称
3 data_table varchar 255 是 数据表表名
4 title_scheme varchar 255 是 流程活动的标题构成方式,如:#{student_no}#{user_name}请假申请
5 layout varchar 1000 是 表单设计HTML代码
表名:v1_flow_form_element(表单元素表)
序号 列名 数据类型 长度 小数位 标识 主键 外键 允许空 默认值 说明
1 id int 11 是 是 否 auto_increment
2 form_id int 11 否 所属表单设计编号
3 type varchar 255 否 表单类型,text/select/radio/checkbox/button等
4 label varchar 255 否 标记名称
5 name varchar 255 否 表单元素名称
6 data_source varchar 500 是 数据源,select/radio/checkbox会存在
7 data_type varchar 50 否 数据类型,int/varchar等
8 data_length int 11 是 数据长度
9 default_value varchar 255 是 默认值
10 placeholder varchar 255 是
11 styles varchar 255 是 样式
12 attributes varchar 255 是 属性
13 is_hidden tinyint 4 否 是否隐藏
表名:v1_flow_process(流程设计表)
序号 列名 数据类型 长度 小数位 标识 主键 外键 允许空 默认值 说明
1 id int 11 是 是 否 auto_increment
2 name varchar 255 是 流程设计名称
表名:v1_flow_node(流程节点表)
序号 列名 数据类型 长度 小数位 标识 主键 外键 允许空 默认值 说明
1 id int 11 是 是 否 auto_increment
2 process_id int 11 是 所属流程设计编号,对应v1_flow_process表的id
3 node_name varchar 50 是 节点名称
4 node_type varchar 255 是 节点类型,1=开始节点,2=收纳节点,3=子流程节点,9=结束节点
5 write_forms varchar 200 是 可写字段集合
6 operator int 11 是 指定的审批人用户id,可留空
7 operator_type tinyint 4 是 审批人类型,此项可自行设计,如-1=自行选择,1=发起者的班主任,2=发起者所在部门的二级学院学生科科长,3=发起者所在部门的二级学院领导等
8 allow_back tinyint 4 是 是否允许回退操作
9 back_step tinyint 4 是 1 回退操作步长,1=一步,2=两步
10 styles varchar 500 是 节点样式,长宽高top/left等
11 actions varchar 200 是 节点审批后的回调方法(钩子),需要程序具体实现
12 condition_prev tinyint 4 是 2 所有前置节点(可能存在多个前置节点)能运行到当前节点的方案,1=只要有一个审批完成即可,2=必须所有的审批完成即可

关于子流程,本章未做考虑

表名:v1_flow_process_procedure(流程设计步骤/线程表--即节点之间的线走势)
序号 列名 数据类型 长度 小数位 标识 主键 外键 允许空 默认值 说明
1 id int 11 是 是 否 auto_increment
2 cur_node_id int 11 是 当前节点id,对应v1_flow_node表的id
3 next_node_id int 11 是 下一节点id,对应v1_flow_node表的id
4 limit_hour int 255 是 -1 节点之间限制多少小时内必须审批,-1=不限制
5 condition_next_data varchar 1000 是 能往下一节点运行的数据条件,如请假中流程可设置#{days}>=3
表名:v1_flow_data1(流程编号为1的数据表-请假表)
序号 列名 数据类型 长度 小数位 标识 主键 外键 允许空 默认值 说明
1 id int 11 是 是 否 auto_increment
2 dept_name varchar 50 是 学生所在二级学院
3 major_name varchar 50 是 学生专业
4 classes_name varchar 50 是 学生行政班级
5 user_id int 11 是 用户id
6 student_no varchar 50 是 学号
7 user_name varchar 50 是 姓名
8 sq_timeBegin bigint 15 是 请假开始时间戳
9 sq_timeEnd bigint 15 是 请假截至时间戳
10 sq_days int 11 是 请假天数
11 sq_reason varchar 200 是 请假事由
12 banzhuren varchar 100 是 班主任姓名
13 banzhuren_shenpi varchar 25 是 班主任审批结果
14 banzhuren_shenpi_text varchar 255 是 班主任审批意见
15 xsk2 varchar 255 是 二级学院学生审批审批人姓名
16 xsk2_shenpi varchar 255 是 二级学院学生审批结果
17 xsk2_shenpi_text varchar 255 是 二级学院学生审批意见
18 lingdao2 varchar 255 是 二级学院领导姓名
19 lingdao2_shenpi varchar 255 是 二级学院领导审批结果
20 lingdao2_text varchar 255 是 二级学院领导审批意见
21 xsk varchar 255 是 学校学生科审批人姓名
22 xsk_shenpi varchar 255 是 学校学生科审批结果
23 xsk_shenpi_text varchar 255 是 学校学生科审批意见
24 xjr varchar 255 是 销假人姓名
25 xj_days varchar 255 是 销假天数
26 xj_time datetime 是 销假时间
27 xjshr varchar 255 是 销假审核人姓名
28 xjshr_shenhe varchar 255 是 销假审核结果
29 xjshr_shenhe_text varchar 255 是 销假审核意见

数据库表结构和简单数据
https://files.cnblogs.com/files/kingeric/zmoa.zip

关于OA流程相关数据表的设计的更多相关文章

  1. Zabbix的history相关数据表数据太大,执行表分区操作过程

    一.查询zabbix数据库大小 mysql> select table_schema, concat(truncate(sum(data_length)/1024/1024,2),' mb') ...

  2. 夺命雷公狗---Thinkphp----4之数据表的设计

    我们这次来写的项目是仿http://yispace.net/39765.html而写的, 这里其实也就那回事,主要有标题和内容,和栏目, 文章页就更加的简单,其实也就那及格字段即可,我们分享得出的结果 ...

  3. K8 系统中省市县数据表的设计可以反映出什么? 通过一个基础业务表的设计品味软件系统的整体架构

    1:没有严谨的Id思想,不变化的Id思想,看不见的Id的思想. 2:数据不严谨,没有上下级关系,没有树形结构,ParentId 的思想. 3:表之间的关系都是弱关联,基础数据一修改业务数据就容易乱套. ...

  4. sql数据表的设计思路

    好的表结构分的比较细致,个人理解大概主要分为主表.明细.历史记录表.中间表,辅助表结构应该分为:类型表.状态表.统计表.统计明细表等.为了一个功能加那么多表实在是多余,如果写一个非常复杂的业务逻辑还是 ...

  5. [Oracle]根据字段值全库搜索相关数据表和字段

    这个需求比较冷门,但对于在某些特定的情况下,还是会有这样的需要的.好在Oracle实现还比较方便,用存储过程则轻松实现. 查询字符串: create or replace procedure sear ...

  6. Activiti数据表

    --1:资源库流程规则表SELECT * FROM JEESITE.act_re_deployment --部署信息表SELECT * FROM JEESITE.act_re_model --流程设计 ...

  7. Activiti工作流框架学习(一)——环境的搭建和数据表的了解

    一.什么是工作流 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程自动进行,从而实现 ...

  8. activiti数据表介绍

    activiti6.0数据库介绍 Acitiviti6.0数据库中一共有28张表,表的命名都是以ACT_开头的.第二部分是一个两个字符用例表的标识. 用于自我学习记录,后期不定期更新~~~ 数据库描述 ...

  9. Activiti学习(二)数据表结构

    Activiti工作流引擎数据库表结构 数据库表的命名 Acitiviti数据库中表的命名都是以ACT_开头的.第二部分是一个两个字符用例表的标识.此用例大体与服务API是匹配的. l        ...

随机推荐

  1. K8s Helm安装配置入门

    作为k8s现在主流的一种包部署方式,尽管不用,也需要进行一些了解.因为,它确实太流行了. 这一套太极拳打下来,感觉helm这种部署,目前还不太适合于我们公司的应用场景.它更适合需要手工编程各种yaml ...

  2. mysql5.6采集数据插入出现MySQL server has gone away解决办法

    当做网站有一个站要用到WEB网页采集器功能,当一个PHP脚本在请求URL的时候,可能这个被请求的网页非常慢慢,超过了mysql的 wait-timeout时间,然后当网页内容被抓回来后,准备插入到My ...

  3. VIJOS-P1282 佳佳的魔法照片

    洛谷 P1583 魔法照片 洛谷传送门 JDOJ 1396: VIJOS-P1282 佳佳的魔法照片 JDOJ传送门 Description 一共有n个人(以1--n编号)向佳佳要照片,而佳佳只能把照 ...

  4. Kinect v2控制鼠标原理分析和源码

    https://blog.csdn.net/baolinq/article/details/54381284 此程序为利用Kinect v2实现用手指隔空控制鼠标,是我另一个项目的一部分,因为在另外那 ...

  5. ES6异步操作Promise

    什么是Promise Promise是异步编程的一种解决方案,说白了就是一个构造函数,带有all,reject,resolve这几个方法,圆形上有then,catch等方法 Promise的特点 对象 ...

  6. Ubuntu-tools安装

    1.tools灰色 2.虚拟机→→安装VMware Tools 跳到压缩包文件:VMwareTools-10.3.2-9925305.tar.gz 任意复制到某个路径,如桌面 打开终端,cd进入文件所 ...

  7. 4-OpenResty 配置 https 访问

    首先是下载证书  https://www.cnblogs.com/yangfengwu/p/11809757.html 因为咱用的 Nginx 所以 修改这个 server { listen ssl; ...

  8. 图的遍历 | 1034 map处理输入数据,连通块判断

    这题写得比较痛苦.首先有点不在状态,其次题目比较难读懂. “Gang”成立的两个条件:①成员数大于两个  ②边权总和大于阈值K 首先,在录数据的时候通过map或者字符串哈希建立string到int的映 ...

  9. 洛谷[SHOI2002]滑雪题解

    什么破题啊 简直就是浪费我时间! 我每天还被我xf定目标了不知道嘛! 题目 朴素的搜索只能得90分 #include <cstdio> #include <iostream> ...

  10. R语言排序 -- sort() order() rank()

    order() 的返回值是对应“排名”元素所在向量中的位置.注意返回的不是元素本身,而是元素的位置. sort() 是直接对向量中的元素进行排序,返回的是排序后的元素组成的向量. rank() 是求秩 ...