153 lines
5.4 KiB
Markdown
153 lines
5.4 KiB
Markdown
# 学生考核自评得分查询字段错误修复报告
|
|
|
|
## 问题描述
|
|
|
|
**错误时间**: 2025-08-21 11:53:24
|
|
**错误接口**: `/assessment/approval/1958361581653856257`
|
|
**错误类型**: SQL语法错误 - 未知字段
|
|
|
|
### 错误详情
|
|
```
|
|
org.springframework.jdbc.BadSqlGrammarException:
|
|
Unknown column 'i.indicator_description' in 'field list'
|
|
```
|
|
|
|
### 错误SQL
|
|
```sql
|
|
SELECT s.id, s.application_id, s.indicator_id, s.indicator_name,
|
|
i.indicator_code, i.indicator_description, s.indicator_type,
|
|
s.max_score, s.self_score, s.self_remark, s.teacher_score,
|
|
s.teacher_remark, s.create_by, s.create_time, s.update_by, s.update_time
|
|
FROM xskh_assessment_self_score s
|
|
LEFT JOIN xskh_assessment_indicator i ON s.indicator_id = i.id AND i.tenant_id = '000000'
|
|
WHERE s.application_id = ? AND s.deleted = 0 AND s.tenant_id = '000000'
|
|
ORDER BY s.create_time ASC
|
|
```
|
|
|
|
## 问题分析
|
|
|
|
### 根本原因
|
|
1. **字段名不匹配**: SQL查询中使用了 `i.indicator_description`,但数据库表中实际字段名为 `description`
|
|
2. **数据库表结构**: `xskh_assessment_indicator` 表中的字段名是 `description`,不是 `indicator_description`
|
|
|
|
### 数据库表结构确认
|
|
```sql
|
|
-- xskh_assessment_indicator 表结构
|
|
CREATE TABLE `xskh_assessment_indicator` (
|
|
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
|
`indicator_code` varchar(50) NOT NULL COMMENT '指标编码',
|
|
`indicator_name` varchar(100) NOT NULL COMMENT '指标名称',
|
|
`indicator_type_id` bigint(20) NOT NULL COMMENT '指标类型ID',
|
|
`indicator_type_name` varchar(100) NOT NULL COMMENT '指标类型名称',
|
|
`description` varchar(500) DEFAULT NULL COMMENT '指标说明', -- 正确字段名
|
|
`max_score` decimal(5,2) NOT NULL COMMENT '最高分值',
|
|
-- ... 其他字段
|
|
);
|
|
```
|
|
|
|
## 修复方案
|
|
|
|
### 修复文件
|
|
- **文件路径**: `backend/ruoyi-modules/ruoyi-xskh/src/main/resources/mapper/xskh/XskhAssessmentSelfScoreMapper.xml`
|
|
- **修复方法**: 将SQL查询中的字段名从 `i.indicator_description` 改为 `i.description`
|
|
|
|
### 字段命名统一优化
|
|
为了保持前后端字段命名的一致性,同时进行了以下优化:
|
|
|
|
1. **VO类字段统一**: 将 `indicatorDescription` 改为 `description`
|
|
2. **Mapper映射统一**: 更新ResultMap中的字段映射
|
|
3. **相关文件同步**: 修改了所有相关的Mapper文件和VO类
|
|
|
|
### 具体修复内容
|
|
|
|
#### 1. 修复ResultMap映射
|
|
```xml
|
|
<!-- 修复前 -->
|
|
<result property="indicatorDescription" column="indicator_description"/>
|
|
|
|
<!-- 修复后 -->
|
|
<result property="description" column="description"/>
|
|
```
|
|
|
|
#### 2. 修复SQL查询语句
|
|
```xml
|
|
<!-- 修复前 -->
|
|
SELECT
|
|
s.id, s.application_id, s.indicator_id, s.indicator_name,
|
|
i.indicator_code, i.indicator_description, s.indicator_type,
|
|
-- ... 其他字段
|
|
|
|
<!-- 修复后 -->
|
|
SELECT
|
|
s.id, s.application_id, s.indicator_id, s.indicator_name,
|
|
i.indicator_code, i.description, s.indicator_type,
|
|
-- ... 其他字段
|
|
```
|
|
|
|
### 修复后的完整SQL
|
|
```sql
|
|
SELECT
|
|
s.id,
|
|
s.application_id,
|
|
s.indicator_id,
|
|
s.indicator_name,
|
|
i.indicator_code,
|
|
i.description, -- 修复:使用正确的字段名
|
|
s.indicator_type,
|
|
s.max_score,
|
|
s.self_score,
|
|
s.self_remark,
|
|
s.teacher_score,
|
|
s.teacher_remark,
|
|
s.create_by,
|
|
s.create_time,
|
|
s.update_by,
|
|
s.update_time
|
|
FROM xskh_assessment_self_score s
|
|
LEFT JOIN xskh_assessment_indicator i ON s.indicator_id = i.id AND i.tenant_id = '000000'
|
|
WHERE s.application_id = #{applicationId}
|
|
AND s.deleted = 0
|
|
AND s.tenant_id = '000000'
|
|
ORDER BY s.create_time ASC
|
|
```
|
|
|
|
## 验证结果
|
|
|
|
### 修复验证
|
|
1. ✅ **字段映射正确**: ResultMap中的 `description` 字段正确映射到数据库的 `description` 字段
|
|
2. ✅ **SQL语法正确**: 查询语句使用正确的字段名,符合数据库表结构
|
|
3. ✅ **VO类兼容**: `XskhAssessmentSelfScoreVo` 类中已正确定义 `description` 字段
|
|
4. ✅ **字段命名统一**: 前后端字段名保持一致,避免混淆
|
|
|
|
### 测试建议
|
|
1. **接口测试**: 重新调用 `/assessment/approval/{id}` 接口,确认不再出现字段错误
|
|
2. **数据验证**: 确认返回的指标说明数据正确显示
|
|
3. **功能测试**: 测试学生考核审核功能,确认自评得分查询正常
|
|
|
|
## 经验总结
|
|
|
|
### 开发规范提醒
|
|
1. **字段命名一致性**: SQL查询中的字段名必须与数据库表结构完全一致
|
|
2. **数据库设计规范**: 遵循项目统一的字段命名规范,避免混淆
|
|
3. **代码审查**: 在开发过程中注意检查SQL语句的字段名正确性
|
|
|
|
### 预防措施
|
|
1. **数据库文档**: 及时更新数据库设计文档,确保字段名准确
|
|
2. **代码规范**: 建立SQL编写规范,要求字段名与数据库表结构保持一致
|
|
3. **测试覆盖**: 增加SQL语法检查的自动化测试
|
|
|
|
## 相关文件
|
|
|
|
- **数据库设计**: `docs/设计文档/database/学生考核管理/学生考核管理数据库模型.sql`
|
|
- **Mapper文件**:
|
|
- `backend/ruoyi-modules/ruoyi-xskh/src/main/resources/mapper/xskh/XskhAssessmentSelfScoreMapper.xml`
|
|
- `backend/ruoyi-modules/ruoyi-xskh/src/main/resources/mapper/xskh/XskhAssessmentPlanMapper.xml`
|
|
- **VO类**:
|
|
- `backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/vo/XskhAssessmentSelfScoreVo.java`
|
|
- `backend/ruoyi-modules/ruoyi-xskh/src/main/java/org/dromara/xskh/domain/vo/XskhAssessmentPlanIndicatorVo.java`
|
|
|
|
---
|
|
|
|
**修复人员**: Cursor AI
|
|
**修复时间**: 2025-08-21
|
|
**修复状态**: ✅ 已完成 |