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