]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Правки фида и чистка кода
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Tue, 12 Nov 2024 14:00:53 +0000 (17:00 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Tue, 12 Nov 2024 14:00:53 +0000 (17:00 +0300)
erp24/services/MarketplaceService.php

index 6aeefa2b49a2331685150cb059a9f637c4cc56f8..bb9aff04a9ced8eb79c4ad68b55f0bcc461fb459 100644 (file)
@@ -19,47 +19,47 @@ use yii_app\records\ProductsClass;
 class MarketplaceService
 {
 
-
+   // Порядок основных категорий (Цветы, Живые растения) не менять, добавлять в конец массива
     private const CATEGORIES_WITH_SUBCATEGORIES = [
         "Цветы" => [
-            "Монобукеты",
-            "Авторские букеты",
-            "Цветы в коробке",
-            "Цветы в корзине",
-            "Букеты невесты",
-            "Композиции из цветов",
-            "Мягкие игрушки",
-            "Подарочные наборы",
-            "Мишки из роз",
-            "Открытки",
-            "Стабилизированные цветы",
-            "Букеты из сухоцветов",
-            "Искусственные цветы",
-            "Цветы в ящиках",
-            "Другое",
-            "Цветы поштучно",
-            "Траурные цветы",
-            "Букеты из мыла",
-            "Цветы для интерьера",
+            1 => "Монобукеты",
+            2 => "Авторские букеты",
+            3 => "Цветы в коробке",
+            4 => "Цветы в корзине",
+            5 => "Букеты невесты",
+            6 => "Композиции из цветов",
+            7 => "Мягкие игрушки",
+            8 => "Подарочные наборы",
+            9 => "Мишки из роз",
+            10 => "Открытки",
+            11 => "Стабилизированные цветы",
+            12 => "Букеты из сухоцветов",
+            13 => "Искусственные цветы",
+            14 => "Цветы в ящиках",
+            15 => "Другое",
+            16 => "Цветы поштучно",
+            17 => "Траурные цветы",
+            18 => "Букеты из мыла",
+            19 => "Цветы для интерьера",
         ],
         "Живые растения" => [
-            "Цветы в горшках",
-            "Флорариумы",
-            "Суккуленты, кактусы",
-            "Бонсаи",
-            "Пальмы и деревья",
-            "Левитирующие растения",
-            "Саженцы и рассада",
-            "Фитокартины",
-            "Семена",
-            "Другое",
-            "Кашпо и горшки для цветов",
-            "Наборы для выращивания",
-            "Грунты и удобрения",
-            "Аксессуары для комнатных растений",
-            "Спатифиллумы",
-            "Замиокулькасы",
-            "Антуриумы"
+            1 => "Цветы в горшках",
+            2 => "Флорариумы",
+            3 => "Суккуленты, кактусы",
+            4 => "Бонсаи",
+            5 => "Пальмы и деревья",
+            6 => "Левитирующие растения",
+            7 => "Саженцы и рассада",
+            8 => "Фитокартины",
+            9 => "Семена",
+            10 => "Другое",
+            11 => "Кашпо и горшки для цветов",
+            12 => "Наборы для выращивания",
+            13 => "Грунты и удобрения",
+            14 => "Аксессуары для комнатных растений",
+            15 => "Спатифиллумы",
+            16 => "Замиокулькасы",
+            17 => "Антуриумы",
         ]
     ];
 
@@ -86,11 +86,11 @@ class MarketplaceService
 
         $productsGuidsIds = array_column($productsGuids, 'id');
 
-        //var_dump( $productsGuidsIds);
+
         // 2. Получение цен на букеты
-        //$prices = ArrayHelper::map(Prices::findAll(['product_id' => ArrayHelper::getColumn($productsGuids, 'id')]), 'product_id', 'price');
+        $prices = ArrayHelper::map(Prices::findAll(['product_id' => ArrayHelper::getColumn($productsGuids, 'id')]), 'product_id', 'price');
 
-        $allPrices = Prices::findAll(['product_id' => $productsGuidsIds]);
+       /* $allPrices = Prices::findAll(['product_id' => $productsGuidsIds]);
 
         if (empty($allPrices)) {
             Yii::warning('Не найдено цен для GUID.');
@@ -105,9 +105,9 @@ class MarketplaceService
             } elseif (!is_scalar($productId)) {
                 Yii::warning('Invalid productId type: ' . gettype($productId));
             }
-        }
+        }*/
+
 
-        //var_dump($prices);
 
         // 3. Получение состава букетов
         $bouquetComposition = [];
@@ -126,7 +126,7 @@ class MarketplaceService
             }
         }
         $componentsGuids = array_unique($componentsGuids);
