Browse Source

间隔执行 设置间隔结束时间结束任务

master
wangguangyuan 6 months ago
parent
commit
3c4fe6c257
2 changed files with 176 additions and 30 deletions
  1. +40
    -8
      inspect-job/src/main/java/com/inspect/job/task/JobMainTask.java
  2. +136
    -22
      inspect-main/inspect-main-task-exec/src/main/java/com/inspect/exec/controller/PatrolTaskExecController.java

+ 40
- 8
inspect-job/src/main/java/com/inspect/job/task/JobMainTask.java View File

@ -1672,8 +1672,21 @@ public class JobMainTask {
@Scheduled(cron="0 10 0 * * ?")
public void fixedTimer() {
Date date = new Date();
log.info("JobMainTask fixedTimer clear taskInfos: {}", taskInfos.size());
taskInfos.clear();
Collection<String> redisKeys = redisService.keys(RedisConst.TASK_CODE_EX);
for (String redisKey : redisKeys) {
String[] keywords = StringUtils.split(redisKey, StringUtils.AT);
if (keywords.length == 3) {
String fixedStartTime = keywords[2];
if (DateUtils.parse(DateUtils.yyyyMMddHHmmss2, fixedStartTime).before(date)) {
log.info("{} JobMainTask fixedTimer clear redisKey: {}", DateUtils.format(DateUtils.yyyyMMddHHmmss2, date), redisKey);
redisService.deleteObject(redisKey);
}
}
}
}
@SuppressWarnings({"unused"})
@ -1688,16 +1701,35 @@ public class JobMainTask {
if (keywords.length == 3) {
String taskCode = keywords[1];
if (isTaskSlotEmpty(taskCode)) {
long currentTime = System.currentTimeMillis();
long currentDays = TimeUnit.MILLISECONDS.toDays(currentTime);
long currentMinutes = TimeUnit.MILLISECONDS.toMinutes(currentTime);
// long currentTime = System.currentTimeMillis();
// long currentDays = TimeUnit.MILLISECONDS.toDays(currentTime);
// long currentMinutes = TimeUnit.MILLISECONDS.toMinutes(currentTime);
//
// String fixedStartTime = keywords[2];
// long planTime = DateUtils.parse(DateUtils.yyyyMMddHHmmss2, fixedStartTime).getTime();
// long fixedDays = TimeUnit.MILLISECONDS.toDays(planTime);
// long fixedStartMinutes = TimeUnit.MILLISECONDS.toMinutes(planTime);
String fixedStartTime = keywords[2];
long planTime = DateUtils.parse(DateUtils.yyyyMMddHHmmss2, fixedStartTime).getTime();
long fixedDays = TimeUnit.MILLISECONDS.toDays(planTime);
long fixedStartMinutes = TimeUnit.MILLISECONDS.toMinutes(planTime);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 解析字符串为 Date
Date fixedDate = sdf.parse(fixedStartTime);
Date currentDate = new Date(); // 当前时间
// 比较时间精确到分钟
SimpleDateFormat minuteFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
String fixedMinute = minuteFormat.format(fixedDate);
String currentMinute = minuteFormat.format(currentDate);
// 判断是否同一天
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String fixedDay = dateFormat.format(fixedDate);
String currentDay = dateFormat.format(currentDate);
if (taskInfos.get(redisKey) == null && currentDays == fixedDays && currentMinutes >= fixedStartMinutes) {
long diffMinutes = currentDate.getTime() - fixedDate.getTime();
if (taskInfos.get(redisKey) == null && fixedDay.equals(currentDay) && (diffMinutes >= 0 && diffMinutes <= 60000 && fixedDate.before(currentDate) || fixedDate.getTime() == currentDate.getTime())) {
log.info(Color.YELLOW + "[JOB] TASK_CODE: {}, FIXED START TIME: {}" + Color.END, taskCode, fixedStartTime);
taskInfos.put(redisKey, "1");
extractRedisTask(redisKey, taskCode);
}


+ 136
- 22
inspect-main/inspect-main-task-exec/src/main/java/com/inspect/exec/controller/PatrolTaskExecController.java View File

@ -514,7 +514,7 @@ public class PatrolTaskExecController extends BaseController {
task.setFixedStartTime(DateUtils.parse(DateUtils.yyyyMMddHHmmss2, (DateUtils.format(DateUtils.yyyyMMdd2, new Date()) + " " + cycleTimes[i])));
final String taskType = "CYCLE-BY-WEEK";
parseTaskToRedis(taskType, task);
parseTaskToRedis(taskType, task, null);
}
} else if (isCycleTaskByMonth(task)) {
String[] monthList = task.getCycleMonth().split(StringUtils.COMMA);
@ -527,7 +527,7 @@ public class PatrolTaskExecController extends BaseController {
task.setFixedStartTime(DateUtils.parse(DateUtils.yyyyMMddHHmmss2, (DateUtils.format(DateUtils.yyyyMMdd2, new Date()) + " " + cycleTimes[i])));
final String taskType = "CYCLE-BY-MONTH";
parseTaskToRedis(taskType, task);
parseTaskToRedis(taskType, task, null);
}
}
} else if (isInterTask(task)) {
@ -543,7 +543,7 @@ public class PatrolTaskExecController extends BaseController {
logger.info("[TASK] {}, isInterTaskByHour exeTime: {}", task.getTaskCode(), DateUtils.format(DateUtils.yyyyMMddHHmmss2, exeTime));
task.setFixedStartTime(exeTime);
final String taskType = "INTER-BY-HOUR";
parseTaskToRedis(taskType, task);
parseTaskToRedis(taskType, task, null);
}
} else {
log.info("[TASK] isInterTaskByHour intervalNumber error: {}", intervalNumber);
@ -553,10 +553,13 @@ public class PatrolTaskExecController extends BaseController {
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);
if (exeTimes.size() > 0) {
Date date = exeTimes.get(exeTimes.size() - 1);
for (Date exeTime : exeTimes) {
task.setFixedStartTime(exeTime);
final String taskType = "INTER-BY-MINUTE";
parseTaskToRedis(taskType, task, date);
}
}
} else {
log.info("[TASK] isInterTaskByMinute intervalNumber error: {}", intervalNumber);
@ -570,7 +573,7 @@ public class PatrolTaskExecController extends BaseController {
String time = intervalExecuteTime[0] + ":" + DateUtils.getMinuteInt() + ":" + intervalExecuteTime[2];
task.setFixedStartTime(DateUtils.parse(DateUtils.yyyyMMddHHmmss2, (DateUtils.format(DateUtils.yyyyMMdd2, new Date()) + " " + time)));
final String taskType = "INTER-BY-DATE";
parseTaskToRedis(taskType, task);
parseTaskToRedis(taskType, task, null);
}
}
}
@ -582,7 +585,7 @@ public class PatrolTaskExecController extends BaseController {
}
}
private void parseTaskToRedis(final String taskType, PatrolTask task) {
private void parseTaskToRedis(final String taskType, PatrolTask task, Date finalDate) {
if (StringUtils.isNotEmpty(task.getDevNo())) {
String[] devNos = task.getDevNo().split(StringUtils.COMMA);
List<String> devNoList = new ArrayList<>();
@ -600,6 +603,18 @@ public class PatrolTaskExecController extends BaseController {
if (taskExecRecord == null) {
List<PatrolTask> patrolTasks = getPatrolTasks(task);
if (!patrolTasks.isEmpty()) {
if(finalDate != null) {
Collection<String> redisKeys = redisService.keys(RedisConst.TASK_CODE + task.getTaskCode() + StringUtils.AT + "*");
for (String redisKey : redisKeys) {
String[] keywords = StringUtils.split(redisKey, StringUtils.AT);
if (keywords.length == 3) {
String fixedStartTime = keywords[2];
if (DateUtils.parse(DateUtils.yyyyMMddHHmmss2, fixedStartTime).after(finalDate)) {
redisService.deleteObject(redisKey);
}
}
}
}
logger.info(Color.GREEN + "[TASK] TYPE: {}, CYCLE BY WEEK key: {}, patrolId: {}" + Color.END, taskType, key, taskPatrolledId);
redisService.setCacheObject(key, JSONArray.toJSONString(patrolTasks));
}
@ -851,19 +866,19 @@ public class PatrolTaskExecController extends BaseController {
return patrolResultService.selectAlgorithmType(patrolPointId);
}
public static void main(String[] args) {
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";
public static void main(String[] args) throws ParseException {
// 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 16:01:00";
// String[] keywords = StringUtils.split(redisKey, StringUtils.AT);
// if (keywords.length == 3) {
// String fixedStartTime = keywords[2];
@ -871,5 +886,104 @@ public class PatrolTaskExecController extends BaseController {
// System.out.println("111");
// }
// }
// Date actualStartTime = DateUtils.parse(DateUtils.yyyyMMddHHmmss2, "2025-06-12 16:00:00");
// if (actualStartTime.before(new Date())) {
// System.out.println("2222");
// actualStartTime = new Date();
// }
// List<Date> execTimes = patrolTaskExecController.getExecTimesByMinute("13:00:00", "2025-06-14 16:00:00", "2025-06-14 19:10:00", 4);
// System.out.println("=================================");
// System.out.println(execTimes);
// System.out.println("============");
//// Date parse = DateUtils.parse(DateUtils.yyyyMMddHHmmss2, "2025-06-13 17:07:32");
//// long planTime = DateUtils.parse(DateUtils.yyyyMMddHHmmss2, "2025-06-13 17:07:32").getTime();
//// System.out.println(parse);
//// System.out.println(planTime);
//
// String fixedStartTime = "2025-06-14 08:47:32";
// long planTime = DateUtils.parse(DateUtils.yyyyMMddHHmmss2, fixedStartTime).getTime();
// long fixedDays = TimeUnit.MILLISECONDS.toDays(planTime);
// long fixedStartMinutes = TimeUnit.MILLISECONDS.toMinutes(planTime);
// System.out.println("fixedDays: " + fixedDays);
// System.out.println("fixedStartMinutes: " + fixedStartMinutes);
// System.out.println("planTime: "+ planTime);
//
// long currentTime = DateUtils.parse(DateUtils.yyyyMMddHHmmss2, "2025-06-14 09:07:32").getTime();
// long currentDays = TimeUnit.MILLISECONDS.toDays(currentTime);
// long currentMinutes = TimeUnit.MILLISECONDS.toMinutes(currentTime);
// System.out.println("currentDays: " + currentDays);
// System.out.println("currentMinutes: " + currentMinutes);
// System.out.println("currentTime: "+ currentTime);
//
// if (currentDays == fixedDays && currentMinutes >= fixedStartMinutes) {
// System.out.println("333");
// }
// System.out.println("============下面开始===============");
//
// fixedStartTime = "2025-06-14 00:07:32";
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//
// // 解析字符串为 Date
// Date fixedDate = sdf.parse(fixedStartTime);
// Date currentDate = sdf.parse(fixedStartTime); // 当前时间
//
// // 比较时间精确到分钟
// SimpleDateFormat minuteFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
// String fixedMinute = minuteFormat.format(fixedDate);
// String currentMinute = minuteFormat.format(currentDate);
//
//// if (fixedMinute.equals(currentMinute)) {
//// System.out.println("fixedStartTime 和当前时间完全相同(精确到分钟)");
//// } else {
// // 计算分钟差值绝对值
// long diffMinutes = Math.abs((fixedDate.getTime() - currentDate.getTime()) / (60 * 1000));
//
// if (diffMinutes <= 1) {
// System.out.println("fixedStartTime 和当前时间相差不超过1分钟");
// } else if (fixedDate.after(currentDate)) {
// System.out.println("fixedStartTime 是未来时间(相差超过1分钟)");
// } else {
// System.out.println("fixedStartTime 是过去时间(相差超过1分钟)");
// }
//// }
//
// // 判断是否同一天
// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
// String fixedDay = dateFormat.format(fixedDate);
// String currentDay = dateFormat.format(currentDate);
//
// if (fixedDay.equals(currentDay)) {
// System.out.println("fixedStartTime 和当前时间是同一天");
// } else {
// System.out.println("fixedStartTime 和当前时间不是同一天");
// }
System.out.println("====================");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 解析字符串为 Date
String fixedStartTime = "2025-06-16 11:30:00";
Date fixedDate1 = sdf.parse(fixedStartTime);
Date currentDate1 = sdf.parse("2025-06-16 11:30:11"); // 当前时间
// 判断是否同一天
SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
String fixedDay1 = dateFormat1.format(fixedDate1);
String currentDay1 = dateFormat1.format(currentDate1);
long value = currentDate1.getTime() - fixedDate1.getTime();
System.out.println(value);
long diffMinutes1 = (currentDate1.getTime() - fixedDate1.getTime()) / (60 * 1000);
System.out.println(diffMinutes1);
if(fixedDay1.equals(currentDay1) && (diffMinutes1 >= 0 && diffMinutes1 <= 1 && fixedDate1.before(currentDate1) || fixedDate1.getTime() == currentDate1.getTime())) {
System.out.println("hhhrhheh");
}
if(fixedDay1.equals(currentDay1) && (value >= 0 && value <= 60000 && fixedDate1.before(currentDate1) || fixedDate1.getTime() == currentDate1.getTime())) {
System.out.println("过期时间没超过1分钟");
}
System.out.println(DateUtils.format(DateUtils.yyyyMMddHHmmss2, new Date()));
}
}

Loading…
Cancel
Save