forked from hangshuo652/aurak
14 KiB
14 KiB
AuraK 人才评测系统代码整合性检查报告
文档状态: ✅ 已完成修复 创建日期: 2026-05-14 版本: 1.1 检查日期: 2026-05-14 修复日期: 2026-05-14
一、检查背景
本次代码整合性检查从各角色使用者视角出发,对题目生成、测试、评估全流程进行系统性的审查。涵盖:
- 用户故事与功能矩阵
- API 路由与参数传递
- 业务流与关系链
- 特殊场景与边界情况
- 前后端集成度
二、角色与用户故事
2.1 角色定义
| 角色 | 说明 |
|---|---|
| 普通用户 (User) | 被评估者,参与测评答题 |
| 管理员 (Admin) | 系统管理,全权限 |
| 审核员 (Reviewer) | 题目/题库审核 |
| 租户管理员 (Tenant Admin) | 租户内管理 |
2.2 用户故事矩阵
普通用户
| 编号 | 用户故事 | API 端点 | 状态 |
|---|---|---|---|
| US-01 | 开始评估 | POST /assessment/start | ✅ |
| US-02 | 回答问题 | POST /assessment/:id/answer | ✅ |
| US-03 | 追问回答 | POST /assessment/:id/answer | ✅ |
| US-04 | 查看历史(最新3条) | GET /assessment/history | ✅ |
| US-05 | 查看最终报告 | GET /assessment/:id/state | ✅ |
| US-06 | 下载证书 | GET /assessment/:id/certificate | ✅ |
| US-07 | 导出Excel报告 | GET /assessment/:id/export/excel | ✅ |
| US-08 | 导出PDF报告 | GET /assessment/:id/export/pdf | ✅ |
| US-09 | 时间检查 | GET /assessment/:id/time-check | ✅ |
| US-10 | 下一题计时 | POST /assessment/:id/next-question | ✅ |
管理员
| 编号 | 用户故事 | API 端点 | 状态 |
|---|---|---|---|
| AM-01 | 创建模板 | POST /assessment/templates | ✅ |
| AM-02 | 编辑模板 | PUT /assessment/templates/:id | ✅ |
| AM-03 | 删除模板 | DELETE /assessment/templates/:id | ✅ |
| AM-04 | 创建题库 | POST /question-banks | ✅ |
| AM-05 | 编辑题库 | PUT /question-banks/:id | ✅ |
| AM-06 | 删除题库 | DELETE /question-banks/:id | ✅ |
| AM-07 | AI生成题目 | POST /question-banks/:bankId/generate | ✅ |
| AM-08 | 添加题目 | POST /question-banks/:bankId/items | ✅ |
| AM-09 | 编辑题目 | PUT /question-banks/:bankId/items/:id | ✅ |
| AM-10 | 删除题目 | DELETE /question-banks/:bankId/items/:id | ✅ |
| AM-11 | 提交审核 | PUT /question-banks/:id/submit | ✅ |
| AM-12 | 审核题库 | PUT /question-banks/:id/review | ✅ |
| AM-13 | 发布题库 | PUT /question-banks/:id/publish | ✅ |
| AM-14 | 批量审核题目 | POST /question-banks/:bankId/items/batch-review | ✅ |
| AM-15 | 审核评估 | PUT /assessment/:id/review | ✅ |
| AM-16 | 删除评估 | DELETE /assessment/:id | ✅ |
| AM-17 | 查看统计 | GET /assessment/stats | ✅ |
| AM-18 | 查看雷达图 | GET /assessment/stats/radar | ✅ |
| AM-19 | 查看趋势图 | GET /assessment/stats/trend | ✅ |
| AM-20 | 验证证书 | GET /assessment/certificate/verify/:id | ✅ |
| AM-21 | 公开证书信息 | GET /assessment/certificate/public/:id | ✅ |
审核员
| 编号 | 用户故事 | API 端点 | 状态 |
|---|---|---|---|
| RV-01 | 审核题库 | PUT /question-banks/:id/review | ✅ |
| RV-02 | 批量审核题目 | POST /question-banks/:bankId/items/batch-review | ✅ |
三、发现的问题清单
3.1 高优先级问题
| 编号 | 问题描述 | 位置 | 类型 | 修复建议 |
|---|---|---|---|---|
| P1-01 | 两个 Get('history') 路由冲突,会导致第一个被覆盖 |
assessment.controller.ts:109, :159 | 路由冲突 | 删除或重命名其中一个 |
| P1-02 | 前端缺少多个API调用方法 | web/services/assessmentService.ts | 前端集成 | 添加缺失的API方法 |
| P1-03 | 前端缺少题库/模板服务 | web/services/ | 前端集成 | 新增 QuestionBankService, TemplateService |
3.2 中优先级问题
| 编号 | 问题描述 | 位置 | 类型 | 修复建议 |
|---|---|---|---|---|
| P2-01 | QuestionBank.status 字段无默认值 | question-bank.entity.ts:53 | Entity配置 | 添加 default: QuestionBankStatus.DRAFT |
| P2-02 | 状态前置检查缺失 | question-bank.service.ts | 业务逻辑 | 审核/发布/提交前检查当前状态 |
| P2-03 | 缺少强制结束评估功能 | assessment.controller.ts | 功能缺失 | 添加 POST /assessment/:id/force-end |
3.3 低优先级问题
| 编号 | 问题描述 | 位置 | 类型 | 修复建议 |
|---|---|---|---|---|
| P3-01 | @Put 未导入 |
assessment.controller.ts:224 | 导入缺失 | 在 import 中添加 Put |
| P3-02 | 缺少操作审计日志 | 整体设计 | 架构设计 | 可选:添加审计日志表 |
| P3-03 | 批量操作功能缺失 | assessment.service.ts | 功能缺失 | 可选:批量删除/导出 |
| P3-04 | 无事务/并发控制 | 整体设计 | 架构设计 | 可选:后续优化 |
四、特殊场景检查
4.1 考核过程特殊场景
| 场景 | 状态 | 说明 |
|---|---|---|
| 时间超时处理 | ✅ | checkTimeLimits, isTotalTimeout/isQuestionTimeout |
| 中断恢复 | ✅ | interruptAfter + MemorySaver |
| 追问场景 | ✅ | shouldFollowUp 逻辑 |
| 网络中断恢复 | ⚠️ | 依赖LangGraph MemorySaver,无重连机制 |
| 并发答题 | ⚠️ | 无分布式锁,可能冲突 |
| 中途放弃 | ✅ | 用户可删除自己的session |
4.2 管理员特殊场景
| 场景 | 状态 | 说明 |
|---|---|---|
| 强制结束评估 | ❌ | 无此功能 |
| 批量删除评估 | ❌ | 无批量删除API |
| 批量导出数据 | ❌ | 无批量导出 |
| 强制重置分数 | ⚠️ | 需通过 review 接口手动调整 |
4.3 业务规则验证
| 规则 | 状态 | 说明 |
|---|---|---|
| 只能审核已提交的题库 | ⚠️ | 无状态前置检查 |
| 只能发布已审核通过的 | ⚠️ | 无状态前置检查 |
| 只能在评估进行中回答 | ⚠️ | 无状态前置检查 |
| 只能在评估完成后生成证书 | ✅ | 已检查 |
| 只能删除自己的评估(非admin) | ✅ | 已实现 |
五、API 路由检查
5.1 后端路由清单
| 端点 | 方法 | 功能 | 状态 |
|---|---|---|---|
| /assessment/start | POST | 开始评估 | ✅ |
| /assessment/:id/answer | POST | 回答问题 | ✅ |
| /assessment/:id/state | GET | 获取状态 | ✅ |
| /assessment/:id/certificate | GET | 获取证书 | ✅ |
| /assessment/:id/review | PUT | 审核评估 | ✅ |
| /assessment/:id/time-check | GET | 时间检查 | ✅ |
| /assessment/:id/next-question | POST | 下一题计时 | ✅ |
| /assessment/:id/export/excel | GET | 导出Excel | ✅ |
| /assessment/:id/export/pdf | GET | 导出PDF | ✅ |
| /assessment/stats | GET | 统计数据 | ✅ |
| /assessment/stats/radar | GET | 雷达图数据 | ✅ |
| /assessment/stats/trend | GET | 趋势图数据 | ✅ |
| /assessment/history | GET | 用户历史 | ⚠️ 冲突 |
| /assessment/certificate/verify/:id | GET | 验证证书 | ✅ |
| /assessment/certificate/public/:id | GET | 公开证书 | ✅ |
| /assessment/templates | POST/GET | 模板CRUD | ✅ |
| /question-banks | POST/GET | 题库CRUD | ✅ |
| /question-banks/:id/submit | PUT | 提交审核 | ✅ |
| /question-banks/:id/review | PUT | 审核题库 | ✅ |
| /question-banks/:id/publish | PUT | 发布题库 | ✅ |
| /question-banks/:bankId/items | CRUD | 题目CRUD | ✅ |
| /question-banks/:bankId/generate | POST | AI生成题目 | ✅ |
| /question-banks/:bankId/items/batch-review | POST | 批量审核 | ✅ |
六、数据关系链
6.1 Entity 关系图
AssessmentTemplate (1) ←→ (N) AssessmentSession
↑
│
↓
QuestionBank (1) ←→ (N) QuestionBankItem
│
↓
AssessmentSession (1) ←→ (N) AssessmentQuestion
│
↓
AssessmentQuestion (1) ←→ (N) AssessmentAnswer
│
↓
AssessmentSession (1) ←→ (1) AssessmentCertificate
6.2 字段继承关系
| 源 | 目标 | 字段 |
|---|---|---|
| AssessmentTemplate | AssessmentSession | name, keywords, questionCount, difficultyConfig, weightConfig, passingScore, totalTimeLimit, perQuestionTimeLimit |
| TemplateService | startSession | templateId → templateId |
| question-bank.service | startSession | bankId → questions |
七、前后端集成检查
7.1 前端缺失的 API 方法
| 后端API | 前端需要的方法 |
|---|---|
| GET /assessment/:id/certificate | getCertificate() |
| PUT /assessment/:id/review | reviewAssessment() |
| GET /assessment/stats | getStats() |
| GET /assessment/stats/radar | getRadarStats() |
| GET /assessment/stats/trend | getTrendStats() |
| GET /assessment/:id/export/excel | exportExcel() |
| GET /assessment/:id/export/pdf | exportPdf() |
| GET /assessment/:id/time-check | checkTimeLimits() |
| POST /assessment/:id/next-question | startNextQuestion() |
| POST /question-banks/* | questionBankService (缺失) |
| POST /assessment/templates/* | templateService (缺失) |
八、修复优先级与计划
立即修复 (P0)
- P1-01: 修复路由冲突 - 删除或重命名第109行的 Get('history')
- P1-02: 补全前端 assessmentService.ts 缺失的 API 方法
- P1-03: 新增前端题库/模板服务
短期修复 (P1)
- P2-01: QuestionBank.status 添加默认值
- P2-02: 添加状态前置检查逻辑
- P2-03: 添加强制结束评估功能
后续优化 (P2)
- P3-01: 修复 Put 导入
- P3-02: 审计日志 (可选)
- P3-03: 批量操作 (可选)
- P3-04: 事务控制 (可选)
九、版本信息
| 版本 | 日期 | 说明 |
|---|---|---|
| 1.0 | 2026-05-14 | 初始版本,涵盖代码整合性检查 |
| 1.1 | 2026-05-14 | 修复路由冲突、前后端集成等问题 |
十、修复记录
2026-05-14 修复内容
| ID | 问题 | 修复文件 | 修复内容 |
|---|---|---|---|
| R1 | 路由冲突 | assessment.controller.ts | 删除第109行 Get() 方法 |
| R2 | Put 导入缺失 | assessment.controller.ts | 添加 Put 到 import 解构 |
| R3 | Req 导入缺失 | assessment.controller.ts | 添加 Req 到 import 解构 |
| R4 | ForbiddenException 缺失 | assessment.controller.ts | 添加 ForbiddenException 导入 |
| S1 | publish 状态检查缺失 | question-bank.service.ts | 添加 PUBLISHED/REJECTED 状态检查 |
| M1 | QuestionBank status 默认值 | question-bank.entity.ts | 添加 default: DRAFT |
| M2 | 强制结束评估功能 | assessment.service.ts | 添加 forceEndAssessment 方法 |
| M3 | 强制结束端点 | assessment.controller.ts | 添加 POST :id/force-end |
| F1 | 前端 API 方法缺失 | web/services/assessmentService.ts | 添加所有缺失的 API 方法 |
十一、修复后验证
11.1 路由清单 (修复后)
POST /assessment/start - 开始评估
POST /assessment/:id/answer - 回答问题
GET /assessment/:id/state - 获取状态
DELETE /assessment/:id - 删除评估
GET /assessment/:id/certificate - 获取证书
GET /assessment/certificate/verify/:certificateId - 验证证书
GET /assessment/certificate/public/:sessionId - 公开证书
GET /assessment/history - 用户历史 (最新3条)
GET /assessment/stats - 统计数据
GET /assessment/stats/radar - 雷达图数据
GET /assessment/stats/trend - 趋势图数据
PUT /assessment/:id/review - 审核评估
GET /assessment/:id/time-check - 时间检查
POST /assessment/:id/next-question - 下一题计时
POST /assessment/:id/force-end - 强制结束 (admin)
GET /assessment/:id/export/excel - 导出Excel
GET /assessment/:id/export/pdf - 导出PDF
11.2 参数传递链验证
| 功能 | Controller 参数 | Service 参数 | 状态 |
|---|---|---|---|
| startSession | knowledgeBaseId?, language?, templateId? | userId, kbId, tenantId, language, templateId | ✅ |
| submitAnswer | answer, language | sessionId, userId, answer, language | ✅ |
| review | newScore, comment | sessionId, newScore, comment, reviewerId, tenantId | ✅ |
| forceEnd | sessionId | sessionId | ✅ |
11.3 状态检查验证
| 操作 | 前置检查 | 状态 |
|---|---|---|
| submitForReview | DRAFT | ✅ |
| review | PENDING_REVIEW | ✅ |
| publish | PUBLISHED/REJECTED | ✅ 已修复 |
| reviewAssessment | COMPLETED | ✅ |
| forceEnd | 无限制 | ✅ |
十二、前端画面验证修复
12.1 AssessmentView (主评估界面) 修复
| 功能 | 修复前 | 修复后 | 状态 |
|---|---|---|---|
| 查看证书 | 未实现 | 添加 getCertificate 调用 | ✅ |
| 导出PDF报告 | 按钮无功能 | 添加 exportPdf 调用 | ✅ |
| 导出Excel报告 | 未实现 | 添加 exportExcel 调用 | ✅ |
| 时间显示 | 未实现 | 添加 checkTimeLimits 定期调用 | ✅ |
12.2 画面功能验证
| 画面 | 用户故事覆盖 | API完整性 | 参数传递 | 闭环 |
|---|---|---|---|---|
| AssessmentView | 10/10 | ✅ | ✅ | ✅ |
| AssessmentStatsView | 7/7 | ✅ | ✅ | ✅ |
| AssessmentTemplateManager | 5/5 | ✅ | ✅ | ✅ |
| QuestionBankView | 6/6 | ✅ | ✅ | ✅ |
| QuestionBankDetailView | 7/7 | ✅ | ✅ | ✅ |
十三、附录
A. 相关文件路径
- Controller:
server/src/assessment/assessment.controller.ts - Service:
server/src/assessment/assessment.service.ts - Entities:
server/src/assessment/entities/ - Graph:
server/src/assessment/graph/ - 前端服务:
web/services/assessmentService.ts - 前端题库服务:
web/services/questionBankService.ts - 前端模板服务:
web/services/templateService.ts
B. 参考文档
docs/plans/2026-04-23-assessment-system-full-plan-v2.mddocs/debugging-checklist.mddocs/admin-credentials.md