审批系统 设计思路

本文探讨如何设计一个灵活的审批系统,以减少审批与策略执行的耦合,实现审批单、层级、节点的高效管理,并引入阈值配置以适应不同金额级别的审批流程。文章还涉及审批类型与部门、人员角色的关联,以及如何通过JSON配置简化审批规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求

设计一个通用的审批系统,模仿钉钉

无论是申请电脑补贴,申请餐补,申请账号,总是可以发现审批流程相关的行为都是差不多的,既经过XXX、YYY、ZZZ各节点同意,审批最终通过。

策略

审批完成后,再通过不同脚本进行发放电脑补贴,发放餐补,告知账号等操作,我们对这些执行不同行为的脚本称为一个个策略。

为了降低审批系统与策略的耦合性,审批系统不应当关心策略的执行过程。

对象关系

观察钉钉的审批系统,易得出以下对象关系

审批单,审批单下有多层审批

每一层审批只要其中一个审批人通过即可

审批单还会有抄送人

如下图,出差、外出、名片印刷....是一个个的审批类型

接着想下去,一个公司这么多的审批类型,总不能让每个员工都能使用任何一种审批类型吧,因此需要 适用部门、适用人

因此,审批类型 1:n 适用部门

审批类型 1:n 审批单

审批单 1:n 审批层级

审批层级 1:n 审批人

审批单 1:n 抄送人

对这些对象粗略的建表(适用人先不做,跟适用部门差不多)

每个审批单会有多个审批的层级,每个层级可能有多个人来审批(只要其中任意一个人审批通过该层级就通过),对某一层级的某审批人称为审批节点

层级这个东西作为审批节点的属性node_level

这样设计能

将 审批人-审批层级-审批单 3个表

简化为 审批节点-审批单 2个表

接着往下想,

现在我想通过审批系统申请团建经费,我想申请100,000元带全公司去旅游,审批要经过我的组长,我的中心负责人,老板一层一层审批,这无可厚非。

接着,我想申请500元跟研发组的同事吃顿大餐,这点小钱如果还要经老板手审批,那同事的肚子都饿瘪了,钱都没到手。

这时候,你就会想要是

1000元以下经费只需要经过组长审批,

5000元以下只需要经过组长-中心负责人审批就好了

因此,我们需要给审批类型加点配置

这个配置限制每一审批层级的触发条件

审批类型表加一个字段门槛去存储json,结构如下

[
    {
        "node_level":1,
        "node_approval_type":0,
        "node_user_id":"3",
        "node_user_name":"jason"
    },
    {
        "node_level":2,
        "node_approval_type":1,
        "node_user_id":"",
        "node_user_name":"",
        "threshold":{
            "5":{
                "contrast":"gte",
                "value":"10000"
            },
            "6":{
                "contrast":"gte",
                "value":"10000"
            },
            "7":{
                "contrast":"gte",
                "value":"10000"
            }
        }
    },
    {
        "node_level":3,
        "node_approval_type":2,
        "node_user_id":"",
        "node_user_name":""
    }
]

即可通过t_approval_type审批类型表 知道 XX审批类型 YY层 节点生成的条件

但为了让门槛有快照,便将门槛单独创建一个表,单独作为一个表还能简化json的结构

conf_data字段json结构(node_approval_type这个字段是业务要求的 为0时是指定人 为1时是审批发起人的直属部门的领导 为2时是审批发起人的直属部门的上级部门的领导 以此递推 最多为3)

threshold_data(该字段里的值与前端约定 含义)

{
  "5":{"contrast":"gte","value":"10000"},
  "6":{"contrast":"gte","value":"10000"},
  "7":{"contrast":"gte","value":"10000"}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值