摘要.
来源: http://www.runingman.net/index.php/2016/04/01/binary-check/#more-403
大家在做项目的过程中肯定会碰到多级审核的情况,
多级审核如果审核级数可以定下来还好,但是偏偏事与愿违,需求多变,为了减轻我们编码人员的负担,一种基于二进制运算灵活配置实现的多级审核方案呼之欲出,现在我就来介绍一下:
这种审核方式是基于用户权值(upvalue)的,用户权值只能是2的n次幂,如:0,1,2,4,8,16…
现在假定一个单位有
- 员工
- 组长
- 部门经理
- 总经理
4种角色,开始的需求是项目(project)需要组长和部门经理审核,现在来分配用户权值(upvalue)
- 员工(upvalue=0)
- 组长(upvalue=1)
- 部门经理(upvalue=2)
用户权值(upvalue)越大审核级别越高,现在因为是二级审核
项目权值(pvalue)= 组长(upvalue=1)+ 部门经理(upvalue=2)
当前项目权值应该设为3,即项目权值为审核级别中用户权值之和。
审核过程计算公式:
pvalue&(~upvalue)=0 即 当前项目权重 & (~当前审核人员upvalue) = 0 表示审核完成
即项目权值与用户权值取反相与,这个公式很轻松便能满足重复审核的问题,判断当前用户是否已审核的条件是(pvalue&upvalue=0
),上面的例子审核过程如下:
- 第一次组长审核:pvalue = 3&(~1)=2
- 第二次项目经理审核:pvalue = 2&(~2)=0
- pvalue = 0表示审核过程完成
如果需求变动,需要3级审核,那我们只要给总经理upvalue的值赋为4,修改配置里面的项目权值为1+2+4=7即可。需求变动后的审核过程如下:
- 第一次组长审核:pvalue = 7&(~1)=6
- 第二次项目经理审核:pvalue = 6&(~2)=4
- 第三次总经理审核:pvalue = 4&(~4)=0
pvalue = 0
表示审核过程完成