Files
wechat_backend/migrations/004_plan_checkins_user_id.sql
王宏豪 9a7681112b feat(database): 迁移用户关联字段并优化打卡系统
- 修改数据库配置将MYSQL_DB从mys_info_v3改为mys_info_test
- 新增auth_users表wechat_openid字段并建立唯一索引
- 为plan_checkins表添加计划性能索引(idx_plan_period_student)
- 将checkin_records_old表关联方式从student_id改为user_id
- 将plan_checkins表关联方式从student_id改为user_id并更新附件路径
- 移除routes/auth.py中的uuid导入使用安全token生成函数
- 重构routes/checkin.py打卡逻辑去除course_type字段并优化返回结构
- 添加打卡时间限制验证功能防止过期打卡操作
- 实现小组统计功能支持老师查看各组打卡情况
- 更新主页index.html界面适配新的打卡和计划功能
- 调整计划提交时间规则为周五至周四周期
- 添加月度和年度计划提交状态验证机制
2026-09-10 14:11:59 +08:00

47 lines
2.1 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- =========================================================
-- 004: 计划记录改为按 user_id 关联(user_id = auth_users.id)
-- 目标库:mys_info_test(正式库:mys_info,如需可改)
-- 前置:plan_checkins 已有按 student_id 关联的旧数据
-- 注意:执行前请先备份 plan_checkins 表
-- =========================================================
-- 1) 新增 user_id 列
ALTER TABLE `plan_checkins`
ADD COLUMN `user_id` BIGINT NULL DEFAULT NULL AFTER `id`;
-- 2) 用 auth_users.id 按旧 student_id 回填历史记录的 user_id
UPDATE `plan_checkins` r
LEFT JOIN `auth_users` u ON u.`student_id` = r.`student_id`
SET r.`user_id` = u.`id`
WHERE r.`user_id` IS NULL;
-- 3) 重写历史附件相对路径:attachments/<student_id>/... -> attachments/<user_id>/...
UPDATE `plan_checkins` r
JOIN `auth_users` u ON u.`student_id` = r.`student_id`
SET r.`attachments` = REPLACE(r.`attachments`,
CONCAT('attachments/', r.`student_id`, '/'),
CONCAT('attachments/', u.`id`, '/'))
WHERE r.`student_id` IS NOT NULL AND r.`user_id` IS NOT NULL;
-- 4) 旧 student_id 允许为空;新代码只写 user_id
ALTER TABLE `plan_checkins`
MODIFY COLUMN `student_id` VARCHAR(64) NULL DEFAULT NULL;
-- 5) 新增唯一键 (user_id, plan_type, period_key):同用户同周期 upsert
ALTER TABLE `plan_checkins`
ADD UNIQUE KEY `uk_plan_user_period` (`user_id`, `plan_type`, `period_key`);
-- 6) 计划概览聚合索引改为按 user_id
ALTER TABLE `plan_checkins`
ADD INDEX `idx_plan_period_user` (`plan_type`, `period_key`, `user_id`);
-- =========================================================
-- 以下为可选清理(按实际索引名执行)
-- 7) 旧版 (student_id, plan_type, period_key) 唯一键确认不再使用后:
-- ALTER TABLE `plan_checkins` DROP INDEX `uk_plan_student_period`;
-- 8) 旧版展平索引确认不再使用后:
-- ALTER TABLE `plan_checkins` DROP INDEX `idx_plan_period_student`;
-- 9) 数据质量核查:有无 student_id 无对应用户、user_id 仍为空的历史记录:
-- SELECT * FROM plan_checkins WHERE user_id IS NULL;
-- =========================================================