]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
fix(ERP-33): cast components::jsonb + TelegramTarget multiline fix
authorAleksey Filippov <Aleksey.Filippov@erp-flowers.ru>
Tue, 24 Mar 2026 13:36:36 +0000 (16:36 +0300)
committerAleksey Filippov <Aleksey.Filippov@erp-flowers.ru>
Tue, 24 Mar 2026 13:36:36 +0000 (16:36 +0300)
1. StockStateService: pp.components::jsonb cast — products_1c хранит
   components как text, stock_state ожидает JSONB
2. TelegramTarget: экранировать \n при записи в error_tracking.log —
   многострочные ошибки ломали формат файла и спамили stderr

erp24/log/TelegramTarget.php
erp24/services/StockStateService.php

index 0683bd4d7fc23b4508f9387f66af4a6ef383ea64..8018f470cd9e20a73bb0cc908835240af63b62c7 100644 (file)
@@ -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) {
index 60cff552ca8d8e37044370e23c14a7a92fd3559c..87f9c1f270dd68a24c3e15679b8f25d222d5a1ec 100644 (file)
@@ -102,7 +102,7 @@ class StockStateService
                     pp.name,
                     pp.articule,
                     pp.parent_id,
-                    pp.components,
+                    pp.components::jsonb,
                     b.quantity,
                     b.reserv,
                     :now,