fix: обновлен расчет общего процента выполнения - отсутствующие группы приоритетов считаются как 100%
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 55s
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 55s
- Изменена функция calculateOverallProgress: теперь всегда учитываются 3 группы приоритетов (1, 2, 0) - Если группа отсутствует, она считается как 100% - Общий процент всегда вычисляется как среднее из 3 групп: (группа1 + группа2 + группа0) / 3 - Изменения применяются для API и ежедневных Telegram отчетов - Версия обновлена до 3.8.5
This commit is contained in:
@@ -3897,14 +3897,28 @@ func roundToFourDecimals(val float64) float64 {
|
|||||||
// calculateOverallProgress вычисляет общий процент выполнения на основе групп проектов по приоритетам
|
// calculateOverallProgress вычисляет общий процент выполнения на основе групп проектов по приоритетам
|
||||||
// groups - карта приоритетов к спискам calculatedScore проектов
|
// groups - карта приоритетов к спискам calculatedScore проектов
|
||||||
// Возвращает указатель на float64 с общим процентом выполнения или nil, если нет данных
|
// Возвращает указатель на float64 с общим процентом выполнения или nil, если нет данных
|
||||||
|
// Если какая-то группа отсутствует, она считается как 100%
|
||||||
func calculateOverallProgress(groups map[int][]float64) *float64 {
|
func calculateOverallProgress(groups map[int][]float64) *float64 {
|
||||||
// Находим среднее внутри каждой группы
|
// Всего есть 3 группы: приоритет 1, приоритет 2, приоритет 0
|
||||||
groupAverages := make([]float64, 0)
|
// Вычисляем среднее для каждой группы, если она есть
|
||||||
for priorityVal, scores := range groups {
|
// Если группы нет, считаем её как 100%
|
||||||
if len(scores) > 0 {
|
|
||||||
|
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
|
var avg float64
|
||||||
|
|
||||||
// Для приоритета 1 и 2 - обычное среднее (как было)
|
// Для приоритета 1 и 2 - обычное среднее
|
||||||
if priorityVal == 1 || priorityVal == 2 {
|
if priorityVal == 1 || priorityVal == 2 {
|
||||||
sum := 0.0
|
sum := 0.0
|
||||||
for _, score := range scores {
|
for _, score := range scores {
|
||||||
@@ -3912,7 +3926,7 @@ func calculateOverallProgress(groups map[int][]float64) *float64 {
|
|||||||
}
|
}
|
||||||
avg = sum / float64(len(scores))
|
avg = sum / float64(len(scores))
|
||||||
} else {
|
} else {
|
||||||
// Для проектов без приоритета (priorityVal == 0) - новая формула
|
// Для проектов без приоритета (priorityVal == 0) - специальная формула
|
||||||
projectCount := float64(len(scores))
|
projectCount := float64(len(scores))
|
||||||
multiplier := 100.0 / (projectCount * 0.8)
|
multiplier := 100.0 / (projectCount * 0.8)
|
||||||
|
|
||||||
@@ -3926,22 +3940,20 @@ func calculateOverallProgress(groups map[int][]float64) *float64 {
|
|||||||
avg = math.Min(120.0, sum)
|
avg = math.Min(120.0, sum)
|
||||||
}
|
}
|
||||||
|
|
||||||
groupAverages = append(groupAverages, avg)
|
groupAverages[priorityVal] = avg
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Находим среднее между всеми группами
|
// Находим среднее между всеми тремя группами
|
||||||
var total *float64
|
sum := 0.0
|
||||||
if len(groupAverages) > 0 {
|
for _, priorityVal := range priorities {
|
||||||
sum := 0.0
|
sum += groupAverages[priorityVal]
|
||||||
for _, avg := range groupAverages {
|
|
||||||
sum += avg
|
|
||||||
}
|
|
||||||
overallProgress := sum / float64(len(groupAverages))
|
|
||||||
overallProgressRounded := roundToFourDecimals(overallProgress)
|
|
||||||
total = &overallProgressRounded
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
overallProgress := sum / 3.0 // Всегда делим на 3, так как групп всегда 3
|
||||||
|
overallProgressRounded := roundToFourDecimals(overallProgress)
|
||||||
|
total := &overallProgressRounded
|
||||||
|
|
||||||
return total
|
return total
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "play-life-web",
|
"name": "play-life-web",
|
||||||
"version": "3.8.4",
|
"version": "3.8.5",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|||||||
Reference in New Issue
Block a user