Browse Source

任务间隔执行新增按分钟

master
wangguangyuan 6 months ago
parent
commit
b983aa538a
3 changed files with 128 additions and 9 deletions
  1. +1
    -0
      inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/IntervalType.java
  2. +125
    -9
      inspect-main/inspect-main-task-exec/src/main/java/com/inspect/exec/controller/PatrolTaskExecController.java
  3. +2
    -0
      inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolResultMapper.xml

+ 1
- 0
inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/IntervalType.java View File

@ -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;


+ 125
- 9
inspect-main/inspect-main-task-exec/src/main/java/com/inspect/exec/controller/PatrolTaskExecController.java View File

@ -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");
// }
// }
}
}

+ 2
- 0
inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolResultMapper.xml View File

@ -169,6 +169,7 @@
<result property="resValue" column="res_value"/>
<result property="deviceSource" column="device_source"/>
<result property="channelName" column="channel_name"/>
<result property="imageNormalUrlPath" column="image_normal_url_path"/>
</resultMap>
<select id="selectPatrolDataResultByTaskCode" parameterType="PatrolResult" resultMap="PatrolDataResult">
@ -208,6 +209,7 @@
b.description as 'desc',
<if test="filter == 0 ">b.res_img_url as img,</if>
<if test="filter == 1 ">a.file_path as img,</if>
a.file_path as image_normal_url_path,
a.file_type as img_type,
a.data_type,
b.filter,


Loading…
Cancel
Save