自定义提醒 模仿闹钟和日程 (仅一次 每天 每周 每月 每年)
/** * 每分2钟定时扫描自定义提醒表发消息 */ @Scheduled(fixedDelay = 120 * 1000) public void remindTask() { // 查询所有定时任务 List<TRemind> tRemindList = this.remindService.selectList(new EntityWrapper<>()); // 校验 if (tRemindList.isEmpty()) { return; } // 循环 for (TRemind tRemind : tRemindList) { // 定时时间和规则必须存在 if (tRemind.getRemindTime() == null || StringUtil.isEmptyOrNullStr(tRemind.getRemindRule())) { continue; } Date remindTime = tRemind.getRemindTime(); String remindRule = tRemind.getRemindRule(); // 发送自定义消息时间 long toSendTime = remindTime.getTime() / 1000; long currentTime = System.currentTimeMillis() / 1000; long diffSec; // 都在误差时间2分钟 120秒 // 仅一次(设置好的时间点) if (remindRule.equals(RemindRuleEnum.ONCE.getValue())) { if (Math.abs(toSendTime - currentTime) < 120) { // 发送提醒 this.sendRemindMsg(tRemind); } } // 每天(而明天设置好的时间点) if (remindRule.equals(RemindRuleEnum.DAY.getValue())) { if (currentTime < toSendTime) { break; } diffSec = (currentTime - toSendTime) % (24 * 3600); if (diffSec < 120) { // 发送提醒 this.sendRemindMsg(tRemind); } } // 每周 if (remindRule.equals(RemindRuleEnum.WEEK.getValue())) { if (currentTime < toSendTime) { break; } diffSec = (currentTime - toSendTime) % (7 * 24 * 3600); if (diffSec < 120) { // 发送提醒 this.sendRemindMsg(tRemind); } } // 每月 if (remindRule.equals(RemindRuleEnum.MONTH.getValue())) { if (DateUtil.getDay(remindTime) == DateUtil.getDay(new Date())) { if (currentTime < toSendTime) { break; } diffSec = (currentTime - toSendTime) % (24 * 3600); if (diffSec < 120) { // 发送提醒 this.sendRemindMsg(tRemind); } } } // 每年 if (remindRule.equals(RemindRuleEnum.YEAR.getValue())) { if (DateUtil.getDay(remindTime) == DateUtil.getDay(new Date()) && DateUtil.getMonth(remindTime) == DateUtil.getMonth(new Date())) { if (currentTime < toSendTime) { break; } diffSec = (currentTime - toSendTime) % (24 * 3600); if (diffSec < 120) { // 发送提醒 this.sendRemindMsg(tRemind); } } } } }