先看下我的代碼:
/** * 認領 * @param request * @return */ @Transactional public ReturnVo claim(ClaimRequest request){ // 流程實例ID String procId = request.getProcessInstanceId(); // 查詢實例上的所有呼叫人員 StartCallerRequest startCallerRequest = new StartCallerRequest(); startCallerRequest.setProcessInstanceId(procId); List<StartCallersModel> callers = startCallerMapper.query(startCallerRequest); // 把沒傳遞過來的呼叫人員刪除(刪除活動) List<String> deleteUserIds = new ArrayList<>(); for (StartCallersModel caller: callers) { boolean exist = false; for (String userId: request.getUserIds()) { if(userId.equals(caller.getUserId())){ exist = true; break; } } if(!exist){ deleteUserIds.add(caller.getUserId()); } } //查詢需要刪除的活動(任務),並刪除 if (deleteUserIds.size() > 0){ List<org.flowable.task.api.Task> tasks = taskService.createTaskQuery().processInstanceId(procId) .taskDefinitionKey("claim").taskAssigneeIds(deleteUserIds).list(); for (org.flowable.task.api.Task task: tasks) { try{ Execution execution = runtimeService.createExecutionQuery().executionId(task.getExecutionId()).singleResult(); runtimeService.deleteMultiInstanceExecution(execution.getId(), false); } catch(Exception e){ throw e; } } } // 查詢需要認領的任務並自動審批通過 List<org.flowable.task.api.Task> tasks1 = taskService.createTaskQuery().processInstanceId(procId).taskDefinitionKey("claim").list(); for (org.flowable.task.api.Task task : tasks1) { //設置流程執行人 identityService.setAuthenticatedUserId(task.getAssignee()); //添加批注 taskService.addComment(task.getId(), procId, TaskEnum.Agree.toString(), "事件認領"); //完成任務 Map<String,Object> paras = new HashMap<>(); paras.put("assignee", task.getAssignee()); taskService.complete(task.getId(), paras); } //更新認領狀態 for (String userId : request.getUserIds()) { //構造查詢條件 startCallerRequest = new StartCallerRequest(); startCallerRequest.setProcessInstanceId(procId); startCallerRequest.setUserId(userId); List<StartCallersModel> models = startCallerMapper.query(startCallerRequest); if(models.size() > 0){ StartCallersModel model = models.get(0); model.setClaimed(true); startCallerMapper.update(model); } } //刪除[執行認領]中的任務 if (deleteUserIds.size() > 0){ List<org.flowable.task.api.Task> tasks = taskService.createTaskQuery().processInstanceId(procId) .taskDefinitionKey("execute_claim").taskAssigneeIds(deleteUserIds).list(); for (org.flowable.task.api.Task task: tasks) { Execution execution = runtimeService.createExecutionQuery().executionId(task.getExecutionId()).singleResult(); runtimeService.deleteMultiInstanceExecution(execution.getId(), false); } } return new ReturnVo(ReturnCode.SUCCESS,"執行認領成功"); }
先說下我的需求:
1.有一個節點:[執行認領]
2.有10個人,默認情況下10個人都動態分配到了該節點
3.那么假如有5/6/7個人執行該節點,允許審批通過
4.所以我要把剩余的5/4/3個人從節點中動態刪除
5.然后就遇到了該問題
解決方案:添加 @Transactional 注解。至於原因我也不知道,被我給懵對了。