From 5ed4fe8957c978f7d8d70713bafc53f2feea9273 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期一, 24 三月 2025 11:40:07 +0800 Subject: [PATCH] 首页展示容缺待办 --- business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java | 167 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 165 insertions(+), 2 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 8c62e67..e6892aa 100644 --- a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java +++ b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java @@ -51,6 +51,7 @@ import org.flowable.task.api.Task; import org.flowable.task.api.TaskQuery; import org.flowable.task.api.history.HistoricTaskInstance; +import org.flowable.task.api.history.HistoricTaskInstanceQuery; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; @@ -309,8 +310,8 @@ Result result = Result.ok(); - // 浠e姙浠诲姟 - this.getTodoTaskList(projectProcess.getProjectId(), projectProcess.getProcessInsId(), "", 5, 1, result); +// // 浠e姙浠诲姟 +// this.getTodoTaskList(projectProcess.getProjectId(), projectProcess.getProcessInsId(), "", 5, 1, result); return result.data(detail); } @@ -1811,6 +1812,167 @@ return vos; } + @Override + public void getIndexWaitTask(String s, int pageSize, int pageNum, Result result) { + // 鏌ュ嚭瀹圭己杩囩殑浠诲姟 + List<ProcessLog> allWaitTaskList = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper()) + .eq(ProcessLog::getEventType, ProcessLogEventTypeEnum.WAIT) + .orderByDesc(ProcessLog::getGmtCreate) + .list(); + // 鎺掗櫎瀹圭己鍚庡張瀹屾垚鐨勪换鍔� + List<ProcessLog> finishedTaskList = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper()) + .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); + result.data(new ArrayList<>()); + return; + } + List<HistoricTaskInstance> hisTasks = waitTaskIds.stream().map(waitTaskId -> { + List<ProcessLog> logs = allWaitTaskList.stream().filter(item -> item.getTaskId().equals(waitTaskId)).collect(Collectors.toList()); + HistoricTaskInstance hisTask = null; + if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(logs)) { + // 瀹圭己鐨勪换鍔¢兘灞炰簬鍘嗗彶浠诲姟锛屽彧鏄渶瑕佽ˉ琛ㄥ崟鏁版嵁 + HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery() + .processInstanceId(logs.get(0).getProcessInsId()) + .taskId(waitTaskId) + .includeIdentityLinks() + .orderByHistoricTaskInstanceStartTime() + .desc(); + if (!SecurityUtils.getLoginUser().getUser().isAdmin()) { + query + .or() + .taskCandidateGroupIn(taskCommonService.getCurrentUserGroups()) + .taskCandidateUser(SecurityUtils.getUserId() + "") + .taskAssignee(SecurityUtils.getUserId() + "") + .endOr(); + } + List<HistoricTaskInstance> hisTaskList = query.list(); + hisTaskList = this.distinctHisTask(hisTaskList); + if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(hisTaskList)) { + hisTask = hisTaskList.get(0); + } + } + return hisTask; + }).filter(Objects::nonNull).collect(Collectors.toList()); + + if (CollectionUtils.isEmpty(hisTasks)) { + result.total(0l); + result.data(new ArrayList<>()); + return; + } + int startNum = pageSize * (pageNum - 1); + int endNum = startNum + pageSize; + if (startNum >= hisTasks.size()) { + result.total(0l); + // 濡傛灉璧峰绱㈠紩瓒呭嚭浜嗗垪琛ㄧ殑澶у皬锛岃繑鍥炰竴涓┖鍒楄〃 + result.data(new ArrayList<>()); + return; + } + result.total(hisTasks.size()); + int end = Math.min(endNum, hisTasks.size()); + List<HistoricTaskInstance> targetTask = hisTasks.subList(startNum, end); + + // 杞崲鎴怴O + List<IndexCustomerTaskVO> vos = targetTask.stream().map(userTask -> { + IndexCustomerTaskVO vo = new IndexCustomerTaskVO(); + vo.setProcessInsId(userTask.getProcessInstanceId()); + vo.setProcessDefId(userTask.getProcessDefinitionId()); + + // 鏌ュ嚭娴佺▼ + ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceId(userTask.getProcessInstanceId()).singleResult(); + String deployId = ""; + String processName = ""; + if (Objects.nonNull(process)) { + deployId = process.getDeploymentId(); + processName = process.getProcessDefinitionName(); + } else { + HistoricProcessInstance hisProcess = historyService.createHistoricProcessInstanceQuery().processInstanceId(userTask.getProcessInstanceId()).singleResult(); + deployId = hisProcess.getDeploymentId(); + processName = hisProcess.getProcessDefinitionName(); + } + + String finalDeployId = deployId; + String finalProcessName = processName; + + 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); + + ProjectProcess projectProcess = new LambdaQueryChainWrapper<>(baseMapper) + .eq(ProjectProcess::getProcessInsId, userTask.getProcessInstanceId()) + .one(); + if (Objects.isNull(projectProcess)) { + throw new RuntimeException("椤圭洰娴佺▼鏈惎鍔�"); + } + String projectId = ""; + String projectName = ""; + if (Objects.nonNull(projectProcess)) { + if (projectProcess.getProjectType().equals(ProjectProcessTypeEnum.PROJECT)) { + ProjectInfo project = projectInfoMapper.selectById(projectProcess.getProjectId()); + if (Objects.nonNull(project)) { + projectId = projectProcess.getProjectId(); + projectName = project.getProjectName(); + } + } else if (projectProcess.getProjectType().equals(ProjectProcessTypeEnum.ENGINEERING)) { + ProjectEngineering engineering = projectEngineeringMapper.selectById(projectProcess.getProjectId()); + if (Objects.nonNull(engineering)) { + projectId = projectProcess.getProjectId(); + projectName = engineering.getProjectName(); + } + } + } + vo.setProjectId(projectId); + vo.setProjectName(projectName); + List<UserTask> uTaskList = this.getAllUserTaskElement(userTask.getProcessDefinitionId()).stream().filter(item -> item.getId().equals(userTask.getTaskDefinitionKey())).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(uTaskList)) { + throw new RuntimeException("鏈壘鍒版祦绋嬩换鍔¤璁�"); + } + this.setCandidateInfo(uTaskList.get(0), vo, projectProcess.getProjectId(), userTask.getProcessInstanceId()); + + vo.setTaskStatus(TaskStatusEnum.WAIT); + // 濡傛灉鏄凡瀹屾垚鐨勶紝淇℃伅闇�瑕佸崟鐙祴鍊� + vo.setTaskId(userTask.getId()); + vo.setExecutionId(userTask.getExecutionId()); + vo.setCreateTime(userTask.getStartTime()); + + vo.setTaskDefinitionKey(userTask.getTaskDefinitionKey()); + + this.distinctVo(vo); + return vo; + }).collect(Collectors.toList()); + result.data(vos); + } + + /** + * 瀹圭己浠诲姟鍒嗛〉 + * + * @param projectId + * @param processDefinitionId + * @param processInsId + * @param taskName + * @param pageNum + * @param pageSize + * @param result + * @return + */ private List<CustomerTaskVO> getWaitTask(String projectId, String processDefinitionId, String processInsId, @@ -2146,6 +2308,7 @@ */ private void setCandidateInfo(UserTask userTask, CustomerTaskVO vo, String projectId, String processInsId) { if (StringUtils.isNotBlank(userTask.getAssignee())) { + vo.setHandlerType(HandlerTypeEnum.USER); SysUser sysUser = sysUserService.selectUserById(Long.parseLong(userTask.getAssignee())); if (Objects.nonNull(sysUser)) { if (Objects.nonNull(sysUser.getDept())) { -- Gitblit v1.8.0