JAVA审批流程,一个简单表结构设计方案By OU

一、表结构设计

前置:work表

字段名

类型

描述

id

BIGINT

主键,流程ID

name

VARCHAR(255)

流程名称

description

TEXT

流程描述

create_time

DATETIME

创建时间

update_time

DATETIME

更新时间

code

VARCHAR(255)

work编码

implementor

VARCHAR(255)

实现类名(xxxImpl)

1. 流程表(process)

用于存储审批流程的基本信息。

字段名

类型

描述

id

BIGINT

主键,流程ID

name

VARCHAR(255)

流程名称

description

TEXT

流程描述

create_time

DATETIME

创建时间

update_time

DATETIME

更新时间

status

TINYINT(1)

流程状态(0: 停用, 1: 启用)

work_code

VARCHAR(255)work编码

business_id

VARCHAR(255)

2. 节点表(process_node)

用于管理流程中的每个审批节点。

字段名

类型

描述

id

BIGINT

主键,节点ID

process_id

BIGINT

流程ID,外键关联process.id

name

VARCHAR(255)

节点名称

order

INT

节点顺序,从1开始递增

approver_type

TINYINT(1)

审批类型(1: 单人, 2: 多人)

create_time

DATETIME

创建时间

update_time

DATETIME

更新时间

approver_idVARCHAR(255)

申请id

3. 审批人表(approver)-- 审批人加入上面节点信息中

用于存储审批人信息。

字段名

类型

描述

id

BIGINT

主键,审批人ID

name

VARCHAR(255)

审批人名称

email

VARCHAR(255)

审批人邮箱

create_time

DATETIME

创建时间

update_time

DATETIME

更新时间

4. 节点审批人关联表(node_approver)-- 审批人加入上面节点信息中

用于关联审批节点和审批人。

字段名

类型

描述

id

BIGINT

主键

node_id

BIGINT

节点ID,外键关联process_node.id

approver_id

BIGINT

审批人ID,外键关联approver.id

create_time

DATETIME

创建时间

5. 审批实例表(approval_instance)

用于存储审批流程的实例信息(某个具体的审批流程)。

字段名

类型

描述

id

BIGINT

主键,实例ID

process_id

BIGINT

流程ID,外键关联process.id

status

TINYINT(1)

实例状态(0: 待审批, 1: 审批中, 2: 审批通过, 3: 审批拒绝)

create_time

DATETIME

创建时间

update_time

DATETIME

更新时间

6. 审批记录表(approval_log)

用于记录审批流程中每个节点的审批情况。

字段名

类型

描述

id

BIGINT

主键

instance_id

BIGINT

审批实例ID,外键关联approval_instance.id

node_id

BIGINT

节点ID,外键关联process_node.id

approver_id

BIGINT

审批人ID,外键关联approver.id

status

TINYINT(1)

审批状态(0: 待处理, 1: 同意, 2: 拒绝)

comments

TEXT

审批意见

create_time

DATETIME

审批时间

二、表之间的关系

  1. process 与 process_node
    1. 一个流程包含多个节点,process.id 与 process_node.process_id 是一对多关系。
  2. process_node 与 node_approver
    1. 一个节点可以关联多个审批人,process_node.id 与 node_approver.node_id 是一对多关系。
  3. approver 与 node_approver
    1. 一个审批人可以被分配到多个节点,approver.id 与 node_approver.approver_id 是一对多关系。
  4. approval_instance 与 approval_log
    1. 一个审批实例包含多个审批记录,approval_instance.id 与 approval_log.instance_id 是一对多关系。
  5. process_node 与 approval_log
    1. 每条审批记录对应一个节点,process_node.id 与 approval_log.node_id 是一对多关系。

三、简单流程示例

场景:一个三步审批流程:

  1. 第一步由部门主管审批;
  2. 第二步由财务审批;
  3. 第三步由总经理审批。
  4. process 表中插入一条记录,表示新建的流程;
  5. process_node 表中插入三条记录,表示流程的三个节点;
  6. approver 表中插入审批人(部门主管、财务、总经理)的记录;
  7. node_approver 表中为每个节点关联对应的审批人;
  8. approval_instance 表中插入一条实例记录,记录实际的审批流程;
  9. approval_log 表中记录每个节点审批的状态和意见。

四、扩展功能

  • 支持并行审批:在 process_node 表中增加一个字段 parallel_group,标记同一分组内的节点可以并行审批;
  • 支持动态审批人:允许审批人信息在运行时动态添加或修改;
  • 审批超时提醒:在 approval_log 表中增加 deadline 字段,用于记录审批截止时间。

以上是一个简单的审批流程表结构设计,扩展性较强,可以根据实际需求进一步调整和优化。

以上:第三点简单流程示例 场景案例中的第4、5、6、7、8、9点分别在什么时候插入记录?

