Commit d558e0c67b422c41fe17529d3e48d7b5d6f641b5

Authored by wangqian
1 parent 79d3c0d9

到期提醒创建任务修改

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);
... ...