|
@@ -5991,6 +5991,59 @@ try {
|
|
|
log.warn("创建points_exchange_records表可能已存在: {}", e.getMessage());
|
|
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() {
|
|
private void runMigration82() {
|
|
|
try {
|
|
try {
|
|
|
jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS ai_conversation_summary (" +
|
|
jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS ai_conversation_summary (" +
|