From e79cdb67ebfc1d2e5a6e7ae1bb98e1829b6ef04f Mon Sep 17 00:00:00 2001 From: fomichev Date: Mon, 24 Feb 2025 17:03:35 +0300 Subject: [PATCH] =?utf8?q?=D0=9E=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA?= =?utf8?q?=D0=B0=20=D1=81=D0=BC=D0=B5=D0=BD=D1=8B=20=D1=81=D1=82=D0=B0?= =?utf8?q?=D1=82=D1=83=D1=81=D0=B0=20=D0=B7=D0=B0=D0=BA=D0=B0=D0=B7=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../controllers/NotificationController.php | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/erp24/media/controllers/NotificationController.php b/erp24/media/controllers/NotificationController.php index 600df948..079ec04f 100644 --- a/erp24/media/controllers/NotificationController.php +++ b/erp24/media/controllers/NotificationController.php @@ -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([ -- 2.39.5