feat: implement QuestionBank CRUD with pagination and template query
- Add pagination support to findAll (page, limit query params) - Add findByTemplateId method to service - Add GET /by-template/:templateId endpoint to controller - Service already includes CRUD for QuestionBank and QuestionBankItem
This commit is contained in:
@@ -0,0 +1,522 @@
|
||||
# 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项确认内容 |
|
||||
|
||||
### D. 评审确认内容(v2.0)
|
||||
|
||||
1. 模板新增 `dimensionQuota` 字段配置各维度数量
|
||||
2. 审核改为单题逐审(可批量选择操作)
|
||||
3. 超时不记分(不影响得分)
|
||||
4. 中断超时强制提交
|
||||
5. 统计准实时(缓存5分钟)
|
||||
6. 复查只能调整最终总分
|
||||
7. 同一模板只保留首次通过证书
|
||||
8. 证书仅预览不可下载
|
||||
9. 模板一对一题库
|
||||
10. 复查不影响已发证书(保持不变)
|
||||
|
||||
---
|
||||
|
||||
**文档状态**: ✅ 最终版(评审通过)
|
||||
**下一步**: 进入实施阶段
|
||||
Reference in New Issue
Block a user