feat: 初始化考培练系统项目
- 从服务器拉取完整代码 - 按框架规范整理项目结构 - 配置 Drone CI 测试环境部署 - 包含后端(FastAPI)、前端(Vue3)、管理端 技术栈: Vue3 + TypeScript + FastAPI + MySQL
This commit is contained in:
232
知识库/migrate_timezone_data_v2.sql
Normal file
232
知识库/migrate_timezone_data_v2.sql
Normal file
@@ -0,0 +1,232 @@
|
||||
-- 考培练系统时区数据迁移脚本 V2
|
||||
-- 将所有UTC时间戳转换为北京时间(+8小时)
|
||||
-- 只更新实际存在的表
|
||||
-- 执行时间:2025-10-17
|
||||
|
||||
USE kaopeilian;
|
||||
|
||||
-- 设置安全模式为0,允许批量更新
|
||||
SET SQL_SAFE_UPDATES = 0;
|
||||
|
||||
-- 1. 更新 users 表
|
||||
UPDATE users
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR),
|
||||
last_login_at = CASE WHEN last_login_at IS NOT NULL THEN DATE_ADD(last_login_at, INTERVAL 8 HOUR) ELSE NULL END,
|
||||
password_changed_at = CASE WHEN password_changed_at IS NOT NULL THEN DATE_ADD(password_changed_at, INTERVAL 8 HOUR) ELSE NULL END,
|
||||
deleted_at = CASE WHEN deleted_at IS NOT NULL THEN DATE_ADD(deleted_at, INTERVAL 8 HOUR) ELSE NULL END
|
||||
WHERE id > 0;
|
||||
|
||||
-- 2. 更新 teams 表
|
||||
UPDATE teams
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR),
|
||||
deleted_at = CASE WHEN deleted_at IS NOT NULL THEN DATE_ADD(deleted_at, INTERVAL 8 HOUR) ELSE NULL END
|
||||
WHERE id > 0;
|
||||
|
||||
-- 3. 更新 user_teams 表
|
||||
UPDATE user_teams
|
||||
SET joined_at = DATE_ADD(joined_at, INTERVAL 8 HOUR)
|
||||
WHERE user_id > 0;
|
||||
|
||||
-- 4. 更新 courses 表
|
||||
UPDATE courses
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR),
|
||||
published_at = CASE WHEN published_at IS NOT NULL THEN DATE_ADD(published_at, INTERVAL 8 HOUR) ELSE NULL END,
|
||||
broadcast_generated_at = CASE WHEN broadcast_generated_at IS NOT NULL THEN DATE_ADD(broadcast_generated_at, INTERVAL 8 HOUR) ELSE NULL END,
|
||||
deleted_at = CASE WHEN deleted_at IS NOT NULL THEN DATE_ADD(deleted_at, INTERVAL 8 HOUR) ELSE NULL END
|
||||
WHERE id > 0;
|
||||
|
||||
-- 5. 更新 course_materials 表
|
||||
UPDATE course_materials
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR),
|
||||
deleted_at = CASE WHEN deleted_at IS NOT NULL THEN DATE_ADD(deleted_at, INTERVAL 8 HOUR) ELSE NULL END
|
||||
WHERE id > 0;
|
||||
|
||||
-- 6. 更新 knowledge_points 表
|
||||
UPDATE knowledge_points
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR)
|
||||
WHERE id > 0;
|
||||
|
||||
-- 7. 更新 exams 表
|
||||
UPDATE exams
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR),
|
||||
start_time = DATE_ADD(start_time, INTERVAL 8 HOUR),
|
||||
end_time = CASE WHEN end_time IS NOT NULL THEN DATE_ADD(end_time, INTERVAL 8 HOUR) ELSE NULL END
|
||||
WHERE id > 0;
|
||||
|
||||
-- 8. 更新 exam_results 表
|
||||
UPDATE exam_results
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR)
|
||||
WHERE id > 0;
|
||||
|
||||
-- 9. 更新 exam_mistakes 表
|
||||
UPDATE exam_mistakes
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR),
|
||||
mastered_at = CASE WHEN mastered_at IS NOT NULL THEN DATE_ADD(mastered_at, INTERVAL 8 HOUR) ELSE NULL END
|
||||
WHERE id > 0;
|
||||
|
||||
-- 10. 更新 questions 表
|
||||
UPDATE questions
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR)
|
||||
WHERE id > 0;
|
||||
|
||||
-- 11. 更新 training_scenes 表
|
||||
UPDATE training_scenes
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR),
|
||||
deleted_at = CASE WHEN deleted_at IS NOT NULL THEN DATE_ADD(deleted_at, INTERVAL 8 HOUR) ELSE NULL END
|
||||
WHERE id > 0;
|
||||
|
||||
-- 12. 更新 training_sessions 表
|
||||
UPDATE training_sessions
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR),
|
||||
start_time = DATE_ADD(start_time, INTERVAL 8 HOUR),
|
||||
end_time = CASE WHEN end_time IS NOT NULL THEN DATE_ADD(end_time, INTERVAL 8 HOUR) ELSE NULL END
|
||||
WHERE id > 0;
|
||||
|
||||
-- 13. 更新 training_messages 表
|
||||
UPDATE training_messages
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR)
|
||||
WHERE id > 0;
|
||||
|
||||
-- 14. 更新 training_reports 表
|
||||
UPDATE training_reports
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR)
|
||||
WHERE id > 0;
|
||||
|
||||
-- 15. 更新 positions 表
|
||||
UPDATE positions
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR),
|
||||
deleted_at = CASE WHEN deleted_at IS NOT NULL THEN DATE_ADD(deleted_at, INTERVAL 8 HOUR) ELSE NULL END
|
||||
WHERE id > 0;
|
||||
|
||||
-- 16. 更新 position_members 表
|
||||
UPDATE position_members
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR),
|
||||
joined_at = DATE_ADD(joined_at, INTERVAL 8 HOUR),
|
||||
deleted_at = CASE WHEN deleted_at IS NOT NULL THEN DATE_ADD(deleted_at, INTERVAL 8 HOUR) ELSE NULL END
|
||||
WHERE id > 0;
|
||||
|
||||
-- 17. 更新 position_courses 表
|
||||
UPDATE position_courses
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR)
|
||||
WHERE id > 0;
|
||||
|
||||
-- 18. 更新 system_logs 表
|
||||
UPDATE system_logs
|
||||
SET created_at = DATE_ADD(created_at, INTERVAL 8 HOUR)
|
||||
WHERE id > 0;
|
||||
|
||||
-- 19. 更新 tasks 表
|
||||
UPDATE tasks
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR),
|
||||
deleted_at = CASE WHEN deleted_at IS NOT NULL THEN DATE_ADD(deleted_at, INTERVAL 8 HOUR) ELSE NULL END
|
||||
WHERE id > 0;
|
||||
|
||||
-- 20. 更新 task_assignments 表
|
||||
UPDATE task_assignments
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR),
|
||||
assigned_at = CASE WHEN assigned_at IS NOT NULL THEN DATE_ADD(assigned_at, INTERVAL 8 HOUR) ELSE NULL END,
|
||||
completed_at = CASE WHEN completed_at IS NOT NULL THEN DATE_ADD(completed_at, INTERVAL 8 HOUR) ELSE NULL END
|
||||
WHERE id > 0;
|
||||
|
||||
-- 21. 更新 practice_scenes 表
|
||||
UPDATE practice_scenes
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR)
|
||||
WHERE id > 0;
|
||||
|
||||
-- 22. 更新 practice_sessions 表
|
||||
UPDATE practice_sessions
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR),
|
||||
start_time = CASE WHEN start_time IS NOT NULL THEN DATE_ADD(start_time, INTERVAL 8 HOUR) ELSE NULL END,
|
||||
end_time = CASE WHEN end_time IS NOT NULL THEN DATE_ADD(end_time, INTERVAL 8 HOUR) ELSE NULL END
|
||||
WHERE id > 0;
|
||||
|
||||
-- 23. 更新 practice_dialogues 表
|
||||
UPDATE practice_dialogues
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR)
|
||||
WHERE id > 0;
|
||||
|
||||
-- 24. 更新 practice_reports 表
|
||||
UPDATE practice_reports
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR)
|
||||
WHERE id > 0;
|
||||
|
||||
-- 25. 更新 ability_assessments 表
|
||||
UPDATE ability_assessments
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR),
|
||||
assessed_at = CASE WHEN assessed_at IS NOT NULL THEN DATE_ADD(assessed_at, INTERVAL 8 HOUR) ELSE NULL END
|
||||
WHERE id > 0;
|
||||
|
||||
-- 26. 更新 growth_paths 表
|
||||
UPDATE growth_paths
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR)
|
||||
WHERE id > 0;
|
||||
|
||||
-- 27. 更新 course_exam_settings 表
|
||||
UPDATE course_exam_settings
|
||||
SET
|
||||
created_at = DATE_ADD(created_at, INTERVAL 8 HOUR),
|
||||
updated_at = DATE_ADD(updated_at, INTERVAL 8 HOUR)
|
||||
WHERE id > 0;
|
||||
|
||||
-- 恢复安全模式
|
||||
SET SQL_SAFE_UPDATES = 1;
|
||||
|
||||
-- 验证:查看更新后的时间
|
||||
SELECT '============================================' as '';
|
||||
SELECT '时区迁移完成!以下是部分数据验证:' as message;
|
||||
SELECT '============================================' as '';
|
||||
SELECT '用户表示例:' as '';
|
||||
SELECT id, username, created_at, updated_at FROM users LIMIT 3;
|
||||
SELECT '课程表示例:' as '';
|
||||
SELECT id, title, created_at, updated_at FROM courses LIMIT 3;
|
||||
SELECT '当前数据库时间:' as '';
|
||||
SELECT NOW() as current_beijing_time, UTC_TIMESTAMP() as utc_time;
|
||||
|
||||
Reference in New Issue
Block a user