TP6订单待支付超时自动取消

编程入门 行业动态 更新时间:2024-10-27 15:28:42

1:安装redis

2:安装think-queue

poser require topthink/think-queue

3:设置配置文件,使用redis进行存储,文件位置config/queue.php

return ['default'     => 'redis','connections' => ['sync'     => ['type' => 'sync',],'database' => ['type'       => 'database','queue'      => 'default','table'      => 'jobs','connection' => null,],'redis'    => ['type'       => 'redis','queue'      => 'default','host'       => '127.0.0.1','port'       => 6379,'password'   => '','select'     => 0,'timeout'    => 0,'persistent' => false,],],'failed'      => ['type'  => 'none','table' => 'failed_jobs',],
];

4:app目录下新建queue文件夹,文件夹下新建Order.php处理类

//订单超时取消
public function overdue(Job $job,$order_no){$order = OrderModel::get($order_no,1);  //校验当前订单是否为待支付状态if($order->isEmpty()){$job->delete();  //非待支付状态,删除执行} else {$result = OrderModel::overtime($order_no);  //更新订单状态为已过期if($result){$job->delete();  //更新过期成功,删除执行} else {if ($job->attempts() > 3) {$job->delete();  //累计执行3次均失败,删除执行}else{$job->release(10);  //间隔10秒执行一次}}}
}

5:订单生成成功后调用延时队列

use think\facade\Queue;public static function createOrder(){$order = ...//执行订单生成存储       Queue::later(30 * 60,'app\queue\Order@overdue',$order['order_no']);  //加入队列,并延迟30分钟执行
}

6:生成订单后查看redis队列是否存在新订单数据

7:到期执行订单状态修改

 8:宝塔环境添加进程守护

安装supervisord管理器

添加进程守护管理

 

更多推荐

订单

本文发布于:2023-05-20 23:45:54,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/156710.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:订单

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!