Files
hzdyjs/docs/技术问题解决记录/培训申请表字段缺失修复SQL.md
T
2025-10-14 16:48:17 +08:00

7.3 KiB
Raw Blame History

培训申请表字段缺失修复SQL脚本

📋 问题描述

培训申请菜单下的培训申请选项卡中点击申请培训按钮弹出的界面中新增了多个字段,但是远程数据库 hzdyjs_xg 中的 rs_training_application 表中未增加这些字段,导致通过申请培训填写内容后提交无法保存。

🔍 字段分析

根据前端申请培训界面的分析,发现以下新增字段需要在数据库中补充:

前端新增字段清单

  1. 基本情况字段:

    • current_title - 现职称
    • current_position - 现岗位
    • work_start_time - 参加工作时间
    • phone - 联系电话
  2. 培训情况字段:

    • organizer_unit - 主办单位
    • training_type - 培训类型
    • training_fee - 培训费用
    • companions - 同行人(存储为JSON字符串)
    • training_purpose - 培训目的
  3. 缺失的必要字段:

    • course_id - 课程ID(关联字段)
    • attachment_ids - 附件ID列表

🛠️ 修复SQL脚本

步骤1:添加基本情况字段

-- 添加基本情况相关字段
ALTER TABLE `rs_training_application` 
ADD COLUMN `current_title` varchar(100) DEFAULT NULL COMMENT '现职称' AFTER `position`,
ADD COLUMN `current_position` varchar(50) DEFAULT NULL COMMENT '现岗位' AFTER `current_title`,
ADD COLUMN `work_start_time` date DEFAULT NULL COMMENT '参加工作时间' AFTER `current_position`,
ADD COLUMN `phone` varchar(20) DEFAULT NULL COMMENT '联系电话' AFTER `work_start_time`;

步骤2:添加培训情况字段

-- 添加培训情况相关字段
ALTER TABLE `rs_training_application` 
ADD COLUMN `organizer_unit` varchar(200) DEFAULT NULL COMMENT '主办单位' AFTER `phone`,
ADD COLUMN `training_type` varchar(50) DEFAULT NULL COMMENT '培训类型' AFTER `organizer_unit`,
ADD COLUMN `training_fee` decimal(10,2) DEFAULT '0.00' COMMENT '培训费用' AFTER `training_type`,
ADD COLUMN `companions` text DEFAULT NULL COMMENT '同行人员列表(JSON格式)' AFTER `training_fee`,
ADD COLUMN `training_purpose` text DEFAULT NULL COMMENT '培训目的' AFTER `companions`;

步骤3:添加缺失的必要字段

-- 添加课程ID字段(如果不存在)
ALTER TABLE `rs_training_application` 
ADD COLUMN `course_id` bigint(20) DEFAULT NULL COMMENT '课程ID' AFTER `application_id`;

-- 添加附件ID字段
ALTER TABLE `rs_training_application` 
ADD COLUMN `attachment_ids` text DEFAULT NULL COMMENT '附件ID列表(逗号分隔)' AFTER `training_purpose`;

步骤4:完整的一次性执行脚本

-- 一次性添加所有缺失字段的完整脚本
ALTER TABLE `rs_training_application` 
ADD COLUMN `course_id` bigint(20) DEFAULT NULL COMMENT '课程ID' AFTER `application_id`,
ADD COLUMN `current_title` varchar(100) DEFAULT NULL COMMENT '现职称' AFTER `position`,
ADD COLUMN `current_position` varchar(50) DEFAULT NULL COMMENT '现岗位' AFTER `current_title`,
ADD COLUMN `work_start_time` date DEFAULT NULL COMMENT '参加工作时间' AFTER `current_position`,
ADD COLUMN `phone` varchar(20) DEFAULT NULL COMMENT '联系电话' AFTER `work_start_time`,
ADD COLUMN `organizer_unit` varchar(200) DEFAULT NULL COMMENT '主办单位' AFTER `phone`,
ADD COLUMN `training_type` varchar(50) DEFAULT NULL COMMENT '培训类型' AFTER `organizer_unit`,
ADD COLUMN `training_fee` decimal(10,2) DEFAULT '0.00' COMMENT '培训费用' AFTER `training_type`,
ADD COLUMN `companions` text DEFAULT NULL COMMENT '同行人员列表(JSON格式)' AFTER `training_fee`,
ADD COLUMN `training_purpose` text DEFAULT NULL COMMENT '培训目的' AFTER `companions`,
ADD COLUMN `attachment_ids` text DEFAULT NULL COMMENT '附件ID列表(逗号分隔)' AFTER `training_purpose`;

