1. 修改 app/Models/Transaction/Order.php:新增訂單生命週期狀態常數與 TERMINAL_STATUSES 終態定義。 2. 修改 app/Services/Transaction/TransactionService.php:優化 processTransaction 與 finalizeTransaction 的冪等性邏輯,支援 pending 狀態訂單的狀態轉移,並拆分輔助函式 transitionOrder 與 createOrderItems。 3. 新增 app/Console/Commands/SweepAbandonedOrdersCommand.php:建立 orders:sweep-abandoned 指令,將停留在 pending 狀態超過 15 分鐘的逾時訂單標記為 abandoned。 4. 修改 app/Console/Kernel.php:將 orders:sweep-abandoned 定期清理指令註冊至 Schedule 排程中,設定每 5 分鐘執行一次。
33 lines
1.0 KiB
PHP
33 lines
1.0 KiB
PHP
<?php
|
||
|
||
namespace App\Console;
|
||
|
||
use Illuminate\Console\Scheduling\Schedule;
|
||
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
|
||
|
||
class Kernel extends ConsoleKernel
|
||
{
|
||
/**
|
||
* Define the application's command schedule.
|
||
*/
|
||
protected function schedule(Schedule $schedule): void
|
||
{
|
||
// $schedule->command('inspire')->hourly();
|
||
$schedule->command('ota:process-schedules')->everyMinute();
|
||
// 電子發票對帳:對 pending 發票去綠界查證(補登 issued / 標 failed 待補開)
|
||
$schedule->command('invoices:reconcile')->everyFiveMinutes()->withoutOverlapping();
|
||
// 交易結案掃描:把逾時停留在 pending 的單標記為 abandoned(只動 pending,碰不到線上 main 機台)
|
||
$schedule->command('orders:sweep-abandoned')->everyFiveMinutes()->withoutOverlapping();
|
||
}
|
||
|
||
/**
|
||
* Register the commands for the application.
|
||
*/
|
||
protected function commands(): void
|
||
{
|
||
$this->load(__DIR__.'/Commands');
|
||
|
||
require base_path('routes/console.php');
|
||
}
|
||
}
|