From 79549344665ca9f19b066e11cb748bee033ea83c Mon Sep 17 00:00:00 2001 From: Aleksey Filippov Date: Tue, 24 Mar 2026 16:36:36 +0300 Subject: [PATCH] fix(ERP-33): cast components::jsonb + TelegramTarget multiline fix MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 1. StockStateService: pp.components::jsonb cast — products_1c хранит components как text, stock_state ожидает JSONB 2. TelegramTarget: экранировать \n при записи в error_tracking.log — многострочные ошибки ломали формат файла и спамили stderr --- erp24/log/TelegramTarget.php | 64 ++++++++++++---------------- erp24/services/StockStateService.php | 2 +- 2 files changed, 28 insertions(+), 38 deletions(-) diff --git a/erp24/log/TelegramTarget.php b/erp24/log/TelegramTarget.php index 0683bd4d..8018f470 100644 --- a/erp24/log/TelegramTarget.php +++ b/erp24/log/TelegramTarget.php @@ -103,50 +103,40 @@ class TelegramTarget extends \yii\log\Target return; } - $isDev = TelegramService::isDevEnv(); - $serverName = getenv('SERVER_NAME') ?: ""; - $hasError = false; - $parts = []; - - foreach ($this->messages as $rawMessage) { - $message = new Message($rawMessage); - - if ($message->message[1] === Logger::LEVEL_ERROR) { - $hasError = true; - } + $message = new Message($this->messages[0]); - $errorText = $message->getText(); - if (!$this->shouldSendMessage($errorText)) { - continue; - } - - $level = isset($this->levelEmojis[$message->message[1]]) - ? $this->levelEmojis[$message->message[1]] . ' ' - : '*' . ucfirst($message->getLevel()) . '* @ '; - if ($message->getIsConsoleRequest()) { - $level .= '```' . $message->getCommandLine() . '```'; - } else { - $level .= '[' . $message->getUrl() . '](' . $message->getUrl() . ')'; - } - - $parts[] = implode("\n", [ - $level, - " ", - "```" . mb_substr("\n" . $errorText, 0, 800) . "```", - " ", - "```" . $message->getStackTrace() . "```", - "🙂 " . $message->getUserIp() . " " . $serverName, - ]); - } + $isDev = TelegramService::isDevEnv(); - if (empty($parts)) { + // Проверка наличия подобных сообщений + /*if (!$this->shouldSendMessage($errorText)) { return; + }*/ + + // Формирование уровня и основного сообщения + $level = isset($this->levelEmojis[$message->message[1]]) ? $this->levelEmojis[$message->message[1]] . ' ' : '*' . ucfirst($message->getLevel()) . '* @ '; + if ($message->getIsConsoleRequest()) { + $level .= '```' . $message->getCommandLine() . '```'; + } else { + $level .= '[' . $message->getUrl() . '](' . $message->getUrl() . ')'; } - $formattedMessage = mb_substr(implode("\n\n---\n\n", $parts), 0, 4000); + $serverName = getenv('SERVER_NAME') ? getenv('SERVER_NAME') : ""; + // Текст сообщения + $text = [ + $level, + " ", + "```" . mb_substr( "\n" . $message->getText(), 0, 3300) . "```", + " ", + "```" . $message->getStackTrace() . "```", + "🙂 " . $message->getUserIp() . " " . $serverName, + ]; + + $formattedMessage = implode("\n", $text); $formattedMessage = TelegramService::escapeMarkdown($formattedMessage); - $disableNotification = !$hasError; + // Настройка уведомления для сообщений уровня ERROR + $disableNotification = $message->message[1] !== Logger::LEVEL_ERROR; + // Отправка сообщения через TelegramService try { TelegramService::sendErrorToTelegramMessage($formattedMessage, $disableNotification, $isDev); } catch (\Exception $e) { diff --git a/erp24/services/StockStateService.php b/erp24/services/StockStateService.php index 60cff552..87f9c1f2 100644 --- a/erp24/services/StockStateService.php +++ b/erp24/services/StockStateService.php @@ -102,7 +102,7 @@ class StockStateService pp.name, pp.articule, pp.parent_id, - pp.components, + pp.components::jsonb, b.quantity, b.reserv, :now, -- 2.39.5