From 3c4fe6c25703cabc044f29e33083a17410c1fdaf Mon Sep 17 00:00:00 2001 From: wangguangyuan Date: Mon, 16 Jun 2025 15:14:17 +0800 Subject: [PATCH] =?UTF-8?q?=E9=97=B4=E9=9A=94=E6=89=A7=E8=A1=8C=20?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E9=97=B4=E9=9A=94=E7=BB=93=E6=9D=9F=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E7=BB=93=E6=9D=9F=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/inspect/job/task/JobMainTask.java | 48 +++++- .../controller/PatrolTaskExecController.java | 158 +++++++++++++++--- 2 files changed, 176 insertions(+), 30 deletions(-) diff --git a/inspect-job/src/main/java/com/inspect/job/task/JobMainTask.java b/inspect-job/src/main/java/com/inspect/job/task/JobMainTask.java index a321c5c..b21ef9d 100644 --- a/inspect-job/src/main/java/com/inspect/job/task/JobMainTask.java +++ b/inspect-job/src/main/java/com/inspect/job/task/JobMainTask.java @@ -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 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); } 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 3e95f35..749f7ca 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 @@ -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 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 devNoList = new ArrayList<>(); @@ -600,6 +603,18 @@ public class PatrolTaskExecController extends BaseController { if (taskExecRecord == null) { List patrolTasks = getPatrolTasks(task); if (!patrolTasks.isEmpty()) { + if(finalDate != null) { + Collection 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 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"; + 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 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 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 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())); } }