| | |
| | | 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; |
| | |
| | | |
| | | 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; // 否则,如果超过黄色时间阈值,则状态为黄色 |
| | |
| | | // overtimeStatus = WILLOVERTIME; // 如果临期(固定超时前12小时为临期) |
| | | // } |
| | | map.get(status).add(task.getProcessInstanceId()); |
| | | processCoding.setOverTimeTotal(String.valueOf(overtimeDurationHour)); |
| | | processCoding.setStatus(status); |
| | | processCoding.setOvertimeStatus(overtimeStatus); |
| | | processCoding.setStartTaskTime(task.getCreateTime()); |