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 вычисляет общий процент выполнения на основе групп проектов по приоритетам
|
||||
// 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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user