From f9504e80579c35586c2adb0f2e4a384d31aac22f Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期三, 26 三月 2025 03:44:20 +0800 Subject: [PATCH] 任务统计bug --- business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java | 131 +++++++++++++++++++++++++++++++++---------- 1 files changed, 99 insertions(+), 32 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 628ff3d..9bef08a 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,7 @@ // 鎺掗櫎瀹圭己鍚庡張瀹屾垚鐨勪换鍔� List<ProcessLog> finishedTaskList = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper()) .eq(ProcessLog::getProcessInsId, processInsId) - .eq(ProcessLog::getEventType, ProcessLogEventTypeEnum.FINISHED) + .in(ProcessLog::getEventType, ProcessLogEventTypeEnum.FINISHED, ProcessLogEventTypeEnum.REJECT) .list(); List<String> finishedTaskIds = finishedTaskList.stream().map(ProcessLog::getTaskId).distinct().collect(Collectors.toList()); // 寰楀埌鏈畬鎴愮殑瀹圭己浠诲姟 @@ -339,7 +339,19 @@ if (CollectionUtils.isEmpty(waitTaskIds)) { return 0L; } - return Long.valueOf(waitTaskIds.size()); + // 瀹圭己鐨勪换鍔¢兘灞炰簬鍘嗗彶浠诲姟锛屽彧鏄渶瑕佽ˉ琛ㄥ崟鏁版嵁 + List<HistoricTaskInstance> hisTaskList = historyService.createHistoricTaskInstanceQuery() + .processInstanceId(processInsId) + .taskIds(waitTaskIds) + .includeIdentityLinks() + .orderByHistoricTaskInstanceStartTime() + .desc() + .list(); + hisTaskList = this.distinctHisTask(hisTaskList); + // 鎺掗櫎杩愯鏃朵换鍔� + List<String> runTaskKeys = taskService.createTaskQuery().processInstanceId(processInsId).list().stream().map(Task::getTaskDefinitionKey).collect(Collectors.toList()); + hisTaskList = hisTaskList.stream().filter(his -> !runTaskKeys.contains(his.getTaskDefinitionKey())).collect(Collectors.toList()); + return Long.valueOf(hisTaskList.size()); } @Override @@ -1403,21 +1415,25 @@ */ private Long getTimelyTaskNum(String processInsId) { // 鏌ュ嚭宸插畬鎴愮殑浠诲姟key - List<HistoricTaskInstance> hisTaskList = historyService.createHistoricTaskInstanceQuery() + HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery() .processInstanceId(processInsId) .finished() - .list(); - // 鎺掗櫎璺宠繃銆佸缂虹殑浠诲姟锛屽洜涓鸿繖涓や釜鎿嶄綔閮戒細瀹屾垚浠诲姟鑰屼骇鐢熷巻鍙蹭换鍔� - List<String> jumpAndWaitTaskIds = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper()) - .eq(ProcessLog::getProcessInsId, processInsId) - .in(ProcessLog::getEventType, ProcessLogEventTypeEnum.JUMP, ProcessLogEventTypeEnum.WAIT, ProcessLogEventTypeEnum.REJECT) - .list().stream().map(ProcessLog::getTaskId).collect(Collectors.toList()); - hisTaskList = hisTaskList.stream().filter(hisTask -> jumpAndWaitTaskIds.indexOf(hisTask.getId()) == -1).collect(Collectors.toList()); - hisTaskList = this.distinctHisTask(hisTaskList); + .includeIdentityLinks() + .orderByTaskCreateTime() + .desc(); + List<HistoricTaskInstance> hisTaskList = query.list(); if (CollectionUtils.isEmpty(hisTaskList)) { return 0L; } - + hisTaskList = this.distinctHisTask(hisTaskList); + // 鎺掗櫎璺宠繃銆佸缂虹殑浠诲姟锛屽洜涓鸿繖涓や釜鎿嶄綔閮戒細瀹屾垚浠诲姟鑰屼骇鐢熷巻鍙蹭换鍔� + List<String> jumpAndWaitTaskKeys = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper()) + .eq(ProcessLog::getProcessInsId, processInsId) + .in(ProcessLog::getEventType, ProcessLogEventTypeEnum.JUMP, ProcessLogEventTypeEnum.WAIT) // TODO 濡傛灉杩愯鏃朵换鍔℃濂芥槸琚┏鍥炵殑锛岄渶瑕佹兂鍔炴硶鎺掗櫎璋冭椹冲洖鐨勪换鍔★紝涓嶈兘鐩存帴鍦ㄨ繖鍔� ProcessLogEventTypeEnum.REJECT + .list().stream().map(ProcessLog::getTaskDefKey).collect(Collectors.toList()); + List<String> runtimeTaskKey = taskService.createTaskQuery().processInstanceId(processInsId).list().stream().map(Task::getTaskDefinitionKey).collect(Collectors.toList()); + jumpAndWaitTaskKeys.addAll(runtimeTaskKey); + hisTaskList = hisTaskList.stream().filter(hisTask -> jumpAndWaitTaskKeys.indexOf(hisTask.getTaskDefinitionKey()) == -1).collect(Collectors.toList()); List<String> hisTaskKeys = hisTaskList.stream().map(HistoricTaskInstance::getTaskDefinitionKey).distinct().collect(Collectors.toList()); Map<String, HistoricTaskInstance> hisTaskMap = hisTaskList.stream().collect(Collectors.toMap(HistoricTaskInstance::getTaskDefinitionKey, his -> his)); // 鏌ュ嚭鏃堕棿姝e父鐨勪换鍔ey @@ -1460,27 +1476,32 @@ int endNum = startNum + pageSize; // 鏌ュ嚭宸插畬鎴愮殑浠诲姟key - List<HistoricTaskInstance> hisTaskList = historyService.createHistoricTaskInstanceQuery() + HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery() .processInstanceId(processInsId) .finished() - .taskNameLike(taskName) .includeIdentityLinks() .orderByTaskCreateTime() - .desc() - .list(); + .desc(); + if (StringUtils.isNotBlank(taskName)) { + query.taskNameLike(taskName); + } + List<HistoricTaskInstance> hisTaskList = query.list(); if (CollectionUtils.isEmpty(hisTaskList)) { result.total(0); return new ArrayList<>(); } + hisTaskList = this.distinctHisTask(hisTaskList); // 鎺掗櫎璺宠繃銆佸缂虹殑浠诲姟锛屽洜涓鸿繖涓や釜鎿嶄綔閮戒細瀹屾垚浠诲姟鑰屼骇鐢熷巻鍙蹭换鍔� - List<String> jumpAndWaitTaskIds = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper()) + List<String> jumpAndWaitTaskKeys = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper()) .eq(ProcessLog::getProcessInsId, processInsId) .eq(ProcessLog::getProjectId, projectId) - .in(ProcessLog::getEventType, ProcessLogEventTypeEnum.JUMP, ProcessLogEventTypeEnum.WAIT, ProcessLogEventTypeEnum.REJECT) - .list().stream().map(ProcessLog::getTaskId).collect(Collectors.toList()); - hisTaskList = hisTaskList.stream().filter(hisTask -> jumpAndWaitTaskIds.indexOf(hisTask.getId()) == -1).collect(Collectors.toList()); + .in(ProcessLog::getEventType, ProcessLogEventTypeEnum.JUMP, ProcessLogEventTypeEnum.WAIT) + .list().stream().map(ProcessLog::getTaskDefKey).collect(Collectors.toList()); + List<String> runtimeTaskKey = taskService.createTaskQuery().processInstanceId(processInsId).list().stream().map(Task::getTaskDefinitionKey).collect(Collectors.toList()); + jumpAndWaitTaskKeys.addAll(runtimeTaskKey); + hisTaskList = hisTaskList.stream().filter(hisTask -> jumpAndWaitTaskKeys.indexOf(hisTask.getTaskDefinitionKey()) == -1).collect(Collectors.toList()); List<String> hisTaskKeys = hisTaskList.stream().map(HistoricTaskInstance::getTaskDefinitionKey).distinct().collect(Collectors.toList()); - Map<String, HistoricTaskInstance> hisTaskMap = this.distinctHisTask(hisTaskList).stream().collect(Collectors.toMap(HistoricTaskInstance::getTaskDefinitionKey, his -> his)); + Map<String, HistoricTaskInstance> hisTaskMap = hisTaskList.stream().collect(Collectors.toMap(HistoricTaskInstance::getTaskDefinitionKey, his -> his)); // 鏌ュ嚭鏃堕棿姝e父鐨勪换鍔ey List<ProcessCoding> codeList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) .eq(ProcessCoding::getProcessInsId, processInsId) @@ -2018,15 +2039,31 @@ .eq(ProcessLog::getEventType, ProcessLogEventTypeEnum.JUMP) .orderByDesc(ProcessLog::getGmtCreate) .list(); + // 鎺掗櫎椹冲洖鐨� + List<String> rejectTaskIds = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper()) + .select(ProcessLog::getTaskId) + .eq(ProcessLog::getProcessInsId, processInsId) + .eq(ProcessLog::getEventType, ProcessLogEventTypeEnum.REJECT) + .orderByDesc(ProcessLog::getGmtCreate) + .list().stream().map(ProcessLog::getTaskId).collect(Collectors.toList()); + List<String> jumpTaskIds = allJumpTaskList.stream().map(ProcessLog::getTaskId).collect(Collectors.toList()); + jumpTaskIds.removeAll(rejectTaskIds); + if(CollectionUtils.isEmpty(rejectTaskIds)) { + return 0L; + } List<HistoricTaskInstance> hisTaskList = historyService.createHistoricTaskInstanceQuery() .processInstanceId(processInsId) + .finished() .taskIds(jumpTaskIds) .includeIdentityLinks() .orderByHistoricTaskInstanceStartTime() .desc() .list(); hisTaskList = this.distinctHisTask(hisTaskList); + // 鎺掗櫎杩愯鏃朵换鍔� + List<String> runTaskKeys = taskService.createTaskQuery().processInstanceId(processInsId).list().stream().map(Task::getTaskDefinitionKey).collect(Collectors.toList()); + hisTaskList = hisTaskList.stream().filter(his -> !runTaskKeys.contains(his.getTaskDefinitionKey())).collect(Collectors.toList()); return Long.valueOf(hisTaskList.size()); } @@ -2056,15 +2093,33 @@ .like(StringUtils.isNotBlank(taskName), ProcessLog::getTaskName, taskName) .orderByDesc(ProcessLog::getGmtCreate) .list(); + // 鎺掗櫎椹冲洖鐨� + List<String> rejectTaskIds = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper()) + .select(ProcessLog::getTaskId) + .eq(ProcessLog::getProcessInsId, processInsId) + .eq(ProcessLog::getEventType, ProcessLogEventTypeEnum.REJECT) + .like(StringUtils.isNotBlank(taskName), ProcessLog::getTaskName, taskName) + .orderByDesc(ProcessLog::getGmtCreate) + .list().stream().map(ProcessLog::getTaskId).collect(Collectors.toList()); + List<String> jumpTaskIds = allJumpTaskList.stream().map(ProcessLog::getTaskId).collect(Collectors.toList()); + jumpTaskIds.removeAll(rejectTaskIds); + if(CollectionUtils.isEmpty(rejectTaskIds)) { + result.total(0l); + return new ArrayList<>(); + } List<HistoricTaskInstance> hisTaskList = historyService.createHistoricTaskInstanceQuery() .processInstanceId(processInsId) + .finished() .taskIds(jumpTaskIds) .includeIdentityLinks() .orderByHistoricTaskInstanceStartTime() .desc() .list(); hisTaskList = this.distinctHisTask(hisTaskList); + // 鎺掗櫎杩愯鏃朵换鍔� + List<String> runTaskKeys = taskService.createTaskQuery().processInstanceId(processInsId).list().stream().map(Task::getTaskDefinitionKey).collect(Collectors.toList()); + hisTaskList = hisTaskList.stream().filter(his -> !runTaskKeys.contains(his.getTaskDefinitionKey())).collect(Collectors.toList()); if (CollectionUtils.isEmpty(hisTaskList)) { result.total(0l); return new ArrayList<>(); @@ -2185,7 +2240,7 @@ // 鎺掗櫎瀹圭己鍚庡張瀹屾垚鐨勪换鍔� List<ProcessLog> finishedTaskList = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper()) .eq(ProcessLog::getProcessInsId, processInsId) - .eq(ProcessLog::getEventType, ProcessLogEventTypeEnum.FINISHED) + .in(ProcessLog::getEventType, ProcessLogEventTypeEnum.FINISHED, ProcessLogEventTypeEnum.REJECT) .list(); List<String> finishedTaskIds = finishedTaskList.stream().map(ProcessLog::getTaskId).distinct().collect(Collectors.toList()); // 寰楀埌鏈畬鎴愮殑瀹圭己浠诲姟 @@ -2203,7 +2258,9 @@ .desc() .list(); hisTaskList = this.distinctHisTask(hisTaskList); - + // 鎺掗櫎杩愯鏃朵换鍔� + List<String> runTaskKeys = taskService.createTaskQuery().processInstanceId(processInsId).list().stream().map(Task::getTaskDefinitionKey).collect(Collectors.toList()); + hisTaskList = hisTaskList.stream().filter(his -> !runTaskKeys.contains(his.getTaskDefinitionKey())).collect(Collectors.toList()); if (CollectionUtils.isEmpty(hisTaskList)) { result.total(0l); return new ArrayList<>(); @@ -2325,8 +2382,14 @@ // 鎺掗櫎杩涜涓殑浠诲姟鍜屽凡瀹屾垚鐨勪换鍔� List<String> runTaskKeyList = taskService.createTaskQuery().processInstanceId(processInsId).list().stream().map(Task::getTaskDefinitionKey).collect(Collectors.toList()); - List<String> finishedTaskKeyList = historyService.createHistoricTaskInstanceQuery().processInstanceId(processInsId).finished().list().stream().map(HistoricTaskInstance::getTaskDefinitionKey).distinct().collect(Collectors.toList()); - allUserTaskElement = allUserTaskElement.stream().filter(el -> !runTaskKeyList.contains(el.getId()) && !finishedTaskKeyList.contains(el.getId())).collect(Collectors.toList()); + List<String> finishedTaskKeyList = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper()) + .select(ProcessLog::getTaskDefKey) + .eq(ProcessLog::getProcessInsId, processInsId) + .in(ProcessLog::getEventType, ProcessLogEventTypeEnum.FINISHED, ProcessLogEventTypeEnum.JUMP, ProcessLogEventTypeEnum.WAIT) + .list().stream().map(ProcessLog::getTaskDefKey).collect(Collectors.toList()); + finishedTaskKeyList.addAll(runTaskKeyList); +// List<String> finishedTaskKeyList = historyService.createHistoricTaskInstanceQuery().processInstanceId(processInsId).finished().list().stream().map(HistoricTaskInstance::getTaskDefinitionKey).distinct().collect(Collectors.toList()); + allUserTaskElement = allUserTaskElement.stream().filter(el -> finishedTaskKeyList.indexOf(el.getId()) == -1).collect(Collectors.toList()); // 妯℃嫙妯$硦鏌ヨ if (StringUtils.isNotBlank(taskName)) { allUserTaskElement = allUserTaskElement.stream().filter(taskEl -> taskEl.getName().contains(taskName)).collect(Collectors.toList()); @@ -2483,14 +2546,18 @@ // 杩愯鏃舵湭鎵惧埌娴佺▼锛岃鏄庢祦绋嬪凡缁忕粨鏉熶簡 return 0L; } - // 鏌ュ嚭宸插畬鎴愮殑浠诲姟锛岀敤鎬讳换鍔℃暟-宸插畬鎴愮殑灏卞緱鍒板墿浣欎簨椤� - List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery() - .processInstanceId(process.getProcessInstanceId()) - .finished() - .list(); - long num = list.stream().map(HistoricTaskInstance::getTaskDefinitionKey).distinct().count(); + List<UserTask> allUserTaskElement = this.getAllUserTaskElement(processDefinitionId); - return totalNum - num; + // 鎺掗櫎杩涜涓殑浠诲姟鍜屽凡瀹屾垚鐨勪换鍔� + List<String> runTaskKeyList = taskService.createTaskQuery().processInstanceId(processInsId).list().stream().map(Task::getTaskDefinitionKey).collect(Collectors.toList()); + List<String> finishedTaskKeyList = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper()) + .select(ProcessLog::getTaskDefKey) + .eq(ProcessLog::getProcessInsId, processInsId) + .in(ProcessLog::getEventType, ProcessLogEventTypeEnum.FINISHED, ProcessLogEventTypeEnum.JUMP, ProcessLogEventTypeEnum.WAIT) + .list().stream().map(ProcessLog::getTaskDefKey).collect(Collectors.toList()); + finishedTaskKeyList.addAll(runTaskKeyList); + allUserTaskElement = allUserTaskElement.stream().filter(el -> finishedTaskKeyList.indexOf(el.getId()) == -1).collect(Collectors.toList()); + return Long.valueOf(allUserTaskElement.size()); } /** -- Gitblit v1.8.0