->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');
}
}
->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');
}
}
->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));
}
->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');
}
}
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));
}
$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) {
* Получает заказы типа "Успех без чека"
*
* Критерий: МП статус = "Выполнен" (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() — логика создания чека
*
// Нулевой 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,
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
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();
'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;