Просмотр исходного кода

feat: 新增 recommendation_rules 推荐规则表(迁移316-317)

iwt 3 дней назад
Родитель
Сommit
114732eccd

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

@@ -11205,5 +11205,48 @@ log.info("迁移298: 已为无 openid 的 child 账号补齐 family_members 记
 
         // 迁移315: article_reading_records 添加 reading_completed 列(阅读达标后标记,用于推荐过滤)
         ensureColumn("article_reading_records", "reading_completed", "TINYINT DEFAULT 0 COMMENT '是否已阅读达标(达到最低时长阈值)'");
+
+        // 迁移316: 创建 recommendation_rules 表(统一推荐规则配置)
+        try {
+            jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS recommendation_rules (" +
+                    "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
+                    "rule_type TINYINT NOT NULL COMMENT '1-5', " +
+                    "rule_name VARCHAR(100) COMMENT '运营名称', " +
+                    "trigger_product_id BIGINT COMMENT '触发商品ID', " +
+                    "trigger_product_ids VARCHAR(1000) COMMENT '触发商品ID JSON 数组', " +
+                    "target_product_id BIGINT COMMENT '目标商品ID', " +
+                    "priority INT DEFAULT 10 COMMENT '优先级,越大越优', " +
+                    "enabled TINYINT DEFAULT 1 COMMENT '启用 1/0', " +
+                    "time_window_days INT COMMENT '回溯窗口(天)', " +
+                    "delay_days INT COMMENT '复购延迟天数', " +
+                    "scope VARCHAR(20) COMMENT 'family/individual', " +
+                    "scene_codes VARCHAR(500) COMMENT '生效场景 JSON 数组', " +
+                    "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
+                    "updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" +
+                    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品推荐规则配置'");
+            log.info("迁移316: 已创建recommendation_rules表");
+        } catch (Exception e) {
+            // 表已存在,忽略错误
+        }
+
+        // 迁移317: recommendation_rules 表索引
+        try {
+            jdbcTemplate.execute("CREATE INDEX idx_rules_enabled ON recommendation_rules(enabled)");
+            log.info("迁移317: 已创建idx_rules_enabled索引");
+        } catch (Exception e) {
+            // 索引已存在,忽略错误
+        }
+        try {
+            jdbcTemplate.execute("CREATE INDEX idx_rules_scene ON recommendation_rules(scene_codes)");
+            log.info("迁移317: 已创建idx_rules_scene索引");
+        } catch (Exception e) {
+            // 索引已存在,忽略错误
+        }
+        try {
+            jdbcTemplate.execute("CREATE INDEX idx_rules_priority ON recommendation_rules(priority)");
+            log.info("迁移317: 已创建idx_rules_priority索引");
+        } catch (Exception e) {
+            // 索引已存在,忽略错误
+        }
     }
 }

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

@@ -1,6 +1,32 @@
 -- 浠艾福数据库初始化脚本
 -- 自动创建表
 
+-- 推荐规则表(统一推荐引擎规则配置)
+CREATE TABLE IF NOT EXISTS recommendation_rules (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    rule_type TINYINT NOT NULL COMMENT '1-5',
+    rule_name VARCHAR(100) COMMENT '运营名称',
+    trigger_product_id BIGINT COMMENT '触发商品ID',
+    trigger_product_ids VARCHAR(1000) COMMENT '触发商品ID JSON 数组',
+    target_product_id BIGINT COMMENT '目标商品ID',
+    priority INT DEFAULT 10 COMMENT '优先级,越大越优',
+    enabled TINYINT DEFAULT 1 COMMENT '启用 1/0',
+    time_window_days INT COMMENT '回溯窗口(天)',
+    delay_days INT COMMENT '复购延迟天数',
+    scope VARCHAR(20) COMMENT 'family/individual',
+    scene_codes VARCHAR(500) COMMENT '生效场景 JSON 数组',
+    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
+    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品推荐规则配置';
+
+-- 推荐规则表索引
+CREATE INDEX idx_rules_enabled ON recommendation_rules(enabled);
+CREATE INDEX idx_rules_scene ON recommendation_rules(scene_codes);
+CREATE INDEX idx_rules_priority ON recommendation_rules(priority);
+
+-- 浠艾福数据库初始化脚本
+-- 自动创建表
+
 -- 家庭表
 CREATE TABLE IF NOT EXISTS families (
     id BIGINT AUTO_INCREMENT PRIMARY KEY,