zxl
2025-12-05 3777ec066316f3c1d3ca36e2cae5b1e05bac4f6e
business/src/main/java/com/ycl/task/FlowableTask.java
@@ -26,6 +26,7 @@
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -123,9 +124,28 @@
                String status = GREEN; // 默认状态为绿色
                String overtimeStatus = NORMAL;
                Long overtimeDurationSec = null; // 超时时长(秒,原始值)
                Double overtimeDurationHour = null; // 超时时长(小时,转换后)
                if (redTime != null && redTime != 0 && durationTime >= redTime) {
                    status = RED; // 如果超过红色时间阈值,则表明该任务超时
                    overtimeStatus = OVERTIME;
                    overtimeDurationSec = durationTime - redTime;
                    // 2. 转换为小时(保留1位小数,避免小数过多)
                    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("任务超时预警:任务ID[{}],流程实例ID[{}],计时起点[{}],当前时间[{}],红码阈值[{}小时],实际有效耗时[{}小时],超时时长[{}小时]",
                            taskId, task.getProcessInstanceId(),
                            formattedStartTime, formattedNow,
                            redTimeHour, durationTimeHour, overtimeDurationHour);
                }
//                else if (yellowTime != null && yellowTime != 0 && durationTime >= yellowTime) {
//                    status = YELLOW; // 否则,如果超过黄色时间阈值,则状态为黄色
@@ -141,6 +161,7 @@
//                    overtimeStatus = WILLOVERTIME; // 如果临期(固定超时前12小时为临期)
//                }
                map.get(status).add(task.getProcessInstanceId());
                processCoding.setOverTimeTotal(String.valueOf(overtimeDurationHour));
                processCoding.setStatus(status);
                processCoding.setOvertimeStatus(overtimeStatus);
                processCoding.setStartTaskTime(task.getCreateTime());