|
|
@@ -2654,12 +2654,12 @@ log.info("已添加template_id列到tasks表");
|
|
|
jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS bazi_reading_template (" +
|
|
|
"id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
"element VARCHAR(20) NOT NULL COMMENT '五行: wood/fire/earth/metal/water', " +
|
|
|
- "condition VARCHAR(20) NOT NULL COMMENT '状态: strong/weak/balanced', " +
|
|
|
+ "`condition` VARCHAR(20) NOT NULL COMMENT '状态: strong/weak/balanced', " +
|
|
|
"personal_trait TEXT COMMENT '性格特质描述', " +
|
|
|
"mind_growth_advice TEXT COMMENT '心理成长建议', " +
|
|
|
"daily_tip_template TEXT COMMENT '每日宜忌模板', " +
|
|
|
"created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
|
|
|
- "UNIQUE KEY uk_element_condition (element, condition)" +
|
|
|
+ "UNIQUE KEY uk_element_condition (element, `condition`)" +
|
|
|
") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='五行命理解读模板'");
|
|
|
log.info("已创建 bazi_reading_template 表");
|
|
|
} catch (Exception e) {
|
|
|
@@ -2687,7 +2687,7 @@ log.info("已添加template_id列到tasks表");
|
|
|
"SELECT COUNT(*) FROM bazi_reading_template", Integer.class);
|
|
|
if (count == null || count == 0) {
|
|
|
jdbcTemplate.batchUpdate(
|
|
|
- "INSERT INTO bazi_reading_template (element, condition, personal_trait, mind_growth_advice, daily_tip_template) VALUES (?, ?, ?, ?, ?)",
|
|
|
+ "INSERT INTO bazi_reading_template (element, `condition`, personal_trait, mind_growth_advice, daily_tip_template) VALUES (?, ?, ?, ?, ?)",
|
|
|
java.util.Arrays.asList(new Object[][]{
|
|
|
{"wood", "strong", "性格坚韧、有进取心,具有领导力和开拓精神", "学会适当放松,避免过刚易折,培养弹性思维", "宜进行伸展运动,忌高强度冲突"},
|
|
|
{"wood", "weak", "温和有礼、善于合作,但决策时容易犹豫", "增强自信心训练,培养果断决策能力", "宜与自然相处,忌过度迁就他人"},
|
|
|
@@ -3124,7 +3124,7 @@ log.info("已添加template_id列到tasks表");
|
|
|
// supply_settlements.remark
|
|
|
modifyColumnToText("supply_settlements", "remark", "备注");
|
|
|
// content_sections.description
|
|
|
- modifyColumnToText("content_sections", "description", "描述说明");
|
|
|
+ ensureColumn("content_sections", "description", "TEXT COMMENT '描述说明'");
|
|
|
// education_systems.description
|
|
|
modifyColumnToText("education_systems", "description", "描述");
|
|
|
// dimension_config.description
|
|
|
@@ -4226,18 +4226,7 @@ try {
|
|
|
// 迁移36: family_members表添加generation + is_spouse列(辈分重构)
|
|
|
ensureColumn("family_members", "generation", "INT COMMENT '辈分值(0=家庭创建者,+n=向上n代,-n=向下n代)'");
|
|
|
ensureColumn("family_members", "is_spouse", "TINYINT(1) DEFAULT 0 COMMENT '是否配偶(同辈)'");
|
|
|
-
|
|
|
- // 迁移37: 旧数据generation赋值(基于relationship_type映射)
|
|
|
- try {
|
|
|
- jdbcTemplate.execute("UPDATE family_members SET generation = 0, is_spouse = 1 WHERE relationship_type = 'spouse'");
|
|
|
- jdbcTemplate.execute("UPDATE family_members SET generation = 1 WHERE relationship_type = 'parent'");
|
|
|
- jdbcTemplate.execute("UPDATE family_members SET generation = -1 WHERE relationship_type IN ('child')");
|
|
|
- jdbcTemplate.execute("UPDATE family_members SET generation = 0 WHERE relationship_type = 'sibling'");
|
|
|
- jdbcTemplate.execute("UPDATE family_members SET generation = 0 WHERE generation IS NULL AND relationship_type IS NOT NULL");
|
|
|
- log.info("已迁移family_members.generation数据");
|
|
|
- } catch (Exception e) {
|
|
|
- log.warn("迁移family_members.generation数据失败: {}", e.getMessage());
|
|
|
- }
|
|
|
+ // 迁移37: relationship_type列已删除,旧数据已迁移完成
|
|
|
|
|
|
// 迁移38: product_orders表添加points_used/points_cost/money_amount列(混合支付支持)
|
|
|
ensureColumn("product_orders", "points_used", "INT DEFAULT 0 COMMENT '使用的积分数量'");
|
|
|
@@ -4324,13 +4313,8 @@ try {
|
|
|
log.warn("创建supply_settlement_detail表失败: {}", e.getMessage());
|
|
|
}
|
|
|
|
|
|
- // 迁移40: 添加supplier_admin角色到users.role ENUM
|
|
|
- try {
|
|
|
- jdbcTemplate.execute("ALTER TABLE users MODIFY COLUMN role ENUM('parent','child','teacher','supplier_admin') NOT NULL DEFAULT 'parent' COMMENT '当前活跃角色'");
|
|
|
- log.info("已添加supplier_admin到users.role ENUM");
|
|
|
- } catch (Exception e) {
|
|
|
- log.warn("添加supplier_admin到users.role ENUM失败: {}", e.getMessage());
|
|
|
- }
|
|
|
+ // 迁移40: 添加supplier_admin角色到users.role(列已为VARCHAR,直接可用)
|
|
|
+ // 当前role列为VARCHAR(20),无需ALTER ENUM
|
|
|
|
|
|
// 迁移40: users表添加mascot字段(AI助手形象: xibao浠宝/fubao福宝)
|
|
|
ensureColumn("users", "mascot", "VARCHAR(20) DEFAULT NULL COMMENT 'AI助手形象: xibao(浠宝)/fubao(福宝)'");
|
|
|
@@ -4678,7 +4662,7 @@ try {
|
|
|
if (e.getMessage() != null && e.getMessage().contains("Duplicate column")) {
|
|
|
log.info("列 {}.{} 已存在,跳过", table, column);
|
|
|
} else {
|
|
|
- log.warn("添加列 {}.{} 失败: {}", table, column, e.getMessage());
|
|
|
+ log.error("添加列 {}.{} 失败: {}", table, column, e.getMessage());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -6244,6 +6228,26 @@ try {
|
|
|
ensureColumn("tianpan_daily_fortune", "mood_emoji", "VARCHAR(10) COMMENT '心情emoji'");
|
|
|
ensureColumn("tianpan_daily_fortune", "mood_text", "VARCHAR(50) COMMENT '心情文本'");
|
|
|
ensureColumn("tianpan_daily_fortune", "weekly_tip", "TEXT COMMENT '每周提示'");
|
|
|
+
|
|
|
+ // 验证迁移104: 确认tianpan_daily_fortune关键列存在
|
|
|
+ try {
|
|
|
+ jdbcTemplate.queryForObject(
|
|
|
+ "SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='tianpan_daily_fortune' AND COLUMN_NAME='fortune_level_text'",
|
|
|
+ Integer.class);
|
|
|
+ log.info("验证通过: tianpan_daily_fortune.fortune_level_text 列存在");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("验证失败: tianpan_daily_fortune.fortune_level_text 列仍然不存在,迁移可能失败: {}", e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 验证迁移103: 确认products.min_quantity列存在
|
|
|
+ try {
|
|
|
+ jdbcTemplate.queryForObject(
|
|
|
+ "SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='products' AND COLUMN_NAME='min_quantity'",
|
|
|
+ Integer.class);
|
|
|
+ log.info("验证通过: products.min_quantity 列存在");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("验证失败: products.min_quantity 列仍然不存在,迁移可能失败: {}", e.getMessage());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void runMigration93() {
|