diff --git a/inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/IntervalType.java b/inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/IntervalType.java index e11d75c..3305309 100644 --- a/inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/IntervalType.java +++ b/inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/IntervalType.java @@ -2,6 +2,7 @@ package com.inspect.base.core.enums; public enum IntervalType { BY_HOUR("1", "按小时"), + BY_MINUTE("3", "按分钟"), BY_DATE("2", "按天"); private final String code; diff --git a/inspect-main/inspect-main-task-exec/src/main/java/com/inspect/exec/controller/PatrolTaskExecController.java b/inspect-main/inspect-main-task-exec/src/main/java/com/inspect/exec/controller/PatrolTaskExecController.java index 73f858a..c665693 100644 --- a/inspect-main/inspect-main-task-exec/src/main/java/com/inspect/exec/controller/PatrolTaskExecController.java +++ b/inspect-main/inspect-main-task-exec/src/main/java/com/inspect/exec/controller/PatrolTaskExecController.java @@ -462,6 +462,10 @@ public class PatrolTaskExecController extends BaseController { return IntervalType.BY_HOUR.getCode().equals(patrolTask.getIntervalType()); } + private boolean isInterTaskByMinute(final PatrolTask patrolTask) { + return IntervalType.BY_MINUTE.getCode().equals(patrolTask.getIntervalType()); + } + private boolean isInterTaskByDate(final PatrolTask patrolTask) { return IntervalType.BY_DATE.getCode().equals(patrolTask.getIntervalType()); } @@ -530,10 +534,13 @@ public class PatrolTaskExecController extends BaseController { // 间隔执行 String[] intervalExecuteTime = task.getIntervalExecuteTime().split(StringUtils.COLON); if (isInterTaskByHour(task)) { + // 按小时执行 int intervalNumber = task.getIntervalNumber(); if (intervalNumber > 0) { - List exeTimes = getExecTimes(task.getIntervalExecuteTime(), intervalNumber); + List exeTimes = getExecTimes(task.getIntervalExecuteTime(), DateUtils.format(DateUtils.yyyyMMddHHmmss2, task.getIntervalStartTime()), DateUtils.format(DateUtils.yyyyMMddHHmmss2, task.getIntervalEndTime()), intervalNumber); +// List exeTimes = getExecTimesOld(task.getIntervalExecuteTime(), intervalNumber); for (Date exeTime : exeTimes) { + logger.info("[TASK] {}, isInterTaskByHour exeTime: {}", task.getTaskCode(), DateUtils.format(DateUtils.yyyyMMddHHmmss2, exeTime)); task.setFixedStartTime(exeTime); final String taskType = "INTER-BY-HOUR"; parseTaskToRedis(taskType, task); @@ -541,6 +548,19 @@ public class PatrolTaskExecController extends BaseController { } else { log.info("[TASK] isInterTaskByHour intervalNumber error: {}", intervalNumber); } + } else if (isInterTaskByMinute(task)) { + // 按分钟执行 + int intervalNumber = task.getIntervalNumber(); + if (intervalNumber > 0) { + List exeTimes = getExecTimesByMinute(task.getIntervalExecuteTime(), DateUtils.format(DateUtils.yyyyMMddHHmmss2, task.getIntervalStartTime()), DateUtils.format(DateUtils.yyyyMMddHHmmss2, task.getIntervalEndTime()), intervalNumber); + for (Date exeTime : exeTimes) { + task.setFixedStartTime(exeTime); + final String taskType = "INTER-BY-MINUTE"; + parseTaskToRedis(taskType, task); + } + } else { + log.info("[TASK] isInterTaskByMinute intervalNumber error: {}", intervalNumber); + } } else if (isInterTaskByDate(task)) { for (int j = 0; j < task.getIntervalNumber(); ++j) { if (j != 0) { @@ -589,7 +609,7 @@ public class PatrolTaskExecController extends BaseController { } } - private List getExecTimes(String exeTime, int num) { + private List getExecTimesOld(String exeTime, int num) { SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String currentDay1 = sdf1.format(new Date()); @@ -626,6 +646,90 @@ public class PatrolTaskExecController extends BaseController { return exeTimes; } + private List getExecTimes(String exeTime, String intervalStartTime, String intervalEndTime, int intervalNumber) { + SimpleDateFormat sdfDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat sdfTime = new SimpleDateFormat("HH:mm:ss"); + List exeTimes = new ArrayList<>(); + + try { + // 解析时间参数 + Date startDateTime = sdfDateTime.parse(intervalStartTime); + Date endDateTime = sdfDateTime.parse(intervalEndTime); + Date exeTimeToday = sdfDateTime.parse( + intervalStartTime.substring(0, 10) + " " + exeTime); + + // 确定实际开始时间(取exeTime和intervalStartTime中较晚的一个) + Date actualStartTime = exeTimeToday.after(startDateTime) ? exeTimeToday : startDateTime; + + // 检查开始时间是否超过结束时间 + if (actualStartTime.after(endDateTime)) { + return exeTimes; // 返回空列表 + } + + // 检查间隔是否有效 + if (intervalNumber <= 0) { + exeTimes.add(actualStartTime); + return exeTimes; + } + + // 生成时间点列表 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(actualStartTime); + + while (!calendar.getTime().after(endDateTime)) { + exeTimes.add(calendar.getTime()); + calendar.add(Calendar.HOUR_OF_DAY, intervalNumber); + } + + } catch (Exception e) { + e.printStackTrace(); + } + return exeTimes; + } + + private List getExecTimesByMinute(String exeTime, String intervalStartTime, String intervalEndTime, int intervalMinutes) { + SimpleDateFormat sdfDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat sdfTime = new SimpleDateFormat("HH:mm:ss"); + List exeTimes = new ArrayList<>(); + + try { + // 解析时间参数 + Date startDateTime = sdfDateTime.parse(intervalStartTime); + Date endDateTime = sdfDateTime.parse(intervalEndTime); + + // 构建当天的执行时间(使用intervalStartTime的日期部分) + Date exeTimeToday = sdfDateTime.parse( + intervalStartTime.substring(0, 10) + " " + exeTime); + + // 确定实际开始时间(取exeTime和intervalStartTime中较晚的一个) + Date actualStartTime = exeTimeToday.after(startDateTime) ? exeTimeToday : startDateTime; + + // 检查开始时间是否超过结束时间 + if (actualStartTime.after(endDateTime)) { + return exeTimes; // 返回空列表 + } + + // 检查间隔是否有效 + if (intervalMinutes <= 0) { + exeTimes.add(actualStartTime); + return exeTimes; + } + + // 生成时间点列表(按分钟间隔) + Calendar calendar = Calendar.getInstance(); + calendar.setTime(actualStartTime); + + while (!calendar.getTime().after(endDateTime)) { + exeTimes.add(calendar.getTime()); + calendar.add(Calendar.MINUTE, intervalMinutes); + } + + } catch (ParseException e) { + e.printStackTrace(); + } + return exeTimes; + } + @PostMapping({"/execCurrentDayTask"}) public void execCurrentDayTask() throws ParseException { // String taskCodeStr = redisService.getCacheObject(RedisConst.TASK_CURRENT_CODE); @@ -748,12 +852,24 @@ public class PatrolTaskExecController extends BaseController { } public static void main(String[] args) { - String dateString = DateUtils.format(DateUtils.yyyyMMddHHmmss2, new Date()); - System.out.println(dateString); - Date date = DateUtils.parse(DateUtils.yyyyMMddHHmmss2, dateString); - System.out.println(date); - - Date date1 = new Date(); - System.out.println(date1); + PatrolTaskExecController patrolTaskExecController = new PatrolTaskExecController(null, null, null, null,null, null, null,null,null,null,null, null, null, null,null); +// List execTimes = patrolTaskExecController.getExecTimes("09:00:00","2025-06-12 00:00:00","2025-06-12 16:00:00", 1); +// System.out.println(execTimes); + System.out.println(DateUtils.format(DateUtils.yyyyMMddHHmmss2, new Date())); + List execTimesByMinute = patrolTaskExecController.getExecTimes("09:35:16", "2025-06-12 10:38:00", "2025-06-12 16:00:00", 2); + System.out.println(execTimesByMinute); + System.out.println("=========================================================="); + + List execTimesOld = patrolTaskExecController.getExecTimesOld("09:00:00", 1); + System.out.println(execTimesOld); + +// String redisKey = "TASK_CODE@1353@2025-06-12 15:00:00"; +// String[] keywords = StringUtils.split(redisKey, StringUtils.AT); +// if (keywords.length == 3) { +// String fixedStartTime = keywords[2]; +// if (DateUtils.parse(DateUtils.yyyyMMddHHmmss2,fixedStartTime).after(DateUtils.parse(DateUtils.yyyyMMddHHmmss2,"2025-06-12 16:00:00"))) { +// System.out.println("111"); +// } +// } } } diff --git a/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolResultMapper.xml b/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolResultMapper.xml index 9b33f70..c116eff 100644 --- a/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolResultMapper.xml +++ b/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolResultMapper.xml @@ -169,6 +169,7 @@ +