需求:
审批的每个节点可以有多个审核人,有一个失败则视为审批失败
审批的过程可以自由前进后退:
当发文到达某个节点失败后,会自动被打回到上一个节点.
上一个节点可以选择修改后继续提交,或者再打回到上一个节点.
整个审批可以看成是三种状态:
来自两种情况:1.发起人刚起草审核.2.审核被第一个审核人打回
此状态下发起人可自由修改发文
2.审批中:
不管是正常审批,审批失败往回打,还是修改后重新提交.都放入这一个状态作为发起人:只可查看当前审批状态.
作为审批者:只可查看审批流程节点轮到自己的发文
3.审批完成:
一.如何确定一套流程
这里使用2个表,一对多的关系,用来表示一套流程
举例:
现在要确定一套流程,他的名字叫做 "前期部审批流程"
这套流程需要走4道手续,其中有第3道手续需要2个部门同时通过才算是通过.
这个时候需要往定制流程表里插入一条数据
往流程表插入5条数据
*
其中的deptId是指由哪个部门来审批,node表示它在流程中是第几个轮到的,node相同的就说明是由多个人共同决定的
二.如何发起一套流程
上面讲的,确定一套流程,那只不过是一个模版,一个流程确定了,以后就可以根据这个模版来,
至于实际的某个发文用到了流程,那该怎么办?
新建一个如下的流程表
然后把对应的流程的一个个节点全部搬到审批流程表中来.
需要几个部门来审核,就往审批流程表里插入几条数据.
举例:
还是上面的情景,现在要发起一套上面的流程,数据库情况如下:
上表中的flowId是完全冗余没用了,,就当没这个把
可以看到把node deptId都拷过来了,另外还加入了checkCommon,用于记录每个节点的审批意见;checkResult,用于记录每个节点的审批结果.
这里还有一个baseProjectId,用来标记这是哪个项目对应的流程,后面再说.
现在的状态是审批到了第3个节点.
前面1.2都是同意的.3中的其中一个人是同意的,3中的另一个人是不同意的
所以说现在的状态应该是打回到2,让2决定是继续回滚还是修改后继续提交.
但是如果2修改后提交了,表中的状态还是:
1.2同意,3同意不同意各一个....这就出问题了
怎么确定现在的状态是3刚打回去,还是2修改后重新提交的呢???
下回分解.....