From: Aleksey Filippov Date: Fri, 5 Jun 2026 06:40:48 +0000 (+0300) Subject: fix: ошибки из логов — stock-state алерты в Telegram, парсинг Flowwow, PK у Images X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=30852c841b0e4ac740bf76df9553f903bb1d3f1e;p=erp24_rep%2Fyii-erp24%2F.git fix: ошибки из логов — stock-state алерты в Telegram, парсинг Flowwow, PK у Images 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']. --- 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');