From f7345487b31eb418fc34177006049281355e72f4 Mon Sep 17 00:00:00 2001 From: Vladimir Fomichev Date: Thu, 22 Jan 2026 11:14:45 +0300 Subject: [PATCH] =?utf8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=BF?= =?utf8?q?=D0=BE=20=D0=A3=D1=81=D0=BF=D0=B5=D1=85=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/services/MarketplaceService.php | 12 +++--- erp24/services/OrderControlReportService.php | 43 ++++++-------------- 2 files changed, 19 insertions(+), 36 deletions(-) diff --git a/erp24/services/MarketplaceService.php b/erp24/services/MarketplaceService.php index 0c17313d..f71c967c 100644 --- a/erp24/services/MarketplaceService.php +++ b/erp24/services/MarketplaceService.php @@ -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) { diff --git a/erp24/services/OrderControlReportService.php b/erp24/services/OrderControlReportService.php index 7c7415eb..8e848af0 100644 --- a/erp24/services/OrderControlReportService.php +++ b/erp24/services/OrderControlReportService.php @@ -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 ) - -- РМК-статус НЕ Успех (1С не подтвердила доставку) + -- Нет seller_id ИЛИ нет чека 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; -- 2.39.5