فهرست منبع

feat(backend): 迁移434 SKU商品组合明细表与订单sku_id

Xiaogang Liao 1 هفته پیش
والد
کامیت
e3b6573ce3

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

@@ -3397,6 +3397,9 @@ insertSysConfigSeed("gift_membership_pay_price", "198000", "送会员商品达
                 "BIGINT DEFAULT NULL COMMENT '关联商城商品 products.id,NULL=不可链接'");
         // 迁移433: 家庭指标聚合方式配置表(五维能量汇总/珍珠图/章鱼图汇集配置)
         createFamilyMetricAggConfigTable();
+
+        // 迁移434: SKU商品组合明细表 + 订单记录下单SKU(组合SKU识别)
+        migrateSkuCombo();
     }
 
     /**
@@ -14529,6 +14532,39 @@ log.info("迁移298: 已为无 openid 的 child 账号补齐 family_members 记
         }
     }
 
+    // ==================== 迁移434:SKU 商品组合 ====================
+
+    void migrateSkuCombo() {
+        try {
+            jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS `product_sku_combo_items` ("
+                    + "`id` BIGINT AUTO_INCREMENT PRIMARY KEY, "
+                    + "`sku_id` BIGINT NOT NULL COMMENT '组合SKU ID(product_skus.id)', "
+                    + "`child_product_id` BIGINT NOT NULL COMMENT '组成商品ID', "
+                    + "`child_sku_id` BIGINT NULL COMMENT '组成商品SKU ID(组成商品有SKU时必填)', "
+                    + "`quantity` INT NOT NULL DEFAULT 1 COMMENT '该组成商品数量', "
+                    + "`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, "
+                    + "INDEX `idx_sku` (`sku_id`), "
+                    + "INDEX `idx_child_product` (`child_product_id`) "
+                    + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品SKU组合明细'");
+            log.info("迁移434: 已创建 product_sku_combo_items 表");
+        } catch (Exception e) {
+            log.warn("迁移434: 创建 product_sku_combo_items 表失败(可能已存在): {}", e.getMessage());
+        }
+        try {
+            Integer colExists = jdbcTemplate.queryForObject(
+                    "SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'product_orders' AND COLUMN_NAME = 'sku_id'",
+                    Integer.class);
+            if (colExists == null || colExists == 0) {
+                jdbcTemplate.execute("ALTER TABLE product_orders ADD COLUMN sku_id BIGINT NULL COMMENT '下单SKU ID(组合SKU识别用)' AFTER product_type");
+                log.info("迁移434: 已为 product_orders 增加 sku_id 列");
+            } else {
+                log.info("迁移434: product_orders.sku_id 列已存在,跳过");
+            }
+        } catch (Exception e) {
+            log.warn("迁移434: 检查/添加 product_orders.sku_id 列失败: {}", e.getMessage());
+        }
+    }
+
     // ==================== 迁移429:用户关注指标收藏(T04 方案A) ====================
 
     /**

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

@@ -1306,6 +1306,7 @@ CREATE TABLE IF NOT EXISTS product_orders (
     product_id BIGINT NOT NULL COMMENT '商品ID',
     product_name VARCHAR(200) COMMENT '商品名称',
     product_type VARCHAR(32) COMMENT '商品类型',
+    sku_id BIGINT COMMENT '下单SKU ID(组合SKU识别用)',
     buyer_id BIGINT NOT NULL COMMENT '购买者ID',
     family_id BIGINT COMMENT '家庭ID',
     quantity INT NOT NULL DEFAULT 1 COMMENT '数量',
@@ -5593,6 +5594,18 @@ CREATE TABLE IF NOT EXISTS product_bundle_items (
     INDEX idx_child (child_product_id)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='套餐商品组成明细';
 
+-- 商品SKU组合明细表(组合SKU = 多个商品/子SKU + 数量,整体手填售价售卖)
+CREATE TABLE IF NOT EXISTS product_sku_combo_items (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    sku_id BIGINT NOT NULL COMMENT '组合SKU ID(product_skus.id)',
+    child_product_id BIGINT NOT NULL COMMENT '组成商品ID',
+    child_sku_id BIGINT DEFAULT NULL COMMENT '组成商品SKU ID(组成商品有SKU时必填)',
+    quantity INT NOT NULL DEFAULT 1 COMMENT '该组成商品数量',
+    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
+    INDEX idx_sku (sku_id),
+    INDEX idx_child_product (child_product_id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品SKU组合明细';
+
 -- 联系人表(cfclub 联系人管理)
 CREATE TABLE IF NOT EXISTS contacts (
     id BIGINT AUTO_INCREMENT PRIMARY KEY,