Просмотр исходного кода

fix(backend): add migrations 126-132 with ensureColumn for column alignment

E2E Test Bot 1 месяц назад
Родитель
Сommit
e5a17848f9

+ 53 - 0
cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java

@@ -5991,6 +5991,59 @@ try {
         log.warn("创建points_exchange_records表可能已存在: {}", e.getMessage());
     }
 
+    // 迁移126: emotion_checkin表修复列类型与添加新列
+    ensureColumn("emotion_checkin", "mood_weather", "VARCHAR(20) DEFAULT NULL COMMENT '心情天气: sunny/cloudy/rainy/stormy'");
+    ensureColumn("emotion_checkin", "emotion_tags", "VARCHAR(200) DEFAULT NULL COMMENT '情绪标签,逗号分隔'");
+    ensureColumn("emotion_checkin", "energy_awarded", "INT DEFAULT 0 COMMENT '发放能量值'");
+    ensureColumn("emotion_checkin", "mood_score", "INT DEFAULT NULL COMMENT '心情分数(0-100)'");
+    ensureColumn("emotion_checkin", "stress_level", "INT DEFAULT NULL COMMENT '压力等级(1-5)'");
+    ensureColumn("emotion_checkin", "arousal_level", "INT DEFAULT NULL COMMENT '唤醒等级(1-5)'");
+    ensureColumn("emotion_checkin", "sleep_hours", "DECIMAL(4,1) DEFAULT NULL COMMENT '睡眠时长(小时)'");
+    ensureColumn("emotion_checkin", "sleep_quality", "VARCHAR(20) DEFAULT NULL COMMENT '睡眠质量: good/fair/poor'");
+    try {
+        jdbcTemplate.execute("ALTER TABLE emotion_checkin MODIFY COLUMN user_id BIGINT NULL COMMENT '用户ID(旧字段,可为空)'");
+        log.info("已修改emotion_checkin.user_id为可空");
+    } catch (Exception e) {
+        log.warn("修改emotion_checkin.user_id可能已处理: {}", e.getMessage());
+    }
+    try {
+        jdbcTemplate.execute("ALTER TABLE emotion_checkin MODIFY COLUMN emotion_type VARCHAR(50) DEFAULT 'custom' COMMENT '情绪类型'");
+        log.info("已修改emotion_checkin.emotion_type为VARCHAR");
+    } catch (Exception e) {
+        log.warn("修改emotion_checkin.emotion_type可能已处理: {}", e.getMessage());
+    }
+
+    // 迁移127: children表添加name列(兼容旧SQL查询如游戏排行榜LEFT JOIN)
+    ensureColumn("children", "name", "VARCHAR(50) DEFAULT NULL COMMENT '姓名(兼容旧查询)'");
+
+    // 迁移128: family_fortune表添加缺失列
+    ensureColumn("family_fortune", "fortune_level_text", "VARCHAR(50) DEFAULT NULL COMMENT '运势等级文字'");
+    ensureColumn("family_fortune", "fortune_description", "VARCHAR(500) DEFAULT NULL COMMENT '运势描述'");
+    ensureColumn("family_fortune", "mood_emoji", "VARCHAR(20) DEFAULT NULL COMMENT '心情表情'");
+    ensureColumn("family_fortune", "mood_text", "VARCHAR(100) DEFAULT NULL COMMENT '心情描述文字'");
+    ensureColumn("family_fortune", "weekly_tip", "VARCHAR(500) DEFAULT NULL COMMENT '本周建议'");
+
+    // 迁移129: membership_levels表添加price_quarterly列
+    ensureColumn("membership_levels", "price_quarterly", "DECIMAL(10,2) DEFAULT NULL COMMENT '季度价格'");
+
+    // 迁移130: share_events表添加缺失列
+    ensureColumn("share_events", "target_type", "VARCHAR(20) DEFAULT NULL COMMENT '分享目标类型'");
+    ensureColumn("share_events", "share_channel", "VARCHAR(20) DEFAULT NULL COMMENT '分享渠道'");
+    ensureColumn("share_events", "share_title", "VARCHAR(200) DEFAULT NULL COMMENT '分享标题'");
+    ensureColumn("share_events", "share_url", "VARCHAR(500) DEFAULT NULL COMMENT '分享URL'");
+    ensureColumn("share_events", "read_count", "INT DEFAULT 0 COMMENT '阅读次数'");
+    ensureColumn("share_events", "reward_points", "INT DEFAULT 0 COMMENT '奖励积分'");
+    ensureColumn("share_events", "status", "VARCHAR(20) DEFAULT 'active' COMMENT '状态'");
+    ensureColumn("share_events", "expires_at", "DATETIME DEFAULT NULL COMMENT '过期时间'");
+    ensureColumn("share_events", "updated_at", "DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'");
+
+    // 迁移131: share_reads表添加缺失列
+    ensureColumn("share_reads", "read_duration", "INT DEFAULT NULL COMMENT '阅读时长(秒)'");
+    ensureColumn("share_reads", "read_at", "DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '阅读时间'");
+
+    // 迁移132: points_exchange_records表确保family_member_id列
+    ensureColumn("points_exchange_records", "family_member_id", "BIGINT COMMENT '家庭成员ID'");
+
     private void runMigration82() {
         try {
             jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS ai_conversation_summary (" +