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()
$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;
$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
+}