178 lines
4.8 KiB
Markdown
178 lines
4.8 KiB
Markdown
# 题库导入问题解决方案
|
||
|
||
## 🔍 问题描述
|
||
|
||
在**考试管理**中创建考试时,选择"从题库抽取",但下拉框中**看不到新建的题库和题目**。
|
||
|
||
## 🎯 问题原因
|
||
|
||
考试管理页面调用的是 `/study/questionBank/my-banks` 接口,这个接口**只返回当前登录用户创建的题库**,查询条件是:
|
||
|
||
```sql
|
||
WHERE b.create_user_id = #{当前用户ID}
|
||
```
|
||
|
||
如果题库的 `create_user_id` 字段为**空**或与当前用户ID**不匹配**,就会导致题库不显示。
|
||
|
||
## 📊 可能的情况
|
||
|
||
### 情况1:数据库缺少字段
|
||
数据库表 `study_question_bank` 缺少 `create_user_id` 字段。
|
||
|
||
### 情况2:字段值为空
|
||
题库存在,但 `create_user_id` 字段为 `NULL`。
|
||
|
||
### 情况3:用户ID不匹配
|
||
题库的 `create_user_id` 与当前登录用户的ID不一致。
|
||
|
||
## 🔧 快速修复步骤
|
||
|
||
### 第1步:打开数据库客户端
|
||
使用 Navicat、DataGrip 或命令行连接到数据库。
|
||
|
||
### 第2步:检查表结构
|
||
```sql
|
||
SHOW COLUMNS FROM study_question_bank LIKE 'create_user_id';
|
||
```
|
||
|
||
**如果没有结果**,说明缺少字段,执行:
|
||
```sql
|
||
ALTER TABLE study_question_bank
|
||
ADD COLUMN create_user_id BIGINT(20) NULL COMMENT '创建人ID(教师ID)'
|
||
AFTER question_count;
|
||
```
|
||
|
||
### 第3步:查找你的用户ID
|
||
```sql
|
||
SELECT user_id, user_name, nick_name
|
||
FROM sys_user
|
||
WHERE user_name = 'admin'; -- 替换为你的登录用户名
|
||
```
|
||
|
||
记住返回的 `user_id`,例如:**1**
|
||
|
||
### 第4步:自动修复题库关联
|
||
```sql
|
||
-- 方法A:根据创建者用户名自动关联
|
||
UPDATE study_question_bank b
|
||
INNER JOIN sys_user u ON b.create_by = u.user_name
|
||
SET b.create_user_id = u.user_id
|
||
WHERE b.create_user_id IS NULL;
|
||
```
|
||
|
||
**或者**手动设置:
|
||
```sql
|
||
-- 方法B:手动设置为你的用户ID
|
||
UPDATE study_question_bank
|
||
SET create_user_id = 1 -- ⚠️ 替换为你的实际用户ID
|
||
WHERE create_user_id IS NULL;
|
||
```
|
||
|
||
### 第5步:验证修复
|
||
```sql
|
||
-- 查询你的题库(替换用户ID)
|
||
SELECT
|
||
id,
|
||
bank_name,
|
||
subject_name,
|
||
question_count,
|
||
create_user_id,
|
||
create_time
|
||
FROM study_question_bank
|
||
WHERE create_user_id = 1 -- ⚠️ 替换为你的用户ID
|
||
ORDER BY create_time DESC;
|
||
```
|
||
|
||
**如果有结果,说明修复成功!**
|
||
|
||
### 第6步:刷新前端页面
|
||
1. 刷新浏览器
|
||
2. 进入【考试管理】→【创建考试】
|
||
3. 选择出题方式为【从题库抽取】
|
||
4. 下拉框应该能看到题库了
|
||
|
||
## 📝 详细诊断脚本
|
||
|
||
我已经创建了两个SQL脚本:
|
||
|
||
1. **`检查题库问题.sql`** - 完整的诊断脚本
|
||
2. **`修复题库导入问题.sql`** - 一步步的修复方案
|
||
|
||
请按顺序执行SQL语句,根据实际情况选择合适的修复方法。
|
||
|
||
## ⚠️ 注意事项
|
||
|
||
### 关键字段说明
|
||
|
||
| 字段 | 说明 | 重要性 |
|
||
|------|------|--------|
|
||
| `create_user_id` | 创建者的用户ID | ⭐⭐⭐ 必须有 |
|
||
| `create_by` | 创建者的用户名 | 用于自动关联 |
|
||
| `question_count` | 题目数量 | 如果不准确会影响显示 |
|
||
|
||
### 执行SQL的注意事项
|
||
|
||
1. **备份数据**:执行UPDATE前先备份数据库
|
||
2. **确认用户ID**:确保使用正确的用户ID
|
||
3. **测试验证**:修复后用验证SQL确认结果
|
||
|
||
## 🚀 预防措施
|
||
|
||
### 后端代码已修复
|
||
Controller 中新增题库时会自动设置 `create_user_id`:
|
||
|
||
```java
|
||
@PostMapping
|
||
public AjaxResult add(@RequestBody StudyQuestionBank questionBank) {
|
||
questionBank.setCreateBy(getUsername());
|
||
questionBank.setCreateUserId(getUserId()); // ✓ 已添加
|
||
return toAjax(questionBankService.insertQuestionBank(questionBank));
|
||
}
|
||
```
|
||
|
||
### 今后创建题库
|
||
后端代码已经修复,**今后新建的题库会自动关联用户ID**,不会再出现这个问题。
|
||
|
||
## 🆘 如果仍然无法解决
|
||
|
||
### 检查清单
|
||
|
||
- [ ] 数据库表有 `create_user_id` 字段
|
||
- [ ] 题库的 `create_user_id` 不为空
|
||
- [ ] 题库的 `create_user_id` 与当前登录用户ID一致
|
||
- [ ] 题库中有题目(`question_count > 0`)
|
||
- [ ] 浏览器控制台无错误
|
||
- [ ] 已清除浏览器缓存
|
||
|
||
### 调试方法
|
||
|
||
1. **查看浏览器控制台**
|
||
- 打开开发者工具 (F12)
|
||
- 查看 Network 标签
|
||
- 找到 `/study/questionBank/my-banks` 请求
|
||
- 查看返回的数据是否为空
|
||
|
||
2. **查看后端日志**
|
||
```
|
||
Study-Vue-redis/ry-study-admin/logs/sys-info.log
|
||
```
|
||
搜索 "my-banks" 或 "questionBank"
|
||
|
||
3. **手动测试接口**
|
||
```bash
|
||
# 使用 Postman 或浏览器访问
|
||
http://192.168.137.1:30091/study/questionBank/my-banks
|
||
```
|
||
|
||
## 📌 总结
|
||
|
||
**根本原因**:题库的 `create_user_id` 字段为空或不匹配
|
||
|
||
**快速修复**:运行 `修复题库导入问题.sql` 中的SQL
|
||
|
||
**预防措施**:后端代码已修复,新建题库会自动关联用户
|
||
|
||
---
|
||
|
||
如有任何问题,请查看SQL脚本中的详细说明或联系技术支持。
|