code-adjust-record-2025-08-04-missing-fields-fix.md 9.0 KB

奖学金类型表字段缺失修复记录

问题发现时间: 2025-08-04 16:00:00
问题分析时间: 2025-08-04 16:05:00
修复完成时间: 2025-08-04 16:20:00
详情页问题发现: 2025-08-04 16:40:00 详情页修复完成: 2025-08-04 16:50:00 验证状态: 🟡 需要重启后端服务并执行SQL脚本验证 部署状态: 🟡 需要先执行SQL脚本,再重启后端服务

🐛 问题描述

用户反馈问题

  1. 初始反馈:申请条件、评定标准、备注三个字段在新增和修改时无法正确写入数据库。
  2. 后续反馈:数据库里有值了,但是详情页面这三个字段还是没有显示正确的值。

问题分析结果

🔍 根本原因

经过代码检查发现,数据库表和后端代码存在严重的字段不匹配问题:

第一轮问题(数据写入):

  1. 数据库表缺失字段:

    • application_conditions(申请条件)- 数据库中不存在
    • evaluation_criteria(评定标准)- 数据库中不存在
    • remark(备注)- 数据库中不存在
  2. 后端代码缺失:

    • 实体类JcbtScholarshipType.java中缺少这三个字段
    • BO类JcbtScholarshipTypeBo.java中缺少这三个字段

第二轮问题(数据显示):

  1. VO类缺失字段:

    • VO类JcbtScholarshipTypeVo.java中缺少这三个字段
    • MyBatis映射配置缺少字段映射
    • SQL查询语句缺少字段查询
  2. 前端代码正确:

    • ✅ 前端表单正确绑定了这三个字段
    • ✅ 前端详情页正确显示了这三个字段
    • ✅ 前端数据提交正常

📋 现有字段对比

数据库实际字段(jcbt_scholarship_type表):

description TEXT COMMENT '奖学金描述',
application_guide TEXT COMMENT '申请指南',
-- 修复前缺失:application_conditions, evaluation_criteria, remark
-- 修复后已添加:
application_conditions TEXT COMMENT '申请条件',
evaluation_criteria TEXT COMMENT '评定标准', 
remark VARCHAR(500) COMMENT '备注',
sort_order INT(11) DEFAULT 0 COMMENT '排序号',

前端表单字段:

v-model="form.applicationConditions"  // ✅ 前端有
v-model="form.evaluationCriteria"     // ✅ 前端有  
v-model="form.remark"                 // ✅ 前端有

前端详情显示:

{{ viewData.applicationConditions || '无' }}  // ✅ 前端有
{{ viewData.evaluationCriteria || '无' }}     // ✅ 前端有  
{{ viewData.remark || '无' }}                 // ✅ 前端有

后端代码字段:

// 修复前:❌ 实体类、BO类、VO类都缺失这三个字段
// 修复后:✅ 实体类、BO类、VO类都已添加这三个字段

🛠️ 修复方案

1. 数据库字段添加(第一轮修复)

文件:backend/sql/add_missing_fields_to_scholarship_type.sql

-- 添加申请条件字段
ALTER TABLE jcbt_scholarship_type 
ADD COLUMN IF NOT EXISTS application_conditions TEXT COMMENT '申请条件'
AFTER application_guide;

-- 添加评定标准字段  
ALTER TABLE jcbt_scholarship_type
ADD COLUMN IF NOT EXISTS evaluation_criteria TEXT COMMENT '评定标准'
AFTER application_conditions;

-- 添加备注字段
ALTER TABLE jcbt_scholarship_type
ADD COLUMN IF NOT EXISTS remark VARCHAR(500) COMMENT '备注'
AFTER evaluation_criteria;

2. 实体类字段添加(第一轮修复)

文件:backend/ruoyi-modules/ruoyi-jcbt/src/main/java/org/dromara/jcbt/domain/JcbtScholarshipType.java

/**
 * 申请条件
 */
private String applicationConditions;

/**
 * 评定标准
 */
private String evaluationCriteria;

/**
 * 备注
 */
private String remark;

3. BO类字段添加(第一轮修复)

文件:backend/ruoyi-modules/ruoyi-jcbt/src/main/java/org/dromara/jcbt/domain/bo/JcbtScholarshipTypeBo.java

/**
 * 申请条件
 */
@Size(max = 2000, message = "申请条件不能超过2000个字符")
private String applicationConditions;

/**
 * 评定标准
 */
@Size(max = 2000, message = "评定标准不能超过2000个字符")
private String evaluationCriteria;

/**
 * 备注
 */
@Size(max = 500, message = "备注不能超过500个字符")
private String remark;

4. VO类字段添加(第二轮修复)

文件:backend/ruoyi-modules/ruoyi-jcbt/src/main/java/org/dromara/jcbt/domain/vo/JcbtScholarshipTypeVo.java

