336 lines
9.2 KiB
SQL
336 lines
9.2 KiB
SQL
-- 第一阶段:数据迁移脚本
|
|
-- 说明:将现有学生信息数据迁移到新的批次管理结构中
|
|
-- 执行时间:2025-01-13
|
|
|
|
-- ===========================================
|
|
-- 1. 检查现有数据表结构
|
|
-- ===========================================
|
|
|
|
-- 检查学生信息表是否存在
|
|
SELECT '🔍 检查学生信息表结构' as 'Step';
|
|
SHOW CREATE TABLE xg_stu_msg;
|
|
|
|
-- 检查现有数据量
|
|
SELECT
|
|
'📊 现有数据统计' as 'Info',
|
|
COUNT(*) as '学生信息总数'
|
|
FROM xg_stu_msg
|
|
WHERE deleted = 0;
|
|
|
|
-- ===========================================
|
|
-- 2. 创建默认批次(如果不存在)
|
|
-- ===========================================
|
|
|
|
-- 创建默认的信息采集批次
|
|
INSERT INTO xg_collection_batch (
|
|
batch_id,
|
|
batch_code,
|
|
batch_name,
|
|
batch_type,
|
|
academic_year,
|
|
semester,
|
|
description,
|
|
start_time,
|
|
end_time,
|
|
batch_status,
|
|
publish_status,
|
|
create_by,
|
|
create_time,
|
|
update_by,
|
|
update_time,
|
|
tenant_id,
|
|
deleted
|
|
) VALUES (
|
|
1,
|
|
'DEFAULT_2024_2025',
|
|
'2024-2025学年默认批次',
|
|
'ANNUAL',
|
|
'2024-2025',
|
|
'FULL_YEAR',
|
|
'系统自动创建的默认批次,用于迁移现有学生信息数据',
|
|
'2024-09-01 00:00:00',
|
|
'2025-08-31 23:59:59',
|
|
'ACTIVE',
|
|
'PUBLISHED',
|
|
1,
|
|
NOW(),
|
|
1,
|
|
NOW(),
|
|
'000000',
|
|
0
|
|
) ON DUPLICATE KEY UPDATE
|
|
batch_name = VALUES(batch_name),
|
|
description = VALUES(description),
|
|
update_time = NOW();
|
|
|
|
-- ===========================================
|
|
-- 3. 数据迁移前的备份
|
|
-- ===========================================
|
|
|
|
-- 创建学生信息备份表
|
|
SELECT '💾 创建数据备份' as 'Step';
|
|
CREATE TABLE IF NOT EXISTS xg_stu_msg_backup_20250113 AS
|
|
SELECT * FROM xg_stu_msg WHERE deleted = 0;
|
|
|
|
-- 记录备份信息
|
|
SELECT
|
|
'✅ 备份完成' as 'Status',
|
|
COUNT(*) as '备份记录数'
|
|
FROM xg_stu_msg_backup_20250113;
|
|
|
|
-- ===========================================
|
|
-- 4. 学生信息表字段迁移
|
|
-- ===========================================
|
|
|
|
-- 为现有学生信息添加批次相关字段(如果不存在)
|
|
ALTER TABLE xg_stu_msg
|
|
ADD COLUMN IF NOT EXISTS batch_id BIGINT(20) COMMENT '所属批次ID',
|
|
ADD COLUMN IF NOT EXISTS submission_status VARCHAR(20) DEFAULT 'DRAFT' COMMENT '提交状态:DRAFT-草稿,SUBMITTED-已提交,APPROVED-已审核,REJECTED-已拒绝',
|
|
ADD COLUMN IF NOT EXISTS submission_time DATETIME COMMENT '提交时间',
|
|
ADD COLUMN IF NOT EXISTS approval_time DATETIME COMMENT '审核时间',
|
|
ADD COLUMN IF NOT EXISTS approval_by BIGINT(20) COMMENT '审核人ID',
|
|
ADD COLUMN IF NOT EXISTS approval_comments TEXT COMMENT '审核意见',
|
|
ADD COLUMN IF NOT EXISTS last_edit_time DATETIME COMMENT '最后编辑时间';
|
|
|
|
-- 添加索引
|
|
ALTER TABLE xg_stu_msg
|
|
ADD INDEX IF NOT EXISTS idx_batch_id (batch_id),
|
|
ADD INDEX IF NOT EXISTS idx_submission_status (submission_status),
|
|
ADD INDEX IF NOT EXISTS idx_submission_time (submission_time);
|
|
|
|
-- ===========================================
|
|
-- 5. 数据迁移执行
|
|
-- ===========================================
|
|
|
|
-- 将现有学生信息关联到默认批次
|
|
UPDATE xg_stu_msg
|
|
SET
|
|
batch_id = 1,
|
|
submission_status = 'APPROVED',
|
|
submission_time = create_time,
|
|
approval_time = create_time,
|
|
approval_by = create_by,
|
|
approval_comments = '系统迁移:原有数据自动审核通过',
|
|
last_edit_time = update_time
|
|
WHERE deleted = 0
|
|
AND batch_id IS NULL;
|
|
|
|
-- ===========================================
|
|
-- 6. 创建批次学生关联关系
|
|
-- ===========================================
|
|
|
|
-- 插入批次学生关联数据
|
|
INSERT INTO xg_batch_student_relation (
|
|
relation_id,
|
|
batch_id,
|
|
student_id,
|
|
student_number,
|
|
submission_status,
|
|
submission_time,
|
|
approval_status,
|
|
approval_time,
|
|
approval_by,
|
|
approval_comments,
|
|
create_by,
|
|
create_time,
|
|
update_by,
|
|
update_time,
|
|
tenant_id,
|
|
deleted
|
|
)
|
|
SELECT
|
|
msg.id * 10000 + 1 as relation_id, -- 生成唯一ID
|
|
1 as batch_id, -- 默认批次ID
|
|
msg.id as student_id, -- 学生信息ID
|
|
msg.student_number as student_number,
|
|
'SUBMITTED' as submission_status,
|
|
msg.create_time as submission_time,
|
|
'APPROVED' as approval_status,
|
|
msg.create_time as approval_time,
|
|
msg.create_by as approval_by,
|
|
'系统迁移:原有数据自动审核通过' as approval_comments,
|
|
msg.create_by as create_by,
|
|
msg.create_time as create_time,
|
|
msg.update_by as update_by,
|
|
msg.update_time as update_time,
|
|
msg.tenant_id as tenant_id,
|
|
0 as deleted
|
|
FROM xg_stu_msg msg
|
|
WHERE msg.deleted = 0
|
|
AND msg.batch_id = 1
|
|
AND NOT EXISTS (
|
|
SELECT 1 FROM xg_batch_student_relation r
|
|
WHERE r.batch_id = 1 AND r.student_id = msg.id AND r.deleted = 0
|
|
);
|
|
|
|
-- ===========================================
|
|
-- 7. 创建批次操作日志
|
|
-- ===========================================
|
|
|
|
-- 记录批次操作日志
|
|
INSERT INTO xg_batch_operation_log (
|
|
log_id,
|
|
batch_id,
|
|
operation_type,
|
|
operation_description,
|
|
operator_id,
|
|
operator_name,
|
|
operation_time,
|
|
operation_result,
|
|
operation_details,
|
|
create_by,
|
|
create_time,
|
|
tenant_id,
|
|
deleted
|
|
) VALUES (
|
|
1,
|
|
1,
|
|
'DATA_MIGRATION',
|
|
'系统数据迁移:将现有学生信息迁移到批次管理结构',
|
|
1,
|
|
'System',
|
|
NOW(),
|
|
'SUCCESS',
|
|
CONCAT('迁移完成,共处理 ', (SELECT COUNT(*) FROM xg_stu_msg WHERE deleted = 0 AND batch_id = 1), ' 条学生信息记录'),
|
|
1,
|
|
NOW(),
|
|
'000000',
|
|
0
|
|
);
|
|
|
|
-- ===========================================
|
|
-- 8. 数据完整性验证
|
|
-- ===========================================
|
|
|
|
-- 验证迁移结果
|
|
SELECT '📋 数据迁移验证' as 'Verification';
|
|
|
|
-- 检查学生信息表数据
|
|
SELECT
|
|
'学生信息表' as '表名',
|
|
COUNT(*) as '总记录数',
|
|
COUNT(CASE WHEN batch_id IS NOT NULL THEN 1 END) as '已关联批次数',
|
|
COUNT(CASE WHEN submission_status = 'APPROVED' THEN 1 END) as '已审核数'
|
|
FROM xg_stu_msg
|
|
WHERE deleted = 0;
|
|
|
|
-- 检查批次学生关联表数据
|
|
SELECT
|
|
'批次学生关联表' as '表名',
|
|
COUNT(*) as '总记录数',
|
|
COUNT(CASE WHEN approval_status = 'APPROVED' THEN 1 END) as '已审核数'
|
|
FROM xg_batch_student_relation
|
|
WHERE deleted = 0;
|
|
|
|
-- 检查批次表数据
|
|
SELECT
|
|
'信息采集批次表' as '表名',
|
|
COUNT(*) as '总记录数',
|
|
COUNT(CASE WHEN batch_status = 'ACTIVE' THEN 1 END) as '活跃批次数'
|
|
FROM xg_collection_batch
|
|
WHERE deleted = 0;
|
|
|
|
-- 检查操作日志
|
|
SELECT
|
|
'批次操作日志表' as '表名',
|
|
COUNT(*) as '总记录数'
|
|
FROM xg_batch_operation_log
|
|
WHERE deleted = 0;
|
|
|
|
-- ===========================================
|
|
-- 9. 数据一致性检查
|
|
-- ===========================================
|
|
|
|
-- 检查数据一致性
|
|
SELECT '🔍 数据一致性检查' as 'Consistency Check';
|
|
|
|
-- 检查是否有学生信息未关联到批次
|
|
SELECT
|
|
'未关联批次的学生信息' as '检查项',
|
|
COUNT(*) as '记录数'
|
|
FROM xg_stu_msg
|
|
WHERE deleted = 0 AND batch_id IS NULL;
|
|
|
|
-- 检查是否有批次学生关联记录缺失对应的学生信息
|
|
SELECT
|
|
'孤立的批次学生关联记录' as '检查项',
|
|
COUNT(*) as '记录数'
|
|
FROM xg_batch_student_relation r
|
|
WHERE r.deleted = 0
|
|
AND NOT EXISTS (
|
|
SELECT 1 FROM xg_stu_msg s
|
|
WHERE s.id = r.student_id AND s.deleted = 0
|
|
);
|
|
|
|
-- 检查学号是否一致
|
|
SELECT
|
|
'学号不一致的记录' as '检查项',
|
|
COUNT(*) as '记录数'
|
|
FROM xg_batch_student_relation r
|
|
JOIN xg_stu_msg s ON r.student_id = s.id
|
|
WHERE r.deleted = 0
|
|
AND s.deleted = 0
|
|
AND r.student_number != s.student_number;
|
|
|
|
-- ===========================================
|
|
-- 10. 迁移完成报告
|
|
-- ===========================================
|
|
|
|
SELECT '✅ 第一阶段数据迁移完成' as 'Migration Status';
|
|
|
|
-- 生成迁移报告
|
|
SELECT
|
|
'📊 迁移统计报告' as 'Report',
|
|
(SELECT COUNT(*) FROM xg_stu_msg WHERE deleted = 0) as '学生信息总数',
|
|
(SELECT COUNT(*) FROM xg_batch_student_relation WHERE deleted = 0) as '批次关联总数',
|
|
(SELECT COUNT(*) FROM xg_collection_batch WHERE deleted = 0) as '批次总数',
|
|
(SELECT COUNT(*) FROM xg_batch_operation_log WHERE deleted = 0) as '操作日志总数',
|
|
NOW() as '迁移完成时间';
|
|
|
|
-- 记录迁移完成日志
|
|
INSERT INTO xg_batch_operation_log (
|
|
log_id,
|
|
batch_id,
|
|
operation_type,
|
|
operation_description,
|
|
operator_id,
|
|
operator_name,
|
|
operation_time,
|
|
operation_result,
|
|
operation_details,
|
|
create_by,
|
|
create_time,
|
|
tenant_id,
|
|
deleted
|
|
) VALUES (
|
|
2,
|
|
1,
|
|
'MIGRATION_COMPLETE',
|
|
'第一阶段数据迁移完成',
|
|
1,
|
|
'System',
|
|
NOW(),
|
|
'SUCCESS',
|
|
'数据迁移成功完成,所有现有学生信息已迁移到批次管理结构',
|
|
1,
|
|
NOW(),
|
|
'000000',
|
|
0
|
|
);
|
|
|
|
-- ===========================================
|
|
-- 11. 后续清理建议
|
|
-- ===========================================
|
|
|
|
-- 以下语句仅作为参考,请在确认迁移成功后手动执行
|
|
|
|
-- 清理备份表(30天后执行)
|
|
-- DROP TABLE IF EXISTS xg_stu_msg_backup_20250113;
|
|
|
|
-- 优化表结构
|
|
-- OPTIMIZE TABLE xg_stu_msg;
|
|
-- OPTIMIZE TABLE xg_batch_student_relation;
|
|
-- OPTIMIZE TABLE xg_collection_batch;
|
|
-- OPTIMIZE TABLE xg_batch_operation_log;
|
|
|
|
SELECT '🎉 数据迁移脚本执行完成!' as 'Final Status'; |