FoxBPM 批量审计的实现
FoxBPM 批量审批的实现
FoxBPM批量审批的实现
最近在做一个项目是,流程中会有大量的审批表交由同一个人审批,因为审批人是个不小的领导,所以客户对批量审批的需求迫切 。所以还是想办法做了出来。下面简单介绍下实现方法。
首先,介绍下需求,客户要求在流程的**审批环节增加批量审批功能,并要再批量审批的时候可以填写一些重要的业务数据。
其次,我们和客户约定:由于整个系统中的待办任务在同一个界面,而且批量审批时,需要填写业务数据,所以我们约定:不是同一个业务的同一环节,不允许批量审批,解释成流程语言就是:不是同一个流程定义(processDefinitionId)和同一个节点(node_id)的任务,不允许批量审批。
基于以上约定,我们的思路是:
- 增加批量审批配置表:T_SYS_BATCHFORM
ID VARCHAR(64) GUID PROCESSDEFINITIONID VARCHAR(64) 流程唯一编号 NODEID VARCHAR(64) 流程节点号 FORMURL VARCHAR(64) 表单URL
- 待办任务上增加checkbox选项和批量审批按钮,如图
- 点击批量审批时,首先判断选中的任务的processDefinitionId和nodeId是否一样,不一样则提示错误。
- 如果一样,则取步骤1中的配置,如果不存在,提示错误,否则,随便传一个taskId到后台,通过taskService.getTaskCommandByTaskId(String taskId)接口取到所有的命令。此步骤和非批量审批中的处理一致。
- 在步骤1配置的formUrl上展现命令和业务表单,如图
- 构造点击的命令(expandTaskCommand),根据选中的taskIds列表,循环执行expandTaskComamnd命令。
处理的思路大概如下:
由于代码基本和非批量的表单一样,仅仅增加了判断和循环taskId、循环bizKey(业务数据)的功能,所以代码就不贴出来了,参考演示示例即可。
另外,可能的问题以及扩展点
1.性能问题
上面的项目面向人群较少,并发量不大,所以测试批量10条任务在2S以内(包含业务处理时间)。
如果业务上需要批量处理大量任务,几十条甚至几百条的时候,就需要考虑性能问题了
解决方案:根据批量的个数动态计算开启多个线程进行处理,主线程等待处理结果,全部处理完再返回结果。
2.事务问题
这个问题要看具体的业务场景,一般业务来说,只需要保证单个任务之间的事务即可,如果其中某个任务处理失败,单独返回处理结果即可,如成功**个,失败**个。
最后附上FoxBPM项目主页:https://github.com/FoxBPM/FoxBPM