/**
 * 申请条件
 */
@ExcelProperty(value = "申请条件")
private String applicationConditions;

/**
 * 评定标准
 */
@ExcelProperty(value = "评定标准")
private String evaluationCriteria;

/**
 * 备注
 */
@ExcelProperty(value = "备注")
private String remark;

5. MyBatis映射修复(第二轮修复)

文件:backend/ruoyi-modules/ruoyi-jcbt/src/main/resources/mapper/jcbt/JcbtScholarshipTypeMapper.xml

SQL查询语句修复:

<sql id="selectJcbtScholarshipTypeVo">
    select id, type_code, type_name, type_category, level_type, award_amount, 
           description, application_guide, application_conditions, evaluation_criteria, remark,
           compatibility_type, sort_order, status, is_system,
           create_dept, create_by, create_time, update_by, update_time
    from jcbt_scholarship_type
</sql>

resultMap映射修复:

<resultMap type="org.dromara.jcbt.domain.vo.JcbtScholarshipTypeVo" id="JcbtScholarshipTypeResult">
    <!-- 基础字段 -->
    <result property="id"    column="id"    />
    <result property="typeCode"    column="type_code"    />
    <result property="typeName"    column="type_name"    />
    <result property="typeCategory"    column="type_category"    />
    <result property="levelType"    column="level_type"    />
    <result property="awardAmount"    column="award_amount"    />
    
    <!-- 详细描述字段 -->
    <result property="description"    column="description"    />
    <result property="applicationGuide"    column="application_guide"    />
    <result property="applicationConditions"    column="application_conditions"    />
    <result property="evaluationCriteria"    column="evaluation_criteria"    />
    <result property="remark"    column="remark"    />
    
    <!-- 控制字段 -->
    <result property="compatibilityType"    column="compatibility_type"    />
    <result property="sortOrder"    column="sort_order"    />
    <result property="status"    column="status"    />
    <result property="isSystem"    column="is_system"    />
    
    <!-- 基础审计字段 -->
    <result property="createBy"    column="create_by"    />
    <result property="createTime"    column="create_time"    />
    <result property="updateBy"    column="update_by"    />
    <result property="updateTime"    column="update_time"    />
</resultMap>

📊 修复后的完整字段列表

基础信息字段

  • ✅ 奖学金类型编码 (type_code)
  • ✅ 奖学金名称 (type_name)
  • ✅ 奖学金类别 (type_category)
  • ✅ 奖学金等级 (level_type)
  • ✅ 奖励金额 (award_amount)

详细描述字段

  • ✅ 奖学金描述 (description)
  • ✅ 申请指南 (application_guide)
  • ✅ 申请条件 (application_conditions) 🆕 新增
  • ✅ 评定标准 (evaluation_criteria) 🆕 新增
  • ✅ 备注 (remark) 🆕 新增

控制字段

  • ✅ 排序号 (sort_order)
  • ✅ 状态 (status)
  • ✅ 系统内置 (is_system)
  • ✅ 兼得类型 (compatibility_type)

🚀 部署和验证步骤

第一步:执行SQL脚本

# 在数据库中执行
source backend/sql/add_missing_fields_to_scholarship_type.sql

第二步:重启后端服务

cd backend
# 重启Spring Boot应用

第三步:验证功能

  1. 打开奖学金类型管理页面
  2. 新增奖学金类型:
    • 填写"申请条件"字段
    • 填写"评定标准"字段
    • 填写"备注"字段
    • 保存并查看是否成功
  3. 修改现有记录:
    • 编辑现有奖学金类型
    • 修改这三个字段的内容
    • 保存并验证
  4. 查看详情页面:
    • 确认这三个字段在详情页正确显示

💡 经验总结

问题预防

  1. 字段添加三步骤:数据库→实体类→BO类,缺一不可
  2. 前后端对比检查:前端字段必须在后端有对应映射
  3. MyBatis映射检查:确保实体类字段与数据库字段一一对应

最佳实践

  1. 先数据库后代码:避免运行时映射错误
  2. 字段验证规则:TEXT字段建议2000字符,VARCHAR建议500字符
  3. 字段注释完整:方便后续维护和理解

🔗 相关文件

  • SQL脚本: backend/sql/add_missing_fields_to_scholarship_type.sql
  • 实体类: backend/ruoyi-modules/ruoyi-jcbt/src/main/java/org/dromara/jcbt/domain/JcbtScholarshipType.java
  • BO类: backend/ruoyi-modules/ruoyi-jcbt/src/main/java/org/dromara/jcbt/domain/bo/JcbtScholarshipTypeBo.java
  • 前端页面: web/src/views/jcbt/scholarship/type/index.vue

📝 后续任务

  • 执行SQL脚本添加数据库字段
  • 重启后端服务
  • 功能验证测试
  • 更新API文档(如需要)