章节摸底(20题) → 按知识点顺序学习 → 知识点达标(90%) → 下一个知识点 → 章节全部达标 → 下一章摸底
| 前端传入 | 后端实际处理 | 说明 |
|---|---|---|
| 0 (旧摸底) | 0 → buildChapterDiagnosticParams | 章节摸底(新逻辑) |
| 9 (原摸底) | 0 → buildChapterDiagnosticParams | 章节摸底(新逻辑) |
| 1 (智能组卷) | 8 → buildChapterIntelligentParams | 按知识点顺序学习(新逻辑) |
| 2/3/4/5 | 保持不变 | 原有逻辑不动 |
| paper_type | 含义 |
|---|---|
| 0 | 摸底(包括章节摸底) |
| 1 | 智能组卷 |
| 2 | 知识点组卷 |
| 3 | 教材组卷 |
| 5 | 追练 |
ALTER TABLE papers ADD COLUMN diagnostic_chapter_id INT NULL COMMENT '摸底的章节ID';
| 文件 | 方法 | 用途 |
|---|---|---|
| ExamTypeStrategy.php | buildChapterDiagnosticParams |
章节摸底(新逻辑) |
| ExamTypeStrategy.php | buildChapterIntelligentParams |
按知识点顺序学习(新逻辑) |
| DiagnosticChapterService.php | getChapterKnowledgePointsWithoutExpand |
获取知识点(不扩展子知识点) |
| DiagnosticChapterService.php | getFirstUnmasteredKnowledgePointInOrder |
按顺序找第一个未达标知识点 |
| DiagnosticChapterService.php | hasChapterDiagnostic |
判断章节是否已摸底 |
| StudentKnowledgeMastery.php | allAtLeastSkipNoQuestions |
判断达标(跳过无题知识点) |
| 文件 | 方法 | 修改内容 |
|---|---|---|
| ExamTypeStrategy.php | buildParams |
增加 assembleType 映射逻辑 |
buildDiagnosticParams(原摸底)buildIntelligentAssembleParams(原智能组卷)buildKnowledgePointAssembleParams(知识点组卷)buildTextbookAssembleParams(教材组卷)buildMistakeParams(追练)buildGeneralParams(通用)1. 获取学生当前教材
2. 找第一个未完成摸底的章节:
- 遍历章节,检查 papers 表是否有 paper_type=0 且 diagnostic_chapter_id=章节ID 的记录
- 如果没有,说明这个章节需要摸底
3. 获取该章节所有 section 绑定的知识点(不扩展子知识点)
4. 过滤掉没有题目的知识点
5. 用这些知识点出题(20题)
6. 保存时记录 diagnostic_chapter_id
1. 获取当前应该学习的章节(第一个有未达标知识点的章节)
2. 检查该章节是否已摸底
- 如果没有摸底 → 返回章节摸底参数
3. 获取该章节所有知识点(按 section 顺序)
4. 按顺序遍历,找第一个未达标的知识点(跳过无题知识点)
5. 检查题目数量:
- 如果不够20题,补充下一个未达标知识点
- 最多2个知识点
6. 如果所有知识点都达标 → 返回下一章的摸底参数
1. 遍历章节的所有知识点
2. 检查每个知识点是否有题目
- 没有题目 → 跳过
3. 检查掌握度是否 >= 90%
- 有题但没有掌握度记录 → 视为 0%,未达标
4. 所有有题的知识点都达标 → 返回 true
database/migrations/2026_02_01_000001_add_diagnostic_chapter_id_to_papers_table.phpallAtLeastSkipNoQuestions: 判断达标(跳过无题知识点)getFirstUnmasteredKpCode: 获取第一个未达标的知识点getChapterKnowledgePointsSimple: 获取知识点(不扩展子知识点)hasChapterDiagnostic: 判断章节是否已摸底getFirstUndiagnosedChapter: 获取第一个未摸底的章节getCurrentLearningChapter: 获取当前学习章节getNextChapter: 获取下一个章节filterKpCodesWithQuestions: 过滤有题的知识点getUnmasteredKpCodesInOrder: 按顺序获取未达标知识点buildParams: 增加 assembleType 映射buildChapterDiagnosticParams: 章节摸底buildChapterIntelligentParams: 按知识点顺序学习