guoyu/题库导入问题说明.md
2025-12-06 20:11:36 +08:00

178 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 题库导入问题解决方案
## 🔍 问题描述
在**考试管理**中创建考试时,选择"从题库抽取",但下拉框中**看不到新建的题库和题目**。
## 🎯 问题原因
考试管理页面调用的是 `/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脚本中的详细说明或联系技术支持。