From 203acef84d19ffc01bc8d5dd8ef85f90ba400f5c Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期日, 09 三月 2025 11:49:58 +0800 Subject: [PATCH] 容缺查询 --- business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java | 132 ++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 127 insertions(+), 5 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 54fdda2..439f6bc 100644 --- a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java +++ b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java @@ -331,7 +331,8 @@ this.getTodoTaskList(query.getProjectId(), projectProcess.getProcessInsId(), query.getTaskName(), (int) query.getPageSize(), (int) query.getCurrentPage(), ok); ok.data(ok.get("taskList")); break; - case TaskTypeConstant.CURRENT: + case TaskTypeConstant.WAIT: + this.getWaitTask(query.getProjectId(), query.getProcessDefId(), projectProcess.getProcessInsId(), query.getTaskName(), (int) query.getCurrentPage(), (int) query.getPageSize(), ok); break; case TaskTypeConstant.REMAINING: this.getRemainingTask(query.getProjectId(), query.getProcessDefId(), projectProcess.getProcessInsId(), query.getTaskName(), (int) query.getCurrentPage(), (int) query.getPageSize(), ok); @@ -1102,7 +1103,7 @@ vo.setCreateTime(task.getCreateTime()); vo.setTaskDefinitionKey(task.getTaskDefinitionKey()); - this.setPromoterAndHandler(vo, null); + this.setHandler(vo, null); this.setRuntimeTaskInfo(task, vo, projectId); } this.distinctVo(vo); @@ -1174,7 +1175,7 @@ vo.setActualHandlerUserName(handlerUser.getNickName()); } vo.setTaskDefinitionKey(hisTaskList.get(0).getTaskDefinitionKey()); - this.setPromoterAndHandler(vo, hisTaskList.get(0).getIdentityLinks()); + this.setHandler(vo, hisTaskList.get(0).getIdentityLinks()); } return vo; }).filter(Objects::nonNull).collect(Collectors.toList()); @@ -1722,6 +1723,127 @@ return vos; } + private List<CustomerTaskVO> getWaitTask(String projectId, + String processDefinitionId, + String processInsId, + String taskName, + Integer pageNum, + Integer pageSize, + Result result) { + // 鏌ュ嚭瀹圭己杩囩殑浠诲姟 + List<ProcessLog> allWaitTaskList = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper()) + .eq(ProcessLog::getProcessInsId, processInsId) + .eq(ProcessLog::getEventType, ProcessLogEventTypeEnum.WAIT) + .like(StringUtils.isNotBlank(taskName), ProcessLog::getTaskName, taskName) + .orderByDesc(ProcessLog::getGmtCreate) + .list(); + // 鎺掗櫎瀹圭己鍚庡張瀹屾垚鐨勪换鍔� + List<ProcessLog> finishedTaskList = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper()) + .eq(ProcessLog::getProcessInsId, processInsId) + .eq(ProcessLog::getEventType, ProcessLogEventTypeEnum.FINISHED) + .list(); + List<String> finishedTaskIds = finishedTaskList.stream().map(ProcessLog::getTaskId).distinct().collect(Collectors.toList()); + // 寰楀埌鏈畬鎴愮殑瀹圭己浠诲姟 + List<String> waitTaskIds = allWaitTaskList.stream().filter(log -> !finishedTaskIds.contains(log.getTaskId())).map(ProcessLog::getTaskId).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(waitTaskIds)) { + result.total(0l); + return new ArrayList<>(); + } + // 瀹圭己鐨勪换鍔¢兘灞炰簬鍘嗗彶浠诲姟锛屽彧鏄渶瑕佽ˉ琛ㄥ崟鏁版嵁 + List<HistoricTaskInstance> hisTaskList = historyService.createHistoricTaskInstanceQuery() + .processInstanceId(processInsId) + .taskIds(waitTaskIds) + .includeIdentityLinks() + .orderByHistoricTaskInstanceStartTime() + .desc() + .list(); + hisTaskList = this.distinctHisTask(hisTaskList); + + if (CollectionUtils.isEmpty(hisTaskList)) { + result.total(0l); + return new ArrayList<>(); + } + int startNum = pageSize * (pageNum - 1); + int endNum = startNum + pageSize; + if (startNum >= hisTaskList.size()) { + result.total(0l); + // 濡傛灉璧峰绱㈠紩瓒呭嚭浜嗗垪琛ㄧ殑澶у皬锛岃繑鍥炰竴涓┖鍒楄〃 + return new ArrayList<>(); + } + result.total(hisTaskList.size()); + int end = Math.min(endNum, hisTaskList.size()); + List<HistoricTaskInstance> targetTask = hisTaskList.subList(startNum, end); + + // 杞崲鎴怴O + // 寰楀埌鐩爣浠诲姟瀵瑰簲鐨勫畾涔� + List<String> taskDefs = targetTask.stream().map(HistoricTaskInstance::getTaskDefinitionKey).collect(Collectors.toList()); + Map<String, HistoricTaskInstance> keyMap = targetTask.stream().collect(Collectors.toMap(HistoricTaskInstance::getTaskDefinitionKey, his -> his)); + List<UserTask> finishedUserTaskElement = this.getAllUserTaskElement(processDefinitionId).stream().filter(el -> taskDefs.contains(el.getId())).collect(Collectors.toList()); + // 鏌ュ嚭娴佺▼ + ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult(); + String deployId = ""; + String processName = ""; + if (Objects.nonNull(process)) { + deployId = process.getDeploymentId(); + processName = process.getProcessDefinitionName(); + } else { + HistoricProcessInstance hisProcess = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInsId).singleResult(); + deployId = hisProcess.getDeploymentId(); + processName = hisProcess.getProcessDefinitionName(); + } + + String finalDeployId = deployId; + String finalProcessName = processName; + List<CustomerTaskVO> vos = finishedUserTaskElement.stream().map(userTask -> { + CustomerTaskVO vo = new CustomerTaskVO(); + vo.setProcessInsId(processInsId); + vo.setProcessDefId(processDefinitionId); + vo.setDeployId(finalDeployId); + vo.setTaskName(userTask.getName()); + vo.setProcessName(finalProcessName); + + // 涓�涓换鍔″彲鑳芥湁澶氫釜鍊欓�変汉/缁勶紝鎵�浠ラ渶瑕佷娇鐢╨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<String> promoterNames = new ArrayList<>(2); + List<String> promoterUnitNames = new ArrayList<>(2); + vo.setHandlerId(handlerIds); + vo.setHandlerName(handlerNames); + vo.setHandlerUnitId(handlerUnitIds); + vo.setHandlerUnitName(handlerUnitNames); + vo.setPromoterName(promoterNames); + vo.setPromoterUnitName(promoterUnitNames); + + this.setCandidateInfo(userTask, vo, projectId, processInsId); + HistoricTaskInstance hisTask = keyMap.get(userTask.getId()); + if (Objects.nonNull(hisTask)) { + vo.setTaskStatus(TaskStatusEnum.WAIT); + // 濡傛灉鏄凡瀹屾垚鐨勶紝淇℃伅闇�瑕佸崟鐙祴鍊� + vo.setTaskId(hisTask.getId()); + vo.setExecutionId(hisTask.getExecutionId()); + vo.setCreateTime(hisTask.getStartTime()); + + // 鏌ヨ瀹為檯澶勭悊浜� + long handlerUserId = Long.parseLong(hisTask.getAssignee()); + SysUser handlerUser = sysUserService.selectUserById(handlerUserId); + if (Objects.nonNull(handlerUser)) { + vo.getHandlerId().add(handlerUserId); + if (Objects.nonNull(handlerUser.getDept())) { + vo.getHandlerUnitId().add(handlerUser.getDept().getDeptId()); + } + } + this.setHandler(vo, hisTask.getIdentityLinks()); + vo.setTaskDefinitionKey(hisTask.getTaskDefinitionKey()); + } + this.distinctVo(vo); + return vo; + }).collect(Collectors.toList()); + result.data(vos); + return vos; + } + /** * 鏌ヨ鍓╀綑浜嬮」锛堟湭寮�濮嬬殑浠诲姟锛� * @@ -1977,7 +2099,7 @@ * @param taskVO * @param identityLinkInfos 濡傛灉鏄凡瀹屾垚鐨勪换鍔★紝鐢ㄨ繖涓幓鍙栧叧鑱旂殑鐢ㄦ埛/鐢ㄦ埛缁� */ - private void setPromoterAndHandler(CustomerTaskVO taskVO, List<? extends IdentityLinkInfo> identityLinkInfos) { + private void setHandler(CustomerTaskVO taskVO, List<? extends IdentityLinkInfo> identityLinkInfos) { // 娴佺▼澶勭悊浜轰俊鎭� if (TaskStatusEnum.TODO.equals(taskVO.getTaskStatus())) { @@ -2021,7 +2143,7 @@ } } } - } else if (TaskStatusEnum.FINISHED.equals(taskVO.getTaskStatus())) { + } else if (TaskStatusEnum.FINISHED.equals(taskVO.getTaskStatus()) || TaskStatusEnum.WAIT.equals(taskVO.getTaskStatus())) { for (IdentityLinkInfo identityLink : identityLinkInfos) { // 缁戝畾鐨勬槸鐢ㄦ埛锛屾煡鍑虹敤鎴峰鍚嶃�侀儴闂� if (StringUtils.isNotBlank(identityLink.getUserId())) { -- Gitblit v1.8.0