Explorar el Código

fix(cfc-backend): 迁移33 供应商分销体系(4新表+product_orders 3列)

- 迁移33: 创建supply_system/supply_system_member/supply_settlement/
  supply_settlement_detail 4张表 + product_orders追加supply_system_id/
  supplier_id/supply_commission 3列+索引
- schema.sql: product_orders补列 + 追加4张新表定义
- supply_system_schema.sql: supplier_user_id→supplier_id(匹配实体) + 补充supply_commission
Xiaogang Liao hace 2 meses
padre
commit
8aa23c09f1

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

@@ -3893,6 +3893,93 @@ try {
         ensureColumn("products", "category_id", "BIGINT COMMENT '商品类目ID'");
         ensureColumn("products", "distribution_system_id", "BIGINT COMMENT '分销体系ID'");
 
+        // 迁移33: 创建供应商分销体系表 + product_orders扩展字段
+        ensureColumn("product_orders", "supply_system_id", "BIGINT COMMENT '所属供应商体系ID'");
+        ensureColumn("product_orders", "supplier_id", "BIGINT COMMENT '收款供应商用户ID'");
+        ensureColumn("product_orders", "supply_commission", "INT COMMENT '分销佣金(分)'");
+        try {
+            jdbcTemplate.execute("ALTER TABLE product_orders ADD KEY idx_supply_system_id (supply_system_id)");
+            log.info("已添加idx_supply_system_id索引到product_orders表");
+        } catch (Exception e) {
+            log.warn("添加idx_supply_system_id索引可能已存在: {}", e.getMessage());
+        }
+
+        try {
+            jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS supply_system (" +
+                "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
+                "name VARCHAR(100) NOT NULL COMMENT '体系名称', " +
+                "admin_id BIGINT NOT NULL COMMENT '管理员用户ID', " +
+                "settlement_period_days INT NOT NULL DEFAULT 30 COMMENT '账期(天)', " +
+                "platform_profit_rate DECIMAL(5,2) NOT NULL DEFAULT 0 COMMENT '平台留利比例(%)', " +
+                "description VARCHAR(500) COMMENT '描述', " +
+                "status VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态: active/disabled', " +
+                "created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, " +
+                "updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
+                "KEY idx_admin_id (admin_id)" +
+            ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='供应商体系'");
+            log.info("已创建supply_system表");
+        } catch (Exception e) {
+            log.warn("创建supply_system表可能已存在: {}", e.getMessage());
+        }
+
+        try {
+            jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS supply_system_member (" +
+                "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
+                "system_id BIGINT NOT NULL COMMENT '体系ID', " +
+                "user_id BIGINT NOT NULL COMMENT '用户ID', " +
+                "role VARCHAR(20) NOT NULL DEFAULT 'member' COMMENT '角色: admin/member', " +
+                "status VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态: active/inactive', " +
+                "joined_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, " +
+                "UNIQUE KEY uk_system_user (system_id, user_id), " +
+                "KEY idx_user_id (user_id)" +
+            ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='体系成员'");
+            log.info("已创建supply_system_member表");
+        } catch (Exception e) {
+            log.warn("创建supply_system_member表可能已存在: {}", e.getMessage());
+        }
+
+        try {
+            jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS supply_settlement (" +
+                "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
+                "system_id BIGINT NOT NULL COMMENT '体系ID', " +
+                "period_start DATE NOT NULL COMMENT '结算周期开始', " +
+                "period_end DATE NOT NULL COMMENT '结算周期结束', " +
+                "total_sales INT NOT NULL DEFAULT 0 COMMENT '销售总额(分)', " +
+                "platform_profit INT NOT NULL DEFAULT 0 COMMENT '平台留利金额(分)', " +
+                "supplier_payout INT NOT NULL DEFAULT 0 COMMENT '供应商实付(分)', " +
+                "status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT '状态: pending/settled', " +
+                "settled_at DATETIME COMMENT '结算时间', " +
+                "remark VARCHAR(500) COMMENT '备注', " +
+                "created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, " +
+                "KEY idx_system_id (system_id), " +
+                "KEY idx_period (period_start, period_end)" +
+            ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='结算记录'");
+            log.info("已创建supply_settlement表");
+        } catch (Exception e) {
+            log.warn("创建supply_settlement表可能已存在: {}", e.getMessage());
+        }
+
+        try {
+            jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS supply_settlement_detail (" +
+                "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
+                "settlement_id BIGINT NOT NULL COMMENT '结算ID', " +
+                "order_id BIGINT NOT NULL COMMENT '订单ID', " +
+                "order_no VARCHAR(64) NOT NULL COMMENT '订单号', " +
+                "product_name VARCHAR(200) NOT NULL COMMENT '商品名称', " +
+                "amount INT NOT NULL COMMENT '订单金额(分)', " +
+                "platform_fee INT NOT NULL COMMENT '平台留利(分)', " +
+                "supplier_id BIGINT COMMENT '收款供应商用户ID', " +
+                "supplier_name VARCHAR(100) COMMENT '收款供应商名称', " +
+                "payout INT NOT NULL COMMENT '供应商实付(分)', " +
+                "created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, " +
+                "KEY idx_settlement_id (settlement_id), " +
+                "KEY idx_order_id (order_id)" +
+            ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='结算明细'");
+            log.info("已创建supply_settlement_detail表");
+        } catch (Exception e) {
+            log.warn("创建supply_settlement_detail表可能已存在: {}", e.getMessage());
+        }
+
         // 迁移: growth_records表添加来源类型/去重/补充字段
         try {
             jdbcTemplate.execute("ALTER TABLE growth_records ADD COLUMN source_type VARCHAR(20) DEFAULT 'manual' COMMENT '来源类型: manual/platform_purchase/self_upload/supplement'");

+ 2 - 1
cfc-backend/src/main/resources/db/migration/supply_system_schema.sql

@@ -70,5 +70,6 @@ CREATE TABLE IF NOT EXISTS `supply_settlement_detail` (
 -- 5. product_orders 扩展字段
 ALTER TABLE `product_orders`
   ADD COLUMN `supply_system_id` bigint DEFAULT NULL COMMENT '所属供应商体系ID' AFTER `coupon_id`,
-  ADD COLUMN `supplier_user_id` bigint DEFAULT NULL COMMENT '收款供应商用户ID' AFTER `supply_system_id`,
+  ADD COLUMN `supplier_id` bigint DEFAULT NULL COMMENT '收款供应商用户ID' AFTER `supply_system_id`,
+  ADD COLUMN `supply_commission` int DEFAULT NULL COMMENT '分销佣金(分)' AFTER `supplier_id`,
   ADD KEY `idx_supply_system_id` (`supply_system_id`);

+ 69 - 1
cfc-backend/src/main/resources/schema.sql

@@ -1038,8 +1038,16 @@ CREATE TABLE IF NOT EXISTS product_orders (
     payment_method VARCHAR(32) COMMENT '支付方式: wechat/points/membership',
     remark VARCHAR(500) COMMENT '备注',
     paid_at DATETIME COMMENT '支付时间',
+    supply_system_id BIGINT COMMENT '所属供应商体系ID',
+    supplier_id BIGINT COMMENT '收款供应商用户ID',
+    supply_commission INT COMMENT '分销佣金(分)',
     created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
-    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
+    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+    INDEX idx_user_id (user_id),
+    INDEX idx_family_id (family_id),
+    INDEX idx_product_id (product_id),
+    INDEX idx_status (status),
+    INDEX idx_supply_system_id (supply_system_id)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品订单表';
 
 -- =============================================
@@ -2129,3 +2137,63 @@ CREATE TABLE IF NOT EXISTS cart (
     updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
     INDEX idx_user_product (user_id, product_id)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='购物车';
+
+-- ============================================================
+-- 供应商分销体系
+-- ============================================================
+
+CREATE TABLE IF NOT EXISTS supply_system (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    name VARCHAR(100) NOT NULL COMMENT '体系名称',
+    admin_id BIGINT NOT NULL COMMENT '管理员用户ID',
+    settlement_period_days INT NOT NULL DEFAULT 30 COMMENT '账期(天)',
+    platform_profit_rate DECIMAL(5,2) NOT NULL DEFAULT 0 COMMENT '平台留利比例(%)',
+    description VARCHAR(500) COMMENT '描述',
+    status VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态: active/disabled',
+    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+    KEY idx_admin_id (admin_id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='供应商体系';
+
+CREATE TABLE IF NOT EXISTS supply_system_member (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    system_id BIGINT NOT NULL COMMENT '体系ID',
+    user_id BIGINT NOT NULL COMMENT '用户ID',
+    role VARCHAR(20) NOT NULL DEFAULT 'member' COMMENT '角色: admin/member',
+    status VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态: active/inactive',
+    joined_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+    UNIQUE KEY uk_system_user (system_id, user_id),
+    KEY idx_user_id (user_id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='体系成员';
+
+CREATE TABLE IF NOT EXISTS supply_settlement (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    system_id BIGINT NOT NULL COMMENT '体系ID',
+    period_start DATE NOT NULL COMMENT '结算周期开始',
+    period_end DATE NOT NULL COMMENT '结算周期结束',
+    total_sales INT NOT NULL DEFAULT 0 COMMENT '销售总额(分)',
+    platform_profit INT NOT NULL DEFAULT 0 COMMENT '平台留利金额(分)',
+    supplier_payout INT NOT NULL DEFAULT 0 COMMENT '供应商实付(分)',
+    status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT '状态: pending/settled',
+    settled_at DATETIME COMMENT '结算时间',
+    remark VARCHAR(500) COMMENT '备注',
+    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+    KEY idx_system_id (system_id),
+    KEY idx_period (period_start, period_end)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='结算记录';
+
+CREATE TABLE IF NOT EXISTS supply_settlement_detail (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    settlement_id BIGINT NOT NULL COMMENT '结算ID',
+    order_id BIGINT NOT NULL COMMENT '订单ID',
+    order_no VARCHAR(64) NOT NULL COMMENT '订单号',
+    product_name VARCHAR(200) NOT NULL COMMENT '商品名称',
+    amount INT NOT NULL COMMENT '订单金额(分)',
+    platform_fee INT NOT NULL COMMENT '平台留利(分)',
+    supplier_id BIGINT COMMENT '收款供应商用户ID',
+    supplier_name VARCHAR(100) COMMENT '收款供应商名称',
+    payout INT NOT NULL COMMENT '供应商实付(分)',
+    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+    KEY idx_settlement_id (settlement_id),
+    KEY idx_order_id (order_id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='结算明细';