-        //var_dump($componentsGuids);
+
         // 4. Проверка остатков
 
         $marketplaceStores = array_column(MarketplaceStore::findAll(['warehouse_id' => $marketId]), null, 'guid');
@@ -145,7 +145,7 @@ class MarketplaceService
             $balance2Dim[$balance['store_id']][$balance['product_id']] = $balance['quantity'];
             $balanceStoreIds[] = $balance['store_id'];
         }
-        //var_dump( $balanceStoreIds );
+
         $balanceStoreIds = array_unique($balanceStoreIds);
 
         foreach ($bouquetComposition as $guid => $products) {
@@ -175,11 +175,11 @@ class MarketplaceService
                 $stocks[$guid] = ['count' => $bouquetCount, 'store' => $store];
             }
         }
-        //var_dump(ArrayHelper::getColumn($productsGuids, 'id'));
+
         // 5. Получение приоритетов
         $priorities = MarketplacePriority::find()
             ->where(['guid' => ArrayHelper::getColumn($productsGuids, 'id')])->indexBy('guid')->asArray()->all();
-        //var_dump($priorities);
+
         // 6. Массив для хранения гуидов, которые можно отправить
         $availableGuids = [];
 
@@ -213,7 +213,7 @@ class MarketplaceService
             }
 
         }
-       // var_dump($availableGuids);
+
         $distribution = [];
 
         foreach ($availableGuids as $product) {
@@ -230,7 +230,7 @@ class MarketplaceService
             $koefRemain = $priority['reminder_koef'];
 
             $totalBouquets = intval($stock['count'] / $koefRemain); // С учетом коэффициента
-         //   echo "<pre>"; var_dump($availableGuids); var_dump($totalBouquets); var_dump($stock); die;
+
             if ($totalBouquets >= 2) {
                 // Равномерное распределение
                 foreach ($marketplaceStores as $store) {
@@ -256,7 +256,7 @@ class MarketplaceService
         }
       //  var_dump($distribution);
 
-        return Json::encode($distribution);
+        return $distribution;
     }
 
 
@@ -305,19 +305,17 @@ class MarketplaceService
             $price = MarketplaceService::getProductPrice($product->id);
 
 
-          /*  if ($price == 0) {
+            if ($price == 0) {
                 $message = "У товара {$product->id} отсутствует цена и он будет исключен из фида.";
                 Yii::error($message, __METHOD__);
-
-
-                InfoLogService::setInfoLog(
+              InfoLogService::setInfoLog(
                     __FILE__,
                     __LINE__,
                     $message,
                     'Zero price error'
                 );
                 continue;
-            }*/
+            }
 
             $components = json_decode($product->components, true);
             $composition = [];
@@ -359,21 +357,10 @@ class MarketplaceService
     }
 
 
