# 学生考核自评得分查询字段错误修复报告
## 问题描述
**错误时间**: 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
```
#### 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
**修复状态**: ✅ 已完成