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 UpdateOrderStatuses implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; public $timeout = 300; public $tries = 3; public function handle(ApiServiceManager $apiManager) { Log::info('Starting order status updates'); // Get orders that need status update $orders = Order::whereIn('status', ['pending', 'processing', 'in_progress']) ->whereNotNull('api_order_id') ->whereNotNull('api_provider_id') ->where('updated_at', '<=', now()->subMinutes(5)) ->limit(100) ->get(); $updated = 0; $failed = 0; foreach ($orders as $order) { try { $result = $apiManager->updateOrderStatus($order); if ($result['success']) { $updated++; } else { $failed++; } // Add small delay to avoid rate limiting usleep(500000); // 0.5 seconds } catch (\Exception $e) { Log::error("Failed to update order {$order->id} status: " . $e->getMessage()); $failed++; } } Log::info("Order status updates completed: {$updated} updated, {$failed} failed"); } }