forked from hangshuo652/aurak
9330256e13
新增第10章「实施修正记录」,涵盖9项修正: 1. 出题算法 Math.round→floor+remainder 修正 2. P0答题体验(题序导航/标记回头/提交确认) 3. P1题库增强(tags字段/跨模板复用表) 4. P2配置增强(attemptLimit/scheduled/reviewMode/shuffle) 5. 系统角色权限保护缺陷修复 6. GET /users/:id 端点缺失修复 7. 题库维度/评分标准/题量补充 8. 模板配置修正(20题+非技术模板) 9. 测试覆盖340+项 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
640 lines
20 KiB
Markdown
640 lines
20 KiB
Markdown
# AuraK 人才测评体系完整实施计划
|
||
|
||
> **文档状态**: ✅ 评审通过
|
||
> **创建日期**: 2026-04-23
|
||
> **版本**: 2.0
|
||
> **评审日期**: 2026-04-23
|
||
|
||
---
|
||
|
||
## 一、系统概述
|
||
|
||
### 1.1 目标
|
||
|
||
构建一个完整的AI人才测评体系,实现"选→育→评→用"闭环。聚焦在**评(认证)阶段**,形成包含题库管理、评估执行、成绩管理、证书管理的完整系统。
|
||
|
||
### 1.2 核心流程
|
||
|
||
```
|
||
知识库 → 模板配置 → 题库(AI生成+审核) → 评估抽取 → 用户答题 → 评分 → 成绩 → 证书
|
||
↑
|
||
复查(调整总分)
|
||
```
|
||
|
||
### 1.3 评估发起模式
|
||
|
||
| 场景 | 发起方式 |
|
||
|------|---------|
|
||
| 新人入职认证 | 管理员发起(强制) |
|
||
| 认证后自评 | 学员可自评 |
|
||
|
||
---
|
||
|
||
## 二、组织架构与权限设计
|
||
|
||
### 2.1 组织结构
|
||
|
||
```
|
||
公司
|
||
├── 本部A
|
||
│ ├── 开发部
|
||
│ └── 其他部门
|
||
└── 本部B
|
||
├── 开发部
|
||
└── 其他部门
|
||
```
|
||
|
||
### 2.2 角色权限矩阵
|
||
|
||
| 角色 | 查看自己 | 查看本部门 | 查看全公司 | 题库管理 | 发起评估 | 复查 |
|
||
|------|---------|-----------|-----------|---------|---------|------|
|
||
| 学员 | ✅ | ❌ | ❌ | ❌ | 自评 | ❌ |
|
||
| 开发部长 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
|
||
| 本部长 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
|
||
| 公司高管 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
|
||
| 管理员 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||
| 讲师 | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
|
||
|
||
### 2.3 权限规则
|
||
|
||
- 学员只能看自己的历史成绩
|
||
- 各级管理者可查看下属员工成绩
|
||
- 管理员可查看全部数据、管理题库
|
||
- 讲师仅用于复查调整分数
|
||
|
||
---
|
||
|
||
## 三、模块A:题库管理
|
||
|
||
### 3.1 功能清单
|
||
|
||
| 功能 | 说明 | 优先级 |
|
||
|------|------|--------|
|
||
| 创建题库 | 关联知识库,关联模板(一对一),设定题目范围 | P0 |
|
||
| 单题管理 | 增删改查,支持简答/选择/判断 | P0 |
|
||
| AI批量生成 | 按模板dimensionQuota配置生成待审题目 | P0 |
|
||
| 智能标注 | AI自动标注维度、难度 | P1 |
|
||
| 单题审核 | 逐题审核(可批量选择操作) | P0 |
|
||
| 相似检测 | 检测与已有题目重复度 | P2 |
|
||
| 查询统计 | 多条件筛选、维度分布、使用统计 | P1 |
|
||
|
||
### 3.2 题目属性
|
||
|
||
| 属性 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| questionText | string | 题干文字 |
|
||
| questionType | enum | SHORT_ANSWER/MULTIPLE_CHOICE/TRUE_FALSE |
|
||
| options | string[] | ABCD选项 |
|
||
| correctAnswer | string | 正确答案 |
|
||
| keyPoints | string[] | 评分要点 |
|
||
| difficulty | enum | STANDARD/ADVANCED/SPECIALIST |
|
||
| dimension | enum | PROMPT/LLM/IDE/DEV_PATTERN/WORK_CAPABILITY |
|
||
| basis | string | 出题依据 |
|
||
|
||
### 3.3 模板与题库关联
|
||
|
||
- **方案**:一对一关系(模板→单一题库)
|
||
- 题库不单独关联知识库,由模板指定知识库范围
|
||
- 模板配置 `dimensionQuota` 字段指定各维度题目数量
|
||
|
||
### 3.4 审核流程
|
||
|
||
```
|
||
草稿(DRAFT)
|
||
↓ [提交审核]
|
||
待审核(PENDING_REVIEW)
|
||
↓ [单题审核:逐题通过/否决]
|
||
├── 通过 → 发布(PUBLISHED)
|
||
└── 否决 → 草稿(DRAFT) + 审核意见
|
||
```
|
||
|
||
### 3.5 版本管理
|
||
|
||
- 简化版:仅记录最近一次修改时间和修改人
|
||
|
||
### 3.6 数据模型
|
||
|
||
```typescript
|
||
// QuestionBank 实体
|
||
{
|
||
id: string;
|
||
templateId: string; // 关联模板(一对一)
|
||
name: string; // 题库名称
|
||
description: string; // 描述
|
||
status: enum; // DRAFT/PENDING_REVIEW/PUBLISHED
|
||
createdBy: string;
|
||
reviewedBy: string; // 审核人
|
||
reviewedAt: Date; // 审核时间
|
||
reviewComment: string; // 审核意见
|
||
createdAt: Date;
|
||
updatedAt: Date;
|
||
}
|
||
|
||
// QuestionBankItem 实体
|
||
{
|
||
id: string;
|
||
bankId: string; // 关联题库
|
||
questionText: string; // 题干
|
||
questionType: enum; // 题型
|
||
options: string[]; // 选项
|
||
correctAnswer: string; // 答案
|
||
keyPoints: string[]; // 关键点
|
||
difficulty: enum; // 难度
|
||
dimension: enum; // 维度
|
||
basis: string; // 出题依据
|
||
createdBy: string;
|
||
createdAt: Date;
|
||
status: enum; // PENDING_REVIEW/PUBLISHED
|
||
}
|
||
```
|
||
|
||
### 3.7 API设计
|
||
|
||
```typescript
|
||
// 题库CRUD
|
||
POST /api/question-banks // 创建题库
|
||
GET /api/question-banks // 列表(分页)
|
||
GET /api/question-banks/:id // 详情
|
||
PUT /api/question-banks/:id // 更新
|
||
DELETE /api/question-banks/:id // 删除
|
||
|
||
// 题目管理
|
||
POST /api/question-banks/:bankId/items // 添加题目
|
||
PUT /api/question-banks/:bankId/items/:id // 更新题目
|
||
DELETE /api/question-banks/:bankId/items/:id // 删除题目
|
||
|
||
// 批量操作
|
||
POST /api/question-banks/:bankId/generate // AI批量生成
|
||
POST /api/question-banks/:bankId/batch-add // 批量导入
|
||
|
||
// 审核流程
|
||
PUT /api/question-banks/:id/submit // 提交审核
|
||
PUT /api/question-banks/:bankId/items/:id/review // 单题审核
|
||
PUT /api/question-banks/:id/publish // 发布
|
||
PUT /api/question-banks/:id/unpublish // 下架
|
||
|
||
// 查询
|
||
GET /api/question-banks/by-template/:templateId // 按模板查询
|
||
```
|
||
|
||
---
|
||
|
||
## 四、模块B:评估执行
|
||
|
||
### 4.1 功能清单
|
||
|
||
| 功能 | 说明 | 优先级 |
|
||
|------|------|--------|
|
||
| 题目抽取 | 按模板/维度均衡/高频优先抽取 | P0 |
|
||
| 答题交互 | 展示题目、接收答案、即时反馈 | P0 |
|
||
| AI评分 | 按关键点评分,0-10分 | P0 |
|
||
| 追问机制 | 预置追问+超时降级 | P0 |
|
||
| 时间控制 | 单题限时+总时长限制(超时不记分) | P1 |
|
||
| 中断处理 | 超时强制提交 | P0 |
|
||
| 成绩判定 | ≥6分通过 | P0 |
|
||
|
||
### 4.2 题目抽取算法
|
||
|
||
```typescript
|
||
function selectQuestions(bankId, templateConfig) {
|
||
// 1. 按模板指定的知识库范围查已发布题目
|
||
// 2. 按dimensionQuota配置的比例抽取
|
||
// 3. 高频题目优先被抽(不限制重复次数)
|
||
// 4. 不足时提示"题库不足"
|
||
}
|
||
```
|
||
|
||
### 4.3 追问机制
|
||
|
||
| 方案 | 说明 |
|
||
|------|------|
|
||
| 预置追问 | 题库中预存追问内容 |
|
||
| 实时补充 | 超时则降级跳过 |
|
||
| 追问限制 | 最多2次追问 |
|
||
|
||
### 4.4 时间控制
|
||
|
||
| 限制 | 默认值 | 超时处理 |
|
||
|------|--------|---------|
|
||
| 单题限时 | 300秒 | 超时不记分,自动下一题 |
|
||
| 总时长限制 | 1800秒 | 超时强制提交 |
|
||
|
||
### 4.5 中断处理
|
||
|
||
- 评估进行中中断,超时强制提交
|
||
- 已答题目计入成绩,超时题目不记分
|
||
|
||
### 4.6 评估流程
|
||
|
||
```
|
||
开始评估
|
||
↓
|
||
加载模板(数量/dimensionQuota/时长)
|
||
↓
|
||
从题库抽取题目(维度均衡)
|
||
↓
|
||
展示第1题
|
||
↓
|
||
用户答题
|
||
↓
|
||
AI评分(按关键点0-10分)
|
||
↓
|
||
追问?(预置+超时降级)
|
||
↓
|
||
下一题(循环至最后一题)
|
||
↓
|
||
生成报告 + 判断通过/未通过(≥6分)
|
||
↓
|
||
通过 → 发放证书(首次通过才发)
|
||
```
|
||
|
||
### 4.7 API设计
|
||
|
||
```typescript
|
||
// 评估管理
|
||
POST /api/assessment/start // 发起评估
|
||
GET /api/assessment/:id/state // 获取状态
|
||
POST /api/assessment/:id/answer // 提交答案
|
||
|
||
// 评估管理(管理员)
|
||
GET /api/assessment // 所有评估列表
|
||
GET /api/assessment/:id // 评估详情
|
||
DELETE /api/assessment/:id // 删除评估
|
||
```
|
||
|
||
---
|
||
|
||
## 五、模块C:成绩管理
|
||
|
||
### 5.1 功能清单
|
||
|
||
| 功能 | 说明 | 优先级 |
|
||
|------|------|--------|
|
||
| 成绩查看 | 按权限查看成绩 | P0 |
|
||
| 统计报表 | 通过率/分数/趋势/雷达图 | P1 |
|
||
| 历史管理 | 保留最近3次 | P1 |
|
||
| 导出功能 | Excel/PDF/CSV | P1 |
|
||
| 复查功能 | 只能调整最终总分 | P2 |
|
||
| 统计缓存 | 准实时(缓存5分钟) | P1 |
|
||
|
||
### 5.2 统计维度
|
||
|
||
| 维度 | 说明 |
|
||
|------|------|
|
||
| 通过人数/通过率 | 整体和分组 |
|
||
| 平均分/最高分/最低分 | 按组统计 |
|
||
| 各维度平均分 | 雷达图数据 |
|
||
| 评估次数趋势 | 时序折线图 |
|
||
|
||
### 5.3 报表页面
|
||
|
||
```
|
||
┌──────────────────────────────────────────┐
|
||
│ 成绩统计 [导出] [筛选] │
|
||
├──────────────────────────────────────────┤
|
||
│ 总人数 │ 通过率 │ 平均分 │ 待审核 │
|
||
│ 156 │ 82% │ 7.5 │ 3 │
|
||
├──────────────────────────────────────────┤
|
||
│ 雷达图(各维度平均分) │
|
||
│ prompt ████████ 8.2 │
|
||
│ llm ███████░░ 7.6 │
|
||
│ ide ██████░░░ 6.8 │
|
||
│ devPattern █████░░░░ 6.2 │
|
||
│ workCap ██████░░░░ 6.5 │
|
||
├──────────────────────────────────────────┤
|
||
│ 成绩列表(按组织筛选) │
|
||
│ 姓名 │ 部门 │ 分数 │ 状态 │ 时间 │ 操作 │
|
||
│ [查看] │ [复查] │
|
||
└──────────────────────────────────────────┘
|
||
```
|
||
|
||
### 5.4 复查规则
|
||
|
||
- 讲师只能调整最终总分
|
||
- 复查记录可追溯
|
||
- **复查不影响已发证书**(保持不变)
|
||
|
||
### 5.5 API设计
|
||
|
||
```typescript
|
||
// 成绩统计
|
||
GET /api/assessment/stats // 当前用户统计
|
||
GET /api/assessment/stats/admin // 管理员统计
|
||
Query: startDate, endDate, templateId, groupId
|
||
|
||
// 复查(只调整总分)
|
||
PUT /api/assessment/:id/review // 调整总分
|
||
```
|
||
|
||
---
|
||
|
||
## 六、模块D:证书管理
|
||
|
||
### 6.1 功能清单
|
||
|
||
| 功能 | 说明 | 优先级 |
|
||
|------|------|--------|
|
||
| 证书生成 | 通过即发(首次通过才发) | P1 |
|
||
| 证书预览 | 仅预览,不可下载 | P1 |
|
||
| 证书验真 | 二维码/ID查询 | P1 |
|
||
|
||
### 6.2 证书内容
|
||
|
||
| 字段 | 说明 |
|
||
|------|------|
|
||
| certificateId | 唯一ID |
|
||
| userId | 持证人 |
|
||
| templateId | 评估模板 |
|
||
| totalScore | 总分 |
|
||
| passedAt | 通过时间 |
|
||
| qrCode | 防伪二维码 |
|
||
|
||
### 6.3 证书唯一性规则
|
||
|
||
- **同一模板只保留第一次通过的证书**
|
||
- 后续通过同一评估不生成新证书
|
||
- 复查后分数变化不影响已发证书
|
||
|
||
### 6.4 有效期
|
||
|
||
- **永久有效**:一次通过,终身有效
|
||
|
||
### 6.5 证书展示
|
||
|
||
- 仅提供预览功能,不提供下载
|
||
- 可通过二维码或证书ID验证真伪
|
||
|
||
### 6.6 证书样式
|
||
|
||
```
|
||
┌────────────────────────────────────────┐
|
||
│ [公司LOGO] │
|
||
│ │
|
||
│ 能力认证证书 │
|
||
│ │
|
||
│ 兹证明 [学员姓名] 通过 │
|
||
│ [评估模板名称] 能力评估 │
|
||
│ 总分:[分数] 分 │
|
||
│ │
|
||
│ 发证日期:[日期] │
|
||
│ 证书编号:[ID] │
|
||
│ │
|
||
│ [二维码] │
|
||
│ 验证真伪 │
|
||
└────────────────────────────────────────┘
|
||
```
|
||
|
||
### 6.7 API设计
|
||
|
||
```typescript
|
||
// 证书
|
||
GET /api/assessment/:id/certificate // 获取证书(预览)
|
||
POST /api/assessment/certificate/verify // 验证证书
|
||
```
|
||
|
||
---
|
||
|
||
## 七、实施计划
|
||
|
||
### 7.1 任务分解
|
||
|
||
| Phase | Task | 内容 | 优先级 |
|
||
|-------|------|------|--------|
|
||
| 1 | A1 | 题库实体创建(关联模板一对一) | P0 |
|
||
| 1 | A2 | 题目实体创建 | P0 |
|
||
| 1 | A3 | 题库Service/Controller | P0 |
|
||
| 1 | A4 | AI批量生成(按dimensionQuota配置) | P0 |
|
||
| 1 | A5 | 单题审核流程 | P0 |
|
||
| 2 | B1 | 题目抽取算法(维度均衡/高频优先) | P0 |
|
||
| 2 | B2 | 评估流程接入题库 | P0 |
|
||
| 2 | B3 | 追问预置+降级 | P0 |
|
||
| 2 | B4 | 时间控制(超时不记分) | P1 |
|
||
| 2 | B5 | 中断超时强制提交 | P0 |
|
||
| 3 | C1 | 统计API(缓存5分钟) | P1 |
|
||
| 3 | C2 | 报表前端 | P1 |
|
||
| 3 | C3 | 历史管理(保留3次) | P1 |
|
||
| 3 | C4 | 导出功能 | P1 |
|
||
| 3 | C5 | 复查功能(只调总分) | P2 |
|
||
| 4 | D1 | 证书实体 | P1 |
|
||
| 4 | D2 | 证书生成(首次通过才发) | P1 |
|
||
| 4 | D3 | 证书预览 | P1 |
|
||
| 4 | D4 | 证书验真 | P1 |
|
||
|
||
### 7.2 执行顺序
|
||
|
||
```
|
||
Phase 1 (题库)
|
||
↓
|
||
Phase 2 (评估)
|
||
↓
|
||
Phase 3 (成绩)
|
||
↓
|
||
Phase 4 (证书)
|
||
```
|
||
|
||
### 7.3 里程碑
|
||
|
||
| 里程碑 | 内容 | 时间 |
|
||
|--------|------|------|
|
||
| M1 | 题库管理基础功能 | 1周 |
|
||
| M2 | 评估流程优化 | 1周 |
|
||
| M3 | 成绩报表 | 1周 |
|
||
| M4 | 证书功能 | 1周 |
|
||
| M5 | 测试优化 | 1周 |
|
||
|
||
---
|
||
|
||
## 八、验收标准
|
||
|
||
- [ ] 题库支持创建/关联模板(一对一)/���辑/单题审核/发布
|
||
- [ ] AI批量生成题目按dimensionQuota配置
|
||
- [ ] 评估可从题库维度均衡抽取
|
||
- [ ] 追问支持预置+降级
|
||
- [ ] 超时不记分,中断超时强制提交
|
||
- [ ] 成绩按组织架构权限隔离
|
||
- [ ] 统计准实时(缓存5分钟)
|
||
- [ ] 历史记录保留最近3次
|
||
- [ ] 复查只能调整总分,不影响已发证书
|
||
- [ ] 通过后生成证书(首次通过才发)
|
||
- [ ] 证书仅预览不可下载
|
||
- [ ] 证书可验真(二维码/ID)
|
||
|
||
---
|
||
|
||
## 九、闭环确认
|
||
|
||
### 数据流闭环
|
||
|
||
```
|
||
知识库 → 模板 → 题库(AI生成+单题审核)→ 评估抽取 → 用户答题 → 评分 → 成绩 → 证书
|
||
↑
|
||
复查(调总分)
|
||
```
|
||
|
||
### 关键闭环点
|
||
|
||
| 检查点 | 确认 |
|
||
|--------|------|
|
||
| 知识库→题库 | ✅ AI生成题目关联知识库 |
|
||
| 题库→评估 | ✅ 按模板(一对一)抽取已发布题目 |
|
||
| 评估→成绩 | ✅ 答题后记录成绩 |
|
||
| 成绩→证书 | ✅ 首次通过后生成证书 |
|
||
| 复查→成绩 | ✅ 讲师可调整总分 |
|
||
| 复查→证书 | ✅ 不影响已发证书 |
|
||
|
||
---
|
||
|
||
## 附录
|
||
|
||
### A. 相关文档
|
||
|
||
- `docs/plans/2026-04-18-l1-talent-assessment-design.md` - L1设计
|
||
- `docs/plans/2026-04-20-assessment-system-complete-plan.md` - 旧版计划
|
||
|
||
### B. 现有代码参考
|
||
|
||
- `server/src/assessment/` - 评估模块
|
||
- `web/components/views/AssessmentView.tsx` - 前端评估界面
|
||
|
||
### C. 评审记录
|
||
|
||
| 日期 | 版本 | 变更内容 |
|
||
|------|------|----------|
|
||
| 2026-04-23 | 1.0 | 初稿 |
|
||
| 2026-04-23 | 2.0 | 评审通过,更新10项确认内容 |
|
||
| 2026-06-16 | **3.0** | **实施修正** — 详见下方实施修正记录 |
|
||
|
||
### D. 评审确认内容(v2.0)
|
||
|
||
1. 模板新增 `dimensionQuota` 字段配置各维度数量
|
||
2. 审核改为单题逐审(可批量选择操作)
|
||
3. 超时不记分(不影响得分)
|
||
4. 中断超时强制提交
|
||
5. 统计准实时(缓存5分钟)
|
||
6. 复查只能调整最终总分
|
||
7. 同一模板只保留首次通过证书
|
||
8. 证书仅预览不可下载
|
||
9. 模板一对一题库
|
||
10. 复查不影响已发证书(保持不变)
|
||
|
||
---
|
||
|
||
## 十、实施修正记录(v3.0)
|
||
|
||
> 以下内容记录了从 v2.0 设计评审到实际实施过程中的**修正与增补**。
|
||
|
||
### 10.1 题目抽取算法修正
|
||
|
||
**原设计**(v2.0 4.2节):
|
||
|
||
```typescript
|
||
function selectQuestions() {
|
||
// 按dimensionQuota配置的比例抽取
|
||
// Math.round(...)
|
||
}
|
||
```
|
||
|
||
**问题**:`Math.round` 导致合计偏差,如 3题→4题、5题→6题、7题→6题。
|
||
|
||
**修正为**(`question-bank.service.ts`):
|
||
|
||
```typescript
|
||
function selectQuestions() {
|
||
// floor + remainder 分配法,保证总和恒等于 count
|
||
// 1. 各维度 target = floor(count × weight / totalWeight)
|
||
// 2. remainder = count - sum(targets),按 weight 降序分配
|
||
// 3. 各维度池 shuffle 后抽 target 道
|
||
// 4. 不足时从剩余池随机补足(保留维度标签日志)
|
||
}
|
||
|
||
// 验证结果:
|
||
// 20题 → PROMPT:6 + LLM:6 + IDE:4 + DEV_PATTERN:4 = 20 ✅
|
||
// 10题 → PROMPT:3 + LLM:3 + IDE:2 + DEV_PATTERN:2 = 10 ✅
|
||
// 5题 → PROMPT:2 + LLM:1 + IDE:1 + DEV_PATTERN:1 = 5 ✅
|
||
```
|
||
|
||
### 10.2 P0 — 答题体验优化(新增)
|
||
|
||
实施过程中新增以下前端功能:
|
||
|
||
| 功能 | 说明 | 实现位置 |
|
||
|------|------|---------|
|
||
| **题序导航点** | 顶部圆点:当前题蓝色、已标记黄色、其他灰色 | `AssessmentView.tsx` |
|
||
| **标记回头检查** | 🏷️ 按钮标记当前题,导航点变黄,方便回头检查 | `AssessmentView.tsx` |
|
||
| **提交确认弹窗** | 未答完时提交弹出确认对话框,防止误提交 | `AssessmentView.tsx` |
|
||
|
||
### 10.3 P1 — 题库管理增强(设计补充)
|
||
|
||
**原设计**:题库与模板为一对一关系。
|
||
|
||
**实施补充**:
|
||
|
||
| 变更 | 说明 | 文件 |
|
||
|------|------|------|
|
||
| `tags` 字段 | QuestionBankItem 新增 `tags` JSON 数组,支持多标签过滤 | `question-bank-item.entity.ts` |
|
||
| 跨模板复用 | 新增 `question_bank_templates` 联表,题库可关联多个模板 | `question-bank-template.entity.ts` |
|
||
|
||
### 10.4 P2 — 考试配置增强(新增)
|
||
|
||
| 新字段 | 类型 | 默认值 | 说明 |
|
||
|--------|------|--------|------|
|
||
| `attemptLimit` | int | 1 | 最大尝试次数,0=不限 |
|
||
| `scheduledStart` | datetime | null | 预约开始时间 |
|
||
| `scheduledEnd` | datetime | null | 预约结束时间 |
|
||
| `reviewMode` | string | 'none' | 回顾模式:none / after_completion |
|
||
| `shuffleQuestions` | boolean | true | 是否每题随机排序 |
|
||
|
||
**实现要点**:
|
||
- `startSession()` 中校验 attemptLimit、scheduledStart/End
|
||
- `getSessionState()` 根据 reviewMode 控制答案可见性
|
||
- 新增 `GET /assessment/:id/review` 回顾端点
|
||
- `selectQuestions()` 返回后根据 shuffleQuestions 做 Fisher-Yates 洗牌
|
||
|
||
### 10.5 系统角色权限保护(缺陷修正)
|
||
|
||
**问题**:`PermissionService.setRolePermissions()` 未检查 isSystem,系统角色权限可通过 API 修改。
|
||
|
||
**修正**:增加 `if (role.isSystem) throw Error`。
|
||
|
||
### 10.6 GET /users/:id 端点缺失(缺陷修正)
|
||
|
||
**问题**:`UserController` 缺少 `@Get(':id')` 端点。
|
||
|
||
**修正**:新增 `findOne()` 方法,受 `@Permission('user:view')` 保护。
|
||
|
||
### 10.7 题库维度与评分标准修正
|
||
|
||
| 修正 | 说明 |
|
||
|------|------|
|
||
| 维度标签修复 | 会议记录题从 `PROMPT` → `LLM`(AI注意力机制问题) |
|
||
| 补充评分标准 | 为151道简答题补充 `judgment` 字段,AI评分有据可依 |
|
||
| 新增24题 | 覆盖AI安全使用指南(三大边界)、开发范式(SDD/Flow State/Vibe Coding)、L1评估检查清单 |
|
||
|
||
### 10.8 模板配置修正
|
||
|
||
| 模板 | v2.0设计 | 实际修正 |
|
||
|------|---------|---------|
|
||
| AI协作技巧-对话测评 | 4题 | **20题**(题数可配,模板编辑页面可调) |
|
||
| AI协作-非技术人员测评 | 不存在 | **新增**:PROMPT 50% / LLM 30% / WORK_CAPABILITY 20%,10题 |
|
||
|
||
### 10.9 测试覆盖(新增)
|
||
|
||
| 测试套件 | 项数 | 覆盖内容 |
|
||
|---------|:----:|---------|
|
||
| `test-systematic.mjs` | 142 | 全角色全维度系统测试 |
|
||
| `test-full-coverage.mjs` | 52 | 未覆盖路径补全回归 |
|
||
| `test-assessment-smoke.mjs` | 29 | 快速烟雾测试 |
|
||
| `test-e2e-assessment-full-flow.mjs` | 29 | 端到端全流程(登录→模板→题库→考核→评分→证书) |
|
||
| `test-p2-advanced.mjs` | 20 | P2高级功能专项 |
|
||
| `test-concurrent-assessments.mjs` | — | 20人并发考核 |
|
||
| `tests/full-assessment.e2e.spec.ts` | 18 | Playwright三Agent框架测试 |
|
||
| 3个旧测试脚本 | 94+42+— | 用户生命周期、权限验证、多轮对话 |
|
||
|
||
**总测试项**: ~340+ 项
|
||
**总通过率**: ~99%
|
||
|
||
---
|
||
|
||
**文档状态**: ✅ 已实施(v3.0)
|
||
**维护部门**: AI推进部
|
||
**最近更新**: 2026-06-16 |