File: /var/www/ipsremont-demo/app/Console/Commands/SdekUpdateStatuses.php
<?php
namespace App\Console\Commands;
use App\Models\Service\Service;
use App\Models\Shipment;
use App\Models\ShipmentChanges;
use App\Models\ShipmentSdekChanges;
use App\Models\ShipmentServerResponse;
use App\Services\Shipment\SdekService;
use Illuminate\Console\Command;
class SdekUpdateStatuses extends Command
{
protected $signature = 'sdek:update-statuses';
protected $description = 'Обновляет статусы всех отгрузок СДЕК';
public function handle()
{
$this->info($this->description);
$service = new SdekService();
$shipmentServerResponse = ShipmentServerResponse::query()->where('error_text', 'LIKE', 'Entity is forbidden%')->get();
$ids = [];
foreach ($shipmentServerResponse as $item) {
$ids[] = $item->shipment_id;
}
$ids = array_unique($ids);
/** @var Shipment[] $shipments */
$shipments = Shipment::query()
->where('delivery_service', Service::TYPE_CDEK)
->where('error', 1)
->whereIn('id', $ids)
->get();
foreach ($shipments as $shipment) {
$this->line('Доставка ' . $shipment->track_number . ' ID: ' . $shipment->id);
$shipmentChanges = ShipmentChanges::query()->where('shipment_id', $shipment->id)->get();
foreach ($shipmentChanges as $shipmentChange) {
$shipmentChange->delete();
}
$shipmentSdekChanges = ShipmentSdekChanges::query()->where('shipment_id', $shipment->id)->get();
foreach ($shipmentSdekChanges as $shipmentChange) {
$shipmentChange->delete();
}
$error = $service->getStatuses($shipment);
if (empty($error)) {
$this->line('Данные обновлены');
} else {
$this->error($error);
}
$this->line('');
}
}
}