]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Модификация метода calculateMedianSalesForProductsWithoutHistoryExtended
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Thu, 29 May 2025 09:59:00 +0000 (12:59 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Thu, 29 May 2025 09:59:00 +0000 (12:59 +0300)
erp24/controllers/CategoryPlanController.php
erp24/services/StorePlanService.php

index d5989dc777df280d2078499a79d80f0804fd3c0b..0947df5f53f5348005a55c6f8eaffd835057a0fb 100644 (file)
@@ -348,7 +348,7 @@ class CategoryPlanController extends Controller {
                         $species
                     );
 
-                    $weightedResults = StorePlanService::calculateWeightedSalesForProductsWithoutHistory(
+                    $weightedResults = StorePlanService::calculateMedianSalesForProductsWithoutHistoryExtended(
                         $storeId,
                         $selectedMonth,
                         $selectedYear,
index 5757b9b27f1c626cadd9fc0372fa45e013a83daf..c732738d9348302a657471a9e6f262b47efbd175 100755 (executable)
@@ -455,7 +455,7 @@ class StorePlanService
 
 
     /**
-     * Ð\9cеÑ\82од Ð²Ñ\8bÑ\87иÑ\81лÑ\8fеÑ\82 Ð²Ð·Ð²ÐµÑ\88енное Ð·Ð½Ð°Ñ\87ение Ð¿Ñ\80одаж Ð´Ð»Ñ\8f Ñ\82оваÑ\80ов Ð±ÐµÐ· Ð¸Ñ\81Ñ\82оÑ\80ии.
+     * Метод вычисляет значение продаж для товаров без истории.
      *
      * @param int    $storeId                Идентификатор магазина.
      * @param string $selectedMonth          Выбранный месяц в формате "mm" (целевой месяц).
@@ -468,54 +468,50 @@ class StorePlanService
      *
      * @return array Возвращает массив, где ключ – GUID товара, а значение – рассчитанное взвешенное значение продаж.
      */
-    public static function calculateWeightedSalesForProductsWithoutHistory($storeId, $selectedMonth, $selectedYear, $productsWithoutHistory)
+    public static function calculateMedianSalesForProductsWithoutHistoryExtended($storeId, $selectedMonth, $selectedYear, $productsWithoutHistory)
     {
-        $t0 = hrtime(true);
         $targetDate = strtotime("{$selectedYear}-{$selectedMonth}-01");
         $periods = self::getPeriods($targetDate, 3);
 
-        $weightedResults = [];
-        $initTime = (hrtime(true) - $t0) / 1e6; // миллисекунды
-        Yii::warning( "Init (periods): {$initTime} ms\n");
+        $medianSalesResults = [];
+
         foreach ($productsWithoutHistory as $product) {
             $guid = $product['guid'];
-            $t1 = hrtime(true);
+
+
             $similarProductIds = self::getSimilarProductIDs($guid);
             if (empty($similarProductIds)) {
-                $weightedResults[$guid] = 0;
+                $medianSalesResults[$guid] = 0;
                 continue;
             }
-            $dur = (hrtime(true) - $t1) / 1e6;
-            Yii::warning( "getSimilarProductIDs for product {$guid} {$storeId}: {$dur} ms\n");
+
             $medianSales = [];
             $salesValuesForEachMonth = [];
-            $t2 = hrtime(true);
+
             foreach ($periods as $periodKey => $monthInfo) {
                 list($median, $salesValues) = self::calculateMedianSalesForPeriod($storeId, $similarProductIds, $monthInfo);
                 $medianSales[$periodKey]             = $median;
                 $salesValuesForEachMonth[$periodKey]   = $salesValues;
             }
-            $dur = (hrtime(true) - $t2) / 1e6;
-            Yii::warning("calculateMedianSalesForPeriod  for product {$guid} {$storeId}: {$dur} ms\n");
 
-            $t3 = hrtime(true);
             $median3 = self::calculateMedianSalesOverPeriods($storeId, $similarProductIds, $periods);
 
-            $weightedResults[$guid] = [
+            $medianSalesResults[$guid] = [
+                'store_id' => $storeId,
+                'category'    => $product['category'],
+                'subcategory' => $product['subcategory'],
+                'species'     => $product['species'],
                 'weightedValue' => $median3,
                 'medianSales'   => $medianSales,
                 'salesValues'   => $salesValuesForEachMonth,
             ];
-            $dur = (hrtime(true) - $t3) / 1e6;
-            Yii::warning( "computeWeightedValue for product {$guid} {$storeId}: {$dur} ms\n");
-        }
 
-        $totalTime = (hrtime(true) - $t0) / 1e6;
-        Yii::warning( "Total  calculateWeightedSalesForProductsWithoutHistory: {$totalTime} ms\n");
+        }
 
-        return $weightedResults;
+        return $medianSalesResults;
     }
 
+
     /**
      * Возвращает среднюю цену $productId для месяца, отстоящего на $offset месяцев
      * от заданного $year-$month, в контексте $storeId.