【求助】php 审批流程 程序和mysql一般是怎么设计的?

【求助】php 审批流程 程序和mysql一般是怎么设计的?

如图:思路是怎样的?另外还需要注意些什么?
111.png

还有审批流程的记录,程序和mysql又是怎么设计的?
222.png

阅读 8.6k
4 个回答

a表 (审核申请记录表):

id title(申请标题) uid(申请人id) conent(申请内容) status(状态)
1 申请项目打款 张三 需要张总和财务处理 待审核/审核中/已审核

b表 (审核申请处理人记录表)

id 类aid(a表id)型 hid(处理人id) weight(处理优先级,谁先进行审核) content(处理的内容是什么) status(状态)
1 1 张总 100 需要处理拨款给甲方 10W 项目款 已处理/未处理
1 1 财务 99 已完成打款,汇入卡号xxxxxxxxx 已处理/未处理

当然我只是写了个大概的东西,自己的业务需要结合实际来考虑。

三张表:
第一张: 流程权限表 主要作用创建一个审批流程,需要哪些管理层审核 比如:事件:请假 ---- 审核人:员工=>主管=》经理
第二张: 用户关系表 比如:员工-》主管-》经理 财务=》财务主管=》经理
第三张:审核流程步骤表 每过一个审核人就生成一条记录

    这个表的字段预计有  id  发起人  流程权限表id  审核人  审核时间 备注  状态

审批流程的功能一般都不会自己实现,因为太复杂,一般都用成熟的第三方bpm来实现,国内比较大的比如泛微、致远等,但商业化的价格比较高,国外的开源免费的bpm比如activiti,flowable等,不用钱但和国内流程差别大,不容易使用。

如果自己实现的话,也要参考bpm的模型来实现,需要有流程定义,有流程实例,有任务,候选人,办理人等,即使你想简单实现,也不太容易。

有点儿类似于设计模式中的「责任链模式」。

简单设计一下表

  • 任务层级 level
task_id 任务id
level 当前层
next_level 下一层
approve_number 至少需要同意人数,默认1
  • 负责人(principal)
id 主键
user_id 对应的负责人ID
task_id 对应的任务id
level_id 层级 处理一个层级存在多个负责人
status 审核状态 1/初始状态、2/当前是否需要我审核、3/我已通过、4/我拒绝了
  • 审核记录
id 主键
created_at 审核时间
task_id 任务id
level_id 审核的等级
user_id 审核人
…… 批注等……

当有一个任务投递进来后,遍历所有层级以及层级下对应的审核者,创建默认数据,status 为 1.表示初始状态,

后查找 level 中最小值,拿 level_id 去更新对应 level_id 的状态 为 2 ,表示需要我审核,审核时判断至少需要同意人数,判断如果达成,并在审核记录表添加批注信息等,当然 也可以就在原表扩张字段,就修改 next_level 的状态为需要审核……以此类推。

这样有个问题就是 ,在取出列表时,比较多,如果每次都递归就很耗资源,你可以做个缓存,把审核结构缓存下来,就不用每次都去递归查结构了,只需要去查当前 status 为 2 的,然后更新去缓存的结构比对,就可以得到当前处于哪一级。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题