]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Правки по Успеху
authorVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Thu, 22 Jan 2026 08:14:45 +0000 (11:14 +0300)
committerVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Thu, 22 Jan 2026 08:14:45 +0000 (11:14 +0300)
erp24/services/MarketplaceService.php
erp24/services/OrderControlReportService.php

index 0c17313de58c25a58bf32a1f92fbf768095f9801..f71c967c07a1d78458a80c97cd9ffa83c8d02cbe 100644 (file)
@@ -1278,7 +1278,7 @@ class MarketplaceService
                                 ->asArray()
                                 ->all(), 'id')[0] ?? null;
                             $marketplaceOrder->cancelled_order_source = 'Yandex Market';
-                           // $marketplaceOrder->status_processing_1c = $status1cWithCancelledId;
+                            $marketplaceOrder->status_processing_1c = $status1cWithCancelledId;
                             $marketplaceOrder->cancelled_order_date = date('Y-m-d H:i:s');
                         }
                     }
@@ -1486,7 +1486,7 @@ class MarketplaceService
                                     ->asArray()
                                     ->all(), 'id')[0] ?? null;
                                 $marketplaceOrder->cancelled_order_source = 'Yandex Market';
-                               // $marketplaceOrder->status_processing_1c = $status1cWithCancelledId;
+                                $marketplaceOrder->status_processing_1c = $status1cWithCancelledId;
                                 $marketplaceOrder->cancelled_order_date = date('Y-m-d H:i:s');
                             }
                         }
@@ -1500,7 +1500,7 @@ class MarketplaceService
                             ->andWhere(['marketplace_id' => MarketplaceStore::YANDEX_WAREHOUSE_ID])
                             ->asArray()
                             ->all(), 'id')[0] ?? null;
-                        // $marketplaceOrder->status_processing_1c = $status1cWithDeliveredId;
+                        $marketplaceOrder->status_processing_1c = $status1cWithDeliveredId;
                         if(!$marketplaceOrder->save()) {
                             Yii::error('Не удалось обновить заказ' . json_encode($marketplaceOrder->getErrors(), JSON_UNESCAPED_UNICODE));
                         }
@@ -1798,7 +1798,7 @@ class MarketplaceService
                                     ->asArray()
                                     ->all(), 'id')[0] ?? null;
                                 $marketplaceOrder->cancelled_order_source = 'Yandex Market';
-                               // $marketplaceOrder->status_processing_1c = $status1cWithCancelledId;
+                                $marketplaceOrder->status_processing_1c = $status1cWithCancelledId;
                                 $marketplaceOrder->cancelled_order_date = date('Y-m-d H:i:s');
                             }
                         }
