項目位址: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、配置結束條件
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;
}