网站首页 > 精选文章 正文

相信流程引擎应该是很多开发者最头疼的问题,在很多项目中,使用流程引擎开发工作量太大不划算,不使用流程引擎又无法实现单线的审批,这可难坏了我们的很多的开发同学,下面我们就来看一下如何在不使用流程引擎的情况下,通过一套数据库表来完成流程配置开发。
数据库表说明
在正常情况下,一套流程包括流程信息以及流程节点信息。所以在设计表的时候,必须要用到的两张表就是流程表和节点表。如下所示。
审批流程表(approval_processes)
- id:审批流程ID(主键)
- name:审批流程名称
- description:审批流程描述
审批步骤表(approval_steps)
- id:步骤ID(主键)
- process_id:所属审批流程ID(外键,关联到审批流程表的id字段)
- step_order:步骤顺序
- approver_role:审批人角色(如审批人、领导等)
- approver_id:具体审批人的用户ID(外键,关联到用户表的id字段)
有了这两张表之后,我们就可以完成对于流程的抽象,这里提到了用户以及用户角色,那么也就是说还需要用户以及用户角色表,后续可以按照用户或者是角色来进行审批信息的查询,如下所示。
用户表(users)
- d:用户ID(主键)
- username:用户名
- email:用户邮箱
- role:用户角色(如普通用户、审批人、管理员等)
如何进行审批流程的提交,就需要审批记录表,对于一个审批记录来讲,需要包含审批流程ID,审批结果,审批人等信息。设计审批记录表如下所示。
审批记录表(approval_records)
- d:审批记录ID(主键)
- process_id:所属审批流程ID
- data_id:审批数据ID(如申请表ID)
- current_step_id:当前步骤ID
- status:审批状态(待审批、已通过、已拒绝等)
- result:审批结果(同意、拒绝等)
- approver_id:审批人ID
- approval_time:审批时间
- comments:审批意见
通过上述的设计,就可以实现一个简单的审批流程管理,但是在具体实现过程中,可以对表结构进行扩展调整,例如可以完成并行审批,添加审批附件等功能。同时,通过上述库表设计,我们也看到了,对于审批流程的控制和审批信息的流转也需要通过代码来实现控制,例如,通过当前执行步骤来更新下一步的审批人以及审批状态。这里提供两种实现方案,一种是全流程下发,一种是按照审批节点编写相应的逻辑判断来实现。
建表语句
下面我们给出上述设计的详细表设计。
-- 用户表
CREATE TABLE users (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
role VARCHAR(255) NOT NULL
);
-- 审批流程表
CREATE TABLE approval_processes (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
description TEXT
);
-- 审批步骤表
CREATE TABLE approval_steps (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
process_id BIGINT NOT NULL,
group_id BIGINT NOT NULL,
group_order INT NOT NULL,
approver_role VARCHAR(255) NOT NULL,
approver_id BIGINT,
FOREIGN KEY (process_id) REFERENCES approval_processes(id),
FOREIGN KEY (approver_id) REFERENCES users(id)
);
-- 审批记录表
CREATE TABLE approval_records (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
process_id BIGINT NOT NULL,
data_id BIGINT NOT NULL,
current_group_id BIGINT NOT NULL,
current_group_order INT NOT NULL,
current_step_id BIGINT NOT NULL,
step_status VARCHAR(20) NOT NULL,
step_result VARCHAR(20),
approver_id BIGINT,
step_approval_time TIMESTAMP,
comments TEXT,
FOREIGN KEY (process_id) REFERENCES approval_processes(id),
FOREIGN KEY (data_id) REFERENCES approval_data(id),
FOREIGN KEY (current_step_id) REFERENCES approval_steps(id),
FOREIGN KEY (approver_id) REFERENCES users(id)
);
这些建表语句创建了用户表、审批流程表、审批步骤表和审批记录表,用于支持并行审批的功能。在实际应用中,你可能还需要根据具体需求进行表结构的调整和优化。
猜你喜欢
- 2024-12-19 4000字教你如何创建一个基于Redis构建微服务的反应式架构
- 2024-12-19 Unite3.0主题完美移植知更鸟点赞分享样式教程
- 2024-12-19 解锁新技能
- 2024-12-19 白羊座
- 2024-12-19 JPA自定义ID生成器,雪花算法实现代码分享
- 2024-12-19 信息茧房
- 2024-12-19 如何分享收藏日常
- 2024-12-19 智慧应急通信:跨越障碍,连接应急救援的每一环
- 2024-12-19 可爱的你俩
- 2024-12-19 6类常用传感器接线。
- 最近发表
- 标签列表
-
- 向日葵无法连接服务器 (32)
- git.exe (33)
- vscode更新 (34)
- dev c (33)
- git ignore命令 (32)
- gitlab提交代码步骤 (37)
- java update (36)
- vue debug (34)
- vue blur (32)
- vscode导入vue项目 (33)
- vue chart (32)
- vue cms (32)
- 大雅数据库 (34)
- 技术迭代 (37)
- 同一局域网 (33)
- github拒绝连接 (33)
- vscode php插件 (32)
- vue注释快捷键 (32)
- linux ssr (33)
- 微端服务器 (35)
- 导航猫 (32)
- 获取当前时间年月日 (33)
- stp软件 (33)
- http下载文件 (33)
- linux bt下载 (33)