From 29cf05a3c3a01389281ae001d52bb12f95b3300e Mon Sep 17 00:00:00 2001 From: poignatov Date: Sun, 11 Jan 2026 15:00:20 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D1=80=D0=B0=D1=81=D1=87=D0=B5=D1=82=20=D0=BE?= =?UTF-8?q?=D0=B1=D1=89=D0=B5=D0=B3=D0=BE=20=D0=BF=D1=80=D0=BE=D1=86=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=B0=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20-=20=D0=BE=D1=82=D1=81=D1=83=D1=82=D1=81?= =?UTF-8?q?=D1=82=D0=B2=D1=83=D1=8E=D1=89=D0=B8=D0=B5=20=D0=B3=D1=80=D1=83?= =?UTF-8?q?=D0=BF=D0=BF=D1=8B=20=D0=BF=D1=80=D0=B8=D0=BE=D1=80=D0=B8=D1=82?= =?UTF-8?q?=D0=B5=D1=82=D0=BE=D0=B2=20=D1=81=D1=87=D0=B8=D1=82=D0=B0=D1=8E?= =?UTF-8?q?=D1=82=D1=81=D1=8F=20=D0=BA=D0=B0=D0=BA=20100%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Изменена функция calculateOverallProgress: теперь всегда учитываются 3 группы приоритетов (1, 2, 0) - Если группа отсутствует, она считается как 100% - Общий процент всегда вычисляется как среднее из 3 групп: (группа1 + группа2 + группа0) / 3 - Изменения применяются для API и ежедневных Telegram отчетов - Версия обновлена до 3.8.5 --- VERSION | 2 +- play-life-backend/main.go | 50 +++++++++++++++++++++++--------------- play-life-web/package.json | 2 +- 3 files changed, 33 insertions(+), 21 deletions(-) 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",