Laravel實現:待付款訂單,超48小時自動關閉

Laravel00發表於2023-08-17

實現待付款訂單超過48小時自動關閉的功能,需要在系統中新增一個定時任務,週期性地檢查待付款訂單的建立時間,如果訂單的建立時間超過了48小時並且訂單狀態為待付款,則將訂單狀態更新為已關閉。

以下是一個簡單的示例,展示如何使用 Laravel 的任務排程器來實現這個功能:

1 建立一個新的任務:

php artisan make:task ClosePendingOrders

2 開啟生成的 ClosePendingOrders 任務檔案,例如 app/Tasks/ClosePendingOrders.php,並在 handle 方法中編寫任務邏輯:
48小時:Carbon::now()->subHours(48)

namespace App\Tasks;

use Carbon\Carbon;
use App\Models\Order;
use Illuminate\Support\Facades\Log;

class ClosePendingOrders
{
    public function handle()
    {
        $pendingOrders = Order::where('status', 'pending') // 待付款狀態
            ->where('created_at', '<=', Carbon::now()->subHours(48)) // 超過48小時
            ->get();

        foreach ($pendingOrders as $order) {
            $order->update(['status' => 'closed']); // 更新訂單狀態為已關閉
            Log::info('Closed pending order: '.$order->id);
        }
    }
}

3 在 app/Console/Kernel.php 檔案中的 schedule 方法中,新增任務排程器的排程規則:

protected function schedule(Schedule $schedule)
{
    $schedule->job(new ClosePendingOrders)->hourly(); // 將任務設定為每小時執行一次
}

4 執行任務排程器(Cron Job):

php artisan schedule:run

這將會在每個小時的整點時檢查待付款訂單,如果訂單超過48小時,則會將其狀態更新為已關閉。請根據你的需求和專案實際情況進行調整。同時,確保你已經正確配置了 Laravel 的任務排程器和日誌功能。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
溫馨提示如果你需要 開通 JetBrains 全家桶賬號&& 正式版啟用碼 推薦: 點選這裡免費獲取

相關文章