From 1b9936ba920d65df09ab8dba79c6252568ee26e4 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期三, 26 三月 2025 12:16:02 +0800
Subject: [PATCH] 任务统计bug
---
business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java | 138 +++++++++++++++++++++++++++++++++++----------
1 files changed, 107 insertions(+), 31 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 938849f..65cbd42 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,22 +1415,30 @@
*/
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)
- .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());
+
+ if (CollectionUtils.isEmpty(hisTaskKeys)) {
+ return 0L;
+ }
Map<String, HistoricTaskInstance> hisTaskMap = hisTaskList.stream().collect(Collectors.toMap(HistoricTaskInstance::getTaskDefinitionKey, his -> his));
// 鏌ュ嚭鏃堕棿姝e父鐨勪换鍔ey
List<ProcessCoding> codeList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper())
@@ -1460,27 +1480,37 @@
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)
- .list().stream().map(ProcessLog::getTaskId).collect(Collectors.toList());
- hisTaskList = hisTaskList.stream().filter(hisTask -> jumpAndWaitTaskIds.indexOf(hisTask.getId()) == -1).collect(Collectors.toList());
+ .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));
+
+ if (CollectionUtils.isEmpty(hisTaskKeys)) {
+ result.total(0);
+ return new ArrayList<>();
+ }
+ 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 +2048,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(jumpTaskIds)) {
+ 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 +2102,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(jumpTaskIds)) {
+ 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 +2249,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 +2267,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 +2391,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 +2555,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