From 12f73bafbe361f78d68a35de83ca3b3b4d4e0224 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期五, 14 二月 2025 16:27:43 +0800
Subject: [PATCH] 查询待办任务时,判断是否挂起状态

---
 business/src/main/java/com/ycl/task/FlowableTask.java |   84 ++++++++++++++++++++++++++----------------
 1 files changed, 52 insertions(+), 32 deletions(-)

diff --git a/business/src/main/java/com/ycl/task/FlowableTask.java b/business/src/main/java/com/ycl/task/FlowableTask.java
index 43ba64c..b5eb3ec 100644
--- a/business/src/main/java/com/ycl/task/FlowableTask.java
+++ b/business/src/main/java/com/ycl/task/FlowableTask.java
@@ -42,7 +42,7 @@
     public void expireTask() {
         log.info("寮�濮嬭祴鐮�");
         //褰撳墠姝e湪杩愯鐨勬墍鏈変换鍔¤妭鐐�
-        List<Task> taskList = taskService.createTaskQuery().list();
+        List<Task> taskList = taskService.createTaskQuery().active().list();
         if (CollectionUtils.isEmpty(taskList)) return;
         List<String> taskIds = taskList.stream().map(TaskInfo::getId).collect(Collectors.toList());
         //闇�瑕佺洃鎺х殑璧嬬爜浠诲姟
@@ -67,43 +67,46 @@
             String taskId = task.getId();
             ProcessCoding processCoding = taskMap.get(taskId);
             if (processCoding == null) {
-                //涓嶉渶瑕佺洃鎺х殑浠诲姟鑺傜偣鐩存帴鏀逛负缁胯壊
+                //涓嶉渶瑕佺洃鎺х殑浠诲姟鑺傜偣椤圭洰鐮佺洿鎺ユ敼涓虹豢鑹�
                 List<String> processInsIds = map.get(GREEN);
                 processInsIds.add(task.getProcessInstanceId());
                 continue;
             }
-            //鍒ゆ柇鏄惁瓒呮椂
+            //鍒ゆ柇璧嬬爜缁熶竴鐢ㄧ浣滀负鍗曚綅
             Date startTime = startTaskMap.get(processCoding.getStartTaskId());
-            Long yellowTime = null;
-            Long redTime = null;
-            String yellowTimeStr = processCoding.getYellowTime();
-            if (StringUtils.isNotBlank(yellowTimeStr)) {
-                String[] yellowTimeArr = yellowTimeStr.split("-");
-                // 瑙f瀽澶╂暟鍜屽皬鏃舵暟
-                int days = Integer.parseInt(yellowTimeArr[0]);
-                int hours = Integer.parseInt(yellowTimeArr[1]);
-                yellowTime = (days * 24L + hours) * 3600L;
+            try {
+                Long redTime = getTime(processCoding.getRedTime());
+                Long yellowTime = getTime(processCoding.getYellowTime());
+                Long overtime = getTime(processCoding.getOvertime());
+                if (startTime == null) continue;
+                //鑺傜偣澶勭悊鏃堕棿
+                long durationDay = (now.getTime() - startTime.getTime()) / 1000;
+                String status = GREEN; // 榛樿鐘舵�佷负缁胯壊
+                if (redTime != null && redTime !=0 && durationDay >= redTime) {
+                    status = RED; // 濡傛灉瓒呰繃绾㈣壊鏃堕棿闃堝�硷紝鍒欑姸鎬佷负绾㈣壊
+                } else if (yellowTime != null && yellowTime !=0 && durationDay >= yellowTime) {
+                    status = YELLOW; // 鍚﹀垯锛屽鏋滆秴杩囬粍鑹叉椂闂撮槇鍊硷紝鍒欑姸鎬佷负榛勮壊
+                }
+                //澶勭悊鍔炵悊鏈熼檺
+                String overtimeStatus = NORMAL;
+                if (overtime != null && overtime !=0 && durationDay >= overtime) {
+                    overtimeStatus = OVERTIME; // 濡傛灉瓒呰繃鍔炵悊鏈熼檺
+                }
+                else if (overtime != null && overtime != 0 && durationDay >= (overtime - 12 * 60 * 60)) {
+                    overtimeStatus = WILLOVERTIME; // 濡傛灉涓存湡(鍥哄畾瓒呮椂鍓�12灏忔椂涓轰复鏈�)
+                }
+//                else if (overtime != null && overtime != 0 && durationDay >= (overtime - 60)) {
+//                    overtimeStatus = WILLOVERTIME; // 濡傛灉涓存湡(鍥哄畾瓒呮椂鍓�12灏忔椂涓轰复鏈�)
+//                }
+                List<String> processInsIds = map.get(status);
+                processInsIds.add(task.getProcessInstanceId());
+
+                processCoding.setStatus(status);
+                processCoding.setOvertimeStatus(overtimeStatus);
+                list.add(processCoding);
+            } catch (Exception e) {
+                log.error(e.getMessage(),"璧嬬爜鏃堕棿鏍煎紡鏈夎");
             }
-            String redTimeStr = processCoding.getRedTime();
-            if (StringUtils.isNotBlank(redTimeStr)) {
-                String[] redTimeArr = redTimeStr.split("-");
-                // 瑙f瀽澶╂暟鍜屽皬鏃舵暟
-                int days = Integer.parseInt(redTimeArr[0]);
-                int hours = Integer.parseInt(redTimeArr[1]);
-                redTime = (days * 24L + hours) * 3600L;
-            }
-            if (startTime == null) continue;
-            long durationDay = (now.getTime() - startTime.getTime()) / 1000;
-            String status = GREEN; // 榛樿鐘舵�佷负缁胯壊
-            if (redTime != null && durationDay >= redTime) {
-                status = RED; // 濡傛灉瓒呰繃绾㈣壊鏃堕棿闃堝�硷紝鍒欑姸鎬佷负绾㈣壊
-            } else if (yellowTime != null && durationDay >= yellowTime) {
-                status = YELLOW; // 鍚﹀垯锛屽鏋滆秴杩囬粍鑹叉椂闂撮槇鍊硷紝鍒欑姸鎬佷负榛勮壊
-            }
-            List<String> processInsIds = map.get(status);
-            processInsIds.add(task.getProcessInstanceId());
-            processCoding.setStatus(status);
-            list.add(processCoding);
         }
         //鏇存柊椤圭洰鐮�
         map.forEach((key, value) -> updateProjectCoding(value, key));
@@ -113,6 +116,23 @@
         log.info("缁撴潫璧嬬爜");
     }
 
+    private Long getTime(String timeStr) {
+        Long time = null;
+        if (StringUtils.isNotBlank(timeStr)) {
+            String[] timeArr = timeStr.split("-");
+            // 瑙f瀽澶╂暟鍜屽皬鏃舵暟
+            int days = Integer.parseInt(timeArr[0]);
+            int hours = 0;
+            if (timeArr.length > 1) {
+                hours = Integer.parseInt(timeArr[1]);
+            }
+            time = (days * 24L + hours) * 3600L;
+//            //鍒�-绉�
+//            time= (days * 60L) + hours;
+        }
+        return time;
+    }
+
     private Map<String, Date> getStartTaskList(List<ProcessCoding> processCodingList) {
         //鏌ュ嚭浠诲姟璁℃椂璧峰鑺傜偣闆嗗悎
         List<String> startTaskIds = processCodingList.stream().map(ProcessCoding::getStartTaskId).collect(Collectors.toList());

--
Gitblit v1.8.0