Files
junhong_cmp_fiber/migrations/000042_refactor_commission_package_model.down.sql
huang b18ecfeb55
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 6m29s
refactor: 一次性佣金配置从套餐级别提升到系列级别
主要变更:
- 新增 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)
- 删除过时的单元测试(已被验收测试覆盖)
2026-02-04 14:28:44 +08:00

96 lines
3.3 KiB
SQL

-- 套餐与佣金模型重构 - 回滚
-- 注意:此回滚会丢失新增字段的数据
-- ============================================
-- 7. ShopSeriesAllocation 表恢复废弃字段
-- ============================================
-- 移除新增的字段
ALTER TABLE tb_shop_series_allocation
DROP COLUMN IF EXISTS one_time_commission_amount;
-- 恢复一次性佣金完整配置字段
ALTER TABLE tb_shop_series_allocation
ADD COLUMN IF NOT EXISTS enable_one_time_commission BOOLEAN DEFAULT false NOT NULL,
ADD COLUMN IF NOT EXISTS one_time_commission_type VARCHAR(20),
ADD COLUMN IF NOT EXISTS one_time_commission_trigger VARCHAR(30),
ADD COLUMN IF NOT EXISTS one_time_commission_threshold BIGINT DEFAULT 0,
ADD COLUMN IF NOT EXISTS one_time_commission_mode VARCHAR(20),
ADD COLUMN IF NOT EXISTS one_time_commission_value BIGINT DEFAULT 0,
ADD COLUMN IF NOT EXISTS enable_force_recharge BOOLEAN DEFAULT false,
ADD COLUMN IF NOT EXISTS force_recharge_amount BIGINT DEFAULT 0,
ADD COLUMN IF NOT EXISTS force_recharge_trigger_type INT DEFAULT 2;
-- ============================================
-- 6. ShopSeriesOneTimeCommissionTier 表移除统计范围
-- ============================================
DO $$
BEGIN
IF EXISTS (
SELECT 1 FROM information_schema.tables
WHERE table_name = 'tb_shop_series_one_time_commission_tier'
) THEN
ALTER TABLE tb_shop_series_one_time_commission_tier
DROP COLUMN IF EXISTS stat_scope;
END IF;
END $$;
-- ============================================
-- 5. PackageSeries 表移除一次性佣金规则配置
-- ============================================
ALTER TABLE tb_package_series
DROP COLUMN IF EXISTS one_time_commission_config;
-- ============================================
-- 4. Device 表移除追踪字段
-- ============================================
ALTER TABLE tb_device
DROP COLUMN IF EXISTS accumulated_recharge_by_series,
DROP COLUMN IF EXISTS first_recharge_triggered_by_series;
-- ============================================
-- 3. IoTCard 表移除追踪字段
-- ============================================
ALTER TABLE tb_iot_card
DROP COLUMN IF EXISTS accumulated_recharge_by_series,
DROP COLUMN IF EXISTS first_recharge_triggered_by_series;
-- ============================================
-- 2. ShopPackageAllocation 表移除字段
-- ============================================
ALTER TABLE tb_shop_package_allocation
DROP COLUMN IF EXISTS one_time_commission_amount;
-- ============================================
-- 1. Package 表恢复废弃字段
-- ============================================
-- 移除虚流量开关字段
ALTER TABLE tb_package
DROP COLUMN IF EXISTS enable_virtual_data;
-- 恢复 cost_price 为 suggested_cost_price
DO $$
BEGIN
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'tb_package' AND column_name = 'cost_price'
) AND NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'tb_package' AND column_name = 'suggested_cost_price'
) THEN
ALTER TABLE tb_package RENAME COLUMN cost_price TO suggested_cost_price;
END IF;
END $$;
-- 恢复废弃字段
ALTER TABLE tb_package
ADD COLUMN IF NOT EXISTS price BIGINT DEFAULT 0 NOT NULL,
ADD COLUMN IF NOT EXISTS data_type VARCHAR(20),
ADD COLUMN IF NOT EXISTS data_amount_mb BIGINT DEFAULT 0;