guoyu/log/问题/第二阶段-问题.md

183 lines
7.9 KiB
Markdown
Raw Normal View History

2025-11-14 17:34:32 +08:00
# 第二阶段问题记录
## 问题记录格式
使用双链形式连接步骤文档,例如:[[第二阶段-代码整合到RuoYi]]
## 问题列表
### 问题1
- **关联步骤**[[第二阶段-代码整合到RuoYi]]
- **问题描述**执行SQL脚本时出现字符编码错误
- **发生时间**2025-11-11
- **错误信息**
- `ERROR 1366 (HY000) at line 10: Incorrect string value: '\xAE\xE5\xBD\x95' for column 'remark' at row 1`
- `Process failed (exit code = 1)`
- **问题原因**
1. MySQL客户端连接的字符集设置不正确
2. SQL脚本文件可能不是UTF-8编码
3. 数据库字符集设置不正确
4. SQL脚本中的字符集设置语句在注释块中可能没有正确执行
- **解决方案**
1. 在SQL脚本开头添加显式的字符集设置在注释块之前
```sql
SET NAMES utf8mb4;
SET CHARACTER_SET_CLIENT = utf8mb4;
SET CHARACTER_SET_CONNECTION = utf8mb4;
SET CHARACTER_SET_RESULTS = utf8mb4;
```
2. 确保数据库创建时使用utf8mb4字符集
3. 确保SQL文件保存为UTF-8编码无BOM
4. 在DBeaver等工具中执行SQL时确保连接字符集设置为utf8mb4
5. 创建数据库初始化脚本 `ry_study_init_database.sql` 用于正确创建数据库
- **相关文件**
- `log/Sql/ry_study_init_database.sql` - 数据库初始化脚本
- `log/Sql/ry_news_2025-10-31_16-51-20_mysql_data_G7xyv.sql` - 已添加字符集设置
- `log/Sql/ry_study_menu_study_system.sql` - 已添加字符集设置
- **状态**:已解决
### 验证结果
执行字符集验证命令后确认所有关键字符集都已正确设置为utf8mb4
- `character_set_client`: utf8mb4 ✅
- `character_set_connection`: utf8mb4 ✅
- `character_set_database`: utf8mb4 ✅
- `character_set_results`: utf8mb4 ✅
- `character_set_server`: utf8mb4 ✅
- `collation_database`: utf8mb4_general_ci ✅
**结论**字符集配置正确可以正常执行SQL脚本。
### 问题2
- **关联步骤**[[第二阶段-代码整合到RuoYi]]
- **问题描述**:编译错误 - 缺少导入和依赖
- **发生时间**2025-11-11
- **错误信息**
- `java: 找不到符号 - HttpServletRequest`
- `java: 程序包org.springframework.web.socket.server.standard不存在`
- `java: 找不到符号 - ServerEndpointExporter`
- `java: 未知的枚举常量 javax.annotation.meta.When.MAYBE`
- **问题原因**
1. `StudyScreenMonitorController` 中使用了 `HttpServletRequest` 但缺少导入
2. WebSocket配置类使用了 `ServerEndpointExporter`,但缺少 `spring-boot-starter-websocket` 依赖
3. `javax.annotation.meta.When.MAYBE` 错误可能是IDE或编译器的警告不影响实际运行
- **解决方案**
1.`StudyScreenMonitorController.java` 中添加导入:
```java
import javax.servlet.http.HttpServletRequest;
```
2.`ry-news-admin/pom.xml` 中添加WebSocket依赖
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
```
3. 重新编译项目:`mvn clean install`
- **相关文件**
- `RuoYi-Vue-redis/ry-news-admin/src/main/java/com/ddnai/web/controller/study/StudyScreenMonitorController.java` - 已添加HttpServletRequest导入
- `RuoYi-Vue-redis/ry-news-admin/pom.xml` - 已添加WebSocket依赖
- `RuoYi-Vue-redis/ry-news-admin/src/main/java/com/ddnai/web/config/WebSocketConfig.java` - WebSocket配置类
- **状态**:已解决
### 问题3
- **关联步骤**[[第二阶段-代码整合到RuoYi]]
- **问题描述**Redis连接失败 - 无法连接到Redis服务器
- **发生时间**2025-11-11
- **错误信息**
- `Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to 127.0.0.1:6379`
- `ERR Client sent AUTH, but no password is set` - 客户端发送了AUTH认证但Redis服务器没有设置密码
- **问题原因**
1. Redis服务可能没有启动
2. 应用配置了Redis密码但本地Redis服务器没有设置密码
3. Redis密码配置不匹配
- **解决方案**
**方案A如果本地Redis没有密码推荐开发环境**
1. 打开 `RuoYi-Vue-redis/ry-news-admin/src/main/resources/application.yml`
2. 注释掉或删除Redis密码配置
```yaml
spring:
redis:
host: 127.0.0.1
port: 6379
database: 0
# password: xbZttkmndxCkWsycjs2 # 注释掉密码
password: # 或者设置为空
```
**方案B如果Redis有密码**
1. 确保Redis服务已启动
2. 检查Redis密码是否正确
3. 确保配置文件中的密码与Redis服务器密码一致
**方案C启动Redis服务如果未启动**
- Windows: 运行Redis服务或使用Docker启动
- Linux: `sudo systemctl start redis``redis-server`
- 检查Redis是否运行: `redis-cli ping`(应该返回 `PONG`
**方案D临时禁用Redis仅用于测试不推荐**
- 如果暂时不需要Redis功能可以注释掉Redis相关配置
- 但RuoYi的缓存和会话管理依赖Redis建议启动Redis服务
- **相关文件**
- `RuoYi-Vue-redis/ry-news-admin/src/main/resources/application.yml` - Redis配置
- **状态**:已解决
**实际解决**
- 确认Redis服务正常运行且没有密码
-`application.yml` 中注释掉 `password: xbZttkmndxCkWsycjs2` 配置
- 重新启动后端服务Redis连接成功
### 问题4
- **关联步骤**[[第二阶段-代码整合到RuoYi]]
- **问题描述**:数据库表不存在错误 - `Table 'ry_study.subject' doesn't exist`
- **发生时间**2025-11-11
- **错误信息**
- `Table 'ry_study.subject' doesn't exist`
- `The error may exist in file [StudySubjectMapper.xml]`
- **问题原因**
1. 学习系统的数据库表还没有创建
2. 只执行了RuoYi基础SQL脚本但没有创建学习系统相关的表
- **解决方案**
1. 创建学习系统表结构SQL脚本 `ry_study_create_tables.sql`
2. 脚本包含以下表:
- `subject` - 学科分类表
- `class` - 班级表
- `courseware` - 课件表
- `course` - 课程表
- `course_assignment` - 课程分配表
- `student_class` - 学员班级关联表
- `learning_record` - 学习记录表
- `learning_detail` - 学习详情记录表
- `monitor_record` - 学习监控表
3. 执行SQL脚本创建表结构
4. 确保表名和字段与Mapper XML中的定义完全一致
- **相关文件**
- `log/Sql/ry_study_create_tables.sql` - 学习系统表结构SQL脚本
- `RuoYi-Vue-redis/ry-news-system/src/main/resources/mapper/study/` - Mapper XML文件
- **状态**已解决已创建SQL脚本待执行
### 问题5
- **关联步骤**[[第二阶段-代码整合到RuoYi]]
- **问题描述**:学习记录菜单点击没有反应
- **发生时间**2025-11-11
- **错误信息**
- 点击菜单后页面无反应,无法跳转
- **问题原因**
1. 后端Controller路径与前端API路径不匹配
- 后端:`@RequestMapping("/study/learning")`
- 前端API`/study/learningRecord/list`
2. 后端权限配置与菜单权限不匹配:
- 后端:`study:learning:list`
- 菜单:`study:learningRecord:list`
3. 前端页面字段名与后端实体类字段名不匹配:
- 前端:`courseTitle`, `studyCount`, `lastStudyTime`
- 后端:`courseId`, `learnCount`, `lastLearnTime`
- **解决方案**
1. 修改后端Controller路径`/study/learning` → `/study/learningRecord`
2. 修改后端权限配置:`study:learning:*` → `study:learningRecord:*`
3. 修改前端页面字段名,与后端实体类保持一致
- **相关文件**
- `RuoYi-Vue-redis/ry-news-admin/src/main/java/com/ddnai/web/controller/study/StudyLearningRecordController.java` - 已修改路径和权限
- `RuoYi-Vue-redis/ruoyi-ui/src/views/study/learningRecord/index.vue` - 已修改字段名
- **状态**:已解决