141 lines
5.8 KiB
SQL
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'; |