自定义提醒 模仿闹钟和日程 (仅一次 每天 每周 每月 每年)

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

}

 

posted @ 2020-04-08 16:13  Mark_Luo  阅读(531)  评论(0编辑  收藏  举报