以下是对简单流程示例中 场景案例第4、5、6、7、8、9点 的详细说明,结合流程执行的阶段来说明 什么时候插入记录

4. 在 node_approver 表中为每个节点关联对应的审批人

插入时机

  • 在创建流程和节点时,由流程设计人员(管理员或系统)配置审批人信息。
  • 这是流程设计阶段的操作,通常在流程上线前完成。

场景

当定义了某个流程节点(如 "部门主管审批")后,需要明确该节点的审批人(如 "张三")。这时将审批人信息插入node_approver 表中。

5. 在 approval_instance 表中插入一条实例记录,记录实际的审批流程

插入时机

  • 在流程被某个用户发起时创建记录。
  • 这是流程实例化的操作(比如用户提交一份需要审批的申请单)。

场景

假设某员工提交了一份报销申请,触发审批流程。这时会在approval_instance 表中插入一条记录,表示该具体审批流程已经启动(流程状态为 "待审批" 或 "审批中")。

6. 在 approval_log 表中记录每个节点审批的状态和意见

插入时机

  • 当审批流程运行到某个节点时,审批人开始对该节点进行审批操作时插入记录。
  • 这通常发生在审批人第一次接收到审批任务时,状态可能为 "待处理"。

更新时机

  • 审批人完成审批操作后(如同意或拒绝),更新该记录的状态为 "同意" 或 "拒绝",并记录审批意见和时间。

场景

  • 比如流程运行到 "部门主管审批" 节点,系统会在 approval_log 表中插入一条记录,表示该节点的审批状态为 "待处理"。
  • 当部门主管完成审批后,更新该记录状态为 "同意",并记录审批意见。

7. 流程运行到下一个节点时更新相关记录

插入或更新时机

  • 当一个节点的审批通过后,流程会自动或手动推进到下一个节点,此时需要更新 approval_instance 的状态,并为下一个节点在 approval_log 中插入记录。

场景

  • 假设部门主管审批通过,流程进入下一步 "财务审批"。这时:更新 approval_instance 表记录为 "审批中"(如果有节点未完成);
    • 在 approval_log 表中插入一条记录,表示流程已到 "财务审批" 节点,状态为 "待处理"。

8. 最终审批完成后更新流程状态

更新时机

  • 当所有节点的审批全部完成(同意或拒绝)时,更新 approval_instance 表的状态为 "审批通过" 或 "审批拒绝"。

场景

  • 假设流程的最后一个节点 "总经理审批" 完成,且审批结果为 "同意":更新 approval_instance 表中的状态为 "审批通过"。
  • 如果某个节点审批被拒绝,比如财务拒绝,则立即更新 approval_instance 表状态为 "审批拒绝"(流程直接终止)。

9. 记录审批意见和时间

插入或更新时机

  • 审批人在处理某节点的审批任务时,会填写意见并完成审批操作(同意或拒绝)。
  • 这是审批操作完成的瞬间插入或更新记录。

场景

  • 比如部门主管审批时填写了 "同意报销,但限于预算内",并点击 "同意"。此时:更新 approval_log 表中对应记录的状态为 "同意";
    • 同时记录审批意见为 "同意报销,但限于预算内",并记录审批时间。

总结:各步骤对应的操作时机

步骤

插入/更新记录的表

时机描述

4

node_approver

流程设计阶段,关联节点与审批人

5

approval_instance

流程发起时,创建审批实例记录

6

approval_log

节点开始审批时插入,审批完成时更新

7

approval_instance & approval_log

流程推进到下一个节点时

8

approval_instance

流程最终结束时更新状态

9

approval_log

审批人完成审批任务时记录意见和时间

通过以上时机的说明,整个审批流程的操作和数据流转更加清晰和有条理。

  • 审批数据表
  1. 新增一个提交审批修改的字段 (data_modification_apply) ,如果有删除,可通过implementor 指定实现类中表+primary_id 处理

字段名

数据类型

描述

id

INT

主键,自动递增

modified_table

VARCHAR(50)

被修改的表的名称

primary_id

INT

对应表的主键值

implementor

VARCHAR(50)

实现类名称(xxxImpl)

instance_id

TEXT

流程实例id

modified_at

DATETIME

修改时间

modified_by

INT

修改人用户ID(外键)

comment

TEXT

修改说明(可选)

status

VARCHAR(20)

处理状态(如“待处理”、“已处理”、“已拒绝”)

     2、新增一个提交审批修改的字段 (data_modification_param)

字段名

数据类型

描述

id

INT

主键,自动递增

field_name

VARCHAR(50)

被修改的字段名称

old_value

TEXT

修改前的字段值

new_value

TEXT

修改后的字段值

modified_at

DATETIME

修改时间

modified_by

INT

修改人用户ID(外键)

comment

TEXT

修改说明(可选)

apply_id

VARCHAR(20)

data_modification_apply id

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值