From cd6de797868cd3ba10b4bd7fad0d3fdea208b2d5 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期二, 11 二月 2025 11:45:55 +0800 Subject: [PATCH] 按时完成、超时事项、即将超时的统计逻辑更换 --- business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java | 271 ++++++++++++++++++++++++++++++++--------------------- 1 files changed, 164 insertions(+), 107 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 68e9f43..75187b6 100644 --- a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java +++ b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java @@ -649,7 +649,8 @@ .active() .processInstanceId(processInsId) .includeProcessVariables() - .orderByTaskCreateTime().desc(); + .orderByTaskCreateTime() + .desc(); if (StringUtils.isNotBlank(taskName)) { taskQuery.processDefinitionNameLike(taskName); @@ -962,24 +963,36 @@ * @return */ private Long getTimelyTaskNum(String processInsId) { - // 鏌ュ嚭鏃堕棿姝e父鐨勪换鍔d - List<String> taskKeyList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) - .select(ProcessCoding::getTaskDefKey) - .eq(ProcessCoding::getProcessInsId, processInsId) - .eq(ProcessCoding::getOvertimeStatus, ProcessOverTimeConstants.NORMAL) - .list() - .stream() - .map(ProcessCoding::getTaskDefKey) - .collect(Collectors.toList()); - if (CollectionUtils.isEmpty(taskKeyList)) { - return 0L; - } - // 鏌ュ嚭鎵�鏈夊凡瀹屾垚鐨勪换鍔� - return historyService.createHistoricTaskInstanceQuery() + // 鏌ュ嚭宸插畬鎴愮殑浠诲姟key + List<HistoricTaskInstance> hisTaskList = historyService.createHistoricTaskInstanceQuery() .processInstanceId(processInsId) .finished() - .caseDefinitionKeyIn(taskKeyList) - .count(); + .includeIdentityLinks() + .list(); + if (CollectionUtils.isEmpty(hisTaskList)) { + return 0L; + } + + 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 + List<ProcessCoding> taskList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) + .eq(ProcessCoding::getProcessInsId, processInsId) + .in(ProcessCoding::getTaskDefKey, hisTaskKeys) + .list(); + Map<String, ProcessCoding> codingMap = taskList.stream().collect(Collectors.toMap(ProcessCoding::getTaskDefKey, pro -> pro)); + List<HistoricTaskInstance> finishedTaskList = new ArrayList<>(); + // 鍒ゆ柇 + for (String key : hisTaskMap.keySet()) { + ProcessCoding processCoding = codingMap.get(key); + // 濡傛灉宸插畬鎴愮殑浠诲姟娌′粠鏁版嵁搴撴煡鎵惧嚭鏉ワ紝璇存槑璇ヤ换鍔℃病閰嶇疆璧嬬爜绛夋椂闂达紝鐩存帴璁剧疆涓烘寜鏃跺畬鎴� + if (Objects.isNull(processCoding)) { + finishedTaskList.add(hisTaskMap.get(key)); + } else if (ProcessOverTimeConstants.NORMAL.equals(processCoding.getOvertimeStatus()) || StringUtils.isBlank(processCoding.getOvertimeStatus())) { + finishedTaskList.add(hisTaskMap.get(key)); + } + } + return Long.valueOf(finishedTaskList.size()); } /** @@ -997,26 +1010,38 @@ int startNum = pageSize * (pageNum - 1); int endNum = startNum + pageSize; - // 鏌ュ嚭鏃堕棿姝e父鐨勪换鍔d - List<String> taskKeyList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) - .select(ProcessCoding::getTaskDefKey) - .eq(ProcessCoding::getProcessInsId, processInsId) - .eq(ProcessCoding::getOvertimeStatus, ProcessOverTimeConstants.NORMAL) - .list() - .stream() - .map(ProcessCoding::getTaskDefKey) - .collect(Collectors.toList()); + // 鏌ュ嚭宸插畬鎴愮殑浠诲姟key + List<HistoricTaskInstance> hisTaskList = historyService.createHistoricTaskInstanceQuery() + .processInstanceId(processInsId) + .finished() + .taskNameLike(taskName) + .includeIdentityLinks() + .orderByTaskCreateTime() + .desc() + .list(); + if (CollectionUtils.isEmpty(hisTaskList)) { + result.total(0); + return new ArrayList<>(); + } + 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 + List<ProcessCoding> taskList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) + .eq(ProcessCoding::getProcessInsId, processInsId) + .in(ProcessCoding::getTaskDefKey, hisTaskKeys) + .list(); + Map<String, ProcessCoding> codingMap = taskList.stream().collect(Collectors.toMap(ProcessCoding::getTaskDefKey, pro -> pro)); List<HistoricTaskInstance> finishedTaskList = new ArrayList<>(); - if (! CollectionUtils.isEmpty(taskKeyList)) { - // 鏌ュ嚭鎵�鏈夊凡瀹屾垚鐨勪换鍔� - finishedTaskList = historyService.createHistoricTaskInstanceQuery() - .processInstanceId(processInsId) - .finished() - .taskNameLike(taskName) - .caseDefinitionKeyIn(taskKeyList) - .includeIdentityLinks() - .list(); + // 鍒ゆ柇 + for (String key : hisTaskMap.keySet()) { + ProcessCoding processCoding = codingMap.get(key); + // 濡傛灉宸插畬鎴愮殑浠诲姟娌′粠鏁版嵁搴撴煡鎵惧嚭鏉ワ紝璇存槑璇ヤ换鍔℃病閰嶇疆璧嬬爜绛夋椂闂达紝鐩存帴璁剧疆涓烘寜鏃跺畬鎴� + if (Objects.isNull(processCoding)) { + finishedTaskList.add(hisTaskMap.get(key)); + } else if (ProcessOverTimeConstants.NORMAL.equals(processCoding.getOvertimeStatus()) || StringUtils.isBlank(processCoding.getOvertimeStatus())) { + finishedTaskList.add(hisTaskMap.get(key)); + } } if (startNum >= finishedTaskList.size()) { @@ -1101,23 +1126,31 @@ * @return */ private Long getOvertimeTaskNum(String processInsId) { - // 鏌ュ嚭鏃堕棿姝e父鐨勪换鍔d - List<String> taskKeyList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) - .select(ProcessCoding::getTaskDefKey) - .eq(ProcessCoding::getProcessInsId, processInsId) - .eq(ProcessCoding::getOvertimeStatus, ProcessOverTimeConstants.OVERTIME) - .list() - .stream() - .map(ProcessCoding::getTaskDefKey) - .collect(Collectors.toList()); - if (CollectionUtils.isEmpty(taskKeyList)) { + // 鏌ュ嚭杩愯鍦ㄧ殑浠诲姟key + List<Task> taskList = taskService.createTaskQuery().processInstanceId(processInsId).list(); + + if (CollectionUtils.isEmpty(taskList)) { return 0L; } - // 鏌ュ嚭鎵�鏈夊凡瀹屾垚鐨勪换鍔� - return taskService.createTaskQuery() - .processInstanceId(processInsId) - .caseDefinitionKeyIn(taskKeyList) - .count(); + List<String> taskKeys = taskList.stream().map(Task::getTaskDefinitionKey).distinct().collect(Collectors.toList()); + Map<String, Task> taskMap = taskList.stream().collect(Collectors.toMap(Task::getTaskDefinitionKey, his -> his)); + // 鏌ュ嚭鏁版嵁搴撶殑浠诲姟key + List<ProcessCoding> databaseTaskList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) + .eq(ProcessCoding::getProcessInsId, processInsId) + .in(ProcessCoding::getTaskDefKey, taskKeys) + .list(); + Map<String, ProcessCoding> codingMap = databaseTaskList.stream().collect(Collectors.toMap(ProcessCoding::getTaskDefKey, pro -> pro)); + List<Task> tList = new ArrayList<>(); + // 鍒ゆ柇 + for (String key : taskMap.keySet()) { + ProcessCoding processCoding = codingMap.get(key); + // 濡傛灉杩愯涓殑浠诲姟娌′粠鏁版嵁搴撴煡鎵惧嚭鏉ワ紝璇存槑璇ヤ换鍔℃病閰嶇疆璧嬬爜绛夋椂闂达紝涓嶇畻瓒呮椂 + if (Objects.nonNull(processCoding) && ProcessOverTimeConstants.OVERTIME.equals(processCoding.getOvertimeStatus())) { + tList.add(taskMap.get(key)); + } + } + + return Long.valueOf(taskList.size()); } /** @@ -1136,33 +1169,42 @@ int startNum = pageSize * (pageNum - 1); int endNum = startNum + pageSize; - // 鏌ュ嚭鍗冲皢瓒呮椂鐨勪换鍔� - List<String> taskKeyList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) - .select(ProcessCoding::getTaskDefKey) + // 鏌ュ嚭杩愯鍦ㄧ殑浠诲姟key + List<Task> taskList = new ArrayList<>(12); + if (StringUtils.isNotBlank(taskName)) { + taskList = taskService.createTaskQuery().processInstanceId(processInsId).taskNameLike(taskName).orderByTaskCreateTime().desc().list(); + } else { + taskList = taskService.createTaskQuery().processInstanceId(processInsId).orderByTaskCreateTime().desc().list(); + } + if (CollectionUtils.isEmpty(taskList)) { + result.total(0); + return new ArrayList<>(); + } + List<String> taskKeys = taskList.stream().map(Task::getTaskDefinitionKey).distinct().collect(Collectors.toList()); + Map<String, Task> taskMap = taskList.stream().collect(Collectors.toMap(Task::getTaskDefinitionKey, his -> his)); + // 鏌ュ嚭鏁版嵁搴撶殑浠诲姟key + List<ProcessCoding> databaseTaskList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) .eq(ProcessCoding::getProcessInsId, processInsId) - .eq(ProcessCoding::getOvertimeStatus, ProcessOverTimeConstants.OVERTIME) - .list() - .stream() - .map(ProcessCoding::getTaskDefKey) - .collect(Collectors.toList()); - - List<Task> taskList = new ArrayList<>(); - // 鏌ュ嚭鎵�鏈夋鍦ㄥ鐞�(杩愯鏃�)鐨勪换鍔� - if (! CollectionUtils.isEmpty(taskKeyList)) { - taskList = taskService.createTaskQuery() - .processInstanceId(processInsId) - .taskNameLike(taskName) - .caseDefinitionKeyIn(taskKeyList) - .list(); + .in(ProcessCoding::getTaskDefKey, taskKeys) + .list(); + Map<String, ProcessCoding> codingMap = databaseTaskList.stream().collect(Collectors.toMap(ProcessCoding::getTaskDefKey, pro -> pro)); + List<Task> tList = new ArrayList<>(); + // 鍒ゆ柇 + for (String key : taskMap.keySet()) { + ProcessCoding processCoding = codingMap.get(key); + // 濡傛灉杩愯涓殑浠诲姟娌′粠鏁版嵁搴撴煡鎵惧嚭鏉ワ紝璇存槑璇ヤ换鍔℃病閰嶇疆璧嬬爜绛夋椂闂达紝涓嶇畻瓒呮椂 + if (Objects.nonNull(processCoding) && ProcessOverTimeConstants.OVERTIME.equals(processCoding.getOvertimeStatus())) { + tList.add(taskMap.get(key)); + } } - if (startNum >= taskList.size()) { + if (startNum >= tList.size()) { // 濡傛灉璧峰绱㈠紩瓒呭嚭浜嗗垪琛ㄧ殑澶у皬锛岃繑鍥炰竴涓┖鍒楄〃 return new ArrayList<>(); } - result.total(taskList.size()); - int end = Math.min(endNum, taskList.size()); - List<Task> pageTaskList = taskList.subList(startNum, end); + result.total(tList.size()); + int end = Math.min(endNum, tList.size()); + List<Task> pageTaskList = tList.subList(startNum, end); List<String> taskDefs = pageTaskList.stream().map(Task::getTaskDefinitionKey).collect(Collectors.toList()); Map<String, Task> keyMap = pageTaskList.stream().collect(Collectors.toMap(Task::getTaskDefinitionKey, his -> his)); @@ -1187,23 +1229,29 @@ * @return */ private Long getWillOvertimeTaskNum(String processInsId) { - // 鏌ュ嚭鏃堕棿姝e父鐨勪换鍔d - List<String> taskKeyList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) - .select(ProcessCoding::getTaskDefKey) - .eq(ProcessCoding::getProcessInsId, processInsId) - .eq(ProcessCoding::getOvertimeStatus, ProcessOverTimeConstants.WILLOVERTIME) - .list() - .stream() - .map(ProcessCoding::getTaskDefKey) - .collect(Collectors.toList()); - if (CollectionUtils.isEmpty(taskKeyList)) { + // 鏌ュ嚭杩愯鍦ㄧ殑浠诲姟key + List<Task> taskList = taskService.createTaskQuery().processInstanceId(processInsId).list(); + if (CollectionUtils.isEmpty(taskList)) { return 0L; } - // 鏌ュ嚭鎵�鏈夊凡瀹屾垚鐨勪换鍔� - return taskService.createTaskQuery() - .processInstanceId(processInsId) - .caseDefinitionKeyIn(taskKeyList) - .count(); + List<String> taskKeys = taskList.stream().map(Task::getTaskDefinitionKey).distinct().collect(Collectors.toList()); + Map<String, Task> taskMap = taskList.stream().collect(Collectors.toMap(Task::getTaskDefinitionKey, his -> his)); + // 鏌ュ嚭鏁版嵁搴撶殑浠诲姟key + List<ProcessCoding> databaseTaskList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) + .eq(ProcessCoding::getProcessInsId, processInsId) + .in(ProcessCoding::getTaskDefKey, taskKeys) + .list(); + Map<String, ProcessCoding> codingMap = databaseTaskList.stream().collect(Collectors.toMap(ProcessCoding::getTaskDefKey, pro -> pro)); + List<Task> tList = new ArrayList<>(); + // 鍒ゆ柇 + for (String key : taskMap.keySet()) { + ProcessCoding processCoding = codingMap.get(key); + // 濡傛灉杩愯涓殑浠诲姟娌′粠鏁版嵁搴撴煡鎵惧嚭鏉ワ紝璇存槑璇ヤ换鍔℃病閰嶇疆璧嬬爜绛夋椂闂达紝涓嶇畻鍗冲皢瓒呮椂 + if (Objects.nonNull(processCoding) && ProcessOverTimeConstants.WILLOVERTIME.equals(processCoding.getOvertimeStatus())) { + tList.add(taskMap.get(key)); + } + } + return Long.valueOf(tList.size()); } /** @@ -1222,33 +1270,42 @@ int startNum = pageSize * (pageNum - 1); int endNum = startNum + pageSize; - // 鏌ュ嚭鍗冲皢瓒呮椂鐨勪换鍔� - List<String> taskKeyList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) - .select(ProcessCoding::getTaskDefKey) + // 鏌ュ嚭杩愯鍦ㄧ殑浠诲姟key + List<Task> taskList = new ArrayList<>(12); + if (StringUtils.isNotBlank(taskName)) { + taskList = taskService.createTaskQuery().processInstanceId(processInsId).taskNameLike(taskName).orderByTaskCreateTime().desc().list(); + } else { + taskList = taskService.createTaskQuery().processInstanceId(processInsId).orderByTaskCreateTime().desc().list(); + } + if (CollectionUtils.isEmpty(taskList)) { + result.total(0); + return new ArrayList<>(); + } + List<String> taskKeys = taskList.stream().map(Task::getTaskDefinitionKey).distinct().collect(Collectors.toList()); + Map<String, Task> taskMap = taskList.stream().collect(Collectors.toMap(Task::getTaskDefinitionKey, his -> his)); + // 鏌ュ嚭鏁版嵁搴撶殑浠诲姟key + List<ProcessCoding> databaseTaskList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) .eq(ProcessCoding::getProcessInsId, processInsId) - .eq(ProcessCoding::getOvertimeStatus, ProcessOverTimeConstants.WILLOVERTIME) - .list() - .stream() - .map(ProcessCoding::getTaskDefKey) - .collect(Collectors.toList()); - - List<Task> taskList = new ArrayList<>(); - // 鏌ュ嚭鎵�鏈夋鍦ㄥ鐞�(杩愯鏃�)鐨勪换鍔� - if (! CollectionUtils.isEmpty(taskKeyList)) { - taskList = taskService.createTaskQuery() - .processInstanceId(processInsId) - .taskNameLike(taskName) - .caseDefinitionKeyIn(taskKeyList) - .list(); + .in(ProcessCoding::getTaskDefKey, taskKeys) + .list(); + Map<String, ProcessCoding> codingMap = databaseTaskList.stream().collect(Collectors.toMap(ProcessCoding::getTaskDefKey, pro -> pro)); + List<Task> tList = new ArrayList<>(); + // 鍒ゆ柇 + for (String key : taskMap.keySet()) { + ProcessCoding processCoding = codingMap.get(key); + // 濡傛灉杩愯涓殑浠诲姟娌′粠鏁版嵁搴撴煡鎵惧嚭鏉ワ紝璇存槑璇ヤ换鍔℃病閰嶇疆璧嬬爜绛夋椂闂达紝涓嶇畻鍗冲皢瓒呮椂 + if (Objects.nonNull(processCoding) && ProcessOverTimeConstants.WILLOVERTIME.equals(processCoding.getOvertimeStatus())) { + tList.add(taskMap.get(key)); + } } - if (startNum >= taskList.size()) { + if (startNum >= tList.size()) { // 濡傛灉璧峰绱㈠紩瓒呭嚭浜嗗垪琛ㄧ殑澶у皬锛岃繑鍥炰竴涓┖鍒楄〃 return new ArrayList<>(); } - result.total(taskList.size()); - int end = Math.min(endNum, taskList.size()); - List<Task> pageTaskList = taskList.subList(startNum, end); + result.total(tList.size()); + int end = Math.min(endNum, tList.size()); + List<Task> pageTaskList = tList.subList(startNum, end); List<String> taskDefs = pageTaskList.stream().map(Task::getTaskDefinitionKey).collect(Collectors.toList()); Map<String, Task> keyMap = pageTaskList.stream().collect(Collectors.toMap(Task::getTaskDefinitionKey, his -> his)); -- Gitblit v1.8.0