From b15e1dd615679d8d213602d97754e3ea5eafe8be Mon Sep 17 00:00:00 2001 From: poignatov Date: Mon, 2 Feb 2026 18:56:19 +0300 Subject: [PATCH] =?UTF-8?q?4.7.0:=20=D0=A3=D0=B2=D0=B5=D0=BB=D0=B8=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=B1=D0=BE=D0=BD=D1=83=D1=81=D1=8B=20?= =?UTF-8?q?=D0=B8=20=D0=BC=D0=BD=D0=BE=D0=B6=D0=B8=D1=82=D0=B5=D0=BB=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VERSION | 2 +- play-life-backend/main.go | 49 +++++++++++++++++++++++--------------- play-life-web/package.json | 2 +- 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/VERSION b/VERSION index 8ac28bf..f6cdf40 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -4.6.1 +4.7.0 diff --git a/play-life-backend/main.go b/play-life-backend/main.go index 6dbd7ac..3a12874 100644 --- a/play-life-backend/main.go +++ b/play-life-backend/main.go @@ -2574,11 +2574,11 @@ func (a *App) getWeeklyStatsHandler(w http.ResponseWriter, r *http.Request) { } // Параметры бонуса в зависимости от priority - var extraBonusLimit float64 = 20 + var extraBonusLimit float64 = 40 if priorityVal == 1 { - extraBonusLimit = 50 + extraBonusLimit = 100 } else if priorityVal == 2 { - extraBonusLimit = 35 + extraBonusLimit = 70 } // Расчет базового прогресса @@ -3021,11 +3021,11 @@ func (a *App) getWeeklyStatsData() (*WeeklyStatsResponse, error) { } // Параметры бонуса в зависимости от priority - var extraBonusLimit float64 = 20 + var extraBonusLimit float64 = 40 if priorityVal == 1 { - extraBonusLimit = 50 + extraBonusLimit = 100 } else if priorityVal == 2 { - extraBonusLimit = 35 + extraBonusLimit = 70 } // Расчет базового прогресса @@ -3167,11 +3167,11 @@ func (a *App) getWeeklyStatsDataForUser(userID int) (*WeeklyStatsResponse, error } // Параметры бонуса в зависимости от priority - var extraBonusLimit float64 = 20 + var extraBonusLimit float64 = 40 if priorityVal == 1 { - extraBonusLimit = 50 + extraBonusLimit = 100 } else if priorityVal == 2 { - extraBonusLimit = 35 + extraBonusLimit = 70 } // Расчет базового прогресса @@ -3874,22 +3874,33 @@ func calculateGroupsProgress(groups map[int][]float64) GroupsProgress { avg = 100.0 } else { // Вычисляем среднее для группы - // Для приоритета 1 и 2 - обычное среднее + // Для всех приоритетов: если calculated_score > 100%, избыточная часть делится на 2 + // Функция для корректировки score: если > 100%, то 100 + (score - 100) / 2 + adjustScore := func(score float64) float64 { + if score > 100.0 { + return 100.0 + (score-100.0)/2.0 + } + return score + } + + // Для приоритета 1 и 2 - обычное среднее с корректировкой if priorityVal == 1 || priorityVal == 2 { sum := 0.0 for _, score := range scores { - sum += score + sum += adjustScore(score) } avg = sum / float64(len(scores)) } else { - // Для проектов без приоритета (priorityVal == 0) - специальная формула + // Для проектов без приоритета (priorityVal == 0) - специальная формула с корректировкой projectCount := float64(len(scores)) multiplier := 100.0 / (projectCount * 0.8) sum := 0.0 for _, score := range scores { + // Применяем корректировку перед использованием в формуле + adjustedScore := adjustScore(score) // score уже в процентах (например, 80.0), переводим в долю (0.8) - scoreAsDecimal := score / 100.0 + scoreAsDecimal := adjustedScore / 100.0 sum += scoreAsDecimal * multiplier } @@ -4633,16 +4644,16 @@ func (a *App) setupWeeklyGoals() error { -- Логика max_score в зависимости от приоритета (только если есть данные) CASE WHEN gm.median_score IS NULL THEN NULL - WHEN p.priority = 1 THEN gm.median_score * 1.5 - WHEN p.priority = 2 THEN gm.median_score * 1.3 - ELSE gm.median_score * 1.2 + WHEN p.priority = 1 THEN gm.median_score * 2.0 + WHEN p.priority = 2 THEN gm.median_score * 1.7 + ELSE gm.median_score * 1.4 END AS max_goal_score, -- max_score (snapshot) заполняется при INSERT, но НЕ обновляется при конфликте CASE WHEN gm.median_score IS NULL THEN NULL - WHEN p.priority = 1 THEN gm.median_score * 1.5 - WHEN p.priority = 2 THEN gm.median_score * 1.3 - ELSE gm.median_score * 1.2 + WHEN p.priority = 1 THEN gm.median_score * 2.0 + WHEN p.priority = 2 THEN gm.median_score * 1.7 + ELSE gm.median_score * 1.4 END AS max_score, p.priority, p.user_id diff --git a/play-life-web/package.json b/play-life-web/package.json index 1a7e562..9f0a154 100644 --- a/play-life-web/package.json +++ b/play-life-web/package.json @@ -1,6 +1,6 @@ { "name": "play-life-web", - "version": "4.6.1", + "version": "4.7.0", "type": "module", "scripts": { "dev": "vite",