|
@@ -7876,8 +7876,54 @@ private void runMigration100() {
|
|
|
} catch (Exception ex) {
|
|
} catch (Exception ex) {
|
|
|
log.warn("创建product_online_slots表失败: {}", ex.getMessage());
|
|
log.warn("创建product_online_slots表失败: {}", ex.getMessage());
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ // 迁移166: 创建 membership_benefits 表(会员权益配置)
|
|
|
|
|
+ try {
|
|
|
|
|
+ jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS membership_benefits (" +
|
|
|
|
|
+ "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
|
|
+ "level_code VARCHAR(50) NOT NULL COMMENT '会员等级: FREE/BASIC/PROFESSIONAL/ENTERPRISE', " +
|
|
|
|
|
+ "benefit_code VARCHAR(50) NOT NULL COMMENT '权益编码: AI_CHAT,FAMILY_MEMBERS等', " +
|
|
|
|
|
+ "benefit_name VARCHAR(100) NOT NULL COMMENT '权益名称', " +
|
|
|
|
|
+ "benefit_desc VARCHAR(500) COMMENT '权益描述', " +
|
|
|
|
|
+ "icon VARCHAR(50) COMMENT '图标emoji', " +
|
|
|
|
|
+ "bg_color VARCHAR(20) COMMENT '背景色', " +
|
|
|
|
|
+ "sort_order INT DEFAULT 0 COMMENT '排序顺序', " +
|
|
|
|
|
+ "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
|
|
|
|
|
+ "updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
|
|
|
|
|
+ "UNIQUE KEY uk_level_benefit (level_code, benefit_code), " +
|
|
|
|
|
+ "INDEX idx_level (level_code)" +
|
|
|
|
|
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会员权益配置'");
|
|
|
|
|
+ log.info("已创建membership_benefits表");
|
|
|
|
|
+ } catch (Exception ex) {
|
|
|
|
|
+ log.warn("创建membership_benefits表失败: {}", ex.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 迁移167: membership_benefits 种子数据
|
|
|
|
|
+ try {
|
|
|
|
|
+ jdbcTemplate.execute("INSERT IGNORE INTO membership_benefits (level_code, benefit_code, benefit_name, benefit_desc, icon, bg_color, sort_order) VALUES " +
|
|
|
|
|
+ "('FREE', 'NO_BENEFIT', '暂无会员权益', '开通会员解锁更多权益', '🔒', '#F3F4F6', 0), " +
|
|
|
|
|
+ "('FREE', 'UPGRADE_HINT', '升级会员', '开通会员享专属权益', '👑', '#FEF3C7', 99), " +
|
|
|
|
|
+ "('FAMILY', 'AI_CHAT', 'AI 健康顾问', '7×24 小时不限次数问答', '🤖', '#DBEAFE', 1), " +
|
|
|
|
|
+ "('FAMILY', 'FAMILY_MEMBERS', '家庭档案管理', '管理最多 10 位家庭成员', '👨👩👧👦', '#D1FAE5', 2), " +
|
|
|
|
|
+ "('FAMILY', 'HEALTH_PLAN', '月度健康计划', '个性化健康改善方案', '📋', '#FEF3C7', 3), " +
|
|
|
|
|
+ "('FAMILY', 'REPORT_READING', '报告智能解读', '体检/菌群/测评报告 AI 解读', '📊', '#FCE7F3', 4), " +
|
|
|
|
|
+ "('FAMILY', 'MANAGER_SERVICE', '专属健康教练服务', '认证健康教练月度随访', '👨🏫', '#FFEDD5', 5), " +
|
|
|
|
|
+ "('FAMILY', 'PRODUCT_DISCOUNT', '商品会员折扣', '全场商品 8-9 折优惠', '🛒', '#E0E7FF', 6), " +
|
|
|
|
|
+ "('FAMILY', 'COUPON_ACCESS', '优惠券使用权限', '可使用平台优惠券享更多优惠', '🎫', '#FEE2E2', 7), " +
|
|
|
|
|
+ "('PREMIUM', 'AI_CHAT', 'AI 健康顾问', '7×24 小时不限次数问答', '🤖', '#DBEAFE', 1), " +
|
|
|
|
|
+ "('PREMIUM', 'FAMILY_MEMBERS', '家庭档案管理', '管理最多 20 位家庭成员', '👨👩👧👦', '#D1FAE5', 2), " +
|
|
|
|
|
+ "('PREMIUM', 'HEALTH_PLAN', '月度健康计划', '个性化健康改善方案 + 定制营养建议', '📋', '#FEF3C7', 3), " +
|
|
|
|
|
+ "('PREMIUM', 'REPORT_READING', '报告智能解读', '体检/菌群/测评报告 AI 深度解读', '📊', '#FCE7F3', 4), " +
|
|
|
|
|
+ "('PREMIUM', 'MANAGER_SERVICE', '专属健康教练服务', '每周 1 次电话随访 + 在线答疑', '👨🏫', '#FFEDD5', 5), " +
|
|
|
|
|
+ "('PREMIUM', 'PRODUCT_DISCOUNT', '商品会员折扣', '全场商品 6-8 折优惠', '🛒', '#E0E7FF', 6), " +
|
|
|
|
|
+ "('PREMIUM', 'COUPON_ACCESS', '优惠券使用权限', '可使用平台优惠券 + 会员专属券', '🎫', '#FEE2E2', 7), " +
|
|
|
|
|
+ "('PREMIUM', 'PRIORITY_SUPPORT', '优先客服', '专属客服通道,快速响应', '🎧', '#EDE9FE', 8), " +
|
|
|
|
|
+ "('PREMIUM', 'TEACHER_CONSULT', '规划师一对一咨询', '每月 1 次成长规划师专业咨询', '👩🏫', '#FBCFE8', 9)");
|
|
|
|
|
+ log.info("已插入membership_benefits种子数据");
|
|
|
|
|
+ } catch (Exception ex) {
|
|
|
|
|
+ log.warn("插入membership_benefits种子数据失败: {}", ex.getMessage());
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
-}
|
|
|
|
|
|
|
|
|
|
ensureColumn("products", "min_stock_alert", "INT DEFAULT 0 COMMENT '库存预警阈值(低于此值预警)'");
|
|
ensureColumn("products", "min_stock_alert", "INT DEFAULT 0 COMMENT '库存预警阈值(低于此值预警)'");
|
|
|
|
|
|
|
@@ -7961,4 +8007,4 @@ private void runMigration100() {
|
|
|
ensureColumn("product_skus", "purchase_price", "DECIMAL(10,2) DEFAULT 0.00 COMMENT '进价(分)'");
|
|
ensureColumn("product_skus", "purchase_price", "DECIMAL(10,2) DEFAULT 0.00 COMMENT '进价(分)'");
|
|
|
ensureColumn("inventory_inbound_items", "purchase_price", "DECIMAL(10,2) DEFAULT 0.00 COMMENT '入库单价(分)'");
|
|
ensureColumn("inventory_inbound_items", "purchase_price", "DECIMAL(10,2) DEFAULT 0.00 COMMENT '入库单价(分)'");
|
|
|
}
|
|
}
|
|
|
-}
|
|
|
|
|
|
|
+}
|