|
|
|
|
@ -0,0 +1,27 @@
|
|
|
|
|
# 学生实验报告六模块同步设计
|
|
|
|
|
|
|
|
|
|
## 目标
|
|
|
|
|
|
|
|
|
|
将学生端“实验报告”由旧五模块及其遗留统计字段,迁移为当前教学班的六模块实训报告。报告中的模块成绩、权重、任务完成数和总分必须与教师成绩中心使用同一教学班、任务和 AI 评分口径。
|
|
|
|
|
|
|
|
|
|
## 接口与权限
|
|
|
|
|
|
|
|
|
|
新增学生专用的报告查询接口。接口从 JWT 获取学生身份,不接受 `userId`、`schoolId` 或教学班 ID 来决定查询范围;使用 `StudentTeachingClassResolver.resolveRequired` 获取当前教学班。非学生、未加入教学班、跨学校或无效教学班均返回现有权限/参数错误。
|
|
|
|
|
|
|
|
|
|
接口返回:
|
|
|
|
|
|
|
|
|
|
- 当前教学班名称、班级排名、总分;
|
|
|
|
|
- 六个固定模块的 `moduleName`、`weight`、`score`、`completedTaskCount` 和 `totalTaskCount`;
|
|
|
|
|
- 当前教学班全部已启用实训任务的名称、所属模块、完成状态与 AI 评分,供报告任务明细表展示。
|
|
|
|
|
|
|
|
|
|
## 汇总口径
|
|
|
|
|
|
|
|
|
|
已启用任务使用 `SchoolDefaultTaskService.resolveForTeachingClass` 解析;忽略停用任务及发布标记。每个任务从 `student_training_answer` 读取当前学生、当前教学班的答案与 AI 评分:有 AI 评分即纳入该模块平均分;缺少答案或 AI 评分按 0 分计入已启用任务,已提交任务计入完成数。模块权重读取 `teaching_class_score_weight`,不存在时按 10%、30%、10%、10%、20%、20% 返回默认值。总分为六个模块平均分乘各自权重后的和,保留两位小数。
|
|
|
|
|
|
|
|
|
|
## 前端调整
|
|
|
|
|
|
|
|
|
|
实验报告页改为调用新接口,并动态渲染返回的六模块成绩表和任务明细表。移除依赖旧 `oneScore` 至 `fiveScore`、旧学习时长和旧访问次数接口的三个遗留模块统计区块,避免把五模块数据错误标注为新模块。页面仍显示学生基本信息、总分和排名。
|
|
|
|
|
|
|
|
|
|
## 验证
|
|
|
|
|
|
|
|
|
|
后端单元/控制器测试覆盖 JWT 范围、六模块默认权重、AI 评分汇总及停用任务过滤;前端测试验证报告只调用新接口并渲染六模块和任务明细。前后端全量测试及前端生产构建通过。
|