@@ -2386,7 +2386,7 @@ class MarketplaceService
                 if ($statusCode == 'DELIVERED' && $substatusCode == 'DELIVERY_SERVICE_DELIVERED' && $marketplaceOrder) {
                     Yii::error('Заказ доставлен ' . $marketplaceOrder->marketplace_order_id);
                     /* @var $marketplaceOrder MarketplaceOrders */
-                   // $marketplaceOrder->status_processing_1c = $status1cWithDeliveredId;
+                    $marketplaceOrder->status_processing_1c = $status1cWithDeliveredId;
                     if(!$marketplaceOrder->save()) {
                         Yii::error('Не удалось обновить заказ' . json_encode($marketplaceOrder->getErrors(), JSON_UNESCAPED_UNICODE));
                     }
@@ -2789,7 +2789,7 @@ class MarketplaceService
         $marketplaceOrder->cancelled_order_date = date('Y-m-d H:i:s');
 
         if ($status1cWithCancelledId !== null) {
-           // $marketplaceOrder->status_processing_1c = $status1cWithCancelledId;
+            $marketplaceOrder->status_processing_1c = $status1cWithCancelledId;
         }
 
         if ($logError) {
index 7c7415eb622556dde9cd971f858959abe57d015f..8e848af02166495e221b95b232affb8168d2ce7d 100644 (file)
@@ -413,17 +413,17 @@ class OrderControlReportService
      * Получает заказы типа "Успех без чека"
      *
      * Критерий: МП статус = "Выполнен" (DELIVERED или DELIVERY_SERVICE_DELIVERED)
-     *           + РМК статус НЕ "Успех" (successful_order = 1 в marketplace_order_1c_statuses)
+     *           + (seller_id не назначен ИЛИ чек не создан)
      *
      * Бизнес-логика:
      * 1. Заказ получает статус "Выполнен" в маркетплейсе
-     * 2. Для успеха в 1С необходимо: seller_id назначен → чек создан и отправлен → 1С вернула успех
-     * 3. Если любой из этапов не выполнен — статус 1С не будет "Успех"
+     * 2. При получении статуса "Выполнен" от МП, status_processing_1c автоматически
+     *    проставляется в "Успех", поэтому проверка РМК-статуса не имеет смысла
+     * 3. Проблема определяется по отсутствию seller_id или чека
      *
      * Причины попадания в этот отчёт (диагностика):
      * - no_seller_id: продавец не назначен (seller_id пустой или нулевой GUID)
      * - no_check: чек не создан в create_checks
-     * - rmk_not_success: чек создан, но статус 1С ещё не "Успех" (возможно, в процессе)
      *
      * @see MarketplaceService::createCheckForMarketplaceOrder() — логика создания чека
      *
@@ -442,23 +442,7 @@ class OrderControlReportService
         // Нулевой GUID — признак отсутствия продавца
         $emptySellerGuid = '00000000-0000-0000-0000-000000000000';
 
-        // Получаем ID статусов "Успех" из БД
-        $rmkSuccessIds = $this->getRmkStatusSuccess();
-
-        // Формируем плейсхолдеры для IN-условия
-        $rmkSuccessPlaceholders = [];
-        $rmkSuccessParams = [];
-        foreach ($rmkSuccessIds as $index => $id) {
-            $placeholder = ':rmk_success_' . $index;
-            $rmkSuccessPlaceholders[] = $placeholder;
-            $rmkSuccessParams[$placeholder] = $id;
-        }
-        $rmkSuccessInClause = !empty($rmkSuccessPlaceholders)
-            ? implode(', ', $rmkSuccessPlaceholders)
-            : '0'; // fallback если статусов нет
-
-        // Выбираем заказы с МП-статусом "Выполнен", где РМК-статус НЕ "Успех"
-        // Диагностика причины добавляется для информационных целей
+        // Выбираем заказы с МП-статусом "Выполнен", где нет seller_id или нет чека
         $sql = "
             SELECT
                 mo.id,
@@ -484,9 +468,7 @@ class OrderControlReportService
                 CASE
                     WHEN mo.seller_id IS NULL OR mo.seller_id = '' OR mo.seller_id = :empty_seller_guid
                     THEN 'no_seller_id'
-                    WHEN cc.id IS NULL
-                    THEN 'no_check'
-                    ELSE 'rmk_not_success'
+                    ELSE 'no_check'
                 END as issue_reason
             FROM marketplace_orders mo
             LEFT JOIN city_store cs ON cs.id = mo.store_id
@@ -502,21 +484,23 @@ class OrderControlReportService
                   most.code = :delivered
                   OR mosub.code = :delivery_service_delivered
               )
-              -- Ð Ð\9cÐ\9a\81Ñ\82аÑ\82Ñ\83Ñ\81 Ð\9dÐ\95 Ð£Ñ\81пеÑ\85 (1С Ð½Ðµ Ð¿Ð¾Ð´Ñ\82веÑ\80дила Ð´Ð¾Ñ\81Ñ\82авкÑ\83)
+              -- Ð\9dеÑ\82 seller_id Ð\98Ð\9bÐ\98 Ð½ÐµÑ\82 Ñ\87ека
               AND (
-                  mo.status_processing_1c IS NULL
-                  OR mo.status_processing_1c::integer NOT IN ({$rmkSuccessInClause})
+                  mo.seller_id IS NULL
+                  OR mo.seller_id = ''
+                  OR mo.seller_id = :empty_seller_guid
+                  OR cc.id IS NULL
               )
             ORDER BY cs.name ASC, mo.creation_date DESC
         ";
 
-        $params = array_merge([
+        $params = [
             ':start_date' => $startDateStr,
             ':end_date' => $endDateStr,
             ':delivered' => MarketplaceOrderStatusTypes::DELIVERED_CODE,
             ':delivery_service_delivered' => MarketplaceOrderStatusTypes::DELIVERY_SERVICE_DELIVERED_CODE,
             ':empty_seller_guid' => $emptySellerGuid,
-        ], $rmkSuccessParams);
+        ];
 
         $orders = Yii::$app->db->createCommand($sql, $params)->queryAll();
 
@@ -529,7 +513,6 @@ class OrderControlReportService
             'count' => count($issues),
             'no_seller_id' => count(array_filter($orders, fn($o) => $o['issue_reason'] === 'no_seller_id')),
             'no_check' => count(array_filter($orders, fn($o) => $o['issue_reason'] === 'no_check')),
-            'rmk_not_success' => count(array_filter($orders, fn($o) => $o['issue_reason'] === 'rmk_not_success')),
         ]);
 
         return $issues;