У меня есть эта функция, которая вычисляет «Балансовую стоимость» основных средств, используя данные из таблицы амортизации, Ii работает нормально на локальном хосте, но когда я пытался перейти к производству, я получаю «время ожидания запроса» после долгого времени загрузите, я думаю, что я испортил цикл или что-то в этом роде, и было бы здорово, если бы кто-нибудь предложил оптимизацию кода или взлом, чтобы сделать эту функцию быстрее.
Я пытался ограничить количество записей для цикла, и это сработало, но, к сожалению, у меня есть более 20 000 данных для обработки.
$cat = null;
$total_a = null;
$assets = $this->Depreciation->get_all();
if (!empty($assets)) {
foreach ($assets as $asset) {
$cost = $asset->cost + $asset->add_cost + $asset->adj_cost;
$salve = $asset->salvage_value;
$life = $asset->life;
$life_t = 0;
$counter = 0;
$date1 = date('Y-12-31');
$date2 = $asset->in_service;
$diff = abs(strtotime($date2) - strtotime($date1));
$years = floor($diff / (365 * 60 * 60 * 24));
$months = floor(($diff - $years * 365 * 60 * 60 * 24) / (30 * 60 * 60 * 24));
$in_service_d = date('Y-12-31');
if ($asset->rev > 0) {
$cost = $asset->rev;
}
$dep1 = ($cost - $salve) / $life * ($months / 12);
$dep = ($cost - $salve) / $life;
$total = 0;
$year = 1;
for (; $cost > $salve;) {
if ($year == 1 && $months < 12) {
$life_t++;
$year++;
$cost = $cost - $dep1;
$counter++;
$total = $dep1 + $total;
if($in_service_d == date('Y-12-31')){
$total_a = $total_a + $cost;
}
$in_service_d = date('Y-12-31', strtotime("+12 months", strtotime($in_service_d)));
} elseif ($year != 1) {
$life_t++;
if ($life_t > $life) {
$dep = $dep - $dep1;
}
$cost = $cost - $dep;
$counter++;
$total = $dep + $total;
if($in_service_d == date('Y-12-31')){
$total_a = $total_a + $cost;
}
$in_service_d = date('Y-12-31', strtotime("+12 months", strtotime($in_service_d)));
}
}
}
}
return $total_a;