diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/job/task/ExpireRemindJob.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/job/task/ExpireRemindJob.java index 3efb44e..3b46c17 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/job/task/ExpireRemindJob.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/job/task/ExpireRemindJob.java @@ -81,7 +81,7 @@ public class ExpireRemindJob implements Job { // LocalDateTime now = LocalDateTime.now(); // // 计算当前时间到到期时间的时长(单位:小时) // long hoursUntilDeadline = java.time.Duration.between(now, deadline).toHours(); -// // 核心判断:到期前不足3小时(包括已过期),不提醒 +// // 核心判断:到期前不足3天时(包括已过期),不提醒 // if (hoursUntilDeadline < 3) { // log.info("【到期提醒Job】任务到期前不足3小时,无需提醒,任务ID:{},到期时间:{},当前时间:{}", // taskId, deadline, now); diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoServiceImpl.java index 559e801..99d1009 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoServiceImpl.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoServiceImpl.java @@ -85,6 +85,9 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService { // 时间格式常量(与之前保持一致) public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss"; + // 提前提醒的天数(3天) + private static final long REMIND_ADVANCE_DAYS = 3L; + // 1. 定义线程安全的格式化器(全局复用,无需重复创建) private static final DateTimeFormatter DEADLINE_FORMATTER = DateTimeFormatter .ofPattern(FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @@ -176,20 +179,42 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService { // add by 20260307 初始化单位积分 unitIntegralService.createUnitIntegral(CommonConstants.UNIT_INTEGRAL_UNIT_TYPE_01, String.valueOf(companyId), assignTaskInfo.getCompanyName()); try { - //保存成功后创建定时器,3小时执行 - // 2. 安全转换LocalDateTime到Date(指定东八区,避免时区问题) + //保存成功后创建定时器,3天执行 + // 1. 获取截止时间并校验非空 LocalDateTime deadline = assignTasks.getDeadline(); + if (deadline == null) { + log.warn("创建定时任务失败:任务ID={},截止时间为空", assignTaskInfo.getId()); + // 可根据业务需求抛出异常或直接返回 + return; + } + + // 2. 计算:当前时间 + 3天 是否超过截止时间(即截止时间不足3天) + LocalDateTime now = LocalDateTime.now(DEFAULT_ZONE); // 当前东八区时间 + LocalDateTime remindThreshold = now.plusDays(REMIND_ADVANCE_DAYS); + + // 核心判断:截止时间 <= (当前时间+3天) → 不足3天,不创建定时任务 + if (deadline.isBefore(remindThreshold) || deadline.isEqual(remindThreshold)) { + String formattedDeadline = deadline.format(DATE_FORMATTER); + String formattedThreshold = remindThreshold.format(DATE_FORMATTER); + log.info("任务ID={} 无需创建定时任务:截止时间={},不足{}天(阈值时间={})", + assignTaskInfo.getId(), formattedDeadline, REMIND_ADVANCE_DAYS, formattedThreshold); + return; // 直接返回,不创建定时任务 + } + + // 3. 安全转换LocalDateTime到Date(指定东八区,避免时区问题) Date triggerDate = Date.from( deadline.atZone(DEFAULT_ZONE) // 绑定东八区(业务时区) .toInstant() // 转为Instant ); - // 3. 规范日志输出(使用占位符,格式化时间) + // 4. 规范日志输出(使用占位符,格式化时间) String formattedDeadline = deadline.format(DATE_FORMATTER); log.info("创建定时任务:任务ID={}, 截止时间(LocalDateTime)={}, 转换后Date时间={}", assignTaskInfo.getId(), formattedDeadline, triggerDate); + + // 5. 注册定时任务 quartzRemindService.registerRemindJob(assignTaskInfo.getId(), triggerDate); } catch (SchedulerException exception) { throw exception0(BAD_REQUEST.getCode(),"创建到期定时提醒异常"); diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/QuartzRemindService.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/QuartzRemindService.java index 6a3f236..e44b45e 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/QuartzRemindService.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/QuartzRemindService.java @@ -10,6 +10,7 @@ import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Set; +import java.util.concurrent.TimeUnit; /** * 动态注册到期提醒Quartz任务的服务 @@ -35,8 +36,8 @@ public class QuartzRemindService { throw new IllegalArgumentException("任务信息不完整,无法注册提醒"); } - // 2. 计算触发时间:到期时间 - 3小时 - Date triggerTime = new Date(expireTime.getTime() - 3 * 60 * 60 * 1000L); + // 2. 计算触发时间:到期时间 - 3天 + Date triggerTime = new Date(expireTime.getTime() - TimeUnit.DAYS.toMillis(3)); // 3. 定义JobKey(唯一标识:任务ID + 组名) JobKey jobKey = new JobKey("REMIND_JOB_" + jobId, REMIND_JOB_GROUP);