refactor: 一次性佣金配置从套餐级别提升到系列级别
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 6m29s
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 6m29s
主要变更: - 新增 tb_shop_series_allocation 表,存储系列级别的一次性佣金配置 - ShopPackageAllocation 移除 one_time_commission_amount 字段 - PackageSeries 新增 enable_one_time_commission 字段控制是否启用一次性佣金 - 新增 /api/admin/shop-series-allocations CRUD 接口 - 佣金计算逻辑改为从 ShopSeriesAllocation 获取一次性佣金金额 - 删除废弃的 ShopSeriesOneTimeCommissionTier 模型 - OpenAPI Tag '系列分配' 和 '单套餐分配' 合并为 '套餐分配' 迁移脚本: - 000042: 重构佣金套餐模型 - 000043: 简化佣金分配 - 000044: 一次性佣金分配重构 - 000045: PackageSeries 添加 enable_one_time_commission 字段 测试: - 新增验收测试 (shop_series_allocation, commission_calculation) - 新增流程测试 (one_time_commission_chain) - 删除过时的单元测试(已被验收测试覆盖)
This commit is contained in:
61
migrations/000043_simplify_commission_allocation.up.sql
Normal file
61
migrations/000043_simplify_commission_allocation.up.sql
Normal file
@@ -0,0 +1,61 @@
|
||||
-- 简化佣金分配模型:删除 ShopSeriesAllocation 层,使用 ShopPackageAllocation 直接管理
|
||||
-- 重构原因:业务模型只需要套餐级别的分配,不需要系列级别的中间层
|
||||
|
||||
-- ============================================
|
||||
-- 1. 为 ShopPackageAllocation 添加新字段
|
||||
-- ============================================
|
||||
|
||||
-- 添加 series_id 字段(记录套餐所属系列,便于查询)
|
||||
ALTER TABLE tb_shop_package_allocation
|
||||
ADD COLUMN IF NOT EXISTS series_id BIGINT DEFAULT 0 NOT NULL;
|
||||
|
||||
COMMENT ON COLUMN tb_shop_package_allocation.series_id IS '套餐系列ID(冗余字段,便于查询)';
|
||||
|
||||
-- 添加 allocator_shop_id 字段(记录是谁分配的,0表示平台分配)
|
||||
ALTER TABLE tb_shop_package_allocation
|
||||
ADD COLUMN IF NOT EXISTS allocator_shop_id BIGINT DEFAULT 0 NOT NULL;
|
||||
|
||||
COMMENT ON COLUMN tb_shop_package_allocation.allocator_shop_id IS '分配者店铺ID(0表示平台分配)';
|
||||
|
||||
-- ============================================
|
||||
-- 2. 从现有数据迁移 series_id 和 allocator_shop_id
|
||||
-- ============================================
|
||||
|
||||
-- 通过 package 表获取 series_id
|
||||
UPDATE tb_shop_package_allocation spa
|
||||
SET series_id = p.series_id
|
||||
FROM tb_package p
|
||||
WHERE spa.package_id = p.id AND spa.series_id = 0;
|
||||
|
||||
-- 通过 shop_series_allocation 获取 allocator_shop_id
|
||||
UPDATE tb_shop_package_allocation spa
|
||||
SET allocator_shop_id = ssa.allocator_shop_id
|
||||
FROM tb_shop_series_allocation ssa
|
||||
WHERE spa.allocation_id = ssa.id AND spa.allocator_shop_id = 0;
|
||||
|
||||
-- ============================================
|
||||
-- 3. 删除废弃的 allocation_id 字段
|
||||
-- ============================================
|
||||
|
||||
ALTER TABLE tb_shop_package_allocation
|
||||
DROP COLUMN IF EXISTS allocation_id;
|
||||
|
||||
-- ============================================
|
||||
-- 4. 添加索引优化查询性能
|
||||
-- ============================================
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_shop_package_allocation_series_id
|
||||
ON tb_shop_package_allocation(series_id);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_shop_package_allocation_allocator_shop_id
|
||||
ON tb_shop_package_allocation(allocator_shop_id);
|
||||
|
||||
-- ============================================
|
||||
-- 5. 删除废弃的表
|
||||
-- ============================================
|
||||
|
||||
-- 删除系列分配配置表
|
||||
DROP TABLE IF EXISTS tb_shop_series_allocation_config;
|
||||
|
||||
-- 删除系列分配表
|
||||
DROP TABLE IF EXISTS tb_shop_series_allocation;
|
||||
Reference in New Issue
Block a user