From 74da9dfb5fb4085d8847d4c74a97048c6c677514 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期三, 15 一月 2025 10:53:34 +0800
Subject: [PATCH] 完成任务bug(协同办理的才resolveTask)、转办前如果是指定人员删除不掉问题、提取获取运行时任务信息的方法

---
 business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java |  184 +++++++++++++++++++++++++++-------------------
 1 files changed, 108 insertions(+), 76 deletions(-)

diff --git a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
index 9e7bda4..cce4972 100644
--- a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
@@ -52,6 +52,7 @@
 import org.flowable.identitylink.api.IdentityLinkInfo;
 import org.flowable.identitylink.api.IdentityLinkType;
 import org.flowable.identitylink.api.history.HistoricIdentityLink;
+import org.flowable.identitylink.service.impl.persistence.entity.IdentityLinkEntityImpl;
 import org.flowable.task.api.Task;
 import org.flowable.task.api.TaskQuery;
 import org.flowable.task.api.history.HistoricTaskInstance;
@@ -467,20 +468,25 @@
 
     @Override
     public Result taskDelegation(TaskDelegationForm form) {
-        Task task = taskService.createTaskQuery().taskId(form.getTaskId()).includeIdentityLinks().singleResult();
+        Task task = taskService.createTaskQuery().taskId(form.getTaskId()).singleResult();
         if (Objects.isNull(task)) {
             throw new RuntimeException("鏈湪杩愯浠诲姟涓壘鍒拌浠诲姟锛屾棤娉曟墽琛岃浆鍔炴搷浣�");
         }
+        List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(task.getId());
         // 杞姙涔嬪墠鐨勫鐞嗕汉
         List<String> beforeHandlerIds = new ArrayList<>(2);
         // 杞姙涔嬪墠鐨勫鐞嗕汉绫诲瀷
         HandlerTypeEnum beforeHandlerType = null;
         // 闇�瑕佸厛绉婚櫎涔嬪墠鐨勫鐞嗕汉
-        for (IdentityLinkInfo identityLink : task.getIdentityLinks()) {
+        for (IdentityLinkInfo identityLink : identityLinksForTask) {
             if (StringUtils.isNotBlank(identityLink.getUserId())) {
                 beforeHandlerIds.add(identityLink.getUserId());
                 beforeHandlerType = HandlerTypeEnum.USER;
-                taskService.deleteCandidateUser(task.getId(), identityLink.getUserId());
+                if (IdentityLinkType.ASSIGNEE.equals(identityLink.getType())) {
+                    taskService.deleteUserIdentityLink(task.getId(), identityLink.getUserId(), IdentityLinkType.ASSIGNEE);
+                } else {
+                    taskService.deleteCandidateUser(task.getId(), identityLink.getUserId());
+                }
             } else if (StringUtils.isNotBlank(identityLink.getGroupId())) {
                 beforeHandlerIds.add(identityLink.getGroupId());
                 if (identityLink.getGroupId().contains("dept")) {
@@ -567,73 +573,7 @@
         List<CustomerTaskVO> vos = new ArrayList<>();
         for (Task task : taskList) {
             CustomerTaskVO taskVO = new CustomerTaskVO();
-            // 褰撳墠娴佺▼淇℃伅
-            taskVO.setTaskId(task.getId());
-            taskVO.setCreateTime(task.getCreateTime());
-            taskVO.setProcessDefId(task.getProcessDefinitionId());
-            taskVO.setExecutionId(task.getExecutionId());
-            taskVO.setTaskName(task.getName());
-            taskVO.setTaskStatus(TaskStatusEnum.TODO);
-            // 娴佺▼瀹氫箟淇℃伅
-            ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()
-                    .processDefinitionId(task.getProcessDefinitionId())
-                    .singleResult();
-            taskVO.setDeployId(pd.getDeploymentId());
-            taskVO.setProcessName(pd.getName());
-            taskVO.setProcessInsId(task.getProcessInstanceId());
-            taskVO.setTaskDefinitionKey(task.getTaskDefinitionKey());
-
-            // 娴佺▼鍙戣捣浜轰俊鎭�
-            this.setPromoterInfo(taskVO);
-
-            // 涓�涓换鍔″彲鑳芥湁澶氫釜鍊欓�変汉/缁勶紝鎵�浠ラ渶瑕佷娇鐢╨ist
-            List<Long> handlerIds = new ArrayList<>(2);
-            List<String> handlerNames = new ArrayList<>(2);
-            List<Long> handlerUnitIds = new ArrayList<>(2);
-            List<String> handlerUnitNames = new ArrayList<>(2);
-
-            // 娴佺▼澶勭悊浜轰俊鎭�
-            List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(task.getId());
-            for (IdentityLink identityLink : identityLinksForTask) {
-                // 缁戝畾鐨勬槸鐢ㄦ埛锛屾煡鍑虹敤鎴峰鍚嶃�侀儴闂�
-                if (StringUtils.isNotBlank(identityLink.getUserId())) {
-                    taskVO.setHandlerType(HandlerTypeEnum.USER);
-                    SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId()));
-                    if (Objects.nonNull(sysUser)) {
-                        handlerIds.add(sysUser.getUserId());
-                        handlerNames.add(sysUser.getNickName());
-                        if (Objects.nonNull(sysUser.getDept())) {
-                            handlerUnitIds.add(sysUser.getDept().getDeptId());
-                            handlerUnitNames.add(sysUser.getDept().getDeptName());
-                        }
-                    }
-                    // 缁戝畾鐨勬槸瑙掕壊鎴栬�呴儴闂�
-                } else if (StringUtils.isNotBlank(identityLink.getGroupId())) {
-                    if (identityLink.getGroupId().startsWith("dept")) {   // 閮ㄩ棬鐨刬d鏄姞浜嗗墠缂�鐨勫锛歞ept:1
-                        taskVO.setHandlerType(HandlerTypeEnum.DEPT);
-                        String[] split = identityLink.getGroupId().split(":");
-                        if (split.length > 1) {
-                            // 閮ㄩ棬
-                            SysDept dept = sysDeptService.selectDeptById(Long.parseLong(split[1]));
-                            if (Objects.nonNull(dept)) {
-                                handlerUnitIds.add(dept.getDeptId());
-                                handlerUnitNames.add(dept.getDeptName());
-                            }
-                        }
-                    } else {
-                        taskVO.setHandlerType(HandlerTypeEnum.ROLE);
-                        SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId()));
-                        if (Objects.nonNull(role)) {
-                            handlerUnitIds.add(Long.parseLong(identityLink.getGroupId()));
-                            handlerUnitNames.add(role.getRoleName());
-                        }
-                    }
-                }
-                taskVO.setHandlerId(handlerIds);
-                taskVO.setHandlerName(handlerNames);
-                taskVO.setHandlerUnitId(handlerUnitIds);
-                taskVO.setHandlerUnitName(handlerUnitNames);
-            }
+            this.setRuntimeTaskInfo(task, taskVO);
             vos.add(taskVO);
         }
         result.put("taskList", vos);
@@ -680,7 +620,10 @@
             vo.setDeployId(process.getDeploymentId());
             vo.setTaskName(userTask.getName());
             vo.setProcessName(process.getProcessDefinitionName());
-            Task task = taskService.createTaskQuery().processInstanceId(process.getId()).taskDefinitionKey(userTask.getId()).singleResult();
+            Task task = taskService.createTaskQuery()
+                    .processInstanceId(process.getId())
+                    .taskDefinitionKey(userTask.getId())
+                    .singleResult();
 
             // 涓�涓换鍔″彲鑳芥湁澶氫釜鍊欓�変汉/缁勶紝鎵�浠ラ渶瑕佷娇鐢╨ist
             List<Long> handlerIds = new ArrayList<>(2);
@@ -754,6 +697,10 @@
                     vo.setTaskDefinitionKey(historicTasks.get(0).getTaskDefinitionKey());
                     this.setPromoterAndHandler(vo, historicTasks.get(0).getIdentityLinks());
                 }
