From 4e0d93ee84275a35effba9d49bb38f015d0d64df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=AC=20=D0=AA?= Date: Tue, 4 Mar 2025 02:23:35 +0400 Subject: [PATCH] a --- .../Reports/TableReport.cs | 71 +++++++++---------- 1 file changed, 35 insertions(+), 36 deletions(-) diff --git a/Academic_Performance/Academic_Performance/Reports/TableReport.cs b/Academic_Performance/Academic_Performance/Reports/TableReport.cs index 151098b..d6a590b 100644 --- a/Academic_Performance/Academic_Performance/Reports/TableReport.cs +++ b/Academic_Performance/Academic_Performance/Reports/TableReport.cs @@ -17,10 +17,10 @@ public class TableReport private readonly ISubjectRepository _subjectRepository; private readonly ITeacherRepository _teacherRepository; private readonly ILogger _logger; - internal static readonly string[] item = ["Преподаватель", "Дата", "Предмет", "Оценка"]; + internal static readonly string[] item = { "Преподаватель", "Дата", "Предмет", "Оценка" }; - public TableReport(IStatementRepository statementRepository,IOrderRepository orderRepository, - ISubjectRepository subjectRepository,ILogger logger, ITeacherRepository teacherRepository) + public TableReport(IStatementRepository statementRepository, IOrderRepository orderRepository, + ISubjectRepository subjectRepository, ILogger logger, ITeacherRepository teacherRepository) { _teacherRepository = teacherRepository ?? throw new ArgumentNullException(nameof(teacherRepository)); _statementRepository = statementRepository ?? throw new ArgumentNullException(nameof(statementRepository)); @@ -29,14 +29,14 @@ public class TableReport _subjectRepository = subjectRepository ?? throw new ArgumentNullException(nameof(subjectRepository)); } - public bool CreateTable(string filePath, int studentId, DateTime startDate, DateTime endDate) + public bool CreateTable(string filePath, int studentId, DateTime startDate, DateTime endDate) { try { new ExcelBuilder(filePath) - .AddHeader("Сводка по успеваемости ", 0,4) + .AddHeader("Сводка по успеваемости ", 0, 4) .AddParagraph("за период", 0) - .AddTable([15,15,15,15], GetData(studentId,startDate, endDate)) + .AddTable(new[] { 24, 20, 20, 20 }, GetData(studentId, startDate, endDate)) .Build(); return true; } @@ -49,42 +49,41 @@ public class TableReport private List GetData(int studentId, DateTime startDate, DateTime endDate) { - var subjects = _subjectRepository - .ReadSubject() - .ToDictionary(s => s.Id, s => s.Name); - var teacher = _teacherRepository - .ReadTeachers() - .ToDictionary(p => p.Id, p => $"{p.Name}"); - // Получаем оценки за диапазон дат для указанного студента - var markss= _statementRepository - .ReadStatement() - .Where(g => g.Date >= startDate && g.Date <= endDate - && g.Mark.Any(sg => sg.StudentId == studentId)) - .Select(g => new - {Date = g.Date, Subject = subjects.TryGetValue(g.SubjectId, out var subject) ? subject : "Неизвестный предмет", - - Value = long.TryParse(g.Mark.First(sg => sg.StudentId == studentId).Value, out var gradeValue) ? gradeValue : 0, - Teacher = teacher.TryGetValue(g.TeacherId, out var prof) ? prof : "Неизвестный преподаватель" - }) + var subjects = _subjectRepository.ReadSubject().ToDictionary(s => s.Id, s => s.Name); + var teachers = _teacherRepository.ReadTeachers().ToDictionary(p => p.Id, p => p.Name); + + var marks = _statementRepository.ReadStatement() + .Where(g => g.Date >= startDate && g.Date <= endDate) + .SelectMany(g => g.Mark.Where(m => m.StudentId == studentId).Select(m => new + { + Date = g.Date, + Subject = subjects.TryGetValue(g.SubjectId, out var subject) ? subject : "Неизвестный предмет", + Value = long.TryParse(m.Value, out var gradeValue) ? gradeValue : 0, + Teacher = teachers.TryGetValue(g.TeacherId, out var teacherName) ? teacherName : "Неизвестный преподаватель" + })) .ToList(); + if (!marks.Any()) + { + _logger.LogWarning("Нет оценок за указанный период для студента с ID: {StudentId}", studentId); + return new List { item }; // Возвращение только заголовков в случае отсутствия оценок + } - var averageGrade = markss.Any() ? markss.Average(g => g.Value) : 0; - // Формируем заголовки и строки для таблицы + var averageGrade = marks.Average(g => g.Value); + var data = marks.Select(g => new string[] + { + g.Teacher, // Преподаватель + g.Date.ToString("dd.MM.yyyy"), // Дата + g.Subject, // Предмет + g.Value.ToString() // Оценка + }).ToList(); + + // Объединяем заголовок и данные return new List { item } - .Union(markss.Select(g => new string[] - { - g.Date.ToString("dd.MM.yyyy"), - g.Subject, - g.Value.ToString(), - g.Teacher - })) + .Union(data) .Union(new[] { - new string[] - { - "Средний балл", averageGrade.ToString("0.00"), "" - } + new string[] { "Средний балл", averageGrade.ToString("0.00"), "", "" } }) .ToList(); }