博客列表 >Laravel实现:待付款订单,超48小时自动关闭

Laravel实现:待付款订单,超48小时自动关闭

PHP技术社区
PHP技术社区原创
2023年11月29日 15:26:32102浏览

实现待付款订单超过48小时自动关闭的功能,需要在系统中添加一个定时任务,周期性地检查待付款订单的创建时间,如果订单的创建时间超过了48小时并且订单状态为待付款,则将订单状态更新为已关闭。

以下是一个简单的示例,展示如何使用 Laravel 的任务调度器来实现这个功能:

1 创建一个新的任务:

  1. php artisan make:task ClosePendingOrders

2 打开生成的 ClosePendingOrders 任务文件,例如 app/Tasks/ClosePendingOrders.php,并在 handle 方法中编写任务逻辑:
48小时:Carbon::now()->subHours(48)

  1. namespace App\Tasks;
  2. use Carbon\Carbon;
  3. use App\Models\Order;
  4. use Illuminate\Support\Facades\Log;
  5. class ClosePendingOrders
  6. {
  7. public function handle()
  8. {
  9. $pendingOrders = Order::where('status', 'pending') // 待付款状态
  10. ->where('created_at', '<=', Carbon::now()->subHours(48)) // 超过48小时
  11. ->get();
  12. foreach ($pendingOrders as $order) {
  13. $order->update(['status' => 'closed']); // 更新订单状态为已关闭
  14. Log::info('Closed pending order: '.$order->id);
  15. }
  16. }
  17. }

3 在 app/Console/Kernel.php 文件中的 schedule 方法中,添加任务调度器的调度规则:

  1. protected function schedule(Schedule $schedule)
  2. {
  3. $schedule->job(new ClosePendingOrders)->hourly(); // 将任务设定为每小时执行一次
  4. }

4 运行任务调度器(Cron Job):

  1. php artisan schedule:run

这将会在每个小时的整点时检查待付款订单,如果订单超过48小时,则会将其状态更新为已关闭。请根据你的需求和项目实际情况进行调整。同时,确保你已经正确配置了 Laravel 的任务调度器和日志功能。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议