班级查询按“考试场次”合并,显示为“分散至 N 个考场”,不再生成大量重复卡片。[后端实现 (line 416)](E:/jiaowu/src/Jiaowu.Api/Infrastructure/Timetables/TimetableDataService.cs:416)

学生登录后只显示本人座位对应的考场,同时修复混排考场可能带出其他课程的问题。[筛选逻辑 (line 561)](E:/jiaowu/src/Jiaowu.Api/Infrastructure/Timetables/TimetableDataService.cs:561)
多考场卡片提示学生登录查看本人考场及监考教师。[前端展示 (line 1122)](E:/jiaowu/web/src/views/TimetableView.vue:1122)
教室课表、监考教师课表仍按具体考场显示,不受合并影响。
已增加班级合并和学生精准考场回归测试。[测试 (line 183)](E:/jiaowu/tests/Jiaowu.Api.Tests/ExamArrangementServiceTests.cs:183)
This commit is contained in:
2026-08-02 17:09:26 +08:00 Unverified
parent f0f59419d5
commit 8cb9b4f57b
3 changed files with 98 additions and 9 deletions
@@ -151,6 +151,46 @@ public sealed class ExamArrangementServiceTests
Assert.Equal(6, await db.ExamSeats.CountAsync());
Assert.Contains("2个教学班混排至2个考场", result.Message);
Assert.Contains("自动包含同组1个场次", result.Message);
plan = await db.ExamPlans.SingleAsync(x => x.Id == plan.Id);
plan.Status = ExamPlanStatus.Published;
await db.SaveChangesAsync();
db.ChangeTracker.Clear();
var student = await db.Students.AsNoTracking()
.OrderBy(x => x.StudentNumber)
.FirstAsync();
var timetableService = new TimetableDataService(db);
var classTimetable = await timetableService.BuildAsync(
TimetableResourceType.Class,
student.AdministrativeClassId,
seed.Term.Id,
null,
false,
null,
null,
CancellationToken.None);
var studentTimetable = await timetableService.BuildAsync(
TimetableResourceType.Class,
student.AdministrativeClassId,
seed.Term.Id,
null,
false,
student.Id,
new TimetableStudentDto(student.StudentNumber, student.Name),
CancellationToken.None);
var classExam = Assert.Single(classTimetable!.ExamEntries);
Assert.Equal(first.Id, classExam.Id);
Assert.Equal(2, classExam.ExamRoomCount);
Assert.Equal("分散至 2 个考场", classExam.ClassroomName);
Assert.DoesNotContain("监考:", classExam.TeacherNames);
var studentExam = Assert.Single(studentTimetable!.ExamEntries);
Assert.Equal(1, studentExam.ExamRoomCount);
Assert.Contains(
studentExam.ClassroomName,
new[] { seed.LargeClassroom.Name, seed.SmallClassroom.Name });
}
[Fact]