try {
$response = $apiInstance->getOrder($campaignId, $orderId, $contentType);
$order = $response->getOrder();
+
+ // Диагностика для проверки данных заказа
+ $itemsCount = $order->getItems() ? count($order->getItems()) : 0;
+ $hasDelivery = $order->getDelivery() !== null;
+ Yii::warning(
+ "fetchOrder: orderId={$orderId}, campaignId={$campaignId}, items={$itemsCount}, delivery=" . ($hasDelivery ? 'YES' : 'NO'),
+ 'marketplace_fetch_order'
+ );
return [$campaignId => [$order]];
} catch (ApiException $e) {
// Сохраняем данные доставки
$delivery = $order->getDelivery();
+ Yii::warning(
+ "Новый заказ #{$marketplaceOrder->id}: delivery=" . ($delivery ? 'present' : 'NULL') . ", items count=" . count($order->getItems() ?? []),
+ 'marketplace_order_creation'
+ );
if ($delivery) {
$deliveryModel = new MarketplaceOrderDelivery();
$deliveryModel->order_id = $marketplaceOrder->id;
}
if (!$deliveryModel->save()) {
Yii::error(
- 'Ошибка сохранения доставки: ' . json_encode(
+ 'Ошибка сохранения доставки для заказа #' . $marketplaceOrder->id . ': ' . json_encode(
$deliveryModel->getErrors(),
JSON_UNESCAPED_UNICODE
)
);
+ } else {
+ Yii::warning("Доставка успешно создана для заказа #{$marketplaceOrder->id}", 'marketplace_order_creation');
}
+ } else {
+ Yii::warning("Доставка не создана для заказа #{$marketplaceOrder->id}: delivery is NULL or empty", 'marketplace_order_creation');
}
// Сохраняем позиции заказа
if (!$orderItem->save()) {
Yii::error(
- 'Ошибка сохранения элемента заказа: ' . json_encode(
+ 'Ошибка сохранения элемента заказа для заказа #' . $marketplaceOrder->id . ': ' . json_encode(
$orderItem->getErrors(),
JSON_UNESCAPED_UNICODE
)
);
+ } else {
+ Yii::warning("Товар успешно создан для заказа #{$marketplaceOrder->id}: {$orderItem->offer_name}", 'marketplace_order_creation');
}
}
+ } else {
+ Yii::warning("Товары не созданы для заказа #{$marketplaceOrder->id}: items is empty", 'marketplace_order_creation');
}
// проверяем и устанавливаем ready_to = 1
$baseUrl = "https://partner.market.yandex.ru/order/";
$marketplaceOrder->substatus_id = (int)$substatusId;
$marketplaceOrder->updated_at = date('Y-m-d H:i:s', strtotime($order->getUpdatedAt()));
$delivery = $order->getDelivery();
- $shipments = $delivery->getShipments();
+
+ // Проверяем и создаем/обновляем доставку
+ $existingDelivery = MarketplaceOrderDelivery::findOne(['order_id' => $marketplaceOrder->id]);
+ if (!$existingDelivery && $delivery) {
+ // Создаем новую доставку
+ $deliveryModel = new MarketplaceOrderDelivery();
+ $deliveryModel->order_id = $marketplaceOrder->id;
+ $deliveryModel->type = $delivery->getType();
+ $deliveryModel->service_name = $delivery->getServiceName();
+ $deliveryModel->partner_type = $delivery->getDeliveryPartnerType();
+
+ $address = $delivery->getAddress();
+ if ($address) {
+ $deliveryModel->country = $address->getCountry();
+ $deliveryModel->postcode = $address->getPostcode();
+ $deliveryModel->city = $address->getCity();
+ $deliveryModel->street = $address->getStreet();
+ $deliveryModel->house = $address->getHouse();
+ $deliveryModel->apartment = $address->getApartment();
+ $gps = $address->getGps();
+ if ($gps) {
+ $deliveryModel->latitude = $gps->getLatitude();
+ $deliveryModel->longitude = $gps->getLongitude();
+ }
+ }
+ $dates = $delivery->getDates();
+ if ($dates) {
+ $deliveryModel->delivery_start = date(
+ 'Y-m-d H:i:s',
+ strtotime($dates->getFromDate() . ' ' . $dates->getFromTime())
+ );
+ $deliveryModel->delivery_end = date(
+ 'Y-m-d H:i:s',
+ strtotime($dates->getToDate() . ' ' . $dates->getToTime())
+ );
+ }
+ $courier = $delivery->getCourier();
+ if ($courier) {
+ $deliveryModel->courier_full_name = $courier->getFullName();
+ $deliveryModel->courier_phone = $courier->getPhone();
+ $deliveryModel->courier_extension = $courier->getPhoneExtension();
+ $deliveryModel->courier_vehicle_number = $courier->getVehicleNumber();
+ $deliveryModel->courier_vehicle_description = $courier->getVehicleDescription();
+ }
+ if (!$deliveryModel->save()) {
+ Yii::error(
+ 'Ошибка сохранения доставки: ' . json_encode(
+ $deliveryModel->getErrors(),
+ JSON_UNESCAPED_UNICODE
+ )
+ );
+ }
+ }
+
+ $shipments = $delivery ? $delivery->getShipments() : null;
if ($shipments) {
foreach ($shipments as $index => $shipment) {
Yii::error("срок доставки: {$index}" . json_encode($shipment, JSON_UNESCAPED_UNICODE));
$existingItems = MarketplaceOrderItems::find()
->where(['order_id' => $marketplaceOrder->id])
->all();
- if (count($existingItems) !== count($newItems)) {
+
+ // Если товаров нет, создаем их
+ if (empty($existingItems) && !empty($newItems)) {
+ foreach ($newItems as $item) {
+ $orderItem = new MarketplaceOrderItems();
+ $orderItem->order_id = $marketplaceOrder->id;
+ $orderItem->external_item_id = $item->getId();
+ $orderItem->offer_id = $item->getOfferId();
+ $orderItem->offer_name = $item->getOfferName();
+ $orderItem->price = $item->getPrice();
+ $orderItem->buyer_price = $item->getBuyerPrice();
+ $orderItem->buyer_price_before_discount = $item->getBuyerPriceBeforeDiscount();
+ $orderItem->price_before_discount = $item->getPriceBeforeDiscount();
+ $orderItem->count = $item->getCount();
+ $orderItem->vat = $item->getVat();
+ $orderItem->shop_sku = $item->getShopSku();
+ $orderItem->subsidy = $item->getSubsidy() ?? 0;
+ $orderItem->partner_warehouse_id = $item->getPartnerWarehouseId() ?? '';
+ $orderItem->promos = json_encode($item->getPromos(), JSON_UNESCAPED_UNICODE);
+ $orderItem->subsidies = json_encode($item->getSubsidies(), JSON_UNESCAPED_UNICODE);
+
+ if (!$orderItem->save()) {
+ Yii::error(
+ 'Ошибка сохранения элемента заказа: ' . json_encode(
+ $orderItem->getErrors(),
+ JSON_UNESCAPED_UNICODE
+ )
+ );
+ }
+ }
+ } elseif (count($existingItems) !== count($newItems)) {
MarketplaceOrderItems::deleteAll(['order_id' => $marketplaceOrder->id]);
foreach ($newItems as $item) {
$orderItem = new MarketplaceOrderItems();
}
}
- if (!$marketplaceOrder->delivery_to && $marketplaceOrder->readyto_1c === 0) {
+ // Проверяем и создаем доставку, если её нет
+ $existingDelivery = MarketplaceOrderDelivery::findOne(['order_id' => $marketplaceOrder->id]);
+ if (!$existingDelivery) {
+ $delivery = $order->getDelivery();
+ if ($delivery) {
+ $deliveryModel = new MarketplaceOrderDelivery();
+ $deliveryModel->order_id = $marketplaceOrder->id;
+ $deliveryModel->type = $delivery->getType();
+ $deliveryModel->service_name = $delivery->getServiceName();
+ $deliveryModel->partner_type = $delivery->getDeliveryPartnerType();
+
+ $address = $delivery->getAddress();
+ if ($address) {
+ $deliveryModel->country = $address->getCountry();
+ $deliveryModel->postcode = $address->getPostcode();
+ $deliveryModel->city = $address->getCity();
+ $deliveryModel->street = $address->getStreet();
+ $deliveryModel->house = $address->getHouse();
+ $deliveryModel->apartment = $address->getApartment();
+ $gps = $address->getGps();
+ if ($gps) {
+ $deliveryModel->latitude = $gps->getLatitude();
+ $deliveryModel->longitude = $gps->getLongitude();
+ }
+ }
+ $shipments = $delivery->getShipments();
+ if ($shipments) {
+ foreach ($shipments as $index => $shipment) {
+ Yii::error("срок доставки: {$index}" . json_encode($shipment, JSON_UNESCAPED_UNICODE));
+ }
+
+ $deliveryDateTo = ($shipments[0])->getShipmentDate() ?? null;
+ $deliveryTimeTo = ($shipments[0])->getShipmentTime() ?? '';
+
+ if ($deliveryDateTo) {
+ $datetimeString = str_replace('-', '.', $deliveryDateTo) . ' ' . $deliveryTimeTo;
+ $timestamp = strtotime($datetimeString);
+
+ if ($timestamp) {
+ $marketplaceOrder->delivery_to = date('Y-m-d H:i:s', $timestamp);
+
+ if (!$marketplaceOrder->save()) {
+ Yii::error('Ошибка сохранения сроков доставки: ' . json_encode($marketplaceOrder->getErrors(), JSON_UNESCAPED_UNICODE));
+ } else {
+ $updatedOrdersCount += 1;
+ }
+ } else {
+ Yii::error('Ошибка преобразования даты и времени: ' . $datetimeString);
+ }
+ } else {
+ Yii::error('Отсутствует shipmentDate у первого элемента shipments');
+ }
+ }
+ $dates = $delivery->getDates();
+ if ($dates) {
+ $deliveryModel->delivery_start = date(
+ 'Y-m-d H:i:s',
+ strtotime($dates->getFromDate() . ' ' . $dates->getFromTime())
+ );
+ $deliveryModel->delivery_end = date(
+ 'Y-m-d H:i:s',
+ strtotime($dates->getToDate() . ' ' . $dates->getToTime())
+ );
+ }
+ $courier = $delivery->getCourier();
+ if ($courier) {
+ $deliveryModel->courier_full_name = $courier->getFullName();
+ $deliveryModel->courier_phone = $courier->getPhone();
+ $deliveryModel->courier_extension = $courier->getPhoneExtension();
+ $deliveryModel->courier_vehicle_number = $courier->getVehicleNumber();
+ $deliveryModel->courier_vehicle_description = $courier->getVehicleDescription();
+ }
+ if (!$deliveryModel->save()) {
+ Yii::error(
+ 'Ошибка сохранения доставки: ' . json_encode(
+ $deliveryModel->getErrors(),
+ JSON_UNESCAPED_UNICODE
+ )
+ );
+ } else {
+ $updatedOrdersCount += 1;
+ }
+ }
+ } elseif (!$marketplaceOrder->delivery_to && $marketplaceOrder->readyto_1c === 0) {
$delivery = $order->getDelivery();
$shipments = $delivery->getShipments();
if ($shipments) {
}
}
}
+
+ // Проверяем и создаем товары, если их нет
+ $existingItems = MarketplaceOrderItems::find()
+ ->where(['order_id' => $marketplaceOrder->id])
+ ->all();
+ if (empty($existingItems)) {
+ $items = $order->getItems();
+ if (!empty($items)) {
+ foreach ($items as $item) {
+ $orderItem = new MarketplaceOrderItems();
+ $orderItem->order_id = $marketplaceOrder->id;
+ $orderItem->external_item_id = $item->getId();
+ $orderItem->offer_id = $item->getOfferId();
+ $orderItem->offer_name = $item->getOfferName();
+ $orderItem->price = $item->getPrice();
+ $orderItem->buyer_price = $item->getBuyerPrice();
+ $orderItem->buyer_price_before_discount = $item->getBuyerPriceBeforeDiscount();
+ $orderItem->price_before_discount = $item->getPriceBeforeDiscount();
+ $orderItem->count = $item->getCount();
+ $orderItem->vat = $item->getVat();
+ $orderItem->shop_sku = $item->getShopSku();
+ $orderItem->subsidy = $item->getSubsidy() ?? 0;
+ $orderItem->partner_warehouse_id = $item->getPartnerWarehouseId() ?? '';
+ $orderItem->promos = json_encode($item->getPromos(), JSON_UNESCAPED_UNICODE);
+ $orderItem->subsidies = json_encode($item->getSubsidies(), JSON_UNESCAPED_UNICODE);
+
+ if (!$orderItem->save()) {
+ Yii::error(
+ 'Ошибка сохранения элемента заказа: ' . json_encode(
+ $orderItem->getErrors(),
+ JSON_UNESCAPED_UNICODE
+ )
+ );
+ } else {
+ $updatedOrdersCount += 1;
+ }
+ }
+ }
+ }
}
self::setReadyMarketplaceOrders($marketplaceOrder);
}
Yii::warning('Не удалось извлечь данные заказа из HTML', __METHOD__);
return [];
} else {
- Yii::info('Успешно распарен заказ №' . $orderNumber, __METHOD__);
+ Yii::warning('Успешно распарен заказ №' . $orderNumber, __METHOD__);
return $order;
}
}
if (!$order->save()) {
Yii::error('Ошибка установки readyto_1c для заказа ID ' . $order->id . ': ' . json_encode($order->getErrors(), JSON_UNESCAPED_UNICODE));
} else {
- Yii::info('Заказ ID ' . $order->id . ' подготовлен к отправке в 1С.');
+ Yii::warning('Заказ ID ' . $order->id . ' подготовлен к отправке в 1С.');
}
}
if (!$order->save()) {
Yii::error('Ошибка установки readyto_1c = 1 у заказа ID ' . $order->id . ': ' . json_encode($order->getErrors(), JSON_UNESCAPED_UNICODE));
} else {
- Yii::info('Заказ ID ' . $order->id . ' автоматически помечен как готовый к отправке в 1C.');
+ Yii::warning('Заказ ID ' . $order->id . ' автоматически помечен как готовый к отправке в 1C.');
}
}
}