From a0e8d1bbff7a02f538be76e852aa233324bd8810 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期五, 03 一月 2025 13:31:51 +0800
Subject: [PATCH] 赋码

---
 business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java |  103 ++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 97 insertions(+), 6 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 46d7ee4..61d4bc3 100644
--- a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
@@ -20,6 +20,7 @@
 import com.ycl.domain.entity.ProjectInfo;
 import com.ycl.domain.entity.ProjectProcess;
 import com.ycl.domain.form.RejectTaskForm;
+import com.ycl.domain.form.TaskDelegationForm;
 import com.ycl.domain.vo.CustomerTaskVO;
 import com.ycl.domain.vo.ProjectProcessDetailVO;
 import com.ycl.mapper.ProjectInfoMapper;
@@ -44,6 +45,7 @@
 import org.flowable.engine.runtime.ProcessInstance;
 import org.flowable.identitylink.api.IdentityLink;
 import org.flowable.identitylink.api.IdentityLinkInfo;
+import org.flowable.identitylink.api.IdentityLinkType;
 import org.flowable.identitylink.api.history.HistoricIdentityLink;
 import org.flowable.task.api.Task;
 import org.flowable.task.api.TaskQuery;
@@ -254,6 +256,7 @@
         TaskQuery taskQuery = taskService.createTaskQuery()
                 .active()
                 .includeProcessVariables()