📊 字段映射关系

前端 → 数据库字段映射

前端字段 数据库字段 类型 说明
applicationForm.currentTitle current_title varchar(100) 现职称
applicationForm.currentPosition current_position varchar(50) 现岗位
applicationForm.workStartTime work_start_time date 参加工作时间
applicationForm.phone phone varchar(20) 联系电话
applicationForm.organizerUnit organizer_unit varchar(200) 主办单位
applicationForm.trainingType training_type varchar(50) 培训类型
applicationForm.trainingFee training_fee decimal(10,2) 培训费用
applicationForm.companions companions text 同行人员(JSON)
applicationForm.trainingPurpose training_purpose text 培训目的
applicationForm.attachmentIds attachment_ids text 附件ID列表

🔄 后端代码调整建议

实体类需要增加的字段

在 RsTrainingApplication.java 中需要添加:

/**
 * 现职称
 */
private String currentTitle;

/**
 * 现岗位
 */
private String currentPosition;

/**
 * 参加工作时间
 */
@JsonFormat(pattern = "yyyy-MM-dd")
private Date workStartTime;

/**
 * 联系电话
 */
private String phone;

/**
 * 主办单位
 */
private String organizerUnit;

/**
 * 培训类型
 */
private String trainingType;

/**
 * 培训费用
 */
private BigDecimal trainingFee;

/**
 * 同行人员(JSON格式)
 */
private String companions;

/**
 * 培训目的
 */
private String trainingPurpose;

/**
 * 附件ID列表
 */
private String attachmentIds;

✅ 验证步骤

1. 执行SQL后验证表结构

-- 查看表结构确认字段是否添加成功
DESC rs_training_application;

2. 测试数据插入

-- 测试插入新字段数据
INSERT INTO rs_training_application (
    application_id, course_id, course_name, user_id, user_name, 
    department, position, current_title, current_position, 
    work_start_time, phone, organizer_unit, training_type, 
    training_fee, companions, training_purpose, attachment_ids,
    reason, status, apply_time, location, duration, 
    start_time, end_time, tenant_id, create_dept, 
    create_by, create_time, remark, deleted
) VALUES (
    123456789, 0, '测试培训', 1, '张三',
    '人文学院', '教师', '副教授', '教学', 
    '2020-01-01', '13800138000', '浙江大学', '教学',
    1500.00, '[{"teacherId": 2, "teacherName": "李四"}]', '提升教学能力', '1001,1002',
    '参加培训提升能力', '0', NOW(), '杭州', 40,
    '2025-02-01', '2025-02-05', '000000', 101,
    1, NOW(), '测试备注', '0'
);

3. 前端功能测试

  • 填写申请培训表单的所有新增字段
  • 提交表单验证是否能成功保存
  • 查看申请详情确认所有字段都正确显示

📝 注意事项

  1. 备份数据:执行SQL前请备份 rs_training_application 表
  2. 字段长度:根据实际业务需求调整varchar字段长度
  3. 索引优化:可以考虑为常用查询字段添加索引
  4. 数据类型:companions 字段存储JSON格式的同行人员信息
  5. 兼容性:确保修改后的表结构与前端、后端代码完全匹配

🎯 执行顺序

  1. 执行完整SQL脚本添加所有缺失字段
  2. 更新后端实体类 RsTrainingApplication.java
  3. 重启后端服务
  4. 测试前端申请培训功能
  5. 验证数据库数据正确性

创建时间: 2025-01-03
问题状态: 待修复
预计影响: 解决培训申请提交失败问题