|
|
@@ -1554,6 +1554,7 @@ public class DatabaseInitializer implements CommandLineRunner {
|
|
|
"enabled TINYINT(1) DEFAULT 1 COMMENT '启用'," +
|
|
|
"dimension_codes VARCHAR(128) COMMENT '维度编码(逗号分隔: body,mind,heart)'," +
|
|
|
"product_types VARCHAR(128) COMMENT '商品类型(逗号分隔: PHYSICAL,COURSE,ASSESSMENT)'," +
|
|
|
+ "min_visible_level VARCHAR(50) COMMENT '最低可见会员级别编码(NULL=全部可见)'," +
|
|
|
"created_at DATETIME DEFAULT CURRENT_TIMESTAMP," +
|
|
|
"updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP," +
|
|
|
"INDEX idx_parent (parent_id)," +
|
|
|
@@ -6342,6 +6343,7 @@ sqls.add("INSERT IGNORE INTO health_norm_reference (dimension, gender, age_min,
|
|
|
"ai_review_enabled TINYINT(1) DEFAULT 0 COMMENT 'AI审核功能', " +
|
|
|
"priority_support TINYINT(1) DEFAULT 0 COMMENT '优先客服', " +
|
|
|
"teacher_consultation TINYINT(1) DEFAULT 0 COMMENT '老师咨询', " +
|
|
|
+ "level_order INT DEFAULT 1 COMMENT '级别数字(越小级别越低)', " +
|
|
|
"created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
|
|
|
"updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
|
|
|
"UNIQUE KEY uk_level_code (level_code)" +
|
|
|
@@ -10902,7 +10904,7 @@ sqls.add("INSERT IGNORE INTO health_norm_reference (dimension, gender, age_min,
|
|
|
log.warn("迁移313: 修复 meal_configs participant_member_ids 失败: {}", e.getMessage());
|
|
|
}
|
|
|
|
|
|
- // 迁移314: meal_configs 增加 config_date 字段(当天临时共餐配置)+ 修改 UNIQUE KEY
|
|
|
+// 迁移314: meal_configs 增加 config_date 字段(当天临时共餐配置)+ 修改 UNIQUE KEY
|
|
|
// 支持「今天」模式:config_date 有值=当天临时配置(优先级最高),config_date=NULL+config_date_type=工作日/周末默认配置
|
|
|
try {
|
|
|
jdbcTemplate.execute("ALTER TABLE meal_configs ADD COLUMN config_date DATE DEFAULT NULL COMMENT '当天临时配置日期(NULL=默认工作日/周末配置)'");
|
|
|
@@ -10922,6 +10924,26 @@ sqls.add("INSERT IGNORE INTO health_norm_reference (dimension, gender, age_min,
|
|
|
} catch (Exception e) {
|
|
|
log.warn("迁移314: 添加新 UNIQUE KEY 失败: {}", e.getMessage());
|
|
|
}
|
|
|
+
|
|
|
+ // 迁移315: 商品/分类可见性由「角色」改为「按会员级别」控制
|
|
|
+ // - membership_levels.level_order: 级别数字(数字越小级别越低): FREE=1 FAMILY=2 PROVIDER=3 PREMIUM=4 LIFETIME=5
|
|
|
+ // - products.min_visible_level: 最低可见会员级别编码(NULL=全部可见)
|
|
|
+ // - shop_categories.min_visible_level: 分类最低可见会员级别编码(NULL=全部可见)
|
|
|
+ ensureColumn("membership_levels", "level_order",
|
|
|
+ "INT DEFAULT 1 COMMENT '级别数字(越小级别越低): FREE=1 FAMILY=2 PROVIDER=3 PREMIUM=4 LIFETIME=5'");
|
|
|
+ try {
|
|
|
+ jdbcTemplate.update("UPDATE membership_levels SET level_order = CASE level_code " +
|
|
|
+ "WHEN 'FREE' THEN 1 WHEN 'FAMILY' THEN 2 WHEN 'PROVIDER' THEN 3 " +
|
|
|
+ "WHEN 'PREMIUM' THEN 4 WHEN 'LIFETIME' THEN 5 ELSE level_order END");
|
|
|
+ log.info("迁移315: 已回填 membership_levels.level_order");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("迁移315: 回填 membership_levels.level_order 失败: {}", e.getMessage());
|
|
|
+ }
|
|
|
+ ensureColumn("products", "min_visible_level",
|
|
|
+ "VARCHAR(50) DEFAULT NULL COMMENT '最低可见会员级别编码(FREE/FAMILY/PROVIDER/PREMIUM/LIFETIME, NULL=全部可见)'");
|
|
|
+ ensureColumn("shop_categories", "min_visible_level",
|
|
|
+ "VARCHAR(50) DEFAULT NULL COMMENT '最低可见会员级别编码(FREE/FAMILY/PROVIDER/PREMIUM/LIFETIME, NULL=全部可见)'");
|
|
|
+ log.info("迁移315: 已完成商品/分类按会员级别可见性改造");
|
|
|
}
|
|
|
|
|
|
private void seedGutFloraFingerprints() {
|