企业项目管理、ORK、研发管理与敏捷开发工具平台

网站首页 > 精选文章 正文

如何在不使用流程引擎的情况下设计一套数据库表来完成审批流程?

wudianyun 2024-12-19 10:05:23 精选文章 12 ℃

相信流程引擎应该是很多开发者最头疼的问题,在很多项目中,使用流程引擎开发工作量太大不划算,不使用流程引擎又无法实现单线的审批,这可难坏了我们的很多的开发同学,下面我们就来看一下如何在不使用流程引擎的情况下,通过一套数据库表来完成流程配置开发。

数据库表说明

在正常情况下,一套流程包括流程信息以及流程节点信息。所以在设计表的时候,必须要用到的两张表就是流程表和节点表。如下所示。

审批流程表(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)
);

这些建表语句创建了用户表、审批流程表、审批步骤表和审批记录表,用于支持并行审批的功能。在实际应用中,你可能还需要根据具体需求进行表结构的调整和优化。

Tags:

最近发表
标签列表