From: fomichev Date: Tue, 25 Mar 2025 12:57:22 +0000 (+0300) Subject: Смена статуса из 1С X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=69304adbff87b4cedc7d0bbc0d0358d06e5934e5;p=erp24_rep%2Fyii-erp24%2F.git Смена статуса из 1С --- diff --git a/erp24/api2/controllers/OrdersController.php b/erp24/api2/controllers/OrdersController.php new file mode 100644 index 00000000..8376d840 --- /dev/null +++ b/erp24/api2/controllers/OrdersController.php @@ -0,0 +1,85 @@ +response->format = Response::FORMAT_JSON; + + $request = Yii::$app->request->getRawBody(); + $fl = date('_Y_m_d__H_i_s_'); + + try { + $result = Json::decode($request); + } 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 + ); + $orderGuid = $result['order_id']; + $orderStatus = $result['status']; + + $orderStatus1CCodes = MarketplaceOrders::getStatusCodes($orderStatus); + $statuses = MarketplaceOrderStatusTypes::find() + ->select(['id', 'code']) + ->indexBy('code') + ->asArray() + ->all(); + $statuses = ArrayHelper::map($statuses, 'code', 'id'); + $statusCodes = array_unique(array_keys($statuses)); + $statusId = MarketplaceService::getOrCreateStatus($orderStatus1CCodes[0], $statuses, $statusCodes); + $substatusId = MarketplaceService::getOrCreateStatus($orderStatus1CCodes[1], $statuses, $statusCodes); + $order = MarketplaceOrders::find() + ->where(['guid' => $orderGuid]) + ->one(); + + if ($order && !empty($orderStatus1CCodes)) { + $order->status_id = $statusId; + $order->substatus_id = $substatusId; + if ($order->save()) { + $orderDetails = [ + 'date' => date('Y-m-d H:i:s') + + ]; + MarketplaceService::createOrUpdateStatusHistory($order->id, $statusId, $substatusId, $orderDetails); + } + } + + //MarketplaceService::updateOrderStatus($order->warehouse_id, $order->marketplace_order_id, $orderStatus1CCodes[0], $orderStatus1CCodes[1]); + + $mess["result"] = true; + $mess["message_order"] = "Статус получен"; + $mess["message_order_guid"] = $orderGuid; + $mess["message_status"] = $orderStatus; + 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 + ); + return $this->asJson($mess); + } +} \ No newline at end of file diff --git a/erp24/records/MarketplaceOrders.php b/erp24/records/MarketplaceOrders.php index 37edb96c..3b4f0f8a 100644 --- a/erp24/records/MarketplaceOrders.php +++ b/erp24/records/MarketplaceOrders.php @@ -33,6 +33,35 @@ use Yii; */ class MarketplaceOrders extends \yii\db\ActiveRecord { + const STATUS_CREATED = 1; + const STATUS_CONFIRM = 2; + const STATUS_CANCELLED = 6; + const STATUS_PROCESSING = 7; + const STATUS_READY = 9; + const STATUS_DELIVERED = 10; + const STATUS_ERROR_1C = 8; + + public const STATUSES_LABEL = [ + self::STATUS_CREATED => "Создан", + self::STATUS_CONFIRM => "Одобрен", + self::STATUS_CANCELLED => "Отменен 1С", + self::STATUS_PROCESSING => "В процессе сборки", + self::STATUS_READY => "Готов к отправке", + self::STATUS_DELIVERED => "Доставлен", + self::STATUS_ERROR_1C => "Ошибка в 1С", + ]; + + public const STATUSES_TO_CODE = [ + self::STATUS_CREATED => ["PROCESSING", "STARTED"], + self::STATUS_CONFIRM => ["PROCESSING", "STARTED"], + self::STATUS_CANCELLED => ["CANCELLED", "SHOP_FAILED"], + self::STATUS_PROCESSING => ["PROCESSING", "STARTED"], + self::STATUS_READY => ["PROCESSING", "READY_TO_SHIP"], + self::STATUS_DELIVERED => ["DELIVERED", "DELIVERY_SERVICE_DELIVERED"], + ]; + + + /** * {@inheritdoc} */ @@ -114,4 +143,9 @@ class MarketplaceOrders extends \yii\db\ActiveRecord { return $this->hasOne(MarketplaceOrderStatusTypes::class, ['id' => 'substatus_id']); } + + public static function getStatusCodes(int $status): array + { + return self::STATUSES_TO_CODE[$status] ?? []; + } } diff --git a/erp24/services/MarketplaceService.php b/erp24/services/MarketplaceService.php index d1765641..29ef61d3 100644 --- a/erp24/services/MarketplaceService.php +++ b/erp24/services/MarketplaceService.php @@ -1931,7 +1931,7 @@ class MarketplaceService return $newOrdersCount; } - private static function getOrCreateStatus($statusCode, &$statuses, &$statusCodes) + public static function getOrCreateStatus($statusCode, &$statuses, &$statusCodes) { if (!in_array($statusCode, $statusCodes)) { $newStatus = new MarketplaceOrderStatusTypes(); @@ -1978,7 +1978,7 @@ class MarketplaceService return $marketplaceOrder; } - private static function createOrUpdateStatusHistory($orderId, $statusId, $substatusId, $order) + public static function createOrUpdateStatusHistory($orderId, $statusId, $substatusId, $order) { $statusHistoryRecord = MarketplaceOrderStatusHistory::find()->where(['order_id' => $orderId])->andWhere(['active' => 1])->one(); if (!$statusHistoryRecord) {