From ff302662063351bf572404da2f3a6a1ff95d5982 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期三, 12 二月 2025 15:29:53 +0800 Subject: [PATCH] 跳过增加跳过说明 --- business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java | 125 +++++++++++++++++++++++++++++------------ 1 files changed, 89 insertions(+), 36 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 4dedffa..ae7c9b0 100644 --- a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java +++ b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java @@ -22,6 +22,7 @@ import com.ycl.domain.form.TaskDelegationForm; import com.ycl.domain.form.TaskJumpForm; import com.ycl.domain.json.DelegateData; +import com.ycl.domain.json.JumpData; import com.ycl.domain.vo.CustomerTaskVO; import com.ycl.domain.vo.IndexCustomerTaskVO; import com.ycl.domain.vo.ProjectProcessDetailVO; @@ -620,7 +621,7 @@ Task task = taskService.createTaskQuery().taskId(form.getTaskId()).processInstanceId(form.getProcessInsId()).singleResult(); if (Objects.nonNull(task)) { // 娣诲姞璺宠繃鏃ュ織 - publisher.publishEvent(new TaskLogEvent(this, form.getProjectId(), form.getProcessInsId(), form.getTaskId(), ProcessLogEventTypeEnum.JUMP, null)); + publisher.publishEvent(new TaskLogEvent(this, form.getProjectId(), form.getProcessInsId(), form.getTaskId(), ProcessLogEventTypeEnum.JUMP, new JumpData(form.getDesc()))); // 鏌ュ嚭璇ヤ换鍔$粦瀹氱殑琛ㄥ崟 Map<String, Object> data = new HashMap<>(1); @@ -966,8 +967,8 @@ List<HistoricTaskInstance> hisTaskList = historyService.createHistoricTaskInstanceQuery() .processInstanceId(processInsId) .finished() - .includeIdentityLinks() .list(); + hisTaskList = this.distinctHisTask(hisTaskList); if (CollectionUtils.isEmpty(hisTaskList)) { return 0L; } @@ -975,20 +976,24 @@ 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()) + List<ProcessCoding> codeList = 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); + List<ProcessCoding> targetProcessCodings = codeList.stream().filter(code -> key.equals(code.getTaskDefKey())).collect(Collectors.toList()); // 濡傛灉宸插畬鎴愮殑浠诲姟娌′粠鏁版嵁搴撴煡鎵惧嚭鏉ワ紝璇存槑璇ヤ换鍔℃病閰嶇疆璧嬬爜绛夋椂闂达紝鐩存帴璁剧疆涓烘寜鏃跺畬鎴� - if (Objects.isNull(processCoding)) { + if (CollectionUtils.isEmpty(targetProcessCodings)) { finishedTaskList.add(hisTaskMap.get(key)); - } else if (ProcessOverTimeConstants.NORMAL.equals(processCoding.getOvertimeStatus()) || StringUtils.isBlank(processCoding.getOvertimeStatus())) { - finishedTaskList.add(hisTaskMap.get(key)); + } else { + // 鎸夌収鏃堕棿闄嶅簭鎺掑垪 + targetProcessCodings.sort(Comparator.comparing(ProcessCoding::getGmtCreate).reversed()); + ProcessCoding latestProjectProcess = targetProcessCodings.get(0); + if (ProcessOverTimeConstants.NORMAL.equals(latestProjectProcess.getOvertimeStatus()) || StringUtils.isBlank(latestProjectProcess.getOvertimeStatus())) { + finishedTaskList.add(hisTaskMap.get(key)); + } } } return Long.valueOf(finishedTaskList.size()); @@ -1024,22 +1029,26 @@ } 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)); + Map<String, HistoricTaskInstance> hisTaskMap = this.distinctHisTask(hisTaskList).stream().collect(Collectors.toMap(HistoricTaskInstance::getTaskDefinitionKey, his -> his)); // 鏌ュ嚭鏃堕棿姝e父鐨勪换鍔ey - List<ProcessCoding> taskList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) + List<ProcessCoding> codeList = 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); + List<ProcessCoding> targetProcessCodings = codeList.stream().filter(code -> key.equals(code.getTaskDefKey())).collect(Collectors.toList()); // 濡傛灉宸插畬鎴愮殑浠诲姟娌′粠鏁版嵁搴撴煡鎵惧嚭鏉ワ紝璇存槑璇ヤ换鍔℃病閰嶇疆璧嬬爜绛夋椂闂达紝鐩存帴璁剧疆涓烘寜鏃跺畬鎴� - if (Objects.isNull(processCoding)) { + if (CollectionUtils.isEmpty(targetProcessCodings)) { finishedTaskList.add(hisTaskMap.get(key)); - } else if (ProcessOverTimeConstants.NORMAL.equals(processCoding.getOvertimeStatus()) || StringUtils.isBlank(processCoding.getOvertimeStatus())) { - finishedTaskList.add(hisTaskMap.get(key)); + } else { + // 鎸夌収鏃堕棿闄嶅簭鎺掑垪 + targetProcessCodings.sort(Comparator.comparing(ProcessCoding::getGmtCreate).reversed()); + ProcessCoding latestProjectProcess = targetProcessCodings.get(0); + if (ProcessOverTimeConstants.NORMAL.equals(latestProjectProcess.getOvertimeStatus()) || StringUtils.isBlank(latestProjectProcess.getOvertimeStatus())) { + finishedTaskList.add(hisTaskMap.get(key)); + } } } @@ -1117,6 +1126,27 @@ return vos; } + /** + * 鏍规嵁浠诲姟key鍘婚噸鍘嗗彶浠诲姟锛岀浉鍚屾儏鍐典笅鍙栨渶鏂扮殑涓�鏉� + * + * @param hisTaskList + * @return + */ + private List<HistoricTaskInstance> distinctHisTask(List<HistoricTaskInstance> hisTaskList) { + Map<String, HistoricTaskInstance> uniqueTasks = new HashMap<>(); + for (HistoricTaskInstance task : hisTaskList) { + String taskDefinitionKey = task.getTaskDefinitionKey(); + HistoricTaskInstance existingTask = uniqueTasks.get(taskDefinitionKey); + + // 濡傛灉浠诲姟key閲嶅锛堝彲鑳借椹冲洖杩囷紝閲嶆柊鎻愪氦瀵艰嚧key閲嶅锛夛紝鍙栨渶杩戠殑涓�鏉� + if (existingTask == null || task.getCreateTime().after(existingTask.getCreateTime())) { + uniqueTasks.put(taskDefinitionKey, task); + } + } + // 鏈�缁堝幓閲嶅悗鐨勪换鍔″垪琛� + return new ArrayList<>(uniqueTasks.values()); + } + /** * 缁熻瓒呮椂鐨勪换鍔℃暟 @@ -1134,21 +1164,26 @@ 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()) + List<ProcessCoding> codeList = 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())) { + List<ProcessCoding> targetProcessCodings = codeList.stream().filter(code -> key.equals(code.getTaskDefKey())).collect(Collectors.toList()); + // 濡傛灉宸插畬鎴愮殑浠诲姟娌′粠鏁版嵁搴撴煡鎵惧嚭鏉ワ紝璇存槑璇ヤ换鍔℃病閰嶇疆璧嬬爜绛夋椂闂达紝鐩存帴璁剧疆涓烘寜鏃跺畬鎴� + if (CollectionUtils.isEmpty(targetProcessCodings)) { tList.add(taskMap.get(key)); + } else { + // 鎸夌収鏃堕棿闄嶅簭鎺掑垪 + targetProcessCodings.sort(Comparator.comparing(ProcessCoding::getGmtCreate).reversed()); + ProcessCoding latestProjectProcess = targetProcessCodings.get(0); + if (Objects.nonNull(latestProjectProcess) && ProcessOverTimeConstants.OVERTIME.equals(latestProjectProcess.getOvertimeStatus())) { + tList.add(taskMap.get(key)); + } } } - return Long.valueOf(taskList.size()); } @@ -1182,18 +1217,24 @@ 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()) + List<ProcessCoding> codeList = 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())) { + List<ProcessCoding> targetProcessCodings = codeList.stream().filter(code -> key.equals(code.getTaskDefKey())).collect(Collectors.toList()); + // 濡傛灉宸插畬鎴愮殑浠诲姟娌′粠鏁版嵁搴撴煡鎵惧嚭鏉ワ紝璇存槑璇ヤ换鍔℃病閰嶇疆璧嬬爜绛夋椂闂达紝鐩存帴璁剧疆涓烘寜鏃跺畬鎴� + if (CollectionUtils.isEmpty(targetProcessCodings)) { tList.add(taskMap.get(key)); + } else { + // 鎸夌収鏃堕棿闄嶅簭鎺掑垪 + targetProcessCodings.sort(Comparator.comparing(ProcessCoding::getGmtCreate).reversed()); + ProcessCoding latestProjectProcess = targetProcessCodings.get(0); + if (Objects.nonNull(latestProjectProcess) && ProcessOverTimeConstants.OVERTIME.equals(latestProjectProcess.getOvertimeStatus())) { + tList.add(taskMap.get(key)); + } } } @@ -1236,18 +1277,24 @@ 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()) + List<ProcessCoding> codeList = 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())) { + List<ProcessCoding> targetProcessCodings = codeList.stream().filter(code -> key.equals(code.getTaskDefKey())).collect(Collectors.toList()); + // 濡傛灉宸插畬鎴愮殑浠诲姟娌′粠鏁版嵁搴撴煡鎵惧嚭鏉ワ紝璇存槑璇ヤ换鍔℃病閰嶇疆璧嬬爜绛夋椂闂达紝鐩存帴璁剧疆涓烘寜鏃跺畬鎴� + if (CollectionUtils.isEmpty(targetProcessCodings)) { tList.add(taskMap.get(key)); + } else { + // 鎸夌収鏃堕棿闄嶅簭鎺掑垪 + targetProcessCodings.sort(Comparator.comparing(ProcessCoding::getGmtCreate).reversed()); + ProcessCoding latestProjectProcess = targetProcessCodings.get(0); + if (Objects.nonNull(latestProjectProcess) && ProcessOverTimeConstants.WILLOVERTIME.equals(latestProjectProcess.getOvertimeStatus())) { + tList.add(taskMap.get(key)); + } } } return Long.valueOf(tList.size()); @@ -1283,18 +1330,24 @@ 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()) + List<ProcessCoding> codeList = 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())) { + List<ProcessCoding> targetProcessCodings = codeList.stream().filter(code -> key.equals(code.getTaskDefKey())).collect(Collectors.toList()); + // 濡傛灉宸插畬鎴愮殑浠诲姟娌′粠鏁版嵁搴撴煡鎵惧嚭鏉ワ紝璇存槑璇ヤ换鍔℃病閰嶇疆璧嬬爜绛夋椂闂达紝鐩存帴璁剧疆涓烘寜鏃跺畬鎴� + if (CollectionUtils.isEmpty(targetProcessCodings)) { tList.add(taskMap.get(key)); + } else { + // 鎸夌収鏃堕棿闄嶅簭鎺掑垪 + targetProcessCodings.sort(Comparator.comparing(ProcessCoding::getGmtCreate).reversed()); + ProcessCoding latestProjectProcess = targetProcessCodings.get(0); + if (Objects.nonNull(latestProjectProcess) && ProcessOverTimeConstants.WILLOVERTIME.equals(latestProjectProcess.getOvertimeStatus())) { + tList.add(taskMap.get(key)); + } } } -- Gitblit v1.8.0