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) - 删除过时的单元测试(已被验收测试覆盖)
127 lines
5.3 KiB
SQL
127 lines
5.3 KiB
SQL
-- 套餐与佣金模型重构
|
||
-- 重构说明:
|
||
-- 1. Package 表:移除废弃字段,新增虚流量开关
|
||
-- 2. ShopPackageAllocation 表:新增一次性佣金金额字段
|
||
-- 3. IoTCard/Device 表:新增按系列追踪的累计充值和首充状态字段
|
||
-- 4. PackageSeries 表:新增一次性佣金规则配置字段
|
||
-- 5. ShopSeriesOneTimeCommissionTier 表:新增统计范围字段
|
||
-- 6. ShopSeriesAllocation 表:移除完整一次性佣金配置,改为只存金额
|
||
|
||
-- ============================================
|
||
-- 1. Package 表调整
|
||
-- ============================================
|
||
|
||
-- 移除废弃字段
|
||
ALTER TABLE tb_package
|
||
DROP COLUMN IF EXISTS price,
|
||
DROP COLUMN IF EXISTS data_type,
|
||
DROP COLUMN IF EXISTS data_amount_mb;
|
||
|
||
-- 新增虚流量开关字段
|
||
ALTER TABLE tb_package
|
||
ADD COLUMN IF NOT EXISTS enable_virtual_data BOOLEAN DEFAULT false NOT NULL;
|
||
|
||
COMMENT ON COLUMN tb_package.enable_virtual_data IS '是否启用虚流量';
|
||
|
||
-- 重命名 suggested_cost_price 为 cost_price(如果存在的话,通过 RENAME 实现)
|
||
-- 注意:PostgreSQL 不支持条件性重命名,此处直接重命名
|
||
DO $$
|
||
BEGIN
|
||
IF 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 suggested_cost_price TO cost_price;
|
||
END IF;
|
||
END $$;
|
||
|
||
COMMENT ON COLUMN tb_package.cost_price IS '成本价(分为单位)';
|
||
|
||
-- ============================================
|
||
-- 2. ShopPackageAllocation 表新增字段
|
||
-- ============================================
|
||
|
||
ALTER TABLE tb_shop_package_allocation
|
||
ADD COLUMN IF NOT EXISTS one_time_commission_amount BIGINT DEFAULT 0 NOT NULL;
|
||
|
||
COMMENT ON COLUMN tb_shop_package_allocation.one_time_commission_amount IS '该代理能拿到的一次性佣金(分)';
|
||
|
||
-- ============================================
|
||
-- 3. IoTCard 表新增追踪字段
|
||
-- ============================================
|
||
|
||
-- 新增按系列追踪的累计充值字段(JSON Map: series_id -> amount)
|
||
ALTER TABLE tb_iot_card
|
||
ADD COLUMN IF NOT EXISTS accumulated_recharge_by_series JSONB DEFAULT '{}';
|
||
|
||
-- 新增按系列追踪的首充触发状态(JSON Map: series_id -> bool)
|
||
ALTER TABLE tb_iot_card
|
||
ADD COLUMN IF NOT EXISTS first_recharge_triggered_by_series JSONB DEFAULT '{}';
|
||
|
||
COMMENT ON COLUMN tb_iot_card.accumulated_recharge_by_series IS '按套餐系列追踪的累计充值金额(JSON Map: series_id -> amount 分)';
|
||
COMMENT ON COLUMN tb_iot_card.first_recharge_triggered_by_series IS '按套餐系列追踪的首充触发状态(JSON Map: series_id -> bool)';
|
||
|
||
-- ============================================
|
||
-- 4. Device 表新增追踪字段
|
||
-- ============================================
|
||
|
||
-- 新增按系列追踪的累计充值字段
|
||
ALTER TABLE tb_device
|
||
ADD COLUMN IF NOT EXISTS accumulated_recharge_by_series JSONB DEFAULT '{}';
|
||
|
||
-- 新增按系列追踪的首充触发状态
|
||
ALTER TABLE tb_device
|
||
ADD COLUMN IF NOT EXISTS first_recharge_triggered_by_series JSONB DEFAULT '{}';
|
||
|
||
COMMENT ON COLUMN tb_device.accumulated_recharge_by_series IS '按套餐系列追踪的累计充值金额(JSON Map: series_id -> amount 分)';
|
||
COMMENT ON COLUMN tb_device.first_recharge_triggered_by_series IS '按套餐系列追踪的首充触发状态(JSON Map: series_id -> bool)';
|
||
|
||
-- ============================================
|
||
-- 5. PackageSeries 表新增一次性佣金规则配置
|
||
-- ============================================
|
||
|
||
ALTER TABLE tb_package_series
|
||
ADD COLUMN IF NOT EXISTS one_time_commission_config JSONB;
|
||
|
||
COMMENT ON COLUMN tb_package_series.one_time_commission_config IS '一次性佣金规则配置(JSON:enable, trigger_type, threshold, commission_type, commission_amount, validity_type 等)';
|
||
|
||
-- ============================================
|
||
-- 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
|
||
ADD COLUMN IF NOT EXISTS stat_scope VARCHAR(20) DEFAULT 'self' NOT NULL;
|
||
|
||
COMMENT ON COLUMN tb_shop_series_one_time_commission_tier.stat_scope IS '统计范围 self-仅自己 self_and_sub-自己+下级';
|
||
END IF;
|
||
END $$;
|
||
|
||
-- ============================================
|
||
-- 7. ShopSeriesAllocation 表移除废弃字段,新增新字段
|
||
-- ============================================
|
||
|
||
-- 移除一次性佣金完整配置字段
|
||
ALTER TABLE tb_shop_series_allocation
|
||
DROP COLUMN IF EXISTS enable_one_time_commission,
|
||
DROP COLUMN IF EXISTS one_time_commission_type,
|
||
DROP COLUMN IF EXISTS one_time_commission_trigger,
|
||
DROP COLUMN IF EXISTS one_time_commission_threshold,
|
||
DROP COLUMN IF EXISTS one_time_commission_mode,
|
||
DROP COLUMN IF EXISTS one_time_commission_value,
|
||
DROP COLUMN IF EXISTS enable_force_recharge,
|
||
DROP COLUMN IF EXISTS force_recharge_amount,
|
||
DROP COLUMN IF EXISTS force_recharge_trigger_type;
|
||
|
||
-- 新增一次性佣金金额字段
|
||
ALTER TABLE tb_shop_series_allocation
|
||
ADD COLUMN IF NOT EXISTS one_time_commission_amount BIGINT DEFAULT 0 NOT NULL;
|
||
|
||
COMMENT ON COLUMN tb_shop_series_allocation.one_time_commission_amount IS '给被分配店铺的一次性佣金金额(分)';
|