Mega_New_Presence/presence_new/Domain/UseCase/GroupAttendanceService.cs
Class_Student 202f236834 new
2024-11-01 10:40:53 +03:00

79 lines
4.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Demo.Data.Repository;
using Demo.domain.Models;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Demo.Domain.UseCase
{
public class GroupAttendanceService
{
private readonly IPresenceRepository _presenceRepository;
private readonly IUserRepository _userRepository; // Добавляем репозиторий пользователей
public GroupAttendanceService(IPresenceRepository presenceRepository, IUserRepository userRepository)
{
_presenceRepository = presenceRepository;
_userRepository = userRepository; // Инициализируем репозиторий пользователей
}
public void DisplayGroupAttendanceInfo(int groupId)
{
var presences = _presenceRepository.GetPresenceByGroup(groupId);
if (presences == null || !presences.Any())
{
Console.WriteLine("Нет данных о посещаемости для группы с ID: " + groupId);
return;
}
// Вычисление количества студентов
var totalStudents = presences.Select(p => p.UserGuid).Distinct().Count(); // Предполагается, что в PresenceLocalEntity есть UserGuid
// Вычисление количества проведенных занятий
var totalSessions = presences.Select(p => p.Date).Distinct().Count();
// Общее количество присутствий
var totalAttendance = presences.Count(p => p.IsAttedance);
// Общий процент посещаемости
double overallAttendancePercentage = totalSessions > 0
? (double)totalAttendance / (totalSessions * totalStudents) * 100
: 0;
Console.WriteLine($"Группа ID: {groupId}");
Console.WriteLine($"Количество студентов: {totalStudents}");
Console.WriteLine($"Количество проведенных занятий: {totalSessions}");
Console.WriteLine($"Общий процент посещаемости: {overallAttendancePercentage:F2}%");
Console.WriteLine("Студенты:");
// Вывод информации по каждому студенту
var studentAttendances = presences
.GroupBy(p => p.UserGuid) // Здесь также нужно использовать UserGuid
.Select(g => new
{
StudentName = GetStudentNameByGuid(g.Key), // Функция для получения имени студента по его GUID
AttendedCount = g.Count(p => p.IsAttedance),
MissedCount = g.Count(p => !p.IsAttedance)
});
foreach (var student in studentAttendances)
{
// Процент посещаемости студента
double attendancePercentage = totalSessions > 0
? (double)student.AttendedCount / totalSessions * 100
: 0;
var attendanceColor = attendancePercentage < 40 ? "\u001b[31m" : "\u001b[0m"; // Красный для низкого процента
Console.WriteLine($"{attendanceColor}{student.StudentName} - Посещено: {student.AttendedCount}, Пропущено: {student.MissedCount}, Процент посещаемости: {attendancePercentage:F2}%\u001b[0m");
}
}
// Метод для получения имени студента по его GUID
private string GetStudentNameByGuid(Guid userGuid)
{
var user = _userRepository.GetAllUsers.FirstOrDefault(u => u.Guid == userGuid);
return user != null ? user.FIO : "Неизвестный студент"; // Возвращаем имя студента или "Неизвестный студент"
}
}
}