From 925c40d929b8300b25d4a5a22854f4ced730685b Mon Sep 17 00:00:00 2001 From: Aleksey Filippov Date: Mon, 2 Mar 2026 22:16:55 +0300 Subject: [PATCH] fix(ERP-251): parse delivery address from text when API returns no structured address Some orders (FlowWow) have delivery info as free text in raw_data instead of structured address fields. When $delivery->getAddress() returns null, fallback to parseAddressFromDeliveryText() to extract city/street/house from the text. Applied in all 3 delivery creation points in processOrders(). Co-Authored-By: Claude Opus 4.6 --- erp24/services/MarketplaceService.php | 63 +++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 3 deletions(-) diff --git a/erp24/services/MarketplaceService.php b/erp24/services/MarketplaceService.php index e3ce7061..9843706d 100644 --- a/erp24/services/MarketplaceService.php +++ b/erp24/services/MarketplaceService.php @@ -1344,7 +1344,26 @@ class MarketplaceService $deliveryModel->latitude = $gps->getLatitude(); $deliveryModel->longitude = $gps->getLongitude(); } else { - // GPS координаты отсутствуют, устанавливаем значения по умолчанию + $deliveryModel->latitude = 0.0; + $deliveryModel->longitude = 0.0; + } + } else { + // Адрес не структурирован — парсим из текстовой строки delivery в raw_data + $rawData = json_decode($marketplaceOrder->raw_data, true); + $deliveryText = $rawData['delivery'] ?? null; + if ($deliveryText && is_string($deliveryText)) { + $parsed = self::parseAddressFromDeliveryText($deliveryText); + $deliveryModel->country = 'Россия'; + $deliveryModel->city = $parsed['city']; + $deliveryModel->street = $parsed['street']; + $deliveryModel->house = $parsed['house']; + $deliveryModel->latitude = $parsed['latitude']; + $deliveryModel->longitude = $parsed['longitude']; + } else { + $deliveryModel->country = 'Уточняется'; + $deliveryModel->city = 'Уточняется'; + $deliveryModel->street = 'Уточняется'; + $deliveryModel->house = 'Уточняется'; $deliveryModel->latitude = 0.0; $deliveryModel->longitude = 0.0; } @@ -1558,7 +1577,26 @@ class MarketplaceService $deliveryModel->latitude = $gps->getLatitude(); $deliveryModel->longitude = $gps->getLongitude(); } else { - // GPS координаты отсутствуют, устанавливаем значения по умолчанию + $deliveryModel->latitude = 0.0; + $deliveryModel->longitude = 0.0; + } + } else { + // Адрес не структурирован — парсим из текстовой строки delivery в raw_data + $rawData = json_decode($marketplaceOrder->raw_data, true); + $deliveryText = $rawData['delivery'] ?? null; + if ($deliveryText && is_string($deliveryText)) { + $parsed = self::parseAddressFromDeliveryText($deliveryText); + $deliveryModel->country = 'Россия'; + $deliveryModel->city = $parsed['city']; + $deliveryModel->street = $parsed['street']; + $deliveryModel->house = $parsed['house']; + $deliveryModel->latitude = $parsed['latitude']; + $deliveryModel->longitude = $parsed['longitude']; + } else { + $deliveryModel->country = 'Уточняется'; + $deliveryModel->city = 'Уточняется'; + $deliveryModel->street = 'Уточняется'; + $deliveryModel->house = 'Уточняется'; $deliveryModel->latitude = 0.0; $deliveryModel->longitude = 0.0; } @@ -1891,7 +1929,26 @@ class MarketplaceService $deliveryModel->latitude = $gps->getLatitude(); $deliveryModel->longitude = $gps->getLongitude(); } else { - // GPS координаты отсутствуют, устанавливаем значения по умолчанию + $deliveryModel->latitude = 0.0; + $deliveryModel->longitude = 0.0; + } + } else { + // Адрес не структурирован — парсим из текстовой строки delivery в raw_data + $rawData = json_decode($marketplaceOrder->raw_data, true); + $deliveryText = $rawData['delivery'] ?? null; + if ($deliveryText && is_string($deliveryText)) { + $parsed = self::parseAddressFromDeliveryText($deliveryText); + $deliveryModel->country = 'Россия'; + $deliveryModel->city = $parsed['city']; + $deliveryModel->street = $parsed['street']; + $deliveryModel->house = $parsed['house']; + $deliveryModel->latitude = $parsed['latitude']; + $deliveryModel->longitude = $parsed['longitude']; + } else { + $deliveryModel->country = 'Уточняется'; + $deliveryModel->city = 'Уточняется'; + $deliveryModel->street = 'Уточняется'; + $deliveryModel->house = 'Уточняется'; $deliveryModel->latitude = 0.0; $deliveryModel->longitude = 0.0; } -- 2.39.5