|
|
@@ -10105,5 +10105,73 @@ public class DatabaseInitializer implements CommandLineRunner {
|
|
|
} catch (Exception e) {
|
|
|
log.warn("family_coupon_grant_log 表已存在,跳过创建: {}", e.getMessage());
|
|
|
}
|
|
|
+
|
|
|
+ // 迁移279: 创建 cf_rate_tier 表(CF值返佣阶梯配置,替代 promotion_tier_config)
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS cf_rate_tier (" +
|
|
|
+ "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
+ "tier_name VARCHAR(50) NOT NULL COMMENT '档位名称', " +
|
|
|
+ "min_team_size INT NOT NULL DEFAULT 0 COMMENT '团队规模下限(含)', " +
|
|
|
+ "rate_percent INT NOT NULL DEFAULT 0 COMMENT '返佣比例(%)', " +
|
|
|
+ "sort_order INT NOT NULL DEFAULT 0 COMMENT '排序,越大越高', " +
|
|
|
+ "enabled TINYINT DEFAULT 1 COMMENT '1启用/0停用', " +
|
|
|
+ "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
|
|
|
+ "updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
|
|
|
+ "INDEX idx_min_size (min_team_size)" +
|
|
|
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='CF值返佣阶梯配置'");
|
|
|
+ log.info("已创建cf_rate_tier表");
|
|
|
+ Integer cnt = jdbcTemplate.queryForObject("SELECT COUNT(*) FROM cf_rate_tier", Integer.class);
|
|
|
+ if (cnt == null || cnt == 0) {
|
|
|
+ jdbcTemplate.execute("INSERT INTO cf_rate_tier (tier_name, min_team_size, rate_percent, sort_order) VALUES " +
|
|
|
+ "('铜牌', 0, 5, 1), ('银牌', 3, 10, 2), ('金牌', 10, 15, 3), ('铂金', 30, 20, 4), ('钻石', 100, 25, 5)");
|
|
|
+ log.info("cf_rate_tier 种子数据已初始化");
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("创建cf_rate_tier表失败: {}", e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 迁移280: 创建 cf_transfer_record 表(CF值流转记录)
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS cf_transfer_record (" +
|
|
|
+ "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
+ "from_user_id BIGINT COMMENT '转出用户ID(null=平台)', " +
|
|
|
+ "to_user_id BIGINT COMMENT '转入用户ID', " +
|
|
|
+ "family_id BIGINT COMMENT '所属家庭ID', " +
|
|
|
+ "amount INT NOT NULL COMMENT 'CF值数量', " +
|
|
|
+ "type VARCHAR(16) NOT NULL COMMENT 'transfer/allocate/refund', " +
|
|
|
+ "ref_type VARCHAR(50) COMMENT '关联业务类型', " +
|
|
|
+ "ref_id BIGINT COMMENT '关联业务ID', " +
|
|
|
+ "remark VARCHAR(255), " +
|
|
|
+ "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
|
|
|
+ "INDEX idx_from (from_user_id), " +
|
|
|
+ "INDEX idx_to (to_user_id), " +
|
|
|
+ "INDEX idx_family (family_id)" +
|
|
|
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='CF值流转记录'");
|
|
|
+ log.info("已创建cf_transfer_record表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("创建cf_transfer_record表失败: {}", e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 迁移281: promotion_tier 精简列(删三层,加 rate_percent)
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("ALTER TABLE promotion_tier DROP COLUMN team_size_1st, DROP COLUMN team_size_2nd, DROP COLUMN team_size_3rd");
|
|
|
+ log.info("promotion_tier 已删除三层团队列");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("promotion_tier 三层列删除失败(可能不存在): {}", e.getMessage());
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("ALTER TABLE promotion_tier ADD COLUMN rate_percent INT DEFAULT 0 COMMENT '当前返佣比例(%)'");
|
|
|
+ log.info("promotion_tier 已添加 rate_percent");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("promotion_tier.rate_percent 已存在: {}", e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 迁移282: coupon 表添加 family_id
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("ALTER TABLE coupon ADD COLUMN family_id BIGINT DEFAULT NULL COMMENT '绑定家庭ID(NULL=不绑定)'");
|
|
|
+ log.info("coupon 已添加 family_id");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("coupon.family_id 已存在: {}", e.getMessage());
|
|
|
+ }
|
|
|
}
|
|
|
}
|