]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
fix(marketplace): aggregate missing MarketplaceStore errors before Telegram send origin/feature_filippov_20260307_fix_mp_telegram_429
authorAleksey Filippov <Aleksey.Filippov@erp-flowers.ru>
Sat, 7 Mar 2026 17:18:17 +0000 (20:18 +0300)
committerAleksey Filippov <Aleksey.Filippov@erp-flowers.ru>
Sat, 7 Mar 2026 17:18:17 +0000 (20:18 +0300)
Instead of sending one Telegram message per order with missing store
inside processOrders() loop, collect unique warehouse GUIDs and send
a single aggregated message after the loop to avoid Telegram 429.

erp24/services/MarketplaceService.php

index 6ce5f509c3ace49ab9576341712923812c032dd3..e0df763f7d64c0a9902be20089df9a7c3bd580b7 100644 (file)
@@ -1178,6 +1178,7 @@ class MarketplaceService
         $statusCodes = array_unique(array_keys($statuses));
         $newOrdersCount = 0;
         $updatedOrdersCount = 0;
+        $missingStoreErrors = [];
 
         foreach ($allOrders as $campaignId => $orders) {
             foreach ($orders as $order) {
@@ -1251,10 +1252,7 @@ class MarketplaceService
                     $marketplaceOrder->fake = (int)$order->getFake();
                     if ($warehouseGuid) {
                         if (!$store) {
-                            $errorMessage = "Ошибка! Отсутствует запись MarketplaceStore для магазина {$warehouseGuid} ЯМ";
-                            $errorMessage = TelegramService::escapeMarkdown($errorMessage);
-                            $isDev = TelegramService::isDevEnv();
-                            TelegramService::sendErrorToTelegramMessage($errorMessage, false, $isDev);
+                            $missingStoreErrors[$warehouseGuid] = $warehouseGuid;
                         }
                         $marketplaceOrder->store_id = $store ? $store->store_id : null;
                         $marketplaceOrder->warehouse_guid = $warehouseGuid;
@@ -2071,6 +2069,15 @@ class MarketplaceService
                 }
             }
         }
+
+        if (!empty($missingStoreErrors)) {
+            $isDev = TelegramService::isDevEnv();
+            $guids = implode(', ', array_keys($missingStoreErrors));
+            $errorMessage = "Ошибка! Отсутствуют записи MarketplaceStore ЯМ для складов: {$guids}";
+            $errorMessage = TelegramService::escapeMarkdown($errorMessage);
+            TelegramService::sendErrorToTelegramMessage($errorMessage, false, $isDev);
+        }
+
         return ['newOrders' => $newOrdersCount, 'updateOrders' => $updatedOrdersCount];
     }