From d583272ee68f3f80e11fddf17769eea773ff9053 Mon Sep 17 00:00:00 2001 From: lyh <925863403@qq.com> Date: 星期三, 09 四月 2025 17:41:03 +0800 Subject: [PATCH] 解决批量启动流程死锁问题,增加点检后异常保修 --- lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowDefinitionServiceImpl.java | 35 +++++++++++++++-------------------- 1 files changed, 15 insertions(+), 20 deletions(-) diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowDefinitionServiceImpl.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowDefinitionServiceImpl.java index edf2eb1..bbb90bc 100644 --- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowDefinitionServiceImpl.java +++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowDefinitionServiceImpl.java @@ -24,7 +24,6 @@ import org.jeecg.modules.flowable.apithird.business.service.impl.FlowMyBusinessServiceImpl; import org.jeecg.modules.flowable.apithird.common.constant.ProcessConstants; import org.jeecg.modules.flowable.apithird.common.enums.FlowComment; -import org.jeecg.modules.flowable.apithird.entity.ActStatus; import org.jeecg.modules.flowable.apithird.entity.SysUser; import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI; import org.jeecg.modules.flowable.apithird.service.IFlowThirdService; @@ -237,6 +236,7 @@ * @return */ @Override + @Transactional(rollbackFor = {Exception.class}) public Result<?> startProcessInstanceByKey(String procDefKey, Map<String, Object> variables) { ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() .processDefinitionKey(procDefKey) @@ -269,15 +269,10 @@ ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDefId, variables); // 缁欑涓�姝ョ敵璇蜂汉鑺傜偣璁剧疆浠诲姟鎵ц浜哄拰鎰忚 Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).active().singleResult(); - if (!sysUser.getUsername().equals(task.getAssignee())){ - return Result.error("褰撳墠鐢ㄦ埛涓嶆槸娴佺▼鍙戣捣浜�"); - } if (Objects.nonNull(task)) { - taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.NORMAL.getType(), sysUser.getRealname() + "鍙戣捣娴佺▼鐢宠"); + taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.NORMAL.getType(), variables.get("organization").toString()); taskService.setAssignee(task.getId(), sysUser.getUsername()); task.setDescription(variables.get("organization").toString()); - // 鏇存柊浠诲姟 - taskService.saveTask(task); //taskService.complete(task.getId(), variables); } //璁剧疆鎵�鏈夌敵璇蜂汉 @@ -316,6 +311,15 @@ String serviceImplName = business.getServiceImplName(); FlowCallBackServiceI flowCallBackService = (FlowCallBackServiceI) SpringContextUtils.getBean(serviceImplName); List<String> beforeParamsCandidateUsernames = flowCallBackService.flowCandidateUsernamesOfTask(task2.getTaskDefinitionKey(), variables); + business.setProcessDefinitionId(procDefId) + .setProcessInstanceId(processInstance.getProcessInstanceId()) +//// .setActStatus(ActStatus.start) + .setProposer(sysUser.getUsername()) + .setTaskId(task2.getId()) + .setTaskName(nextTask.getName()) + .setTaskNameId(nextTask.getId()) + .setPriority(nextTask.getPriority()) + .setDoneUsers(doneUserList.toJSONString()); if (CollUtil.isNotEmpty(beforeParamsCandidateUsernames)){ // 鍒犻櫎鍚庨噸鍐� for (Task task2One : task2List) { @@ -330,24 +334,15 @@ } } business.setTodoUsers(JSON.toJSONString(beforeParamsCandidateUsernames)); + }else { + // 涓氬姟灞傛病鏈夋寚瀹氬�欓�変汉锛岀洿鎺ヨ鐩� + business.setTodoUsers(JSON.toJSONString(collect_username)); } - - business.setProcessDefinitionId(procDefId) - .setProcessInstanceId(processInstance.getProcessInstanceId()) - .setActStatus(ActStatus.start) - .setProposer(sysUser.getUsername()) - .setTaskId(task2.getId()) - .setTaskName(nextTask.getName()) - .setTaskNameId(nextTask.getId()) - .setPriority(nextTask.getPriority()) - .setDoneUsers(doneUserList.toJSONString()) - .setTodoUsers(JSON.toJSONString(collect_username)) - ; } else { // **娌℃湁涓嬩竴涓妭鐐癸紝娴佺▼宸茬粡缁撴潫浜� business.setProcessDefinitionId(procDefId) .setProcessInstanceId(processInstance.getProcessInstanceId()) - .setActStatus(ActStatus.pass) +// .setActStatus(ActStatus.pass) .setProposer(sysUser.getUsername()) .setDoneUsers(doneUserList.toJSONString()) ; -- Gitblit v1.9.3