]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Получение массива заказов от 1С
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Tue, 1 Apr 2025 13:01:01 +0000 (16:01 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Tue, 1 Apr 2025 13:01:01 +0000 (16:01 +0300)
erp24/api2/controllers/OrdersController.php

index 8fd6a9b3f031693834804dc694201b5768d6cf90..9ecd90720f32a26c85a3fd8589a2b688f8814c23 100644 (file)
@@ -19,66 +19,35 @@ class OrdersController extends BaseController
     const OUT_DIR =
         //"/www/api2/json";
         "/var/www/erp24/api2/json";
+    private static function getPath()
+    {
+        return dirname(__DIR__, 1);
+    }
 
     public function actionChangeStatus()
     {
         Yii::$app->response->format = Response::FORMAT_JSON;
 
-        $request = Yii::$app->request->getRawBody();
         $fl = date('_Y_m_d__H_i_s_');
+        $logFile = self::getPath() . '/changed_orders_' . $fl . '.json';
 
         try {
-            $result = Json::decode($request);
+            $request = Yii::$app->request->getRawBody();
+            $data = Json::decode($request, true);
         } catch (\Exception $ex) {
             return $this->asJson(['error' => ['code' => 400, 'message' => 'Json body invalid']]);
         }
+
         // запись запроса в файл
-        $json = Json::encode($result, JSON_UNESCAPED_UNICODE);
-        file_put_contents(self::OUT_DIR . '/changed_orders_' . $fl . '.json', PHP_EOL . '--' . $result['order_id']);
-        file_put_contents(
-            self::OUT_DIR . '/changed_orders_' . $fl . '.json',
-            ' ' . date("d.m.Y H:i:s", time()) . ' JSON: ' . $json . '  ',
-            FILE_APPEND
-        );
-        $mess = [];
-        $__API_PARAMS = ['order_id', 'status', 'marketplace_id'];
+        file_put_contents($logFile, PHP_EOL . '-- RAW DATA: ' . $request, FILE_APPEND);
 
-        foreach ($__API_PARAMS as $paramName) {
-            if (empty($result[$paramName])) {
-                if ($paramName != 'order_id') {
-                    LogService::apiErrorLog(
-                        json_encode(
-                            ["error_id" => 0.1, "error" => "$paramName is required"],
-                            JSON_UNESCAPED_UNICODE
-                        )
-                    );
-                }
-                if ($paramName != 'status') {
-                    LogService::apiErrorLog(
-                        json_encode(
-                            ["error_id" => 0.1, "error" => "$paramName is required"],
-                            JSON_UNESCAPED_UNICODE
-                        )
-                    );
-                }
-                if ($paramName != 'marketplace_id') {
-                    LogService::apiErrorLog(
-                        json_encode(
-                            ["error_id" => 0.1, "error" => "$paramName is required"],
-                            JSON_UNESCAPED_UNICODE
-                        )
-                    );
-                }
-                return $this->asJson(["error_id" => 0.1, "error" => "$paramName is required"]);
-            }
+        if (!isset($data['order']) || !is_array($data['order'])) {
+            $err = ["error_id" => 0.1, "error" => "Параметр 'order' обязателен и должен быть массивом"];
+            LogService::apiErrorLog(Json::encode($err, JSON_UNESCAPED_UNICODE));
+            return $this->asJson($err);
         }
 
-        $updateResult = null;
-
-        // данные из запроса
-        $marketplaceGuid = $result['marketplace_id'];
-        $orderGuid = $result['order_id'];
-        $orderStatus = $result['status'];
+        $mess = [];
 
         // статусы маркетплейса
         $statuses = MarketplaceOrderStatusTypes::find()
@@ -89,49 +58,76 @@ class OrdersController extends BaseController
         $statuses = ArrayHelper::map($statuses, 'code', 'id');
         $statusCodes = array_unique(array_keys($statuses));
 
-        // обработка статуса от 1С
-        $mp_guids = MarketplaceOrder1cStatuses::guid2id();
-        $marketplaceId = $mp_guids[$marketplaceGuid];
-
-        $status1CRecord = MarketplaceOrder1cStatuses::find()
-            ->where(['marketplace_id' => $marketplaceId])
-            ->andWhere(['status' => $orderStatus])
-            ->one();
-        if (empty($status1CRecord)) {
-            $mess["result"] = 'error';
-            $mess["message_order"] = "Статус не найден";
-            LogService::apiLogs(1, json_encode($mess, JSON_UNESCAPED_UNICODE));
-            file_put_contents(
-                self::OUT_DIR . '/changed_orders_' . $fl . '.json',
-                PHP_EOL . '--' . __LINE__ . ' OK ',
-                FILE_APPEND
-            );
-            Yii::error('Ошибка: такого статуса не существует' . $orderStatus, __METHOD__);
-            return $this->asJson($mess);
-        }
-        $statusId1C = (int)$status1CRecord->status_id;
-        // Получаем статусы МП по статусу 1С
-        $orderStatus1CToCodes = MarketplaceOrders::getStatusCodes($orderStatus);
+        foreach ($data['order'] as $singleOrder) {
+            foreach (['order_id', 'status'] as $param) {
+                if (empty($singleOrder[$param])) {
+                    LogService::apiErrorLog(
+                        Json::encode(["error_id" => 0.1, "error" => "$param is required"], JSON_UNESCAPED_UNICODE)
+                    );
+                    $result = [
+                        "order_id" => isset($singleOrder['order_id']) ? $singleOrder['order_id'] : null,
+                        "result" => 'error',
+                        "message" => "$param is required"
+                    ];
+
+                    $mess[] = $result;
+                    continue 2;
+                }
+            }
 
-        $statusId = MarketplaceService::getOrCreateStatus($orderStatus1CToCodes[0], $statuses, $statusCodes);
-        $substatusId = MarketplaceService::getOrCreateStatus($orderStatus1CToCodes[1], $statuses, $statusCodes);
+            $orderGuid = $singleOrder['order_id'];
+            $orderStatus = $singleOrder['status'];
+            $order = MarketplaceOrders::find()
+                ->where(['guid' => $orderGuid])
+                ->one();
+
+            if (!$order) {
+                $result = [
+                    "order_id" => $orderGuid,
+                    "result" => 'error',
+                    "message" => "Заказ не найден"
+                ];
+                LogService::apiLogs(1, Json::encode($result, JSON_UNESCAPED_UNICODE));
+                $mess[] = $result;
+                continue;
+            }
+            $marketplaceId = $order->marketplace_id;
+
+            $status1CRecord = MarketplaceOrder1cStatuses::find()
+                ->where(['marketplace_id' => $marketplaceId])
+                ->andWhere(['status' => $orderStatus])
+                ->one();
+            if (empty($status1CRecord)) {
+                $mess["result"] = 'error';
+                $mess["message_order"] = "Статус не найден";
+                LogService::apiLogs(1, json_encode($mess, JSON_UNESCAPED_UNICODE));
+                file_put_contents(
+                    self::getPath() . '/changed_orders_' . $fl . '.json',
+                    PHP_EOL . '--' . __LINE__ . ' OK ',
+                    FILE_APPEND
+                );
+                Yii::error('Ошибка: такого статуса не существует' . $orderStatus, __METHOD__);
+                return $this->asJson($mess);
+            }
+            $statusId1C = (int)$status1CRecord->status_id;
 
-         $order = MarketplaceOrders::find()
-             ->where(['guid' => $orderGuid])
-             ->one();
+            // Получаем статусы МП по статусу 1С
+            $orderStatus1CToCodes = MarketplaceOrders::getStatusCodes($orderStatus);
+
+            $statusId = MarketplaceService::getOrCreateStatus($orderStatus1CToCodes[0], $statuses, $statusCodes);
+            $substatusId = MarketplaceService::getOrCreateStatus($orderStatus1CToCodes[1], $statuses, $statusCodes);
 
-        if ($order) {
             if (
-                in_array($result['status'], ['Отказ', 'Собрано']) &&
+                in_array($singleOrder['status'], ['Отказ', 'Собрано']) &&
                 $order->marketplace_id == 2
             ) {
-                $updateResult = MarketplaceService::updateOrderStatus(
-                    $order->warehouse_guid,
-                    $order->marketplace_order_id,
-                    $orderStatus1CToCodes[0],
-                    $orderStatus1CToCodes[1]
-                );
-                $mess["message_status_update"] = $updateResult;
+                /* $updateResult = MarketplaceService::updateOrderStatus(
+                     $order->warehouse_guid,
+                     $order->marketplace_order_id,
+                     $orderStatus1CToCodes[0],
+                     $orderStatus1CToCodes[1]
+                 );
+                 $mess["message_status_update"] = $updateResult;*/
             } else {
                 if (!empty($orderStatus1CToCodes)) {
                     $order->status_id = $statusId;
@@ -141,31 +137,30 @@ class OrdersController extends BaseController
             $order->status_1c = $statusId1C;
 
             if ($order->save()) {
-                $orderDetails = [
+                // Обновляем историю статусов
+                MarketplaceService::createOrUpdateStatusHistory($order->id, $statusId, $substatusId, [
                     'date' => date('Y-m-d H:i:s')
+                ]);
+                $result = [
+                    "order_id" => $orderGuid,
+                    "result" => true,
+                    "message" => "Статус обновлён",
+                    "status" => $orderStatus
                 ];
-
-                MarketplaceService::createOrUpdateStatusHistory($order->id, $statusId, $substatusId, $orderDetails);
-                $mess["result"] = true;
-                $mess["message_order"] = "Статус получен";
-                $mess["message_order_guid"] = $orderGuid;
-                $mess["message_status"] = $orderStatus;
             } else {
-                Yii::error('Ошибка: ' . json_encode($order->getErrors(), JSON_UNESCAPED_UNICODE));
-                $mess["result"] = 'error';
-                $mess["message_order"] = "Ошибка сохранения статуса";
-                $mess["message_order_guid"] = $orderGuid;
-                $mess["message_status"] = $orderStatus;
+                Yii::error('Ошибка сохранения: ' . Json::encode($order->getErrors(), JSON_UNESCAPED_UNICODE));
+                $result = [
+                    "order_id" => $orderGuid,
+                    "result" => 'error',
+                    "message" => "Ошибка при сохранении",
+                    "status" => $orderStatus
+                ];
             }
-        }
+            LogService::apiLogs(1, Json::encode($result, JSON_UNESCAPED_UNICODE));
+            file_put_contents($logFile, PHP_EOL . '--' . __LINE__ . ' Заказ обработан ' . $orderGuid, FILE_APPEND);
 
-
-        LogService::apiLogs(1, json_encode($mess, JSON_UNESCAPED_UNICODE));
-        file_put_contents(
-            self::OUT_DIR . '/changed_orders_' . $fl . '.json',
-            PHP_EOL . '--' . __LINE__ . ' OK ',
-            FILE_APPEND
-        );
+            $mess[] = $result;
+        }
         return $this->asJson($mess);
     }
-}
\ No newline at end of file
+}