From: fomichev Date: Tue, 1 Apr 2025 13:01:01 +0000 (+0300) Subject: Получение массива заказов от 1С X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=1c4a961acdbb03ef508cfe5314454bd53e09e6cf;p=erp24_rep%2Fyii-erp24%2F.git Получение массива заказов от 1С --- diff --git a/erp24/api2/controllers/OrdersController.php b/erp24/api2/controllers/OrdersController.php index 8fd6a9b3..9ecd9072 100644 --- a/erp24/api2/controllers/OrdersController.php +++ b/erp24/api2/controllers/OrdersController.php @@ -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 +}