From 30852c841b0e4ac740bf76df9553f903bb1d3f1e Mon Sep 17 00:00:00 2001 From: Aleksey Filippov Date: Fri, 5 Jun 2026 09:40:48 +0300 Subject: [PATCH] =?utf8?q?fix:=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20?= =?utf8?q?=D0=B8=D0=B7=20=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=20=E2=80=94=20stoc?= =?utf8?q?k-state=20=D0=B0=D0=BB=D0=B5=D1=80=D1=82=D1=8B=20=D0=B2=20Telegr?= =?utf8?q?am,=20=D0=BF=D0=B0=D1=80=D1=81=D0=B8=D0=BD=D0=B3=20Flowwow,=20PK?= =?utf8?q?=20=D1=83=20Images?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 | 14 ++++++++++++++ erp24/services/MarketplaceService.php | 6 +++--- erp24/services/StockStateService.php | 13 ++++++++----- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/erp24/records/Images.php b/erp24/records/Images.php index b2500e63..b9f61d19 100644 --- a/erp24/records/Images.php +++ b/erp24/records/Images.php @@ -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() { diff --git a/erp24/services/MarketplaceService.php b/erp24/services/MarketplaceService.php index 7bee00f4..19903afc 100644 --- a/erp24/services/MarketplaceService.php +++ b/erp24/services/MarketplaceService.php @@ -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]) diff --git a/erp24/services/StockStateService.php b/erp24/services/StockStateService.php index 2928a890..c0ec047e 100644 --- a/erp24/services/StockStateService.php +++ b/erp24/services/StockStateService.php @@ -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'); -- 2.39.5