|
|
|
@ -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<Date> exeTimes = getExecTimes(task.getIntervalExecuteTime(), intervalNumber); |
|
|
|
List<Date> exeTimes = getExecTimes(task.getIntervalExecuteTime(), DateUtils.format(DateUtils.yyyyMMddHHmmss2, task.getIntervalStartTime()), DateUtils.format(DateUtils.yyyyMMddHHmmss2, task.getIntervalEndTime()), intervalNumber); |
|
|
|
// List<Date> 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<Date> 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<Date> getExecTimes(String exeTime, int num) { |
|
|
|
private List<Date> 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<Date> 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<Date> 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<Date> 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<Date> 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<Date> 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<Date> 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<Date> 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"); |
|
|
|
// } |
|
|
|
// } |
|
|
|
} |
|
|
|
} |