python

利用二进制运算实现业务的多级审核

技术分享

systemime
2020-11-06
3 min

摘要.

来源: 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表示审核过程完成

上次编辑于: 2021/5/24 下午1:55:49