From 982e63b981079caaae2be3ad8bb11d29cf9cd97b Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期二, 24 十二月 2024 14:43:36 +0800
Subject: [PATCH] 驳回使用自带驳回,对已完成流程查看流程推进的处理

---
 business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java |  117 +++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 99 insertions(+), 18 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 71e3bcc..ae71ab6 100644
--- a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
@@ -19,6 +19,7 @@
 import com.ycl.domain.dto.FlowTaskDto;
 import com.ycl.domain.entity.ProjectInfo;
 import com.ycl.domain.entity.ProjectProcess;
+import com.ycl.domain.form.RejectTaskForm;
 import com.ycl.domain.vo.CustomerTaskVO;
 import com.ycl.domain.vo.ProjectProcessDetailVO;
 import com.ycl.mapper.ProjectInfoMapper;
@@ -358,6 +359,13 @@
         return Result.ok().data(needAuditing);
     }
 
+    @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("椹冲洖鎴愬姛");
+    }
+
     /**
      * 鏌ヨ寰呭姙浠诲姟
      *
@@ -475,6 +483,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();
@@ -486,12 +500,14 @@
             Task task = taskService.createTaskQuery().processInstanceId(process.getId()).taskDefinitionKey(userTask.getId()).singleResult();
             if (Objects.isNull(task)) {
                 // 濡傛灉浠诲姟鍦ㄨ繍琛屾椂娌℃壘鍒帮紝閭d箞鍙兘涓烘湭寮�濮嬫垨鑰呭凡瀹屾垚锛岄渶瑕佷粠鍘嗗彶浠诲姟涓啀鎵句竴涓�
-                HistoricTaskInstance historicTask = historyService.createHistoricTaskInstanceQuery()
+                List<HistoricTaskInstance> historicTasks = historyService.createHistoricTaskInstanceQuery()
                         .processInstanceId(process.getProcessInstanceId())
                         .taskDefinitionKey(userTask.getId())
                         .includeIdentityLinks()
-                        .singleResult();
-                if (Objects.isNull(historicTask)) {
+                        .orderByHistoricTaskInstanceStartTime()
+                        .desc()
+                        .list();
+                if (CollectionUtils.isEmpty(historicTasks)) {
                     vo.setPromoterName("鏆傛棤");
                     vo.setPromoterUnitName("鏆傛棤");
                     // 鏈紑濮嬬殑浠诲姟锛屽叾鍏宠仈鐨勭敤鎴风粍杩欎簺閮藉彲浠ヤ粠UserTask涓嬁鍒帮紝鍥犱负鏈韩鏈紑濮嬬殑浠诲姟鏄病鏈塼ask鐨勶紝鎵�浠ヨ繖閲岀洿鎺ユ煡
@@ -534,18 +550,18 @@
                 } else {
                     vo.setTaskStatus(TaskStatusEnum.FINISHED);
                     // 濡傛灉鏄凡瀹屾垚鐨勶紝淇℃伅闇�瑕佸崟鐙祴鍊�
-                    vo.setTaskId(historicTask.getId());
-                    vo.setExecutionId(historicTask.getExecutionId());
-                    vo.setCreateTime(historicTask.getStartTime());
+                    vo.setTaskId(historicTasks.get(0).getId());
+                    vo.setExecutionId(historicTasks.get(0).getExecutionId());
+                    vo.setCreateTime(historicTasks.get(0).getStartTime());
                     // 鏌ヨ瀹為檯澶勭悊浜�
-                    long handlerUserId = Long.parseLong(historicTask.getAssignee());
+                    long handlerUserId = Long.parseLong(historicTasks.get(0).getAssignee());
                     SysUser handlerUser = sysUserService.selectUserById(handlerUserId);
                     if (Objects.nonNull(handlerUser)) {
                         vo.setHandlerId(handlerUserId);
                         vo.setHandlerName(handlerUser.getNickName());
                     }
-                    vo.setTaskDefinitionKey(historicTask.getTaskDefinitionKey());
-                    this.setPromoterAndHandler(vo, historicTask.getIdentityLinks());
+                    vo.setTaskDefinitionKey(historicTasks.get(0).getTaskDefinitionKey());
+                    this.setPromoterAndHandler(vo, historicTasks.get(0).getIdentityLinks());
                 }
             } else {
                 vo.setTaskStatus(TaskStatusEnum.TODO);
@@ -559,6 +575,52 @@
             return vo;
         }).collect(Collectors.toList());
         result.data(vos);
+        return vos;
+    }
+
+    /**
+     * 鏌ヨ宸插畬鎴愮殑娴佺▼鐨勪换鍔′俊鎭�
+     *
+     * @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;
     }
 
@@ -591,6 +653,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();
@@ -602,12 +670,14 @@
             Task task = taskService.createTaskQuery().processInstanceId(process.getId()).taskDefinitionKey(userTask.getId()).singleResult();
             if (Objects.isNull(task)) {
                 // 濡傛灉浠诲姟鍦ㄨ繍琛屾椂娌℃壘鍒帮紝閭d箞鍙兘涓烘湭寮�濮嬫垨鑰呭凡瀹屾垚锛屽彧鏌ヨ鏈紑濮嬬殑
-                HistoricTaskInstance historicTask = historyService.createHistoricTaskInstanceQuery()
+                List<HistoricTaskInstance> historicTasks = historyService.createHistoricTaskInstanceQuery()
                         .processInstanceId(process.getProcessInstanceId())
                         .taskDefinitionKey(userTask.getId())
                         .includeIdentityLinks()
-                        .singleResult();
-                if (Objects.isNull(historicTask)) {
+                        .orderByHistoricTaskInstanceStartTime()
+                        .desc()
+                        .list();
+                if (CollectionUtils.isEmpty(historicTasks)) {
                     // 鏈紑濮嬬殑浠诲姟锛屽叾鍏宠仈鐨勭敤鎴风粍杩欎簺閮藉彲浠ヤ粠UserTask涓嬁鍒帮紝鍥犱负鏈韩鏈紑濮嬬殑浠诲姟鏄病鏈塼ask鐨勶紝鎵�浠ヨ繖閲岀洿鎺ユ煡
                     if (StringUtils.isNotBlank(userTask.getAssignee())) {
                         vo.setHandlerType(HandlerTypeEnum.USER);
@@ -669,18 +739,24 @@
         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) {
             Task task = taskService.createTaskQuery().processInstanceId(process.getId()).taskDefinitionKey(userTask.getId()).singleResult();
             if (Objects.isNull(task)) {
                 // 濡傛灉浠诲姟鍦ㄨ繍琛屾椂娌℃壘鍒帮紝閭d箞鍙兘涓烘湭寮�濮嬫垨鑰呭凡瀹屾垚锛屽彧鏌ヨ鏈紑濮嬬殑
-                HistoricTaskInstance historicTask = historyService.createHistoricTaskInstanceQuery()
+                List<HistoricTaskInstance> historicTasks = historyService.createHistoricTaskInstanceQuery()
                         .processInstanceId(process.getProcessInstanceId())
                         .taskDefinitionKey(userTask.getId())
                         .includeIdentityLinks()
-                        .singleResult();
-                if (Objects.isNull(historicTask)) {
+                        .orderByHistoricTaskInstanceStartTime()
+                        .desc()
+                        .list();
+                if (CollectionUtils.isEmpty(historicTasks)) {
                     num++;
                 }
             }
@@ -792,10 +868,15 @@
         // 鍙戣捣浜哄簲涓轰笂涓�鑺傜偣鐨勫鐞嗕汉
         List<String> beforeNodeKey = taskCommonService.getBeforeNodeInfo(taskVO.getProcessDefId(), taskVO.getTaskDefinitionKey());
         List<SysUser> userList = beforeNodeKey.stream().map(key -> {
-            HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().taskDefinitionKey(key).singleResult();
-            if (Objects.nonNull(historicTaskInstance)) {
+            List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery()
+                    .processInstanceId(taskVO.getProcessInsId())
+                    .taskDefinitionKey(key)
+                    .orderByHistoricTaskInstanceStartTime()
+                    .desc()
+                    .list(); // 涔嬫墍浠ョ敤list鏄洜涓哄鏋滄煇涓换鍔¤椹冲洖杩囷紝涓斿鏋滆浠诲姟鍐嶆鎵ц鏃朵細鏈夊鏉℃暟鎹紝鍙栨渶鏂扮殑涓�鏉�
+            if (! CollectionUtils.isEmpty(historicTaskInstances)) {
                 // 瀹為檯棰嗗彇杩欎釜浠诲姟鐨勪汉锛屼篃灏辨槸澶勭悊浜�
-                String assignee = historicTaskInstance.getAssignee();
+                String assignee = historicTaskInstances.get(0).getAssignee();
                 SysUser startUser = sysUserService.selectUserById(Long.parseLong(assignee));
                 return startUser;
             } else {

--
Gitblit v1.8.0