From 89144af315cdd0ce9ad75f4aead298aebd278df7 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期一, 24 三月 2025 11:45:35 +0800
Subject: [PATCH] 容缺计数
---
business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java | 75 +++++++++++++++++++++++++++++++++++++
1 files changed, 74 insertions(+), 1 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 5579d72..0ed7ebe 100644
--- a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
@@ -304,6 +304,7 @@
taskStatistics.setTimelyFinishedTaskNum(this.getTimelyTaskNum(projectProcess.getProcessInsId()));
taskStatistics.setOvertimeTaskNum(this.getOvertimeTaskNum(projectProcess.getProcessInsId()));
taskStatistics.setWillOvertimeTaskNum(this.getWillOvertimeTaskNum(projectProcess.getProcessInsId()));
+ taskStatistics.setToleranceNum(this.getToleranceTask(projectProcess.getProcessInsId()));
// taskStatistics.setCurrentTask(this.getCurrentNodeTaskList(projectProcess.getProcessInstanceId()));
detail.setStatistics(taskStatistics);
@@ -312,6 +313,32 @@
// 浠e姙浠诲姟
this.getTodoTaskList(projectProcess.getProjectId(), projectProcess.getProcessInsId(), "", 5, 1, result);
return result.data(detail);
+ }
+
+ /**
+ * 瀹圭己浠诲姟璁℃暟
+ * @param processInsId
+ * @return
+ */
+ private Long getToleranceTask(String processInsId){
+ // 鏌ュ嚭瀹圭己杩囩殑浠诲姟
+ List<ProcessLog> allWaitTaskList = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper())
+ .eq(ProcessLog::getProcessInsId, processInsId)
+ .eq(ProcessLog::getEventType, ProcessLogEventTypeEnum.WAIT)
+ .orderByDesc(ProcessLog::getGmtCreate)
+ .list();
+ // 鎺掗櫎瀹圭己鍚庡張瀹屾垚鐨勪换鍔�
+ List<ProcessLog> finishedTaskList = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper())
+ .eq(ProcessLog::getProcessInsId, processInsId)
+ .eq(ProcessLog::getEventType, ProcessLogEventTypeEnum.FINISHED)
+ .list();
+ List<String> finishedTaskIds = finishedTaskList.stream().map(ProcessLog::getTaskId).distinct().collect(Collectors.toList());
+ // 寰楀埌鏈畬鎴愮殑瀹圭己浠诲姟
+ List<String> waitTaskIds = allWaitTaskList.stream().filter(log -> !finishedTaskIds.contains(log.getTaskId())).map(ProcessLog::getTaskId).collect(Collectors.toList());
+ if (CollectionUtils.isEmpty(waitTaskIds)) {
+ return 0L;
+ }
+ return Long.valueOf(waitTaskIds.size());
}
@Override
@@ -380,7 +407,50 @@
.endOr();
}
result.total(taskQuery.count());
- List<Task> taskList = taskQuery.listPage(pageSize * (pageNum - 1), pageSize);
+ List<Task> allTodoList = taskQuery.list();
+ List<TaskOrderVO> orderList = new ArrayList<>();
+ allTodoList.stream().forEach(task -> {
+ TaskOrderVO order = new TaskOrderVO();
+ order.setTaskId(task.getId());
+ // 璁$畻鍔炵悊鏃堕棿锛岃秴鏃剁殑鎺掑墠闈紝娌¤秴鏃剁殑鐢变綆鍒伴珮鎺掑簭锛屾病瓒呮椂鏃堕棿鐨勬帓鏈�鍚�
+ ProcessCoding processCoding = processCodingService.getByTaskId(task.getId(), task.getProcessInstanceId());
+ if (Objects.nonNull(processCoding)) {
+ if (StringUtils.isNotBlank(processCoding.getRedTime())) {
+ Long overtime = getTime(processCoding.getRedTime());
+ long durationTime = 0l;
+ if (Objects.nonNull(processCoding.getStartTaskTime())) {
+ durationTime = ((new Date()).getTime() - processCoding.getStartTaskTime().getTime()) / 1000;
+ }
+ if (overtime > durationTime) {
+ order.setNum((overtime - durationTime) / 3600);
+ } else {
+ order.setNum(-2000000L);
+ }
+ } else {
+ order.setNum(2000000L);
+ }
+ } else {
+ order.setNum(2000000L);
+ }
+ orderList.add(order);
+ });
+ // 鍗囧簭鎺掑垪
+ Collections.sort(orderList, Comparator.comparingLong(TaskOrderVO::getNum));
+ int startNum = pageSize * (pageNum - 1);
+ int endNum = startNum + pageSize;
+ if (startNum >= orderList.size()) {
+ result.data(new ArrayList<>()).total(0L);
+ return;
+ }
+ int end = Math.min(endNum, orderList.size());
+ List<String> targetTaskIds = orderList.subList(startNum, end).stream().map(TaskOrderVO::getTaskId).collect(Collectors.toList());
+ List<Task> taskList = targetTaskIds.stream().map(taskId -> {
+ List<Task> list = allTodoList.stream().filter(task -> task.getId().equals(taskId)).collect(Collectors.toList());
+ if (CollectionUtils.isEmpty(list)) {
+ return null;
+ }
+ return list.get(0);
+ }).filter(Objects::nonNull).collect(Collectors.toList());
List<IndexCustomerTaskVO> vos = new ArrayList<>();
for (Task task : taskList) {
IndexCustomerTaskVO taskVO = new IndexCustomerTaskVO();
@@ -1693,6 +1763,8 @@
return Long.valueOf(tList.size());
}
+
+
/**
* 鏌ヨ鍗冲皢瓒呮椂鐨勪换鍔�
*
@@ -1775,6 +1847,7 @@
Integer pageNum,
Integer pageSize,
Result result) {
+
// 鏌ュ嚭瀹圭己杩囩殑浠诲姟
List<ProcessLog> allWaitTaskList = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper())
.eq(ProcessLog::getProcessInsId, processInsId)
--
Gitblit v1.8.0