*/
public function calculateSpeciesForecastForProductsWithoutHistory($dateFrom, $filters): array
{
- $t0 = hrtime(true);
// Получение ID видимых магазинов
$storeIds = array_map(fn($store) => $store->id, $this->getVisibleStores());
$year = $date->format('Y');
$result = [];
- $initTime = (hrtime(true) - $t0) / 1e6; // миллисекунды
- Yii::warning( "Init (getVisibleStores + filters): {$initTime} ms\n");
+
foreach ($storeIds as $storeId) {
- $t1 = hrtime(true);
$histResult = StorePlanService::calculateHistoricalShare(
$storeId,
$month,
$subcategory,
$species
);
- $dur = (hrtime(true) - $t1) / 1e6;
- Yii::warning( "calculateHistoricalShare for store {$storeId}: {$dur} ms\n");
$productsWithoutHistory = $histResult['without_history'] ?? [];
if (empty($productsWithoutHistory)) {
}
// ——————— WEIGHTED SALES ————————
- $t2 = hrtime(true);
- $weightedResults = StorePlanService::calculateMedianSalesForProductsWithoutHistory(
+
+ $medianResults = StorePlanService::calculateMedianSalesForProductsWithoutHistoryExtended(
$storeId, $month, $year, $productsWithoutHistory
);
- $dur = (hrtime(true) - $t2) / 1e6;
- Yii::warning("calculateMedianSalesForProductsWithoutHistory for store {$storeId}: {$dur} ms\n");
- if (empty($weightedResults)) {
+ if (empty($medianResults)) {
continue;
}
// ——————— COST CALCULATION ————————
- $t3 = hrtime(true);
+
$costs = StorePlanService::calculateCostForProductsWithoutHistory(
- $storeId, $month, $year, $weightedResults
+ $storeId, $month, $year, $medianResults
);
- $dur = (hrtime(true) - $t3) / 1e6;
- Yii::warning( "calculateCostForProductsWithoutHistory for store {$storeId}: {$dur} ms\n");
if (!empty($costs)) {
$result = array_merge($result, $costs);
}
}
- $totalTime = (hrtime(true) - $t0) / 1e6;
- Yii::warning( "Total calculateSpeciesForecastForProductsWithoutHistory: {$totalTime} ms\n");
-
return $result;
}