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/task/FlowableTask.java |  141 +++++++++++++++++++++++++++-------------------
 1 files changed, 83 insertions(+), 58 deletions(-)

diff --git a/business/src/main/java/com/ycl/task/FlowableTask.java b/business/src/main/java/com/ycl/task/FlowableTask.java
index dd90247..5adc84f 100644
--- a/business/src/main/java/com/ycl/task/FlowableTask.java
+++ b/business/src/main/java/com/ycl/task/FlowableTask.java
@@ -54,22 +54,33 @@
      * 涓や釜閫昏緫 鏀归」鐩爜銆佹敼鑺傜偣棰滆壊
      */
     public void expireTask() {
-        log.info("寮�濮嬭祴鐮�");
+        log.info("寮�濮嬪畾鏃朵换鍔★細expireTask 璧嬬爜璁$畻");
         //褰撳墠姝e湪杩愯鐨勬墍鏈変换鍔¤妭鐐�
         List<Task> taskList = taskService.createTaskQuery().active().list();
-        if (CollectionUtils.isEmpty(taskList)) return;
+        log.info("鏌ヨ鍒板綋鍓嶆椿璺冧换鍔℃暟閲�: {}", taskList.size());
+        if (CollectionUtils.isEmpty(taskList)) {
+            log.info("娲昏穬浠诲姟鍒楄〃涓虹┖锛岀粨鏉熶换鍔�");
+            return;
+        }
+
         //鎺掗櫎鎺夎妭鐐规寕璧风殑浠诲姟
         List<String> allHangupTask = processLogMapper.getAllHangup();
-        taskList = taskList.stream()
-                .filter(task -> !allHangupTask.contains(task.getId()))
-                .collect(Collectors.toList());
-        //TODO锛氱瓫閫夊嚭娴佺▼瀹炰緥id锛岀敤浣滈」鐩寕璧�
-        Set<String> proInsIds = taskList.stream()
-                .map(TaskInfo::getProcessInstanceId)
-                .collect(Collectors.toSet());
-        //TODO:鏌ヨ椤圭洰鎸傝捣鏃ュ織
+        log.info("鏌ヨ鍒版寕璧蜂换鍔� ID 鏁伴噺: {}", allHangupTask.size());
 
-        List<String> taskIds = taskList.stream().map(TaskInfo::getId).collect(Collectors.toList());
+        List<Task> filteredTaskList = taskList.stream()
+                .filter(task -> {
+                    boolean isHangup = allHangupTask.contains(task.getId());
+                    if (isHangup) {
+                        log.info("浠诲姟 [{}] 鍥犲浜庢寕璧风姸鎬佽璺宠繃", task.getId());
+                    }
+                    return !isHangup;
+                })
+                .collect(Collectors.toList());
+
+        log.info("鎺掗櫎鎸傝捣浠诲姟鍚庯紝寰呭鐞嗕换鍔℃暟閲�: {}", filteredTaskList.size());
+
+        List<String> taskIds = filteredTaskList
+        .stream().map(TaskInfo::getId).collect(Collectors.toList());
         //鏌ヨ鑺傜偣鎸傝捣鏃ュ織
         Map<String, List<ProcessLog>> hangupLogMap = new LambdaQueryChainWrapper<>(processLogMapper)
                 .in(ProcessLog::getEventType, HANGUP, CANCEL_HANGUP)
@@ -82,6 +93,9 @@
         List<ProcessCoding> processCodingList = new LambdaQueryChainWrapper<>(processCodingMapper)
                 .in(ProcessCoding::getTaskId, taskIds)
                 .list();
+
+        log.info("寮�濮嬪鐞嗚祴鐮佽绠楅�昏緫銆傚綋鍓嶅緟澶勭悊娲昏穬浠诲姟鏁�: {}, 宸查厤缃洃鎺х殑浠诲姟鏁�: {}", taskIds.size(), processCodingList.size());
+
         Map<String, ProcessCoding> taskMap = new HashMap<>();
         Map<String, Date> startTaskMap = new HashMap<>();
         if (!CollectionUtils.isEmpty(processCodingList)) {
@@ -89,7 +103,9 @@
             taskMap = processCodingList.stream().collect(Collectors.toMap(ProcessCoding::getTaskId, Function.identity()));
             //鎷垮埌寮�濮嬭鏃剁殑鑺傜偣闆嗗悎 key:taskId value:寮�濮嬫椂闂�
             startTaskMap = getStartTaskList(processCodingList);
+            log.info("鑾峰彇鍒拌鏃惰捣鐐硅褰曟暟閲�: {}", startTaskMap.size());
         }
+
         //鎻愬墠鍑嗗鎺ユ敹鏁版嵁鐨刴ap key:娴佺▼瀹炰緥id value:闇�瑕佹敼鍙樼殑棰滆壊
         Map<String, List<String>> map = new HashMap<>();
         List<ProcessCoding> list = new ArrayList<>();
@@ -97,85 +113,85 @@
         map.put(RED, new ArrayList<>());
         map.put(YELLOW, new ArrayList<>());
         Date now = new Date();
+
         //閬嶅巻鎵�鏈変唬鍔炵殑鑺傜偣
-        for (Task task : taskList) {
+        for (Task task : filteredTaskList) {
             String taskId = task.getId();
+            String procInsId = task.getProcessInstanceId();
             ProcessCoding processCoding = taskMap.get(taskId);
+
             if (processCoding == null) {
                 //涓嶉渶瑕佺洃鎺х殑浠诲姟鑺傜偣椤圭洰鐮佺洿鎺ユ敼涓虹豢鑹�
-                map.get(GREEN).add(task.getProcessInstanceId());
+                log.info("浠诲姟 ID: {}, 娴佺▼瀹炰緥: {}, 鍚嶇О: {} 鏈湪鐩戞帶閰嶇疆涓紝椤圭洰鐮侀粯璁よ涓� GREEN", taskId, procInsId, task.getName());
+                map.get(GREEN).add(procInsId);
                 continue;
             }
+
             //鍒ゆ柇璧嬬爜缁熶竴鐢ㄧ浣滀负鍗曚綅锛屼笖鍙渶鐢ㄧ孩鐮佹椂闂村垽鏂秴鏃讹紝閫氳繃瓒呮椂鍘绘敼鍙橀」鐩殑璧嬬爜鐘舵�侊紝鑺傜偣鏈韩鏃犺祴鐮佺姸鎬�
             Date startTime = startTaskMap.get(processCoding.getStartTaskId());
+            if (startTime == null) {
+                log.warn("浠诲姟 ID: {}, 娴佺▼瀹炰緥: {} 鎵句笉鍒拌鏃惰捣鐐规椂闂� (StartTaskId: {}), 灏嗛粯璁ゅ綊涓� GREEN 浠ラ槻姝换鍔′涪澶�", taskId, procInsId, processCoding.getStartTaskId());
+                map.get(GREEN).add(procInsId);
+                continue;
+            }
+
             try {
                 Long redTime = getTime(processCoding.getRedTime());
-//                Long yellowTime = getTime(processCoding.getYellowTime());
-//                Long overtime = getTime(processCoding.getOvertime());
-                if (startTime == null) continue;
-
                 //鑺傜偣澶勭悊鏃堕棿锛岄渶鎺掗櫎鑺傚亣鏃�
                 long durationTime = DateUtils.getWorkingSed(startTime, now);
 
-                //TODO锛氬噺鍘绘祦绋嬫寕璧锋椂闀�
-
                 //鍑忓幓鑺傜偣鎸傝捣鏃堕暱
-                durationTime = subNodeHangupTime(hangupLogMap, task, durationTime);
+                long finalDurationTime = subNodeHangupTime(hangupLogMap, task, durationTime);
 
                 String status = GREEN; // 榛樿鐘舵�佷负缁胯壊
                 String overtimeStatus = NORMAL;
                 Long overtimeDurationSec = null; // 瓒呮椂鏃堕暱锛堢锛屽師濮嬪�硷級
-                Double overtimeDurationHour = null; // 瓒呮椂鏃堕暱锛堝皬鏃讹紝杞崲鍚庯級
-                if (redTime != null && redTime != 0 && durationTime >= redTime) {
+                Double overtimeDurationHour = 0.0; // 瓒呮椂鏃堕暱锛堝皬鏃讹紝杞崲鍚庯級
+
+                if (redTime != null && redTime != 0 && finalDurationTime >= redTime) {
                     status = RED; // 濡傛灉瓒呰繃绾㈣壊鏃堕棿闃堝�硷紝鍒欒〃鏄庤浠诲姟瓒呮椂
                     overtimeStatus = OVERTIME;
-                    overtimeDurationSec = durationTime - redTime;
-                    // 2. 杞崲涓哄皬鏃讹紙淇濈暀1浣嶅皬鏁帮紝閬垮厤灏忔暟杩囧锛�
+                    overtimeDurationSec = finalDurationTime - redTime;
                     overtimeDurationHour = Math.round((overtimeDurationSec / 3600.0) * 10) / 10.0;
 
-                    // 鏃堕棿鏍煎紡鍖栵紙Java鏍囧噯API锛屾棤渚濊禆锛�
                     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-                    String formattedStartTime = sdf.format(startTime);
-                    String formattedNow = sdf.format(now);
-                    // 杞崲绾㈢爜闃堝�间负灏忔椂锛堝彲閫夛紝鏃ュ織鏇存槗璇伙級
-                    Double redTimeHour = Math.round((redTime / 3600.0) * 10) / 10.0;
-                    Double durationTimeHour = Math.round((durationTime / 3600.0) * 10) / 10.0;
-
-                    // 鎵撳嵃瓒呮椂鏃堕暱锛堝皬鏃跺崟浣嶏級
-                    log.info("浠诲姟瓒呮椂棰勮锛氫换鍔D[{}]锛屾祦绋嬪疄渚婭D[{}]锛岃鏃惰捣鐐筟{}]锛屽綋鍓嶆椂闂碵{}]锛岀孩鐮侀槇鍊糩{}灏忔椂]锛屽疄闄呮湁鏁堣�楁椂[{}灏忔椂]锛岃秴鏃舵椂闀縖{}灏忔椂]",
-                            taskId, task.getProcessInstanceId(),
-                            formattedStartTime, formattedNow,
-                            redTimeHour, durationTimeHour, overtimeDurationHour);
+                    log.info("浠诲姟瓒呮椂棰勮锛氫换鍔D[{}], 娴佺▼瀹炰緥[{}], 璧风偣[{}], 褰撳墠[{}], 绾㈢爜闃堝�糩{}灏忔椂], 瀹為檯鑰楁椂[{}灏忔椂], 瓒呮椂[{}灏忔椂]",
+                            taskId, procInsId,
+                            sdf.format(startTime), sdf.format(now),
+                            Math.round((redTime / 3600.0) * 10) / 10.0,
+                            Math.round((finalDurationTime / 3600.0) * 10) / 10.0,
+                            overtimeDurationHour);
+                } else {
+                    log.info("浠诲姟鏈秴鏃讹細浠诲姟ID[{}], 娴佺▼瀹炰緥[{}], 瀹為檯鑰楁椂[{}灏忔椂], 绾㈢爜闃堝�糩{}灏忔椂]",
+                            taskId, procInsId,
+                            Math.round((finalDurationTime / 3600.0) * 10) / 10.0,
+                            redTime != null ? Math.round((redTime / 3600.0) * 10) / 10.0 : 0);
                 }
-//                else if (yellowTime != null && yellowTime != 0 && durationTime >= yellowTime) {
-//                    status = YELLOW; // 鍚﹀垯锛屽鏋滆秴杩囬粍鑹叉椂闂撮槇鍊硷紝鍒欑姸鎬佷负榛勮壊
-//                }
-//                //澶勭悊鍔炵悊鏈熼檺
-//                String overtimeStatus = NORMAL;
-//                if (overtime != null && overtime != 0 && durationTime >= overtime) {
-//                    overtimeStatus = OVERTIME; // 濡傛灉瓒呰繃鍔炵悊鏈熼檺
-//                } else if (overtime != null && overtime != 0 && durationTime >= (overtime - 12 * 60 * 60)) {
-//                    overtimeStatus = WILLOVERTIME; // 濡傛灉涓存湡(鍥哄畾瓒呮椂鍓�12灏忔椂涓轰复鏈�)
-//                }
-//                else if (overtime != null && overtime != 0 && durationDay >= (overtime - 60)) {
-//                    overtimeStatus = WILLOVERTIME; // 濡傛灉涓存湡(鍥哄畾瓒呮椂鍓�12灏忔椂涓轰复鏈�)
-//                }
-                map.get(status).add(task.getProcessInstanceId());
+
+                map.get(status).add(procInsId);
                 processCoding.setOverTimeTotal(String.valueOf(overtimeDurationHour));
                 processCoding.setStatus(status);
                 processCoding.setOvertimeStatus(overtimeStatus);
                 processCoding.setStartTaskTime(task.getCreateTime());
                 list.add(processCoding);
             } catch (Exception e) {
-                log.error(e.getMessage(), "璧嬬爜鏃堕棿鏍煎紡鏈夎");
+                log.error("浠诲姟 [{}] 璧嬬爜璁$畻鍙戠敓寮傚父: {}", taskId, e.getMessage(), e);
             }
         }
         //鏇存柊椤圭洰鐮�
-        map.forEach((key, value) -> updateProjectCoding(value, key));
+        map.forEach((key, value) -> {
+            if (!value.isEmpty()) {
+                log.info("鍑嗗鏇存柊椤圭洰鐮佷负 {}: 娴佺▼瀹炰緥鍒楄〃 {}", key, value);
+                updateProjectCoding(value, key);
+            }
+        });
         //鏇存柊鑺傜偣鐘舵�� 鑷畾涔夌殑mybatis鏂规硶
-        if (!CollectionUtils.isEmpty(list)) processCodingMapper.updateBatch(list);
+        if (!CollectionUtils.isEmpty(list)) {
+            log.info("鎵归噺鏇存柊鑺傜偣鐘舵�佹暟閲�: {}", list.size());
+            processCodingMapper.updateBatch(list);
+        }
 
-        log.info("缁撴潫璧嬬爜");
+        log.info("瀹氭椂浠诲姟锛歟xpireTask 璧嬬爜璁$畻缁撴潫");
     }
 
     //鍑忓幓鑺傜偣鎸傝捣鏃堕暱
@@ -239,19 +255,28 @@
             return;
         }
 
-        List<String> projectIds = new LambdaQueryChainWrapper<>(projectProcessMapper)
+        List<ProjectProcess> projectProcesses = new LambdaQueryChainWrapper<>(projectProcessMapper)
                 .in(ProjectProcess::getProcessInsId, processInstanceIds)
                 .eq(ProjectProcess::getProjectType, ProjectProcessTypeEnum.PROJECT)
-                .list()
-                .stream()
-                .map(ProjectProcess::getProjectId)
+                .list();
+
+        log.info("璧嬬爜绫诲瀷 [{}]: 鏌ヨ鍒� {} 涓搴旂殑椤圭洰娴佺▼鍏崇郴", coding, projectProcesses.size());
+
+        List<String> projectIds = projectProcesses.stream()
+                .map(p -> {
+                    log.info("娴佺▼瀹炰緥 [{}] 瀵瑰簲椤圭洰 ID [{}]", p.getProcessInsId(), p.getProjectId());
+                    return p.getProjectId();
+                })
                 .collect(Collectors.toList());
 
         if (!CollectionUtils.isEmpty(projectIds)) {
+            log.info("鎵ц鏁版嵁搴撴洿鏂�: 灏嗛」鐩� {} 鐨勭紪鐮佹洿鏂颁负 {}", projectIds, coding);
             new LambdaUpdateChainWrapper<>(projectInfoMapper)
                     .in(ProjectInfo::getId, projectIds)
                     .set(ProjectInfo::getCoding, coding)
                     .update();
+        } else {
+            log.warn("鏈壘鍒板搴旂殑椤圭洰 ID锛屾棤娉曟墽琛岀紪鐮佹洿鏂般�傛祦绋嬪疄渚嬪垪琛�: {}", processInstanceIds);
         }
     }
 }

--
Gitblit v1.8.0