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