+                vo.setHandlerId(handlerIds);
+                vo.setHandlerName(handlerNames);
+                vo.setHandlerUnitId(handlerUnitIds);
+                vo.setHandlerUnitName(handlerUnitNames);
             } else {
                 vo.setTaskStatus(TaskStatusEnum.TODO);
                 vo.setTaskId(task.getId());
@@ -762,11 +709,9 @@
                 vo.setTaskDefinitionKey(task.getTaskDefinitionKey());
 
                 this.setPromoterAndHandler(vo, null);
+                this.setRuntimeTaskInfo(task, vo);
             }
-            vo.setHandlerId(handlerIds);
-            vo.setHandlerName(handlerNames);
-            vo.setHandlerUnitId(handlerUnitIds);
-            vo.setHandlerUnitName(handlerUnitNames);
+
             return vo;
         }).collect(Collectors.toList());
         result.data(vos);
@@ -821,6 +766,85 @@
     }
 
     /**
+     * 璁剧疆杩愯鏃朵换鍔$殑淇℃伅
+     *
+     * @param task 浠诲姟
+     * @param taskVO 浠诲姟vo
+     */
+    private void setRuntimeTaskInfo(Task task, CustomerTaskVO taskVO) {
+        // 褰撳墠娴佺▼淇℃伅
+        taskVO.setTaskId(task.getId());
+        taskVO.setCreateTime(task.getCreateTime());
+        taskVO.setProcessDefId(task.getProcessDefinitionId());
+        taskVO.setExecutionId(task.getExecutionId());
+        taskVO.setTaskName(task.getName());
+        taskVO.setTaskStatus(TaskStatusEnum.TODO);
+        // 娴佺▼瀹氫箟淇℃伅
+        ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()
+                .processDefinitionId(task.getProcessDefinitionId())
+                .singleResult();
+        taskVO.setDeployId(pd.getDeploymentId());
+        taskVO.setProcessName(pd.getName());
+        taskVO.setProcessInsId(task.getProcessInstanceId());
+        taskVO.setTaskDefinitionKey(task.getTaskDefinitionKey());
+
+        // 娴佺▼鍙戣捣浜轰俊鎭�
+        this.setPromoterInfo(taskVO);
+
+        // 涓�涓换鍔″彲鑳芥湁澶氫釜鍊欓�変汉/缁勶紝鎵�浠ラ渶瑕佷娇鐢╨ist
+        List<Long> handlerIds = new ArrayList<>(2);
+        List<String> handlerNames = new ArrayList<>(2);
+        List<Long> handlerUnitIds = new ArrayList<>(2);
+        List<String> handlerUnitNames = new ArrayList<>(2);
+
+        // 娴佺▼澶勭悊浜轰俊鎭�
+        List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(task.getId());
+        for (IdentityLinkInfo identityLink : identityLinksForTask) {
+//            if (StringUtils.isBlank(((IdentityLinkEntityImpl)identityLink).getId())) {
+//                continue;
+//            }
+            // 缁戝畾鐨勬槸鐢ㄦ埛锛屾煡鍑虹敤鎴峰鍚嶃�侀儴闂�
+            if (StringUtils.isNotBlank(identityLink.getUserId())) {
+                taskVO.setHandlerType(HandlerTypeEnum.USER);
+                SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId()));
+                if (Objects.nonNull(sysUser)) {
+                    handlerIds.add(sysUser.getUserId());
+                    handlerNames.add(sysUser.getNickName());
+                    if (Objects.nonNull(sysUser.getDept())) {
+                        handlerUnitIds.add(sysUser.getDept().getDeptId());
+                        handlerUnitNames.add(sysUser.getDept().getDeptName());
+                    }
+                }
+                // 缁戝畾鐨勬槸瑙掕壊鎴栬�呴儴闂�
+            } else if (StringUtils.isNotBlank(identityLink.getGroupId())) {
+                if (identityLink.getGroupId().startsWith("dept")) {   // 閮ㄩ棬鐨刬d鏄姞浜嗗墠缂�鐨勫锛歞ept:1
+                    taskVO.setHandlerType(HandlerTypeEnum.DEPT);
+                    String[] split = identityLink.getGroupId().split(":");
+                    if (split.length > 1) {
+                        // 閮ㄩ棬
+                        SysDept dept = sysDeptService.selectDeptById(Long.parseLong(split[1]));
+                        if (Objects.nonNull(dept)) {
+                            handlerUnitIds.add(dept.getDeptId());
+                            handlerUnitNames.add(dept.getDeptName());
+                        }
+                    }
+                } else {
+                    taskVO.setHandlerType(HandlerTypeEnum.ROLE);
+                    SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId()));
+                    if (Objects.nonNull(role)) {
+                        handlerUnitIds.add(Long.parseLong(identityLink.getGroupId()));
+                        handlerUnitNames.add(role.getRoleName());
+                    }
+                }
+            }
+            taskVO.setHandlerId(handlerIds);
+            taskVO.setHandlerName(handlerNames);
+            taskVO.setHandlerUnitId(handlerUnitIds);
+            taskVO.setHandlerUnitName(handlerUnitNames);
+        }
+    }
+
+    /**
      * 鏌ヨ鍓╀綑浜嬮」锛堟湭寮�濮嬬殑浠诲姟锛�
      *
      * @param processDefinitionId
@@ -871,7 +895,10 @@
             vo.setDeployId(process.getDeploymentId());
             vo.setTaskName(userTask.getName());
             vo.setProcessName(process.getProcessDefinitionName());
-            Task task = taskService.createTaskQuery().processInstanceId(process.getId()).taskDefinitionKey(userTask.getId()).singleResult();
+            Task task = taskService.createTaskQuery()
+                    .processInstanceId(process.getId())
+                    .taskDefinitionKey(userTask.getId())
+                    .singleResult();
             if (Objects.isNull(task)) {
                 // 濡傛灉浠诲姟鍦ㄨ繍琛屾椂娌℃壘鍒帮紝閭d箞鍙兘涓烘湭寮�濮嬫垨鑰呭凡瀹屾垚锛屽彧鏌ヨ鏈紑濮嬬殑
                 List<HistoricTaskInstance> historicTasks = historyService.createHistoricTaskInstanceQuery()
@@ -927,6 +954,8 @@
                 } else {
                     continue;
                 }
+            } else {
+                this.setRuntimeTaskInfo(task, vo);
             }
             vos.add(vo);
         }
@@ -979,6 +1008,9 @@
         if (TaskStatusEnum.TODO.equals(taskVO.getTaskStatus())) {
             List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(taskVO.getTaskId());
             for (IdentityLink identityLink : identityLinksForTask) {
+                if (StringUtils.isBlank(((IdentityLinkEntityImpl)identityLink).getId())) {
+                    continue;
+                }
                 // 缁戝畾鐨勬槸鐢ㄦ埛锛屾煡鍑虹敤鎴峰鍚嶃�侀儴闂�
                 if (StringUtils.isNotBlank(identityLink.getUserId())) {
                     SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId()));

--
Gitblit v1.8.0