Przeglądaj źródła

fix(db): 迁移290修正(6表21列) + 迁移292 health_status 补 member_id 成员级归档

Xiaogang Liao 2 tygodni temu
rodzic
commit
c84be0dcbd

+ 18 - 1
cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java

@@ -10296,7 +10296,7 @@ public class DatabaseInitializer implements CommandLineRunner {
         ensureColumn("product_orders", "refund_reason", "VARCHAR(255) DEFAULT NULL COMMENT '退款原因'");
         ensureColumn("product_orders", "refund_amount", "INT DEFAULT NULL COMMENT '退款金额(分)'");
         ensureColumn("product_orders", "refund_time", "DATETIME DEFAULT NULL COMMENT '退款时间'");
-        log.info("已补齐真实缺列 (迁移290, 8表21列)");
+        log.info("已补齐真实缺列 (迁移290, 6表21列)");
 
         // 迁移291: food_nutrients 列名对齐(amount_per_100g -> amount_per100g)
         // FoodNutrient 实体字段 amountPer100g 经 MyBatis-Plus camel->snake 映射为 amount_per100g,
@@ -10313,5 +10313,22 @@ public class DatabaseInitializer implements CommandLineRunner {
         } catch (Exception e) {
             // 表不存在或列不存在,忽略
         }
+
+        // 迁移292: health_status 补 member_id 并改为成员级归档(Unknown column 'member_id')
+        // 迁移239 建表只有 user_id,schema.sql 与实体已含 member_id(成员级档案),生产缺列导致 selectOne 报错。
+        // 原 UNIQUE KEY uk_user(user_id) 限制每账号仅一行,与成员级多行归档冲突,改为复合索引 idx_user_member。
+        ensureColumn("health_status", "member_id", "BIGINT DEFAULT NULL COMMENT '家庭成员ID(NULL=账号级,非空=成员级归档)'");
+        try {
+            jdbcTemplate.execute("ALTER TABLE health_status DROP INDEX uk_user");
+            log.info("已移除 health_status.uk_user 唯一键(允许成员级多行归档)");
+        } catch (Exception e) {
+            // 索引不存在,忽略
+        }
+        try {
+            jdbcTemplate.execute("ALTER TABLE health_status ADD INDEX idx_user_member (user_id, member_id)");
+            log.info("已添加 health_status.idx_user_member 复合索引");
+        } catch (Exception e) {
+            // 索引已存在,忽略
+        }
     }
 }