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

183 lines
7.9 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.

# 第二阶段问题记录
## 问题记录格式
使用双链形式连接步骤文档,例如:[[第二阶段-代码整合到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` - 已修改字段名
- **状态**:已解决