原文连接:https://blog.csdn.net/liuwenjun05101/article/details/103680299
项目地址:https://gitee.com/lwj/flowable.git 分支flowable-base
任务多实例由2种形式:
第1种场景:当多实例中的每一个势力都办理完任务后,节点流转。
案例:当多实例节点由2个人(A,B)需要办理此任务,A和B的代办任务中都会有次任务需要办理,当A办理此任务后,会在已办任务列表中查看已办任务,同时,A的代办列在表中,仍然会有此待办任务;当B办理此任务后,节点进行流转,AB待办队列中,无此待办任务,均在已办任务队列中。
第2种场景:当多实例中设置结束条件,当满足条件后,节点流转。
案例:如下所述
业务场景:
收集每个员工的绩效考核信息;
收集一次组织活动的信息;
一个合同需要三个经理审批,可以是顺序的也可以是并行的;
一个合同计划审批有30个人审批,只需要其中70%的人审批通过即可。等等 *
1、任务多实例四个内置变量
属性 | 解释 |
---|---|
nrOfInstances | 一共有多少个实例 |
nrOfCompletedInstances | 已经完成的实例个数 |
nrOfActiveInstances | 未完成的实例个数 |
2、配置多实例
2.1、配置参数
2.2、配置候选人
2.3、配置结束条件
3、启动设置userList
public ReturnVo add(Leave leave, String sessionId) {ReturnVo returnVo = new ReturnVo(ReturnCode.FAIL, "添加失败");try {String leaveId = UUIDGenerator.generate();leave.setId(leaveId);StartProcessInstanceVo startProcessInstanceVo = new StartProcessInstanceVo();startProcessInstanceVo.setBusinessKey(leaveId);User user = SecurityUtils.getCurrentUserObject();startProcessInstanceVo.setCreator(user.getId());startProcessInstanceVo.setCurrentUserCode(user.getId());startProcessInstanceVo.setFormName("请假流程");startProcessInstanceVo.setSystemSn("flow");startProcessInstanceVo.setProcessDefinitionKey("leave");Map<String, Object> variables = new HashMap<>();variables.put("days", leave.getDays());startProcessInstanceVo.setVariables(variables);//设置三个人作为多实例的人员List<String> userList = new ArrayList<>();userList.add("00000005");userList.add("00000006");variables.put("userList", userList);ReturnVo<ProcessInstance> returnStart = flowableProcessInstanceService.startProcessInstanceByKey(startProcessInstanceVo);if (returnStart.getCode().equals(ReturnCode.SUCCESS)){String processInstanceId = returnStart.getData().getProcessInstanceId();leave.setProcessInstanceId(processInstanceId);this.LeaveService.insertLeave(leave);returnVo = new ReturnVo(ReturnCode.SUCCESS, "添加成功");}else {returnVo = new ReturnVo(returnStart.getCode(), returnStart.getMsg());}} catch (Exception e) {logger.error("LeaveController-add:", e);e.printStackTrace();}return returnVo;}