最近业务提了一个需求,希望可以让用户自己设置一个周期提醒,在他设置的时间可以给选择的下属发送定时提醒,记录一下自己的实现思路;
做好后就是这个样子的:
既然是周期提醒肯定不能手动触发,所以我们需要用到定时任务,
首先和业务确定周期提醒的最小单位是什么(时,分,秒)我们是时,知道最小单位后以最小单位设置一个定时任务
定时怎末才能查到,我们需要在数据库添加相关字段:
我们需要一个字段去标识周期是;月,周,还是天
还需要一个字段标识如果第一个字段选的月(每月的几号),选的周的话(每周的周几);
最后一个字段标识几时
为了方便前端处理,我把第二个字段拆成了两个如图:
然后就是查询:
SELECT
detail.*
FROM notice_setting setting
LEFT JOIN assignment_detail detail on setting.detail_id = detail.detail_id
WHERE ((setting.cycle = 0
AND setting.notice_day = DATE_FORMAT(NOW(), '%d')
AND setting.`hour` = DATE_FORMAT(NOW(), '%H')
)
OR (setting.cycle = 1
AND setting.notice_week = DAYOFWEEK(NOW())
AND setting.`hour` = DATE_FORMAT(NOW(), '%H')
)
OR (setting.cycle = 2
AND setting.`hour` = DATE_FORMAT(NOW(), '%H')
))
AND setting.del_flag = 0
AND detail.assignment_state not in (2,21,4)
AND detail.del_flag = 0
AND detail.cash_flag =0
发消息和定时任务我们都是对接的公司其他服务,本文只是讲一下实现思路,希望可以和各位大佬交流