/**
* 每分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);
}
}
}
}
}