diff --git a/VERSION b/VERSION index ff313b8..0cbfaed 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.8.4 +3.8.5 diff --git a/play-life-backend/main.go b/play-life-backend/main.go index c821a68..92fdd7c 100644 --- a/play-life-backend/main.go +++ b/play-life-backend/main.go @@ -3897,14 +3897,28 @@ func roundToFourDecimals(val float64) float64 { // calculateOverallProgress вычисляет общий процент выполнения на основе групп проектов по приоритетам // groups - карта приоритетов к спискам calculatedScore проектов // Возвращает указатель на float64 с общим процентом выполнения или nil, если нет данных +// Если какая-то группа отсутствует, она считается как 100% func calculateOverallProgress(groups map[int][]float64) *float64 { - // Находим среднее внутри каждой группы - groupAverages := make([]float64, 0) - for priorityVal, scores := range groups { - if len(scores) > 0 { + // Всего есть 3 группы: приоритет 1, приоритет 2, приоритет 0 + // Вычисляем среднее для каждой группы, если она есть + // Если группы нет, считаем её как 100% + + groupAverages := make(map[int]float64) + + // Обрабатываем все 3 возможных приоритета + priorities := []int{1, 2, 0} + + for _, priorityVal := range priorities { + scores, exists := groups[priorityVal] + + if !exists || len(scores) == 0 { + // Если группы нет, считаем как 100% + groupAverages[priorityVal] = 100.0 + } else { + // Вычисляем среднее для группы var avg float64 - // Для приоритета 1 и 2 - обычное среднее (как было) + // Для приоритета 1 и 2 - обычное среднее if priorityVal == 1 || priorityVal == 2 { sum := 0.0 for _, score := range scores { @@ -3912,7 +3926,7 @@ func calculateOverallProgress(groups map[int][]float64) *float64 { } avg = sum / float64(len(scores)) } else { - // Для проектов без приоритета (priorityVal == 0) - новая формула + // Для проектов без приоритета (priorityVal == 0) - специальная формула projectCount := float64(len(scores)) multiplier := 100.0 / (projectCount * 0.8) @@ -3926,22 +3940,20 @@ func calculateOverallProgress(groups map[int][]float64) *float64 { avg = math.Min(120.0, sum) } - groupAverages = append(groupAverages, avg) + groupAverages[priorityVal] = avg } } - - // Находим среднее между всеми группами - var total *float64 - if len(groupAverages) > 0 { - sum := 0.0 - for _, avg := range groupAverages { - sum += avg - } - overallProgress := sum / float64(len(groupAverages)) - overallProgressRounded := roundToFourDecimals(overallProgress) - total = &overallProgressRounded + + // Находим среднее между всеми тремя группами + sum := 0.0 + for _, priorityVal := range priorities { + sum += groupAverages[priorityVal] } - + + overallProgress := sum / 3.0 // Всегда делим на 3, так как групп всегда 3 + overallProgressRounded := roundToFourDecimals(overallProgress) + total := &overallProgressRounded + return total } diff --git a/play-life-web/package.json b/play-life-web/package.json index cb076c8..287a757 100644 --- a/play-life-web/package.json +++ b/play-life-web/package.json @@ -1,6 +1,6 @@ { "name": "play-life-web", - "version": "3.8.4", + "version": "3.8.5", "type": "module", "scripts": { "dev": "vite",