]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Правки по ревью
authorVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Tue, 27 Jan 2026 09:17:24 +0000 (12:17 +0300)
committerVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Tue, 27 Jan 2026 09:17:24 +0000 (12:17 +0300)
erp24/api2/controllers/DataController.php
erp24/config/console.php
erp24/config/params.php
erp24/config/web.php
erp24/services/MarketplaceService.php
erp24/services/OrderControlReportService.php
erp24/services/UploadService.php
erp24/tests/unit/services/OrderControlReportServiceNotificationTest.php

index 05aee52c8ed972ac8bd30e0b3e91b3d1c6218572..a21d306963fa319575ad8e5384f36465b38e063c 100644 (file)
@@ -1605,27 +1605,15 @@ class DataController extends BaseController
             }
             if (in_array($statusId1C->status_id, $statuses1cWithCancelledId)) {
                 $marketplaceOrder->cancelled_order_source = '1c';
-                $marketplaceOrder->cancelled_order_date = date('Y-m-d H:m:s');
+                $marketplaceOrder->cancelled_order_date = date('Y-m-d H:i:s');
             }
 
-            $incomingSellerId = $mpOrder['seller_id'] ?? null;
-            $emptyGuid = '00000000-0000-0000-0000-000000000000';
-            $isSellerIdEmpty = empty($incomingSellerId) || $incomingSellerId === $emptyGuid;
-            $isCheckGuidEmpty = empty($marketplaceOrder->check_guid);
-            $successfulOrderIds = MarketplaceOrder1cStatuses::getSuccessfulOrderIds();
-
-            // Не устанавливаем статус "Успех" без seller_id или без check_guid
-            if (in_array($statusId1C->id, $successfulOrderIds) && ($isSellerIdEmpty || $isCheckGuidEmpty)) {
-                Yii::warning(
-                    "Статус 'Успех' (ID: {$statusId1C->id}) без seller_id или check_guid для заказа {$mpOrder['id']}. " .
-                    "seller_id: " . ($incomingSellerId ?? 'null') . ", check_guid: " . ($marketplaceOrder->check_guid ?? 'null'),
-                    'marketplace-status'
-                );
-            } else {
+            // Проверяем, можно ли установить статус "Успех" (seller_id и check_guid должны быть заполнены)
+            if (MarketplaceService::canSetSuccessStatus($statusId1C, $mpOrder, $marketplaceOrder)) {
                 $marketplaceOrder->status_processing_1c = $statusId1C->id;
             }
 
-            $marketplaceOrder->seller_id = $isSellerIdEmpty ? null : $incomingSellerId;
+            $marketplaceOrder->seller_id = MarketplaceService::normalizeSellerId($mpOrder['seller_id'] ?? null);
             $marketplaceOrder->number_1c = $mpOrder['number'] ?? null;
 
 
index e5a0fd277581a3859882c5fe562fa80bbb9f4c03..05410b6f2fe452fceb57b731b8ef1f4c899ddc39 100755 (executable)
@@ -66,7 +66,7 @@ $config = [
                 'dsn' => sprintf(
                     '%s://%s:%s@%s:%d',
                     getenv('MAIL_SCHEME') ?: 'smtps',
-                    rawurlencode(getenv('MAIL_USERNAME') ?: 'flow@bazacvetov24.ru'),
+                    rawurlencode(getenv('MAIL_USERNAME') ?: 'noreply@localhost'),
                     rawurlencode(getenv('MAIL_PASSWORD') ?: ''),
                     getenv('MAIL_HOST') ?: 'smtp.yandex.ru',
                     (int)(getenv('MAIL_PORT') ?: 465)
index 8775208b2e196fba6aebe494ad365b140653836b..cd1836fbc1e49ea57e1dd3732eafefda3a39f0fa 100644 (file)
@@ -40,8 +40,8 @@ return [
         'telegram_max_message_length' => 4000,
         // Telegram: chat_id канала (получить через @userinfobot или API после вступления бота в канал)
         // Канал по ТЗ: https://t.me/+wHh_lW83AvVlYWNi
-        'telegram_chat_id_dev' => getenv('TELEGRAM_ORDER_CONTROL_CHAT_ID_DEV') ?: '-1001861631125',
-        'telegram_chat_id_prod' => getenv('TELEGRAM_ORDER_CONTROL_CHAT_ID_PROD') ?: '4886272326',
+        'telegram_chat_id_dev' => getenv('TELEGRAM_ORDER_CONTROL_CHAT_ID_DEV') ?: '',
+        'telegram_chat_id_prod' => getenv('TELEGRAM_ORDER_CONTROL_CHAT_ID_PROD') ?: '',
         // Email получатели по ТЗ
         'email_recipients_test' => array_filter(explode(',', getenv('ORDER_CONTROL_EMAIL_RECIPIENTS_TEST') ?: 'vladimir.fomichev@erp-flowers.ru,aleksey.filippov@erp-flowers.ru')),
         'email_recipients' => array_filter(explode(',', getenv('ORDER_CONTROL_EMAIL_RECIPIENTS') ?: 'ekaterina.geldak@bazacvetov24.ru,irina.rogacheva@bazacvetov24.ru,alena.chelyshkina@bazacvetov24.ru')),
index 24c2c0ead7fe01ceee3db5e49b9e9d39b2e6fa9e..1db2044395e09be225bb4eef3120fafeea253ed9 100644 (file)
@@ -79,7 +79,7 @@ $config = [
                 'dsn' => sprintf(
                     '%s://%s:%s@%s:%d',
                     getenv('MAIL_SCHEME') ?: 'smtps',
-                    rawurlencode(getenv('MAIL_USERNAME') ?: 'flow@bazacvetov24.ru'),
+                    rawurlencode(getenv('MAIL_USERNAME') ?: 'noreply@localhost'),
                     rawurlencode(getenv('MAIL_PASSWORD') ?: ''),
                     getenv('MAIL_HOST') ?: 'smtp.yandex.ru',
                     (int)(getenv('MAIL_PORT') ?: 465)
index 68880aefd60f7e8842f71ed28ea6e71da428af24..8760b59d3c512583d4d48f1f0d0c7c800fd1e629 100644 (file)
@@ -3260,5 +3260,63 @@ class MarketplaceService
         return false;
     }
 
+    /**
+     * Проверяет, можно ли установить статус "Успех" для заказа маркетплейса
+     *
+     * Статус "Успех" не должен устанавливаться, если:
+     * - seller_id отсутствует, пустой или содержит нулевой GUID
+     * - check_guid заказа отсутствует
+     *
+     * @param MarketplaceOrder1cStatuses $statusId1C Статус 1С, который пытаемся установить
+     * @param array $mpOrder Данные заказа из 1С (должен содержать ключ 'seller_id')
+     * @param MarketplaceOrders $marketplaceOrder Запись заказа маркетплейса
+     * @return bool true — статус можно устанавливать, false — заблокирован (seller_id/check_guid отсутствует)
+     */
+    public static function canSetSuccessStatus(
+        MarketplaceOrder1cStatuses $statusId1C,
+        array $mpOrder,
+        MarketplaceOrders $marketplaceOrder
+    ): bool {
+        $emptyGuid = '00000000-0000-0000-0000-000000000000';
+        $successfulOrderIds = MarketplaceOrder1cStatuses::getSuccessfulOrderIds();
+
+        if (!in_array($statusId1C->id, $successfulOrderIds)) {
+            return true;
+        }
+
+        $incomingSellerId = $mpOrder['seller_id'] ?? null;
+        $isSellerIdEmpty = empty($incomingSellerId) || $incomingSellerId === $emptyGuid;
+        $isCheckGuidEmpty = empty($marketplaceOrder->check_guid);
 
+        if ($isSellerIdEmpty || $isCheckGuidEmpty) {
+            Yii::warning(
+                "Статус 'Успех' (ID: {$statusId1C->id}) без seller_id или check_guid для заказа {$mpOrder['id']}. " .
+                "seller_id: " . ($incomingSellerId ?? 'null') . ", check_guid: " . ($marketplaceOrder->check_guid ?? 'null'),
+                'marketplace-status'
+            );
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Нормализует seller_id из данных 1С
+     *
+     * Возвращает null если seller_id пустой или содержит нулевой GUID,
+     * иначе возвращает оригинальное значение.
+     *
+     * @param string|null $sellerId Значение seller_id из данных 1С
+     * @return string|null Нормализованный seller_id или null
+     */
+    public static function normalizeSellerId(?string $sellerId): ?string
+    {
+        $emptyGuid = '00000000-0000-0000-0000-000000000000';
+
+        if (empty($sellerId) || $sellerId === $emptyGuid) {
+            return null;
+        }
+
+        return $sellerId;
+    }
 }
index 72726c806f44d56814ec193f576750c6fa64c3b3..967b8e780ef0dfd9649fd61b015d2fbcc25a31e4 100644 (file)
@@ -66,7 +66,7 @@ class OrderControlReportService
     /**\r
      * Режим асинхронной отправки: использовать Job-очередь вместо блокирующего sleep()\r
      */\r
-    private bool $asyncMode = true;\r
+    private bool $asyncMode = false;\r
 \r
     /**\r
      * Уникальный идентификатор отчёта (для логирования и отслеживания Job-ов)\r
@@ -1310,7 +1310,7 @@ class OrderControlReportService
                     ->setHtmlBody($html);\r
 \r
                 // Устанавливаем отправителя, если настроен\r
-                $fromEmail = getenv('MAIL_USERNAME') ?: 'flow@bazacvetov24.ru';\r
+                $fromEmail = getenv('MAIL_USERNAME') ?: 'noreply@localhost';\r
                 $message->setFrom([$fromEmail => 'ERP24 Контроль МП']);\r
 \r
                 $sent = $message->send();\r
@@ -1359,7 +1359,7 @@ class OrderControlReportService
     private function sendToEmailAsync(string $html, array $recipients): bool\r
     {\r
         $subject = $this->config['email_subject'] ?? 'Контроль статусов заказов МП';\r
-        $fromEmail = getenv('MAIL_USERNAME') ?: 'flow@bazacvetov24.ru';\r
+        $fromEmail = getenv('MAIL_USERNAME') ?: 'noreply@localhost';\r
 \r
         // Формируем DSN для Symfony Mailer\r
         $mailerDsn = $this->buildMailerDsn();\r
index f827e4c5733f999188f464b1030f204561c2ccc3..44c76f239c3d8be639b479d71a5949360e561422 100644 (file)
@@ -2372,27 +2372,15 @@ class UploadService {
             }
             if (in_array($statusId1C->status_id, $statuses1cWithCancelledId)) {
                 $marketplaceOrder->cancelled_order_source = '1c';
-                $marketplaceOrder->cancelled_order_date = date('Y-m-d H:m:s');
+                $marketplaceOrder->cancelled_order_date = date('Y-m-d H:i:s');
             }
 
-            $incomingSellerId = $mpOrder['seller_id'] ?? null;
-            $emptyGuid = '00000000-0000-0000-0000-000000000000';
-            $isSellerIdEmpty = empty($incomingSellerId) || $incomingSellerId === $emptyGuid;
-            $isCheckGuidEmpty = empty($marketplaceOrder->check_guid);
-            $successfulOrderIds = MarketplaceOrder1cStatuses::getSuccessfulOrderIds();
-
-            // Не устанавливаем статус "Успех" без seller_id или без check_guid
-            if (in_array($statusId1C->id, $successfulOrderIds) && ($isSellerIdEmpty || $isCheckGuidEmpty)) {
-                Yii::warning(
-                    "Статус 'Успех' (ID: {$statusId1C->id}) без seller_id или check_guid для заказа {$mpOrder['id']}. " .
-                    "seller_id: " . ($incomingSellerId ?? 'null') . ", check_guid: " . ($marketplaceOrder->check_guid ?? 'null'),
-                    'marketplace-status'
-                );
-            } else {
+            // Проверяем, можно ли установить статус "Успех" (seller_id и check_guid должны быть заполнены)
+            if (MarketplaceService::canSetSuccessStatus($statusId1C, $mpOrder, $marketplaceOrder)) {
                 $marketplaceOrder->status_processing_1c = $statusId1C->id;
             }
 
-            $marketplaceOrder->seller_id = $isSellerIdEmpty ? null : $incomingSellerId;
+            $marketplaceOrder->seller_id = MarketplaceService::normalizeSellerId($mpOrder['seller_id'] ?? null);
             $marketplaceOrder->number_1c = $mpOrder['number'] ?? null;
 
 
index 96c7dcd74db33e9f356eafcc2a97c5c17d2a20f9..20308bd1ab0ab2c77a7bff9725fc02ec8e3f7fbb 100644 (file)
@@ -514,10 +514,10 @@ class OrderControlReportServiceNotificationTest extends Unit
     public function testEmailSenderFromConfiguration(): void
     {
         // Из кода OrderControlReportService::sendToEmail():
-        // $fromEmail = getenv('MAIL_USERNAME') ?: 'flow@bazacvetov24.ru';
+        // $fromEmail = getenv('MAIL_USERNAME') ?: 'noreply@localhost';
         // $message->setFrom([$fromEmail => 'ERP24 Контроль МП']);
         
-        $expectedDefaultSender = 'flow@bazacvetov24.ru';
+        $expectedDefaultSender = 'noreply@localhost';
         $expectedSenderName = 'ERP24 Контроль МП';
         
         $this->assertNotEmpty($expectedDefaultSender);
@@ -596,7 +596,7 @@ class OrderControlReportServiceNotificationTest extends Unit
         // $message->setFrom([$fromEmail => 'ERP24 Контроль МП']);
         
         $expectedSubject = 'Контроль статусов заказов МП';
-        $expectedFromEmail = 'flow@bazacvetov24.ru';
+        $expectedFromEmail = 'noreply@localhost';
         $expectedFromName = 'ERP24 Контроль МП';
         $expectedRecipients = ['test@example.com'];
         
@@ -644,7 +644,7 @@ class OrderControlReportServiceNotificationTest extends Unit
         $recipients = $recipientsMethod->invoke($this->service);
         
         // Получаем информацию об отправителе Email
-        $fromEmail = getenv('MAIL_USERNAME') ?: 'flow@bazacvetov24.ru';
+        $fromEmail = getenv('MAIL_USERNAME') ?: 'noreply@localhost';
         $fromName = 'ERP24 Контроль МП';
         
         // Определяем окружение