美文网首页
可配置的通用审批流

可配置的通用审批流

作者: 小狼在IT | 来源:发表于2018-12-12 10:58 被阅读0次

是否遇到过这样的情况。一个订单系统,有这么个类似的审批流程:客户建立订单-->B领导审批-->B部门B1职员确认(其它职员不能确认)。。。。。。
然而,隔一段时间,有可能会演变成:客户建立订单-->A领导审批-->部门B的B2职员确认(其它职员不能确认)。。。
又可能演变成不需要领导审批:客户建立订单-->部门B的B2职员确认(其它职员不能确认)。。。

这种审批功能,很多人是做成hard code的,改的时候改代码。
那么怎样设计个简单的可配置系统?

订单状态表:


image.png

角色审批表:


image.png

roleId 角色ID
oStatus 目前订单的状态
aprStatus 该角色审批通过的话将使订单到达的状态
rejStatus 该角色审批不通过的话将使订单到达的状态
operate 该审批需要进行什么特别操作,比如这里写 toSendEmail,就是审批后,发送一个email。

账号审批表:


image.png

为了操作简便,设计一个视图:

CREATE VIEW [dbo].[vAPR]
as
SELECT     a.userId, r.oStatus, r.aprStatus, r.rejStatus,r.operate
FROM       TEST_APR_STATUS_ROLE r 
       INNER JOIN TEST_ROLEACCOUNT ra on ra.roleId = ra.roleId
       INNER JOIN TEST_ACCOUNT a ON ra.userId = a.userId
UNION
SELECT     s.userId, s.oStatus, s.aprStatus, s.rejStatus,s.operate
FROM        TEST_APR_STATUS_ACCOUNT s
        left join TEST_ROLEACCOUNT ra on ra.userId = s.userId
        left join TEST_APR_STATUS_ROLE r on r.roleId=ra.roleId
        where r.roleId is null

那么,登录者只要这么查:

select * from vAPR
where userId=@userId and oStatus=@oStatus

就可以得到他具有哪些审批权了,可以进行审批了。
如果后续审批流节点要改,要添加,要删除都可以通过配置去完成,而不需要重新去编码了。

注意事项:
账号审批表优先级高于角色审批表。
设置审批权时,同一个账号,不能设置两行初始状态相同的。比如角色①,即可以从状态1审批到状态3,又可以从状态1审批到状态2,是不允许的。

相关文章

网友评论

      本文标题:可配置的通用审批流

      本文链接:https://www.haomeiwen.com/subject/lvluhqtx.html