dhlShipment = $dhlShipment; $this->options = $options; // Set queue name based on priority if (isset($options['priority']) && $options['priority'] === 'high') { $this->onQueue('high-priority'); } else { $this->onQueue('dhl-cancellations'); } } /** * Execute the job. */ public function handle(): void { try { Log::info('[DHL Queue] Starting shipment cancellation job', [ 'shipment_id' => $this->dhlShipment->id, 'dhl_shipment_no' => $this->dhlShipment->dhl_shipment_no, 'attempt' => $this->attempts(), ]); // Get DHL configuration $settingController = new \App\Http\Controllers\SettingController; $dhlConfig = $settingController->getDhlConfig(); // Create DHL client $dhlClient = new DhlClient( $dhlConfig['base_url'], $dhlConfig['api_key'], $dhlConfig['username'], $dhlConfig['password'] ); // Create shipping service $shippingService = new ShippingService($dhlClient); // Cancel the shipment $success = $shippingService->cancelLabel($this->dhlShipment->dhl_shipment_no); if ($success) { Log::info('[DHL Queue] Shipment cancelled successfully', [ 'shipment_id' => $this->dhlShipment->id, 'dhl_shipment_no' => $this->dhlShipment->dhl_shipment_no, ]); } else { throw new Exception('Cancellation returned false'); } } catch (Exception $e) { Log::error('[DHL Queue] Shipment cancellation failed', [ 'shipment_id' => $this->dhlShipment->id, 'dhl_shipment_no' => $this->dhlShipment->dhl_shipment_no, 'error' => $e->getMessage(), 'attempt' => $this->attempts(), 'max_tries' => $this->tries, ]); // If this is the final attempt, mark as permanently failed if ($this->attempts() >= $this->tries) { Log::error('[DHL Queue] Shipment cancellation permanently failed', [ 'shipment_id' => $this->dhlShipment->id, 'error' => $e->getMessage(), ]); // Update shipment status to indicate cancellation failed $this->dhlShipment->update([ 'status' => 'failed', ]); } throw $e; // Re-throw to trigger retry mechanism } } /** * Handle a job failure. * * @param Exception $exception */ public function failed(Exception $exception): void { Log::error('[DHL Queue] CancelShipmentJob permanently failed', [ 'shipment_id' => $this->dhlShipment->id, 'dhl_shipment_no' => $this->dhlShipment->dhl_shipment_no, 'error' => $exception->getMessage(), 'trace' => $exception->getTraceAsString(), ]); // Update shipment status to indicate cancellation failed try { $this->dhlShipment->update([ 'status' => 'failed', ]); } catch (Exception $e) { Log::error('[DHL Queue] Could not update shipment status after failure', [ 'shipment_id' => $this->dhlShipment->id, 'error' => $e->getMessage(), ]); } } /** * Determine the time at which the job should timeout. * * @return \DateTime */ public function retryUntil() { return now()->addHour(); // Shorter timeout for cancellations } }