From 5f14844e81dade9e55725642f42c76568c5ec908 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期五, 16 一月 2026 10:22:48 +0800
Subject: [PATCH] 修改超时时间显示
---
business/src/main/java/com/ycl/service/impl/IndexHomeServiceImpl.java | 154 ++++++++++++++++++++++++++++++++-------------------
1 files changed, 97 insertions(+), 57 deletions(-)
diff --git a/business/src/main/java/com/ycl/service/impl/IndexHomeServiceImpl.java b/business/src/main/java/com/ycl/service/impl/IndexHomeServiceImpl.java
index 629823e..4297f42 100644
--- a/business/src/main/java/com/ycl/service/impl/IndexHomeServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/IndexHomeServiceImpl.java
@@ -507,17 +507,11 @@
List<Task> allRunningTasks = taskService.createTaskQuery().active().list();
-
+ //杩欓噷 鑾峰緱 褰撳墠鐢ㄦ埛 鎵�灞炵殑 娴佺▼瀹炰緥ids闆嗗悎涓� 瀵瑰簲鐨勬鍦ㄨ繍琛岀殑浠诲姟銆�
List<Task> targetRunningTasks = allRunningTasks.stream()
- // 鍏抽敭鍖归厤锛氫换鍔$殑娴佺▼瀹氫箟ID 瀛樺湪浜� projectProcessList 鐨勬祦绋嬪畾涔塈D鍒楄〃涓�
+ // 鍏抽敭鍖归厤锛氫换鍔$殑娴佺▼瀹炰緥ID 瀛樺湪浜� targetProcessInsIds 鍒楄〃涓�
.filter(task -> targetProcessInsIds.contains(task.getProcessInstanceId()))
- .filter(task -> {
- String assignee = task.getAssignee();
- log.info("assignee:{}",assignee);
- return assignee == null || userId.toString().equals(assignee);
- })
.collect(Collectors.toList());
-
List<TaskInfoVo> list = new ArrayList<>();
// 鎸夋祦绋嬪疄渚媔d鍒嗙粍
if (!CollectionUtils.isEmpty(targetRunningTasks)){
@@ -529,6 +523,7 @@
.eq(ProcessCoding::getDeleted, Boolean.FALSE)
.in(ProcessCoding::getTaskId, taskIds)
.list();
+
log.info("processCodingList.size():{}", processCodingList.size()); // 鐪嬫棩蹇楁槸鍚︿负0
Map<String, ProcessCoding> processCodingMap = new HashMap<>();
//鎸塼askId杞崲涓簃ap鏂归潰涓嬮潰鑾峰彇
@@ -554,6 +549,25 @@
}
));
}
+
+ //涓簍argetRunningTasks杩涜涓�娆℃帓搴� 鎸夊瓨鍦ㄨ秴鏃舵椂闂� 鐢辨悶鍒颁綆鎺掑簭
+ Map<String, ProcessCoding> finalProcessCodingMap = processCodingMap;
+ targetRunningTasks.sort((t1, t2) -> {
+ ProcessCoding pc1 = finalProcessCodingMap.get(t1.getId());
+ ProcessCoding pc2 = finalProcessCodingMap.get(t2.getId());
+
+ String status1 = (pc1 != null && pc1.getOvertimeStatus() != null) ? pc1.getOvertimeStatus() : ProcessOverTimeConstants.NORMAL;
+ String status2 = (pc2 != null && pc2.getOvertimeStatus() != null) ? pc2.getOvertimeStatus() : ProcessOverTimeConstants.NORMAL;
+
+ // 瀹氫箟鏉冮噸锛歰vertime=3, willOvertime=2, normal=1
+ int weight1 = ProcessOverTimeConstants.OVERTIME.equals(status1) ? 3 :
+ (ProcessOverTimeConstants.WILLOVERTIME.equals(status1) ? 2 : 1);
+ int weight2 = ProcessOverTimeConstants.OVERTIME.equals(status2) ? 3 :
+ (ProcessOverTimeConstants.WILLOVERTIME.equals(status2) ? 2 : 1);
+
+ return Integer.compare(weight2, weight1); // 鐢遍珮鍒颁綆鎺掑簭
+ });
+
for (Task task : targetRunningTasks) {
TaskInfoVo taskVo = new TaskInfoVo();
@@ -637,16 +651,33 @@
}
//瓒呮椂鏃堕棿鍜屾鏁板湪 processCodingList涓� 杩欓噷闇�瑕佹洿鍏穞askId鏉ヨ幏寰楀搴斾俊鎭�
ProcessCoding processCoding = processCodingMap.get(task.getId());
+
//璁剧疆瓒呮椂淇℃伅
if (processCoding != null) {
-
+ log.error("褰撳墠澶勭悊processCoding鐨刬d:{}",processCoding.getId());
String overTimeTotalStr = processCoding.getOverTimeTotal();
long overTimeTotal = 0L;
+ log.error("褰撳墠澶勭悊瓒呮椂鏃堕棿锛歿}",overTimeTotalStr);
if (StringUtils.isNotBlank(overTimeTotalStr)) {
- try {
- overTimeTotal = Long.parseLong(overTimeTotalStr.trim());
- } catch (NumberFormatException e) {
+ try {
+ // 绗竴姝ワ細鍏堝幓闄ゅ瓧绗︿覆涓ょ绌虹櫧
+ String trimStr = overTimeTotalStr.trim();
+ // 绗簩姝ワ細鍏堣浆鎴怐ouble澶勭悊灏忔暟锛屽啀杞琇ong锛堝彲閫夋嫨鍥涜垗浜斿叆鎴栫洿鎺ュ彇鏁达級
+ double doubleValue = Double.parseDouble(trimStr);
+ // 鏂瑰紡1锛氱洿鎺ュ彇鏁存暟閮ㄥ垎锛�4778.3 鈫� 4778锛�
+ overTimeTotal = (long) doubleValue;
+ // 鏂瑰紡2锛氬洓鑸嶄簲鍏ワ紙4778.3 鈫� 4778锛�4778.6 鈫� 4779锛�
+ // overTimeTotal = Math.round(doubleValue);
+
+ log.error("鎵撳嵃瓒呮椂鎬绘椂闀夸笉涓簄ull鐨刬d:{}锛屽搴斿�納}锛堝師濮嬪�硷細{}锛�",
+ processCoding.getId(), overTimeTotal, trimStr);
+ } catch (NumberFormatException e) {
+ // 鍏抽敭锛氭墦鍗板紓甯歌鎯呭拰鍘熷鍊硷紝鏂逛究鎺掓煡
+ log.error("杞崲瓒呮椂鏃堕棿澶辫触锛乮d:{}锛屽師濮嬪�硷細{}",
+ processCoding.getId(), overTimeTotalStr, e);
+ // 鍙�夛細缁欓粯璁ゅ�硷紝閬垮厤鍚庣画浣跨敤overTimeTotal鏃跺嚭鐜扮┖鎸囬拡
+ overTimeTotal = 0L; // 鎴栨牴鎹笟鍔¤缃粯璁ゅ�硷紝姣斿60000L锛�1鍒嗛挓锛�
}
}
String overTimeDesc = convertHoursToDayHourStr(overTimeTotal);
@@ -674,8 +705,6 @@
}
list.add(taskVo);
}
-
-
}
return Result.ok().data(list);
@@ -695,8 +724,7 @@
boolean isAdmin = SecurityUtils.getLoginUser().getUser().isAdmin(); // 鏄惁绠$悊鍛�
List<String> userGroups = taskCommonService.getCurrentUserGroups(); // 褰撳墠鐢ㄦ埛鎵�灞炵粍
List<ProjectInfo> targetProjectList = new ArrayList<>();
- String queryProjectId = baseQuery.getId();
-
+ String queryProjectId = baseQuery.getProjectId();
if ("all".equals(queryProjectId) || StringUtils.isBlank(queryProjectId)){
// 鏌ヨ鍏ㄩ儴
@@ -710,7 +738,6 @@
// 椤圭洰涓嶅瓨鍦紝杩斿洖绌烘暟鎹�
return Result.ok().data(buildEmptyResultMap());
}
- //
targetProjectList.add(projectInfo);
} catch (NumberFormatException e) {
// 椤圭洰ID鏍煎紡閿欒锛岃繑鍥炵┖鏁版嵁
@@ -748,7 +775,7 @@
}
// 鍐嶅~鍏呮祦绋嬩俊鎭紙閮ㄧ讲ID銆佹祦绋嬪悕绉扮瓑锛�
for (ProjectProcess projectProcess : projectProcessList) {
- CheckPointVO checkPointVO = map.get(projectProcess.getProjectId());
+ CheckPointVO checkPointVO = map.get(projectProcess.getProjectId().toString()); // 淇锛歱rojectId鏄疞ong锛岄渶杞瓧绗︿覆
if (checkPointVO == null) {
continue; // 鏃犲尮閰嶉」鐩紝璺宠繃
}
@@ -769,7 +796,7 @@
checkPointVO.setProcessName(hisProcess.getProcessDefinitionName());
}
}
- map.put(projectProcess.getProjectId(), checkPointVO);
+ map.put(projectProcess.getProjectId().toString(), checkPointVO); // 淇锛歱rojectId杞瓧绗︿覆
}
Map<String, CheckPointVO> processInfoMap = map.values().stream()
.filter(Objects::nonNull)
@@ -803,53 +830,76 @@
return assignee == null || userId.toString().equals(assignee);
})
.collect(Collectors.toList());
+ // 浠诲姟鍘婚噸
Set<String> taskIdSet = new HashSet<>();
List<Task> distinctAllTaskList = new ArrayList<>();
for (Task task : allTaskList) {
if (!taskIdSet.contains(task.getId())) {
taskIdSet.add(task.getId());
distinctAllTaskList.add(task);
- //
}
}
- long distinctTotal = distinctAllTaskList.size();
- System.out.println("鍘婚噸鍚庢�绘暟锛�" + distinctTotal);
+ // ========== 淇鐐�1锛氭彁鍓嶆煡璇换鍔$姸鎬侊紝杩囨护宸插畬鎴愪换鍔★紙鍒嗛〉鍓嶆墽琛岋級 ==========
+ // 鏌ヨ浠诲姟鐘舵��
+ final HashMap<String, ProcessLog> taskInfoMap = new HashMap<>();
-
- int startIndex = (pageNum - 1) * pageSize;
- List<Task> pageTaskList = new ArrayList<>();
- if (startIndex < distinctAllTaskList.size()) {
- int endIndex = Math.min(startIndex + pageSize, distinctAllTaskList.size());
- pageTaskList = distinctAllTaskList.subList(startIndex, endIndex);
- }
-
-
- List<TaskInfoVo> taskInfoVoList = new ArrayList<>();
- //鏌ヨ浠诲姟鐘舵��
- List<String> taskIds = pageTaskList.stream().map(Task::getId).collect(Collectors.toList());
- HashMap<String,ProcessLog> taskInfoMap = new HashMap<>();
- if (!CollectionUtils.isEmpty(taskIds)) {
- taskInfoMap = new LambdaQueryChainWrapper<>(processLogMapper)
+ List<String> allTaskIds = distinctAllTaskList.stream().map(Task::getId).collect(Collectors.toList());
+ if (!CollectionUtils.isEmpty(allTaskIds)) {
+ // 2. 涓嶅啀閲嶆柊璧嬪�硷紝鑰屾槸鍏堟煡璇㈠嚭缁撴灉锛屽啀鏀惧叆宸插垵濮嬪寲鐨刴ap涓�
+ List<ProcessLog> processLogs = new LambdaQueryChainWrapper<>(processLogMapper)
.eq(ProcessLog::getDeleted, Boolean.FALSE)
- .in(ProcessLog::getTaskId, taskIds).list()
- .stream()
+ .in(ProcessLog::getTaskId, allTaskIds)
+ .list();
+
+ // 3. 濉厖鏁版嵁鍒皌askInfoMap锛屽紩鐢ㄦ湭鏀瑰彉
+ Map<String, ProcessLog> tempMap = processLogs.stream()
.filter(processLog -> processLog.getTaskId() != null && processLog.getGmtCreate() != null)
.collect(Collectors.toMap(
- // Key锛歵askId杞瓧绗︿覆
ProcessLog::getTaskId,
- // Value锛歅rocessLog瀵硅薄鏈韩
processLog -> processLog,
- // 鍐茬獊绛栫暐锛氫繚鐣檊mtCreate鏇存柊鐨勯偅鏉¤褰�
- (existing, replacement) -> {
- return replacement.getGmtCreate().after(existing.getGmtCreate())
- ? replacement : existing;
- },
+ (existing, replacement) -> replacement.getGmtCreate().after(existing.getGmtCreate()) ? replacement : existing,
HashMap::new
));
+ taskInfoMap.putAll(tempMap);
}
+ // 杩囨护宸插畬鎴愪换鍔★紝寰楀埌鏈夋晥浠诲姟鍒楄〃锛堝垎椤电殑渚濇嵁锛�
+ List<Task> validTaskList = distinctAllTaskList.stream()
+ .filter(task -> {
+ ProcessLog processLog = taskInfoMap.get(task.getId());
+ // 鏈煡璇㈠埌鏃ュ織 鈫� 寰呭畬鎴愶紱鏃ュ織鐘舵�佷笉鏄疐INISHED 鈫� 鏈夋晥
+ return processLog == null || !ProcessLogEventTypeEnum.FINISHED.getDesc().equals(processLog.getEventType().getDesc());
+ })
+ .collect(Collectors.toList());
+ // 鏈夋晥鏁版嵁鎬绘潯鏁�
+ long validTotal = validTaskList.size();
+ System.out.println("鏈夋晥浠诲姟鎬绘暟锛堟帓闄ゅ凡瀹屾垚锛夛細" + validTotal);
+
+ // ========== 淇鐐�2锛氬垎椤靛悎娉曟�ф牎楠� ==========
+ // 璁$畻鏈�澶ф湁鏁堥〉鐮�
+ int maxPageNum = (int) (validTotal % pageSize == 0 ? validTotal / pageSize : (validTotal / pageSize) + 1);
+ // 鑻ユ�绘潯鏁颁负0锛岀洿鎺ヨ繑鍥炵┖鏁版嵁
+ if (validTotal == 0) {
+ return Result.ok().data(new HashMap<String, Object>() {{
+ put("data", new ArrayList<>());
+ put("total", 0L);
+ }});
+ }
+ // 鑻ヨ姹傞〉鐮佽秴杩囨渶澶ч〉鐮侊紝榛樿杩斿洖鏈�鍚庝竴椤�
+ if (pageNum > maxPageNum) {
+ pageNum = maxPageNum;
+ }
+
+ // ========== 淇鐐�3锛氫紭鍖栧唴瀛樺垎椤� ==========
+ int startIndex = (pageNum - 1) * pageSize;
+ int endIndex = Math.min(startIndex + pageSize, validTaskList.size());
+ // 杞负鏂板垪琛紝閬垮厤subList瑙嗗浘鐨勯闄�
+ List<Task> pageTaskList = new ArrayList<>(validTaskList.subList(startIndex, endIndex));
+
+ // 缁勮杩斿洖VO
+ List<TaskInfoVo> taskInfoVoList = new ArrayList<>();
for (Task task : pageTaskList) {
TaskInfoVo taskVo = new TaskInfoVo();
taskVo.setId(task.getId());
@@ -870,17 +920,7 @@
taskInfoVoList.add(taskVo);
}
- //鎺掗櫎 宸插畬鎴愮殑
- taskInfoVoList = taskInfoVoList.stream().filter(taskInfoVo -> {
- if (ProcessLogEventTypeEnum.FINISHED.getDesc().equals(taskInfoVo.getTaskType())){
- return false;
- }
- return true;
- }).collect(Collectors.toList());
- HashMap<String, Object> resultMap = new HashMap<>();
- resultMap.put("data", taskInfoVoList);
- resultMap.put("total", distinctTotal);
- return Result.ok().data(resultMap);
+ return Result.ok().data(taskInfoVoList).total(validTotal);
}
--
Gitblit v1.8.0