Преглед изворни кода

feat(backend): 迁移164 coupon表扩展会员券字段+新建coupon_grant_log发券流水表

Xiaogang Liao пре 1 месец
родитељ
комит
af9f760de4

+ 33 - 0
cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java

@@ -7687,5 +7687,38 @@ private void runMigration100() {
 
 		// 迁移163: family_challenge 添加 creator_id 列(用户自定义挑战,原迁移158在runMigration100死代码中从未执行)
 		ensureColumn("family_challenge", "creator_id", "BIGINT COMMENT '创建者ID(NULL=系统创建)'");
+
+		// 迁移164: coupon表扩展会员券字段 + 创建coupon_grant_log表(会员体系重构: 统一价+优惠券发放/积分兑换)
+		try {
+			ensureColumn("coupon", "discount_rate", "INT COMMENT '折扣券折扣率(千分比,9000=9折)'");
+			ensureColumn("coupon", "product_id", "BIGINT COMMENT '绑定商品ID,NULL=全场通用'");
+			ensureColumn("coupon", "points_price", "INT DEFAULT 0 COMMENT '积分兑换价,0=不可积分兑换'");
+			ensureColumn("coupon", "grant_type", "VARCHAR(16) COMMENT '发放规则:JOIN/PERIODIC/POPULATION,NULL=不自动发放'");
+			ensureColumn("coupon", "grant_level_code", "VARCHAR(32) COMMENT '发放规则对应会员等级'");
+			ensureColumn("coupon", "grant_period", "VARCHAR(16) COMMENT 'PERIODIC周期:MONTHLY/QUARTERLY'");
+			ensureColumn("coupon", "grant_quantity", "INT DEFAULT 1 COMMENT '每次发放数量'");
+			log.info("已为coupon表添加会员券字段");
+		} catch (Exception e) {
+			log.warn("添加coupon表会员券字段失败: {}", e.getMessage());
+		}
+
+		try {
+			jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS coupon_grant_log (" +
+					"id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
+					"user_id BIGINT NOT NULL COMMENT '收券用户ID', " +
+					"coupon_id BIGINT NOT NULL COMMENT '券模板ID', " +
+					"grant_type VARCHAR(16) NOT NULL COMMENT 'JOIN/PERIODIC/POPULATION/EXCHANGE', " +
+					"period VARCHAR(16) COMMENT '周期标识(YYYY-MM或YYYY-Qn),PERIODIC防重用', " +
+					"quantity INT DEFAULT 1 COMMENT '发放数量', " +
+					"source VARCHAR(64) COMMENT '触发来源(订单号/成员ID等)', " +
+					"created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
+					"UNIQUE KEY uk_grant (user_id, coupon_id, grant_type, period), " +
+					"INDEX idx_coupon (coupon_id), " +
+					"INDEX idx_user (user_id)" +
+					") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='优惠券发放流水表'");
+			log.info("已创建coupon_grant_log表");
+		} catch (Exception e) {
+			log.warn("创建coupon_grant_log表失败: {}", e.getMessage());
+		}
 	}
 }

+ 25 - 0
cfc-backend/src/main/resources/schema.sql

@@ -1918,6 +1918,13 @@ CREATE TABLE IF NOT EXISTS coupon (
     valid_until DATETIME,
     total_count INT DEFAULT 0,
     used_count INT DEFAULT 0,
+    discount_rate INT COMMENT '折扣券折扣率(千分比,9000=9折)',
+    product_id BIGINT COMMENT '绑定商品ID,NULL=全场通用',
+    points_price INT DEFAULT 0 COMMENT '积分兑换价,0=不可积分兑换',
+    grant_type VARCHAR(16) COMMENT '发放规则:JOIN/PERIODIC/POPULATION,NULL=不自动发放',
+    grant_level_code VARCHAR(32) COMMENT '发放规则对应会员等级',
+    grant_period VARCHAR(16) COMMENT 'PERIODIC周期:MONTHLY/QUARTERLY',
+    grant_quantity INT DEFAULT 1 COMMENT '每次发放数量',
     created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
     INDEX idx_valid_period (valid_from, valid_until)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='优惠券配置表';
@@ -3894,3 +3901,21 @@ CREATE TABLE IF NOT EXISTS relationship_questionnaire_responses (
     calculated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
     INDEX idx_q_resp_snap (snapshot_id)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='关系问卷回答记录';
+
+-- =============================================
+-- 优惠券发放流水表(会员体系重构: 统一价+优惠券发放/积分兑换)
+-- =============================================
+
+CREATE TABLE IF NOT EXISTS coupon_grant_log (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    user_id BIGINT NOT NULL COMMENT '收券用户ID',
+    coupon_id BIGINT NOT NULL COMMENT '券模板ID',
+    grant_type VARCHAR(16) NOT NULL COMMENT 'JOIN/PERIODIC/POPULATION/EXCHANGE',
+    period VARCHAR(16) COMMENT '周期标识(YYYY-MM或YYYY-Qn),PERIODIC防重用',
+    quantity INT DEFAULT 1 COMMENT '发放数量',
+    source VARCHAR(64) COMMENT '触发来源(订单号/成员ID等)',
+    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
+    UNIQUE KEY uk_grant (user_id, coupon_id, grant_type, period),
+    INDEX idx_coupon (coupon_id),
+    INDEX idx_user (user_id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='优惠券发放流水表';