Mysql 定时器 根据订单的不同的状态进行超时判断并且修改

时间:2022-09-18 23:29:07

说一下逻辑,

每分钟遍历一下订单表内的所有数据,当状态为'未支付'下,已经20分钟后就超时,并且改为‘已超时’,

待发货下,已经3小时后就超时,并且改为‘已超时’

先创建存储过程

create procedure order_checked()
begin
update order set STATUS='已超时',updateDate=now() where STATUS in ('未支付','已发货','待确认') and  
if(STATUS='未支付',createDate<(select date_sub(now(), interval 20 MINUTE)), --20分钟
if(STATUS='已发货',updateDate<(select date_sub(now(), interval 3 hour)),    --3小时
if(STATUS='待确认',updateDate<(select date_sub(now(), interval 2 hour)),1=2))); --2小时
end

创建定时器

ALTER EVENT cyEvent
ON  SCHEDULE EVERY 60 SECOND STARTS now() 
ON COMPLETION PRESERVE ENABLE
do call cy_order_checked();

后面打开定时器就可以了