-    public static function getProductsInfoForFeed(int $warehouseGuid, $storeData)
+    public static function getProductsInfoForFeed(int $warehouseGuid, array $storeData)
     {
 
 
-        if (is_string($storeData)) {
-            $storeData = json_decode($storeData, true);
-
-
-            if (json_last_error() !== JSON_ERROR_NONE) {
-                Yii::error('Невалидный JSON в storeData: ' . json_last_error_msg(), __METHOD__);
-                return [];
-            }
-        }
-
-
         if (!is_array($storeData)) {
             Yii::error('Invalid data format for storeData; expected array.', __METHOD__);
             return [];
@@ -420,7 +407,7 @@ class MarketplaceService
 
             $price = MarketplaceService::getProductPrice($product->id);
 
-            /*  if ($price == 0) {
+              if ($price == 0) {
                 $message = "У товара {$product->id} отсутствует цена и он будет исключен из фида.";
                 Yii::error($message, __METHOD__);
 
@@ -432,7 +419,7 @@ class MarketplaceService
                     'Zero price error'
                 );
                 continue;
-            }*/
+            }
 
             $components = json_decode($product->components, true);
             $composition = [];
@@ -463,7 +450,7 @@ class MarketplaceService
                 'weight' => MarketplaceService::getProductWeight($product->id),
                 'minorder' => MarketplaceService::getProductMinOrder($product->id),
                 'composition' => $composition,
-                'available' => MarketplaceService::getProductAvailability($product->id),
+                'available' => MarketplaceService::getProductAvailability($availableQty),
                 'category_id' => MarketplaceService::getProductCategory($product->id),
                 'category_name' => $properties['flowwowSubcategory'],
                 'params' => MarketplaceService::getProductParams($product->id),
@@ -528,42 +515,48 @@ class MarketplaceService
 
             // Добавление цены и валюты
             $offer->addChild('price', $product['price']);
-            $offer->addChild('oldPrice', $product['oldprice']);
+      //    $offer->addChild('oldPrice', $product['oldprice']);
             $offer->addChild('currencyId', 'RUB');
             $offer->addChild('categoryId', $product['category_id']);
 
             // Добавление доступности доставки
             $offer->addChild('delivery', 'true');
 
+            // Название продукта
+            $offer->addChild('name', $product['name']);
+
             // Описание продукта
             if (!empty($product['description'])) {
                 $offer->addChild('description', $product['description']);
             }
 
             // Добавление веса и количества
-            $offer->addChild('weight', $product['weight']);
-            $offer->addChild('qty', $product['qty']);
+      //    $offer->addChild('weight', $product['weight']);
+
+            if (!self::CATEGORIES_WITH_SUBCATEGORIES[0]) {
+                $offer->addChild('qty', $product['qty']);
+            }
+
 
             // $offer->addChild('amount', $product['amount']);
-            //   $offer->addChild('cost', $product['amount']);
+
 
             foreach ($product['composition'] as $component) {
                 $consist = $offer->addChild('consist', $component['quantity']);
                 $consist->addAttribute('name', $component['name']);
                 $consist->addAttribute('unit', $component['unit']);
-                //   $consist->addAttribute('cost', 12);
+
             }
 
             // Добавление параметров
-            if (!empty($product['params'])) {
+           /* if (!empty($product['params'])) {
                 foreach ($product['params'] as $paramName => $paramValue) {
                     $param = $offer->addChild('param', $paramValue);
                     $param->addAttribute('name', $paramName);
                 }
-            }
+            }*/
+
 
-            // Название продукта
-            $offer->addChild('name', $product['name']);
 
             // Добавление изображений продукта
             if (!empty($product['pictures'])) {
@@ -628,7 +621,7 @@ class MarketplaceService
             ->one();
 
         if (!$product) {
-            return null; // Вернуть null, если продукт не найден
+            return null;
         }
 
         return $product->description;
@@ -644,6 +637,14 @@ class MarketplaceService
             ->one();
 
         if (!$product) {
+            $message = "У товара {$product-> guid} отсутствует запись в таблице свойств.";
+            Yii::error($message, __METHOD__);
+            InfoLogService::setInfoLog(
+                __FILE__,
+                __LINE__,
+                $message,
+                'No MatrixErpProperty'
+            );
             return null;
         }
 
@@ -655,25 +656,42 @@ class MarketplaceService
         $categories = self::CATEGORIES_WITH_SUBCATEGORIES;
 
         if (!array_key_exists($category, $categories)) {
+
+            $message = "У категории {$category} отсутствует запись в таблице свойств.";
+            Yii::error($message, __METHOD__);
+            InfoLogService::setInfoLog(
+                __FILE__,
+                __LINE__,
+                $message,
+                'No CATEGORIES'
+            );
             return null;
         }
 
         $categoryIndex = array_search($category, array_keys($categories)) + 1;
-        $subcategoryIndex = array_search($subcategory, $categories[$category]) + 1;
+
+        $subcategoryIndex = array_search($subcategory, $categories[$category]);
 
         if ($subcategoryIndex === false) {
+            $message = "У подкатегории {$subcategoryIndex} отсутствует запись в таблице свойств.";
+            Yii::error($message, __METHOD__);
+            InfoLogService::setInfoLog(
+                __FILE__,
+                __LINE__,
+                $message,
+                'No subcategoryIndex'
+            );
             return null;
         }
 
-
         return (string)$categoryIndex . (string)$subcategoryIndex;
     }
 
     private static function getProductMinOrder($productId) {
         return 1;
     }
-    private static function getProductAvailability($productId) {
-        return true;
+    private static function getProductAvailability($availableQty) {
+        return $availableQty > 0;
     }
 
     private static function getProductMaterial($productId)