You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

28 lines
2.1 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 学生实验报告六模块同步设计
## 目标
将学生端“实验报告”由旧五模块及其遗留统计字段,迁移为当前教学班的六模块实训报告。报告中的模块成绩、权重、任务完成数和总分必须与教师成绩中心使用同一教学班、任务和 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 评分汇总及停用任务过滤;前端测试验证报告只调用新接口并渲染六模块和任务明细。前后端全量测试及前端生产构建通过。