一个简单的审批流程模型

来源:互联网 发布:it学什么有前途 编辑:程序博客网 时间:2024/04/30 14:42

最近在做一个审批流程的模块用来支持对一些事务的审批。基本的业务要求如下:

1. 模型需要支持两级审批,在这里我们定义为有一半权限的B Approver,和有更高权限的C Approver;

2. 每一个用户可以只是B Approver,或C Approver,或者既是B Approver也是C Approver;

3. 模型需要支持以下审批工作流:

a. 任何一个Approver (1 Any)

b. 任何两个Approver (2 Any)

c. 两个Approver,至少一个C Approver (1B1C or 2C)

d. 两个C Approver (2C)

e. 一个B Approver,一个C Approver (1B1C)

f. 一个C Approver (1C)

在设计模型的时候,我们的设计原则是尽量简单,容易实现,用相对较短的时间来发布这个功能。基于这个原则,我们设计了一个很简单的模型实现。

首先,我们用3个int值来定义一个工作流:需要的最少approver数量(T),需要的最少B approver数量(B),和需要的最少C approver数量(C):

a. 任何一个Approver:T: 1, B: 0, C: 0;

b. 任何两个Approver:T: 2, B: 0, C: 0;

c. 两个Approver,至少一个C Approver:T: 2, B: 0, C: 1;

d. 两个C Approver:T: 2, B: 0, C: 2;

e. 一个B Approver,一个C Approver:T: 2, B: 1, C: 1;

f. 一个C Approver:T: 1, B: 0, C:1。

每一个事务会在建立的时候根据业务需要被选定以上一个工作流。对于每一个没有通过审批的事务,我们用六个int值来定义事务的状态:

需要的最少approver数量(T),需要的最少B approver数量(B),和需要的最少C approver数量(C),

当前的approver数量(TD),当前的B approver数量(BD),和当前的C approver数量(CD)。

T,B,C的值在事务建立的时候根据工作流确定,TD,BD,和CD的值在事务建立的时候设为0。一个事务需要达到以下状态才被视为通过审批:

TD >= T && BD >= B  && CD >= C

用户审批时,TD,BD和CD的变化如下:

假设用户A是B Approver而不是C Approver,我们定义用户A的权限为BP = 1,CP = 0,

那么,当用户A审批的时候:

TD = TD + 1, BD = BD + BP, CD = CD + CP


通过以上的模型,我们可以很简单的支持需求中要求的六种审批业务流,而对于每一个事务,我们只需要6个附加的int值属性就可以实现模型了。以上的6种工作流足以满足95%的审批需求,同时可以很容易的拓展到更多的Approver的情况。如果大家对这个简单的模型感兴趣的话,我会再写一篇文章讨论如何实现计算用户是否可以进行审批。

原创粉丝点击