Files
hzdyjs/docs/设计文档/database/学工管理-学生信息管理/14-fix-poor-family-field-mismatch.sql
T
2025-07-19 10:18:27 +08:00

141 lines
5.8 KiB
SQL

-- ==========================================
-- 修复is_from_poor_family字段名不匹配问题
-- 版本:V2.4.0
-- 功能:解决VO类、XML映射文件、数据库字段名不一致问题
-- 作者:Cursor AI 辅助
-- 时间:2025-01-12
-- 问题:三层不匹配 - VO类(isPoorStudent) vs XML映射(isFromPoorFamily) vs 数据库(is_poor_student)
-- 解决方案:统一使用is_from_poor_family字段名,保持与XML映射文件一致
-- ==========================================
-- 设置字符集
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- 检查当前字段状态
-- ----------------------------
SELECT '==============================' as 'Result';
SELECT '🔍 字段名不匹配问题修复' as 'Result';
SELECT '==============================' as 'Result';
-- 检查is_poor_student字段是否存在
SELECT '=== 检查is_poor_student字段 ===' as 'Result';
SELECT
CASE WHEN COUNT(*) > 0 THEN '✅ is_poor_student 字段存在' ELSE '❌ is_poor_student 字段不存在' END as 'is_poor_student_check'
FROM information_schema.COLUMNS
WHERE table_schema = DATABASE() AND table_name = 'xg_student_info' AND column_name = 'is_poor_student';
-- 检查is_from_poor_family字段是否存在
SELECT '=== 检查is_from_poor_family字段 ===' as 'Result';
SELECT
CASE WHEN COUNT(*) > 0 THEN '✅ is_from_poor_family 字段存在' ELSE '❌ is_from_poor_family 字段不存在' END as 'is_from_poor_family_check'
FROM information_schema.COLUMNS
WHERE table_schema = DATABASE() AND table_name = 'xg_student_info' AND column_name = 'is_from_poor_family';
-- ----------------------------
-- 解决方案:重命名字段保持与XML映射一致
-- ----------------------------
-- 如果is_poor_student字段存在,则重命名为is_from_poor_family
-- 这样可以保持与XML映射文件的一致性
SELECT '=== 字段重命名修复 ===' as 'Result';
-- 检查字段存在性,然后进行重命名
SET @sql = (
SELECT CASE
WHEN COUNT(*) > 0 THEN 'ALTER TABLE `xg_student_info` CHANGE COLUMN `is_poor_student` `is_from_poor_family` tinyint(1) DEFAULT 0 COMMENT ''是否贫困生:0-否,1-是'';'
ELSE 'SELECT ''is_poor_student字段不存在,无需重命名'' as ''Result'';'
END
FROM information_schema.COLUMNS
WHERE table_schema = DATABASE() AND table_name = 'xg_student_info' AND column_name = 'is_poor_student'
);
-- 执行重命名SQL
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 如果is_from_poor_family字段仍然不存在,则直接添加
SELECT '=== 确保is_from_poor_family字段存在 ===' as 'Result';
SET @sql2 = (
SELECT CASE
WHEN COUNT(*) = 0 THEN 'ALTER TABLE `xg_student_info` ADD COLUMN `is_from_poor_family` tinyint(1) DEFAULT 0 COMMENT ''是否贫困生:0-否,1-是'' AFTER `hobbies`;'
ELSE 'SELECT ''is_from_poor_family字段已存在'' as ''Result'';'
END
FROM information_schema.COLUMNS
WHERE table_schema = DATABASE() AND table_name = 'xg_student_info' AND column_name = 'is_from_poor_family'
);
-- 执行添加字段SQL
PREPARE stmt2 FROM @sql2;
EXECUTE stmt2;
DEALLOCATE PREPARE stmt2;
-- ----------------------------
-- 验证修复结果
-- ----------------------------
SELECT '=== 修复结果验证 ===' as 'Result';
-- 验证is_from_poor_family字段是否存在
SELECT
CASE WHEN COUNT(*) > 0 THEN '✅ is_from_poor_family 字段修复成功' ELSE '❌ is_from_poor_family 字段修复失败' END as 'repair_result'
FROM information_schema.COLUMNS
WHERE table_schema = DATABASE() AND table_name = 'xg_student_info' AND column_name = 'is_from_poor_family';
-- 验证is_poor_student字段是否已被移除
SELECT
CASE WHEN COUNT(*) = 0 THEN '✅ is_poor_student 字段已正确移除' ELSE '⚠️ is_poor_student 字段仍然存在' END as 'old_field_check'
FROM information_schema.COLUMNS
WHERE table_schema = DATABASE() AND table_name = 'xg_student_info' AND column_name = 'is_poor_student';
-- 测试原来报错的统计查询
SELECT '=== 测试统计查询 ===' as 'Result';
SELECT
college_code,
college_name,
count(*) as total_count,
sum(case when gender = 'M' then 1 else 0 end) as male_count,
sum(case when gender = 'F' then 1 else 0 end) as female_count,
sum(case when student_status = '1' then 1 else 0 end) as active_count,
sum(case when student_status = '2' then 1 else 0 end) as suspended_count,
sum(case when student_status = '5' then 1 else 0 end) as graduated_count,
sum(case when is_from_poor_family = 1 then 1 else 0 end) as poor_family_count,
sum(case when is_minority = 1 then 1 else 0 end) as minority_count,
sum(case when is_disabled = 1 then 1 else 0 end) as disabled_count,
sum(case when is_orphan = 1 then 1 else 0 end) as orphan_count
FROM xg_student_info
WHERE deleted = 0 AND tenant_id = '000000'
GROUP BY college_code, college_name
ORDER BY college_code;
-- 显示修复后的表结构
SELECT '=== 修复后的表结构 ===' as 'Result';
SELECT
COLUMN_NAME as '字段名',
DATA_TYPE as '数据类型',
IS_NULLABLE as '是否可空',
COLUMN_DEFAULT as '默认值',
COLUMN_COMMENT as '注释'
FROM information_schema.COLUMNS
WHERE table_schema = DATABASE() AND table_name = 'xg_student_info'
AND COLUMN_NAME IN ('is_from_poor_family', 'is_minority', 'is_disabled', 'is_orphan')
ORDER BY COLUMN_NAME;
-- 恢复外键检查
SET FOREIGN_KEY_CHECKS = 1;
-- ----------------------------
-- 脚本执行完成提示
-- ----------------------------
SELECT '==============================' as 'Result';
SELECT '✅ is_from_poor_family字段修复完成!' as 'Result';
SELECT '✅ 字段名已与XML映射文件保持一致' as 'Result';
SELECT '✅ 统计查询错误已修复' as 'Result';
SELECT '📋 下一步:需要修复XML映射文件中的property名称' as 'Result';
SELECT '⚠️ 注意:请重启后端服务并重新测试' as 'Result';
SELECT '==============================' as 'Result';