前段时间,第一次用到了activiti,赶鸭子上架解决了一个比较复杂的需求,故记录一下以加深记忆。
我们不是maven项目,就是很老的那种ssh框架搭出来的,引入activiti需要引入jar包,还有许多的配置文件,当然在我做这个需求的时候,系统中已经有很多模块已经使用了activiti,我以为我只需要按照常规流程那样开发就好,可是因为客户要求的审批模式,导致我这个初探activiti的小菜鸟在未来两周都是很混乱的状态(同事没有人碰到过这样的流程)。
我们其他模块的审批流程都是单线的。一般一批数据只开启一个流程,后面的节点都是由一个用户对这一批数据进行审批,即使加上流程穿透也不过是加几个判断的问题,如下图:
然而,现在的需求是,有一批数据,在前几个节点依旧是一个人审批所有数据,但是中间有两个节点,将这一批数据分成了十几份,要交给十几个人审批,之后的节点又是一个人审批所有数据。
看到这样的需求的时候,我们首先想到的是会签和子流程,但是这两个实现方式都需要确定的下一级审批人的集合,这个集合我们是无法确定的,因此只能另寻他法。我们原本想要用程序在这个节点进行判断,当需要审批的人员全部审批通过以后,再 将流程往下进行,但是在审批退回这块又出了问题,按照我们的想法,如果要退回数据,那么需要等到这些人全部都对各自的数据进行审批之后,再确定退回还是通过,但是这样存在审批时效性的问题,下一节点的审批需要等这个节点的人全部审批通过,如果这个节点有一个人审批不通过,其他人都需要等流程退回后在次进行审批,显然客户也是不会在这方面做让步的,经过好几天的讨论,最终由领导决定,每一条数据都开启一个流程,允许客户进行批量操作。
这样虽然解决了审批的问题,但是审批意见的存储与展示(这是一个坑),又是一个很大的问题,不得不新建一张新的数据库表来进行关联存储与查询。另外一次开启几百上千个流程,循环显然耗时会很久,那么就涉及到了并发,这又是一个我不想回忆的坑,不然我也不会在一个流程上耗费两周。