From: Vladimir Fomichev
Date: Thu, 18 Dec 2025 16:38:10 +0000 (+0300)
Subject: ошибки создания товаров заказа и доставки
X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=53c597b1bedba706288605548880b030f119771c;p=erp24_rep%2Fyii-erp24%2F.git
ошибки создания товаров заказа и доставки
---
diff --git a/erp24/controllers/MarketplaceOrdersController.php b/erp24/controllers/MarketplaceOrdersController.php
index e3d7a38c..a4a6c31f 100644
--- a/erp24/controllers/MarketplaceOrdersController.php
+++ b/erp24/controllers/MarketplaceOrdersController.php
@@ -13,6 +13,7 @@ use yii\data\ArrayDataProvider;
use yii\db\Expression;
use yii\db\Query;
use yii\helpers\ArrayHelper;
+use yii\helpers\Json;
use yii_app\helpers\DataHelper;
use yii_app\models\FlowwowOrdersForm;
use yii_app\records\MarketplaceOrderDelivery;
@@ -1074,4 +1075,58 @@ class MarketplaceOrdersController extends Controller
'testResults' => $testResults,
]);
}
+
+ /**
+ * ÐмÑлÑÑÐ¸Ñ Ð¾Ð±ÑабоÑки заказа из JSON (как бÑдÑо полÑÑен ÑеÑез API)
+ * @return string
+ */
+ public function actionTestProcessOrder()
+ {
+ $result = null;
+ $error = null;
+ $orderData = null;
+ $createdOrder = null;
+
+ if (Yii::$app->request->isPost) {
+ $jsonData = Yii::$app->request->post('json_data');
+ $campaignId = Yii::$app->request->post('campaign_id', 109969229);
+
+ try {
+ // ÐекодиÑÑем JSON
+ $data = Json::decode($jsonData);
+
+ // ÐеÑеÑиализÑем в OrderDTO
+ $orderDto = ObjectSerializer::deserialize($data, '\OpenAPI\Client\Model\OrderDTO', []);
+
+ if (!$orderDto) {
+ throw new \Exception('Ðе ÑдалоÑÑ Ð´ÐµÑеÑиализоваÑÑ Ð´Ð°Ð½Ð½Ñе в OrderDTO');
+ }
+
+ // ФоÑмиÑÑем ÑÑÑÑкÑÑÑÑ ÐºÐ°Ðº в fetchOrder
+ $orderData = [$campaignId => [$orderDto]];
+
+ // ÐбÑабаÑÑваем заказ
+ $result = \yii_app\services\MarketplaceService::processOrders($orderData);
+
+ // ÐÑем ÑозданнÑй заказ
+ $createdOrder = MarketplaceOrders::find()
+ ->where(['marketplace_order_id' => (string)$orderDto->getId()])
+ ->with(['items', 'delivery'])
+ ->one();
+
+ Yii::$app->session->setFlash('success', 'Ðаказ ÑÑпеÑно обÑабоÑан!');
+ } catch (\Exception $e) {
+ $error = $e->getMessage();
+ Yii::error("ÐÑибка обÑабоÑки ÑеÑÑового заказа: " . $e->getMessage() . "\n" . $e->getTraceAsString());
+ Yii::$app->session->setFlash('error', 'ÐÑибка: ' . $error);
+ }
+ }
+
+ return $this->render('test-process-order', [
+ 'result' => $result,
+ 'error' => $error,
+ 'orderData' => $orderData,
+ 'createdOrder' => $createdOrder,
+ ]);
+ }
}
diff --git a/erp24/services/MarketplaceService.php b/erp24/services/MarketplaceService.php
index 634e21e9..83c32835 100644
--- a/erp24/services/MarketplaceService.php
+++ b/erp24/services/MarketplaceService.php
@@ -1115,20 +1115,42 @@ class MarketplaceService
}
try {
+ Yii::warning(
+ "fetchOrder: ÐаÑало запÑоÑа к API - campaignId={$campaignId}, orderId={$orderId}",
+ 'marketplace_fetch_order'
+ );
+
$response = $apiInstance->getOrder($campaignId, $orderId, $contentType);
$order = $response->getOrder();
+ if (!$order) {
+ Yii::error("fetchOrder: API веÑнÑло NULL вмеÑÑо заказа - campaignId={$campaignId}, orderId={$orderId}", 'marketplace_fetch_order');
+ return [];
+ }
+
// ÐиагноÑÑика Ð´Ð»Ñ Ð¿ÑовеÑки даннÑÑ
заказа
$itemsCount = $order->getItems() ? count($order->getItems()) : 0;
$hasDelivery = $order->getDelivery() !== null;
Yii::warning(
- "fetchOrder: orderId={$orderId}, campaignId={$campaignId}, items={$itemsCount}, delivery=" . ($hasDelivery ? 'YES' : 'NO'),
+ "fetchOrder SUCCESS: orderId={$orderId}, campaignId={$campaignId}, items={$itemsCount}, delivery=" . ($hasDelivery ? 'YES' : 'NO'),
'marketplace_fetch_order'
);
return [$campaignId => [$order]];
} catch (ApiException $e) {
- Yii::error('ÐÑибка пÑи полÑÑении заказа: ' . $e->getMessage());
+ Yii::error(
+ "fetchOrder ERROR: campaignId={$campaignId}, orderId={$orderId}, " .
+ "code={$e->getCode()}, message={$e->getMessage()}, " .
+ "response=" . $e->getResponseBody(),
+ 'marketplace_fetch_order'
+ );
+ return [];
+ } catch (\Exception $e) {
+ Yii::error(
+ "fetchOrder EXCEPTION: campaignId={$campaignId}, orderId={$orderId}, " .
+ "error={$e->getMessage()}, line={$e->getLine()}, file={$e->getFile()}",
+ 'marketplace_fetch_order'
+ );
return [];
}
}
@@ -1255,7 +1277,17 @@ class MarketplaceService
}
}
+ Yii::warning(
+ "ÐопÑÑка ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ заказа: marketplace_order_id={$marketplaceOrder->marketplace_order_id}, fake={$marketplaceOrder->fake}",
+ 'marketplace_order_creation'
+ );
+
if ($marketplaceOrder->save()) {
+ Yii::warning(
+ "Ðаказ ÑÑпеÑно ÑоÑ
Ñанен, ID={$marketplaceOrder->id}",
+ 'marketplace_order_creation'
+ );
+
self::sendMessageToTelegram($marketplaceOrder->guid, "ÐовÑй заказ из ЯÐ");
$newOrdersCount += 1;
@@ -1279,8 +1311,11 @@ class MarketplaceService
// СоÑ
ÑанÑем даннÑе доÑÑавки
$delivery = $order->getDelivery();
+ $items = $order->getItems();
Yii::warning(
- "ÐовÑй заказ #{$marketplaceOrder->id}: delivery=" . ($delivery ? 'present' : 'NULL') . ", items count=" . count($order->getItems() ?? []),
+ "ÐовÑй заказ #{$marketplaceOrder->id}: delivery=" . ($delivery ? 'present' : 'NULL') .
+ ", items=" . ($items ? count($items) : 'NULL') .
+ ", delivery type=" . ($delivery ? get_class($delivery) : 'N/A'),
'marketplace_order_creation'
);
if ($delivery) {
@@ -1302,6 +1337,10 @@ class MarketplaceService
if ($gps) {
$deliveryModel->latitude = $gps->getLatitude();
$deliveryModel->longitude = $gps->getLongitude();
+ } else {
+ // GPS кооÑдинаÑÑ Ð¾ÑÑÑÑÑÑвÑÑÑ, ÑÑÑанавливаем знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ
+ $deliveryModel->latitude = 0.0;
+ $deliveryModel->longitude = 0.0;
}
}
$shipments = $delivery->getShipments();
@@ -1365,8 +1404,18 @@ class MarketplaceService
// СоÑ
ÑанÑем позиÑии заказа
$items = $order->getItems();
+ Yii::warning(
+ "ÐаÑало ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑоваÑов Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ð·Ð° #{$marketplaceOrder->id}: items=" .
+ ($items ? (is_array($items) ? count($items) : 'not array') : 'NULL') .
+ ", items type=" . ($items ? gettype($items) : 'NULL'),
+ 'marketplace_order_creation'
+ );
+
if (!empty($items)) {
- foreach ($items as $item) {
+ Yii::warning("ТоваÑÑ Ð½Ð°Ð¹Ð´ÐµÐ½Ñ, наÑинаем Ñикл ÑозданиÑ", 'marketplace_order_creation');
+ foreach ($items as $idx => $item) {
+ Yii::warning("Создание ÑоваÑа #{$idx}: offerId={$item->getOfferId()}, name={$item->getOfferName()}", 'marketplace_order_creation');
+
$orderItem = new MarketplaceOrderItems();
$orderItem->order_id = $marketplaceOrder->id;
$orderItem->external_item_id = $item->getId();
@@ -1380,7 +1429,8 @@ class MarketplaceService
$orderItem->vat = $item->getVat();
$orderItem->shop_sku = $item->getShopSku();
$orderItem->subsidy = $item->getSubsidy() ?? 0;
- $orderItem->partner_warehouse_id = $item->getPartnerWarehouseId() ?? '';
+ // ÐÑли partner_warehouse_id оÑÑÑÑÑÑвÑеÑ, ÑÑÑанавливаем знаÑение по ÑмолÑаниÑ
+ $orderItem->partner_warehouse_id = $item->getPartnerWarehouseId() ?? 'N/A';
$orderItem->promos = json_encode($item->getPromos(), JSON_UNESCAPED_UNICODE);
$orderItem->subsidies = json_encode($item->getSubsidies(), JSON_UNESCAPED_UNICODE);
@@ -1395,8 +1445,9 @@ class MarketplaceService
Yii::warning("Ð¢Ð¾Ð²Ð°Ñ ÑÑпеÑно Ñоздан Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ð·Ð° #{$marketplaceOrder->id}: {$orderItem->offer_name}", 'marketplace_order_creation');
}
}
+ Yii::warning("ÐавеÑÑен Ñикл ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑоваÑов Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ð·Ð° #{$marketplaceOrder->id}", 'marketplace_order_creation');
} else {
- Yii::warning("ТоваÑÑ Ð½Ðµ ÑÐ¾Ð·Ð´Ð°Ð½Ñ Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ð·Ð° #{$marketplaceOrder->id}: items is empty", 'marketplace_order_creation');
+ Yii::warning("ТоваÑÑ ÐÐ ÑÐ¾Ð·Ð´Ð°Ð½Ñ Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ð·Ð° #{$marketplaceOrder->id}: items is empty or NULL", 'marketplace_order_creation');
}
// пÑовеÑÑем и ÑÑÑанавливаем ready_to = 1
$baseUrl = "https://partner.market.yandex.ru/order/";
@@ -1489,6 +1540,10 @@ class MarketplaceService
if ($gps) {
$deliveryModel->latitude = $gps->getLatitude();
$deliveryModel->longitude = $gps->getLongitude();
+ } else {
+ // GPS кооÑдинаÑÑ Ð¾ÑÑÑÑÑÑвÑÑÑ, ÑÑÑанавливаем знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ
+ $deliveryModel->latitude = 0.0;
+ $deliveryModel->longitude = 0.0;
}
}
$dates = $delivery->getDates();
@@ -1609,7 +1664,8 @@ class MarketplaceService
$orderItem->vat = $item->getVat();
$orderItem->shop_sku = $item->getShopSku();
$orderItem->subsidy = $item->getSubsidy() ?? 0;
- $orderItem->partner_warehouse_id = $item->getPartnerWarehouseId() ?? '';
+ // ÐÑли partner_warehouse_id оÑÑÑÑÑÑвÑеÑ, ÑÑÑанавливаем знаÑение по ÑмолÑаниÑ
+ $orderItem->partner_warehouse_id = $item->getPartnerWarehouseId() ?? 'N/A';
$orderItem->promos = json_encode($item->getPromos(), JSON_UNESCAPED_UNICODE);
$orderItem->subsidies = json_encode($item->getSubsidies(), JSON_UNESCAPED_UNICODE);
@@ -1637,8 +1693,9 @@ class MarketplaceService
$orderItem->count = $item->getCount();
$orderItem->vat = $item->getVat();
$orderItem->shop_sku = $item->getShopSku();
- $orderItem->subsidy = $item->getSubsidy();
- $orderItem->partner_warehouse_id = $item->getPartnerWarehouseId();
+ $orderItem->subsidy = $item->getSubsidy() ?? 0;
+ // ÐÑли partner_warehouse_id оÑÑÑÑÑÑвÑеÑ, ÑÑÑанавливаем знаÑение по ÑмолÑаниÑ
+ $orderItem->partner_warehouse_id = $item->getPartnerWarehouseId() ?? 'N/A';
$orderItem->promos = json_encode($item->getPromos(), JSON_UNESCAPED_UNICODE);
$orderItem->subsidies = json_encode($item->getSubsidies(), JSON_UNESCAPED_UNICODE);
@@ -1702,8 +1759,9 @@ class MarketplaceService
$orderItem->count = $item->getCount();
$orderItem->vat = $item->getVat();
$orderItem->shop_sku = $item->getShopSku();
- $orderItem->subsidy = $item->getSubsidy();
- $orderItem->partner_warehouse_id = $item->getPartnerWarehouseId();
+ $orderItem->subsidy = $item->getSubsidy() ?? 0;
+ // ÐÑли partner_warehouse_id оÑÑÑÑÑÑвÑеÑ, ÑÑÑанавливаем знаÑение по ÑмолÑаниÑ
+ $orderItem->partner_warehouse_id = $item->getPartnerWarehouseId() ?? 'N/A';
$orderItem->promos = json_encode($item->getPromos(), JSON_UNESCAPED_UNICODE);
$orderItem->subsidies = json_encode($item->getSubsidies(), JSON_UNESCAPED_UNICODE);
@@ -1763,6 +1821,10 @@ class MarketplaceService
if ($gps) {
$deliveryModel->latitude = $gps->getLatitude();
$deliveryModel->longitude = $gps->getLongitude();
+ } else {
+ // GPS кооÑдинаÑÑ Ð¾ÑÑÑÑÑÑвÑÑÑ, ÑÑÑанавливаем знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ
+ $deliveryModel->latitude = 0.0;
+ $deliveryModel->longitude = 0.0;
}
}
$shipments = $delivery->getShipments();
@@ -1876,7 +1938,8 @@ class MarketplaceService
$orderItem->vat = $item->getVat();
$orderItem->shop_sku = $item->getShopSku();
$orderItem->subsidy = $item->getSubsidy() ?? 0;
- $orderItem->partner_warehouse_id = $item->getPartnerWarehouseId() ?? '';
+ // ÐÑли partner_warehouse_id оÑÑÑÑÑÑвÑеÑ, ÑÑÑанавливаем знаÑение по ÑмолÑаниÑ
+ $orderItem->partner_warehouse_id = $item->getPartnerWarehouseId() ?? 'N/A';
$orderItem->promos = json_encode($item->getPromos(), JSON_UNESCAPED_UNICODE);
$orderItem->subsidies = json_encode($item->getSubsidies(), JSON_UNESCAPED_UNICODE);
diff --git a/erp24/views/marketplace-orders/index.php b/erp24/views/marketplace-orders/index.php
index b00baff8..e5953097 100644
--- a/erp24/views/marketplace-orders/index.php
+++ b/erp24/views/marketplace-orders/index.php
@@ -44,6 +44,7 @@ YiiAsset::register($this);
= Html::a('ÐÑовеÑка поÑÑÑ', ['/marketplace-orders/get-flowwow-orders'], ['class' => 'btn btn-success']) ?>
= Html::a('СÑаÑÑÑÑ Ð·Ð°ÐºÐ°Ð·Ð¾Ð² в 1С', ['/crud/marketplace-order1c-statuses/index'], ['class' => 'btn btn-success']) ?>
= Html::a('ÐÑÑаÑки ЯндекÑ', ['/marketplace-orders/yandex-stocks'], ['class' => 'btn btn-success']) ?>
+ = Html::a('𧪠ТеÑÑ Ð¾Ð±ÑабоÑки JSON', ['/marketplace-orders/test-process-order'], ['class' => 'btn btn-warning']) ?>