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