]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Обработка смены статуса заказа
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Mon, 24 Feb 2025 14:03:35 +0000 (17:03 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Mon, 24 Feb 2025 14:03:35 +0000 (17:03 +0300)
erp24/media/controllers/NotificationController.php

index 600df9484db657dd5ae19e1bc71d978147b93d23..079ec04f20df3e0381e7baa2537639fdde9aed72 100644 (file)
@@ -13,6 +13,7 @@ use yii_app\helpers\File;
 use yii_app\helpers\ImageHelper;
 use yii_app\records\Files;
 use yii_app\records\Images;
+use yii_app\records\MarketplaceOrders;
 use yii_app\records\MatrixErp;
 use yii_app\records\MatrixErpProperty;
 use yii_app\services\FileService;
@@ -96,12 +97,82 @@ class NotificationController extends Controller
                     }
 
                     $result = MarketplaceService::processOrders($orderData);
+                    //TODO - отправка в 1С
                     return $this->asJson([
                         'success' => true,
                         'message' => "ORDER_CREATED событие обработано успешно",
                         'result' => $result
                     ]);
 
+                case 'ORDER_STATUS_UPDATED':
+                    $requiredFields = ['campaignId', 'orderId', 'status', 'substatus', 'updatedAt'];
+                    foreach ($requiredFields as $field) {
+                        if (!isset($data[$field])) {
+                            Yii::$app->response->statusCode = 400;
+                            return $this->asJson([
+                                'error' => [
+                                    'type' => 'WRONG_EVENT_FORMAT',
+                                    'message' => "Отсутствует обязательное поле: {$field}"
+                                ]
+                            ]);
+                        }
+                    }
+
+                    $campaignId = $data['campaignId'];
+                    $orderId = $data['orderId'];
+                    $newStatusCode = $data['status'];
+                    $newSubstatusCode = $data['substatus'];
+
+                    $marketplaceOrder = MarketplaceOrders::find()
+                        ->where(['marketplace_order_id' => (string)$orderId])
+                        ->one();
+
+                    if (!$marketplaceOrder) {
+                        $orderData = MarketplaceService::fetchOrder($campaignId, $orderId);
+                        if (empty($orderData)) {
+                            Yii::$app->response->statusCode = 400;
+                            return $this->asJson([
+                                'error' => [
+                                    'type' => 'WRONG_EVENT_FORMAT',
+                                    'message' => "Не удалось получить заказ с orderId: {$orderId} для кампании: {$campaignId}"
+                                ]
+                            ]);
+                        }
+                        $result = MarketplaceService::processOrders($orderData);
+                        return $this->asJson([
+                            'success' => true,
+                            'message' => "ORDER_STATUS_UPDATED событие обработано успешно (заказ создан)",
+                            'result' => $result
+                        ]);
+                    } else {
+                        //TODO - обработка отдельных статусов
+                        $currentStatusCode = $marketplaceOrder->status ? $marketplaceOrder->status->code : null;
+                        $currentSubstatusCode = $marketplaceOrder->substatus ? $marketplaceOrder->substatus->code : null;
+                        if ($newStatusCode !== $currentStatusCode || $newSubstatusCode !== $currentSubstatusCode) {
+                            $orderData = MarketplaceService::fetchOrder($campaignId, $orderId);
+                            if (empty($orderData)) {
+                                Yii::$app->response->statusCode = 400;
+                                return $this->asJson([
+                                    'error' => [
+                                        'type' => 'WRONG_EVENT_FORMAT',
+                                        'message' => "Не удалось получить заказ с orderId: {$orderId} для кампании: {$campaignId}"
+                                    ]
+                                ]);
+                            }
+                            $result = MarketplaceService::processOrders($orderData);
+                            return $this->asJson([
+                                'success' => true,
+                                'message' => "ORDER_STATUS_UPDATED событие обработано успешно",
+                                'result' => $result
+                            ]);
+                        } else {
+                            return $this->asJson([
+                                'success' => true,
+                                'message' => 'Статус заказа не изменился, обновление не требуется'
+                            ]);
+                        }
+                    }
+
                 default:
                     Yii::info("Неизвестный тип события: {$eventType}");
                     return $this->asJson([