这是我的项目中使用的一套关于工作流和审批流的配置,算是比较简单的,这里只写其中比较核心的思路,算是对之前工作的一个技术总结吧。
以下是数据库设计;后面再跟据实例分析每个表的作用。
首先是流程配置表:
如果需要用到一个工作流就要先配置,test_workflow_configuration就需要存入该流程的基本信息
test_workflow_details需要存入该流程的工作流配置,需要几级审核等信息
然后是流程记录表:
这个表存储的是流程记录,每个流程送审之后都会存在这条记录中,一级审核完在插入下一级记录
最后是申请单表:
这个表存储的是申请单信息
ps:这里有一些关联设计的表被我省略了,只说最核心的思路,下面举个栗子
现在有一个工单申请需求
首先这个申请单记录记录应该存储在test_order中,包括单据号,创建日期,创建人等信息(相关业务明细另外建表)
然后配置审核流程
test_workflow_configuration中应该存入这个流程的基本信息
test_workflow_details中设置工作流配置(附图1)
接下来流程开始
第一步:该工单填写完毕,送审
当点击【送审】按钮时后台需要以下操作:
1.将test_order中的status改为1送审状态
2.流程记录表test_workflow_records插入工作流第一条记录(主管审核)
test_workflow_details里的post_id是主管岗位id,test_workflow_records里需要的是主管这个岗位上的人的id,作为assignee_id(该工作流受理人id)
第二步:主管登录系统,进入审批页面,跟据主管id/既是当前用户id(assignee_id)和(is_audit = 0)可以展示当前主管需要审核的所有申请。
主管点击【审核】按钮,可根据document_code(申请单据号)展示当前申请的所有详细信息,选择【通过】/【驳回】,并填写意见等,最后点击【提交】。
此时后台需要做以下操作:
1.更新流程记录为已审核状态(is_audit=1)
2.跟据workflow_id查询该流程分为多少步(几条记录就是几步),取出当前记录的flow_serialnumber,判断是否是最后一步
若是最后一步 {
判断当前记录是否通过
若通过{
编写审核通过的业务处理代码
}
否则 {
直接更新test_order申请状态为驳回(status=3)
}
}
若不是最后一步{
再判断当前记录是否审核通过
若不通过{
直接更新test_order申请状态为驳回(status=3)
}
若通过(这个栗子就走这种情况)
{
取出flow_serialnumber,+1,查询下一个节点(经理审核)
流程记录表test_workflow_records插入工作流第二条记录(经理审核)
}
}
插入处理方式同上
第三步:同第二步,此时流程走到经理这里,流程继续进行。
附上几张截图:
图1:工作流配置
图2:审核记录详情