实验成绩管理改为紧凑的课程分组视图

This commit is contained in:
2026-08-10 16:57:10 +08:00 Unverified
parent 031459ac80
commit fc326ac16e
3 changed files with 112 additions and 62 deletions
@@ -76,13 +76,25 @@ public sealed class ExperimentGradesController(
item.Teacher!.TeacherNumber.Contains(keyword) ||
item.Teacher.Name.Contains(keyword)));
var total = await source.CountAsync(cancellationToken);
var items = await source
.OrderByDescending(x => x.TeachingTask!.AcademicTerm!.StartDate)
.ThenBy(x => x.TeachingTask!.TaskNumber)
.ThenBy(x => x.Code)
var total = await source.Select(x => x.TeachingTaskId)
.Distinct()
.CountAsync(cancellationToken);
var taskIds = await source
.GroupBy(x => new
{
x.TeachingTaskId,
StartDate = x.TeachingTask!.AcademicTerm!.StartDate,
x.TeachingTask.TaskNumber
})
.OrderByDescending(x => x.Key.StartDate)
.ThenBy(x => x.Key.TaskNumber)
.Skip((page - 1) * pageSize)
.Take(pageSize)
.Select(x => x.Key.TeachingTaskId)
.ToListAsync(cancellationToken);
var projects = await source
.Where(x => taskIds.Contains(x.TeachingTaskId))
.OrderBy(x => x.Code)
.Select(x => new
{
x.Id,
@@ -124,6 +136,32 @@ public sealed class ExperimentGradesController(
}
})
.ToListAsync(cancellationToken);
var order = taskIds.Select((id, index) => new { id, index })
.ToDictionary(x => x.id, x => x.index);
var items = projects.GroupBy(x => x.TeachingTaskId)
.OrderBy(group => order[group.Key])
.Select(group =>
{
var first = group.First();
return new
{
TeachingTaskId = group.Key,
first.TaskNumber,
first.TaskName,
first.AcademicTermId,
first.TermName,
first.CourseCode,
first.CourseName,
first.CollegeName,
first.TeacherNames,
ProjectCount = group.Count(),
SheetCount = group.Count(project => project.Sheet != null),
ScoredCount = group.Sum(project => project.Sheet?.ScoredCount ?? 0),
StudentCount = group.Sum(project => project.Sheet?.StudentCount ?? 0),
Projects = group.ToList()
};
})
.ToList();
return Ok(new
{
Items = items,