namespace App\Jobs; use App\Models\Order; use App\Services\Api\ApiServiceManager; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Facades\Log; class ProcessFailedOrders implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; public $timeout = 600; public $tries = 2; public function handle(ApiServiceManager $apiManager) { Log::info('Starting failed orders processing'); // Get orders stuck in processing for too long $stuckOrders = Order::whereIn('status', ['pending', 'processing']) ->where('created_at', '<=', now()->subHours(24)) ->whereNull('api_order_id') ->get(); foreach ($stuckOrders as $order) { try { // Mark as failed $order->update(['status' => 'error']); $order->logs()->create([ 'user_id' => $order->user_id, 'action' => 'auto_failed', 'description' => 'Order auto-failed after 24 hours without processing', 'new_status' => 'error', ]); Log::info("Order {$order->id} marked as failed (stuck)"); } catch (\Exception $e) { Log::error("Failed to process stuck order {$order->id}: " . $e->getMessage()); } } Log::info('Failed orders processing completed'); } }