]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Смена статуса из 1С
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Tue, 25 Mar 2025 12:57:22 +0000 (15:57 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Tue, 25 Mar 2025 12:57:22 +0000 (15:57 +0300)
erp24/api2/controllers/OrdersController.php [new file with mode: 0644]
erp24/records/MarketplaceOrders.php
erp24/services/MarketplaceService.php

diff --git a/erp24/api2/controllers/OrdersController.php b/erp24/api2/controllers/OrdersController.php
new file mode 100644 (file)
index 0000000..8376d84
--- /dev/null
@@ -0,0 +1,85 @@
+<?php
+
+namespace app\controllers;
+
+use app\controllers\BaseController;
+use Exception;
+use Yii;
+use yii\helpers\ArrayHelper;
+use yii\helpers\Json;
+use yii\web\Response;
+use yii_app\records\MarketplaceOrders;
+use yii_app\records\MarketplaceOrderStatusTypes;
+use yii_app\services\LogService;
+use yii_app\services\MarketplaceService;
+
+class OrdersController extends BaseController
+{
+    const OUT_DIR =
+        //"/www/api2/json";
+        "/var/www/erp24/api2/json_orders";
+
+    public function actionChangeStatus()
+    {
+        Yii::$app->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
index 37edb96cc213b2fc57916a59c9efe0e34da6d4c7..3b4f0f8a924943718b38ae211c2aee944a3ae2ae 100644 (file)
@@ -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] ?? [];
+    }
 }
index d176564121cd2bf2a316360e0728e5f3aca50671..29ef61d340b4b8148e8a2db088e8e5c1e577344f 100644 (file)
@@ -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) {