+                .includeIdentityLinks()
                 .orderByTaskCreateTime().desc();
 
         if (StringUtils.isNotBlank(taskName)) {
@@ -284,8 +287,8 @@
             this.setPromoterInfo(taskVO);
 
             // 娴佺▼澶勭悊浜轰俊鎭�
-            List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(task.getId());
-            for (IdentityLink identityLink : identityLinksForTask) {
+            List<? extends IdentityLinkInfo> identityLinks = task.getIdentityLinks();
+            for (IdentityLinkInfo identityLink : identityLinks) {
                 // 缁戝畾鐨勬槸鐢ㄦ埛锛屾煡鍑虹敤鎴峰鍚嶃�侀儴闂�
                 if (StringUtils.isNotBlank(identityLink.getUserId())) {
                     taskVO.setHandlerType(HandlerTypeEnum.USER);
@@ -360,10 +363,36 @@
     }
 
     @Override
-    public Result rejectTask(RejectTaskForm form) {
-        Task task = taskService.createTaskQuery().taskId(form.getTaskId()).singleResult();
-        taskCommonService.reject(form.getRejectedTaskDefKey(), task.getTaskDefinitionKey(), task.getProcessInstanceId(), form.getTaskId(), form.getAuditOpinion());
-        return Result.ok("椹冲洖鎴愬姛");
+    public Result taskDelegation(TaskDelegationForm form) {
+        Task task = taskService.createTaskQuery().taskId(form.getTaskId()).includeIdentityLinks().singleResult();
+        if (Objects.isNull(task)) {
+            throw new RuntimeException("鏈湪杩愯浠诲姟涓壘鍒拌浠诲姟锛屾棤娉曟墽琛岃浆鍔炴搷浣�");
+        }
+        // 闇�瑕佸厛绉婚櫎涔嬪墠鐨勫鐞嗕汉
+        for (IdentityLinkInfo identityLink : task.getIdentityLinks()) {
+            if (StringUtils.isNotBlank(identityLink.getUserId())) {
+                taskService.deleteCandidateUser(task.getId(), identityLink.getUserId());
+            } else if (StringUtils.isNotBlank(identityLink.getGroupId())) {
+                taskService.deleteCandidateGroup(task.getId(), identityLink.getGroupId());
+            }
+        }
+        // 鍐嶆柊澧炲鐞嗕汉
+        switch (form.getPeopleType()) {
+            case FIX_USER:
+                // 鎸囧畾鐢ㄦ埛鐨勮瘽锛屽彧鑳介�変竴涓敤鎴�
+                taskService.delegateTask(task.getId(), form.getTargetId());
+                break;
+            case USER:
+                // 鐢ㄦ埛缁勭殑璇濓紝鍙互閫夊涓敤鎴凤紝涓ユ牸鏉ヨ杩欓噷鐨勭敤鎴风粍骞朵笉鏄痜lowable涓殑缁勭殑姒傚康锛屽彧鏄紑婧愭鏋舵湁杩欎釜瀹氫箟
+                break;
+            case DEPT:
+                taskService.addCandidateGroup(task.getId(), form.getTargetId());
+                break;
+            default:
+                break;
+        }
+
+        return Result.ok("杞姙鎴愬姛");
     }
 
     /**
@@ -483,6 +512,12 @@
         List<UserTask> userTasks = allUserTaskElement.subList(startNum, end);
         // 鏌ュ嚭娴佺▼
         ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult();
+        if (Objects.isNull(process)) {
+            // 濡傛灉杩愯鏃舵壘涓嶅埌璇存槑鏄凡瀹屾垚鐨勬祦绋嬶紝鐩存帴鏌ュ巻鍙蹭换鍔�
+            List<CustomerTaskVO> vos = this.getFinishedProcessTaskInfo(userTasks, processInsId, processDefinitionId);
+            result.data(vos);
+            return vos;
+        }
         // 鍒ゆ柇浠诲姟鐘舵��
         List<CustomerTaskVO> vos = userTasks.stream().map(userTask -> {
             CustomerTaskVO vo = new CustomerTaskVO();
@@ -573,6 +608,52 @@
     }
 
     /**
+     * 鏌ヨ宸插畬鎴愮殑娴佺▼鐨勪换鍔′俊鎭�
+     *
+     * @param userTasks 浠诲姟鑺傜偣鍒楄〃
+     * @param processInsId 娴佺▼瀹炰緥id
+     * @param processDefId 娴佺▼瀹氫箟id
+     * @return
+     */
+    private List<CustomerTaskVO> getFinishedProcessTaskInfo(List<UserTask> userTasks, String processInsId, String processDefId) {
+        HistoricProcessInstance hisProcess = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInsId).singleResult();
+        List<CustomerTaskVO> vos = userTasks.stream().map(userTask -> {
+            CustomerTaskVO vo = new CustomerTaskVO();
+            vo.setProcessInsId(hisProcess.getId());
+            vo.setProcessDefId(processDefId);
+            vo.setDeployId(hisProcess.getDeploymentId());
+            vo.setTaskName(userTask.getName());
+            vo.setProcessName(hisProcess.getProcessDefinitionName());
+
+            // 鏌ュ涓槸鍥犱负椹冲洖鍚庝細鏌ュ嚭涓ゆ潯鍙婁互涓婏紝鍙栨渶鏂颁竴鏉�
+            List<HistoricTaskInstance> hisTaskList = historyService.createHistoricTaskInstanceQuery()
+                    .processInstanceId(hisProcess.getId())
+                    .taskDefinitionKey(userTask.getId()).includeIdentityLinks()
+                    .orderByHistoricTaskInstanceStartTime()
+                    .desc()
+                    .list();
+
+            vo.setTaskStatus(TaskStatusEnum.FINISHED);
+            // 濡傛灉鏄凡瀹屾垚鐨勶紝淇℃伅闇�瑕佸崟鐙祴鍊�
+            vo.setTaskId(hisTaskList.get(0).getId());
+            vo.setExecutionId(hisTaskList.get(0).getExecutionId());
+            vo.setCreateTime(hisTaskList.get(0).getStartTime());
+            // 鏌ヨ瀹為檯澶勭悊浜�
+            long handlerUserId = Long.parseLong(hisTaskList.get(0).getAssignee());
+            SysUser handlerUser = sysUserService.selectUserById(handlerUserId);
+            if (Objects.nonNull(handlerUser)) {
+                vo.setHandlerId(handlerUserId);
+                vo.setHandlerName(handlerUser.getNickName());
+            }
+            vo.setTaskDefinitionKey(hisTaskList.get(0).getTaskDefinitionKey());
+            this.setPromoterAndHandler(vo, hisTaskList.get(0).getIdentityLinks());
+
+            return vo;
+        }).collect(Collectors.toList());
+        return vos;
+    }
+
+    /**
      * 鏌ヨ鍓╀綑浜嬮」锛堟湭寮�濮嬬殑浠诲姟锛�
      *
      * @param processDefinitionId
@@ -601,6 +682,12 @@
         List<UserTask> userTasks = allUserTaskElement.subList(startNum, end);
         // 鏌ュ嚭娴佺▼
         ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult();
+        if (Objects.isNull(process)) {
+            // 濡傛灉娴佺▼宸茬粡瀹屾垚锛岄偅涔堟病鏈夊墿浣欎簨椤逛簡
+            List<CustomerTaskVO> vos = new ArrayList<>(1);
+            result.data(vos);
+            return vos;
+        }
         // 鍒ゆ柇浠诲姟鐘舵��
         List<CustomerTaskVO> vos = userTasks.stream().map(userTask -> {
             CustomerTaskVO vo = new CustomerTaskVO();
@@ -681,6 +768,10 @@
         List<UserTask> allUserTaskElement = this.getAllUserTaskElement(processDefinitionId);
         // 鏌ュ嚭娴佺▼
         ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult();
+        if (Objects.isNull(process)) {
+            // 杩愯鏃舵湭鎵惧埌娴佺▼锛岃鏄庢祦绋嬪凡缁忕粨鏉熶簡
+            return 0L;
+        }
         long num = 0L;
         // 鍒ゆ柇浠诲姟鐘舵��
         for (UserTask userTask : allUserTaskElement) {

--
Gitblit v1.8.0