]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
fix: ошибки из логов — stock-state алерты в Telegram, парсинг Flowwow, PK у Images origin/feature_filippov_fix_stock_alert_flowwow_images
authorAleksey Filippov <Aleksey.Filippov@erp-flowers.ru>
Fri, 5 Jun 2026 06:40:48 +0000 (09:40 +0300)
committerAleksey Filippov <Aleksey.Filippov@erp-flowers.ru>
Fri, 5 Jun 2026 06:42:38 +0000 (09:42 +0300)
1. stock-state: алерты слались через SendTelegramMessageJob с ключом message
   → 'unknown property', алерт не уходил. Джоба для клиентских рассылок
   (нужен chat_id/phone). Переведено на TelegramService::sendErrorToTelegramMessage
   (служебный канал, с таймаутами). [StockStateService::sendTelegram]

2. MarketplaceService: незащищённый доступ $statuses['CANCELLED']/['DELIVERED']
   давал 'Undefined array key' при разборе писем Flowwow → добавлен ?? null
   (строки 1524, 2595, 2596, единообразно с остальными местами).

3. records/Images: в таблице images нет PK-констрейнта в БД → findOne()
   падал с InvalidConfigException. Добавлен явный primaryKey() => ['id'].

erp24/records/Images.php
erp24/services/MarketplaceService.php
erp24/services/StockStateService.php

index b2500e63985332befee2db169772be9c5b363571..b9f61d19d132a73b075002101458a9f9534ae46f 100644 (file)
@@ -30,6 +30,20 @@ class Images extends \yii\db\ActiveRecord
         return 'images';
     }
 
+    /**
+     * Явное указание первичного ключа.
+     *
+     * В таблице `images` отсутствует PK-конст. на уровне БД, из-за чего
+     * автоопределение через схему падает с InvalidConfigException
+     * ("must have a primary key") при вызове findOne(). Задаём PK явно.
+     *
+     * {@inheritdoc}
+     */
+    public static function primaryKey()
+    {
+        return ['id'];
+    }
+
 
     public function behaviors()
     {
index 7bee00f433ff14e365d6a217d0f1f668824975c0..19903afc26926fe619243add96ca4f90a0bec869 100644 (file)
@@ -1521,7 +1521,7 @@ class MarketplaceService
                     if ($marketplaceOrder->status->code == 'DELIVERED' &&
                         $marketplaceOrder->substatus->code == 'DELIVERY_SERVICE_DELIVERED' &&
                         $marketplaceOrder) {
-                        $deliveredStatusId = $statuses['DELIVERED'];
+                        $deliveredStatusId = $statuses['DELIVERED'] ?? null;
                         $status1cWithDeliveredId = ArrayHelper::getColumn(MarketplaceOrder1cStatuses::find()
                             ->where(['order_status_id' => $deliveredStatusId])
                             ->andWhere(['marketplace_id' => MarketplaceStore::YANDEX_WAREHOUSE_ID])
@@ -2592,8 +2592,8 @@ class MarketplaceService
                 ->asArray()
                 ->all();
             $statuses = ArrayHelper::map($statuses, 'code', 'id');
-            $cancelledStatusId = $statuses[MarketplaceOrderStatusTypes::CANSELLED_CODE];
-            $deliveredStatusId = $statuses['DELIVERED'];
+            $cancelledStatusId = $statuses[MarketplaceOrderStatusTypes::CANSELLED_CODE] ?? null;
+            $deliveredStatusId = $statuses['DELIVERED'] ?? null;
             $status1cWithCancelledId = ArrayHelper::getColumn(MarketplaceOrder1cStatuses::find()
                 ->where(['order_status_id' => $cancelledStatusId])
                 ->andWhere(['marketplace_id' => MarketplaceStore::FLOWWOW_WAREHOUSE_ID])
index 2928a890c003a438c2e3b2860a8d938e096e6ac2..c0ec047e817322f94de05076408acc8b05d64ae7 100644 (file)
@@ -343,11 +343,14 @@ class StockStateService
         }
 
         try {
-            if (Yii::$app && Yii::$app->has('queue')) {
-                Yii::$app->queue->push(new \app\jobs\SendTelegramMessageJob([
-                    'message' => $message,
-                ]));
-            }
+            // Системный алерт уходит в служебный канал. SendTelegramMessageJob
+            // не подходит — он для клиентских рассылок (требует chat_id/phone),
+            // и его ключ message приводил к "unknown property" → алерт не отправлялся.
+            \yii_app\services\TelegramService::sendErrorToTelegramMessage(
+                $message,
+                false,
+                \yii_app\services\TelegramService::isDevEnv()
+            );
         } catch (\Throwable $e) {
             try {
                 Yii::error("Failed to send Telegram alert: " . $e->getMessage(), 'stock-state');