【BUG】一个有趣的BUG--连续推送两次
今天测试功能的时候,发现了一个有趣的BUG,特种设备推送,提前7天和提前30天各推送了一次。
当天怎么可能既间隔7天,又间隔30天呢。
我去数据库模拟了测试数据:
今天是2022年3月29日。
然后通过SQL进行筛选符合条件的记录。
SELECT id, spec_id, spec_name, dept_name, push_time, next_inspection_date,
differ, receive_man
FROM (SELECT *, DATEDIFF(push_time, now()) AS differ FROM spec_push) a
WHERE a.differ IN (30,7,0);
我发现竟然真的查出来2条数据,那么的确应该推送。
可是不对啊,一个是4月5号,一个是4月28号,它们的确距下次验收日期5月5号间隔30天和7天。
可是,今天不是4月5号,也不是4月28号,为什么要今天推送呢?
后来我忽然发现了一个问题。
我判断的是推送时间和当前时间比对,是否间隔30天,7天和0天?
这里分明是写错了。
pushTime和确定推送的时间,只要当天==pushTime,则进行推送,为什么要这么判断呢?
大错特错!
所以正确的写法,应该是判断push_time是否等于当前时间:
SELECT id, attach_name, dept_name, push_time, next_inspection_date,
forward, receive_man
FROM (SELECT *, DATEDIFF(push_time, now()) AS differ FROM safe_push) a
WHERE a.differ = 0