Commit d558e0c67b422c41fe17529d3e48d7b5d6f641b5
1 parent
79d3c0d9
到期提醒创建任务修改
Showing
3 changed files
with
32 additions
and
6 deletions
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/job/task/ExpireRemindJob.java
| ... | ... | @@ -81,7 +81,7 @@ public class ExpireRemindJob implements Job { |
| 81 | 81 | // LocalDateTime now = LocalDateTime.now(); |
| 82 | 82 | // // 计算当前时间到到期时间的时长(单位:小时) |
| 83 | 83 | // long hoursUntilDeadline = java.time.Duration.between(now, deadline).toHours(); |
| 84 | -// // 核心判断:到期前不足3小时(包括已过期),不提醒 | |
| 84 | +// // 核心判断:到期前不足3天时(包括已过期),不提醒 | |
| 85 | 85 | // if (hoursUntilDeadline < 3) { |
| 86 | 86 | // log.info("【到期提醒Job】任务到期前不足3小时,无需提醒,任务ID:{},到期时间:{},当前时间:{}", |
| 87 | 87 | // taskId, deadline, now); | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoServiceImpl.java
| ... | ... | @@ -85,6 +85,9 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService { |
| 85 | 85 | // 时间格式常量(与之前保持一致) |
| 86 | 86 | public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss"; |
| 87 | 87 | |
| 88 | + // 提前提醒的天数(3天) | |
| 89 | + private static final long REMIND_ADVANCE_DAYS = 3L; | |
| 90 | + | |
| 88 | 91 | // 1. 定义线程安全的格式化器(全局复用,无需重复创建) |
| 89 | 92 | private static final DateTimeFormatter DEADLINE_FORMATTER = DateTimeFormatter |
| 90 | 93 | .ofPattern(FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
| ... | ... | @@ -176,20 +179,42 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService { |
| 176 | 179 | // add by 20260307 初始化单位积分 |
| 177 | 180 | unitIntegralService.createUnitIntegral(CommonConstants.UNIT_INTEGRAL_UNIT_TYPE_01, String.valueOf(companyId), assignTaskInfo.getCompanyName()); |
| 178 | 181 | try { |
| 179 | - //保存成功后创建定时器,3小时执行 | |
| 180 | - // 2. 安全转换LocalDateTime到Date(指定东八区,避免时区问题) | |
| 182 | + //保存成功后创建定时器,3天执行 | |
| 183 | + // 1. 获取截止时间并校验非空 | |
| 181 | 184 | LocalDateTime deadline = assignTasks.getDeadline(); |
| 185 | + if (deadline == null) { | |
| 186 | + log.warn("创建定时任务失败:任务ID={},截止时间为空", assignTaskInfo.getId()); | |
| 187 | + // 可根据业务需求抛出异常或直接返回 | |
| 188 | + return; | |
| 189 | + } | |
| 190 | + | |
| 191 | + // 2. 计算:当前时间 + 3天 是否超过截止时间(即截止时间不足3天) | |
| 192 | + LocalDateTime now = LocalDateTime.now(DEFAULT_ZONE); // 当前东八区时间 | |
| 193 | + LocalDateTime remindThreshold = now.plusDays(REMIND_ADVANCE_DAYS); | |
| 194 | + | |
| 195 | + // 核心判断:截止时间 <= (当前时间+3天) → 不足3天,不创建定时任务 | |
| 196 | + if (deadline.isBefore(remindThreshold) || deadline.isEqual(remindThreshold)) { | |
| 197 | + String formattedDeadline = deadline.format(DATE_FORMATTER); | |
| 198 | + String formattedThreshold = remindThreshold.format(DATE_FORMATTER); | |
| 199 | + log.info("任务ID={} 无需创建定时任务:截止时间={},不足{}天(阈值时间={})", | |
| 200 | + assignTaskInfo.getId(), formattedDeadline, REMIND_ADVANCE_DAYS, formattedThreshold); | |
| 201 | + return; // 直接返回,不创建定时任务 | |
| 202 | + } | |
| 203 | + | |
| 204 | + // 3. 安全转换LocalDateTime到Date(指定东八区,避免时区问题) | |
| 182 | 205 | Date triggerDate = Date.from( |
| 183 | 206 | deadline.atZone(DEFAULT_ZONE) // 绑定东八区(业务时区) |
| 184 | 207 | .toInstant() // 转为Instant |
| 185 | 208 | ); |
| 186 | 209 | |
| 187 | - // 3. 规范日志输出(使用占位符,格式化时间) | |
| 210 | + // 4. 规范日志输出(使用占位符,格式化时间) | |
| 188 | 211 | String formattedDeadline = deadline.format(DATE_FORMATTER); |
| 189 | 212 | log.info("创建定时任务:任务ID={}, 截止时间(LocalDateTime)={}, 转换后Date时间={}", |
| 190 | 213 | assignTaskInfo.getId(), |
| 191 | 214 | formattedDeadline, |
| 192 | 215 | triggerDate); |
| 216 | + | |
| 217 | + // 5. 注册定时任务 | |
| 193 | 218 | quartzRemindService.registerRemindJob(assignTaskInfo.getId(), triggerDate); |
| 194 | 219 | } catch (SchedulerException exception) { |
| 195 | 220 | throw exception0(BAD_REQUEST.getCode(),"创建到期定时提醒异常"); | ... | ... |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/QuartzRemindService.java
| ... | ... | @@ -10,6 +10,7 @@ import org.springframework.stereotype.Service; |
| 10 | 10 | import java.text.SimpleDateFormat; |
| 11 | 11 | import java.util.Date; |
| 12 | 12 | import java.util.Set; |
| 13 | +import java.util.concurrent.TimeUnit; | |
| 13 | 14 | |
| 14 | 15 | /** |
| 15 | 16 | * 动态注册到期提醒Quartz任务的服务 |
| ... | ... | @@ -35,8 +36,8 @@ public class QuartzRemindService { |
| 35 | 36 | throw new IllegalArgumentException("任务信息不完整,无法注册提醒"); |
| 36 | 37 | } |
| 37 | 38 | |
| 38 | - // 2. 计算触发时间:到期时间 - 3小时 | |
| 39 | - Date triggerTime = new Date(expireTime.getTime() - 3 * 60 * 60 * 1000L); | |
| 39 | + // 2. 计算触发时间:到期时间 - 3天 | |
| 40 | + Date triggerTime = new Date(expireTime.getTime() - TimeUnit.DAYS.toMillis(3)); | |
| 40 | 41 | |
| 41 | 42 | // 3. 定义JobKey(唯一标识:任务ID + 组名) |
| 42 | 43 | JobKey jobKey = new JobKey("REMIND_JOB_" + jobId, REMIND_JOB_GROUP); | ... | ... |