Files
junhong_cmp_fiber/migrations/000029_add_one_time_commission.up.sql
huang e87513541b
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m41s
feat: 实现一次性佣金功能
- 新增佣金计算服务,支持一次性佣金和返佣计算
- 新增 ShopSeriesOneTimeCommissionTier 模型和存储层
- 新增两个数据库迁移:一次性佣金表和订单佣金字段
- 更新 Commission 模型,新增佣金来源和关联字段
- 更新 CommissionRecord 存储层,支持一次性佣金查询
- 更新 MyCommission 服务,集成一次性佣金计算逻辑
- 更新 ShopCommission 服务,支持一次性佣金统计
- 新增佣金计算异步任务处理器
- 更新 API 路由,新增一次性佣金相关端点
- 归档 OpenSpec 变更文档,同步规范到主规范库
2026-01-29 09:36:12 +08:00

97 lines
5.4 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 迁移: 一次性佣金功能
-- 变更ID: add-one-time-commission
-- 说明:
-- 1. 为 tb_shop_series_allocation 添加一次性佣金配置字段
-- 2. 创建 tb_shop_series_one_time_commission_tier 梯度配置表
-- 3. 简化 tb_commission_record 表结构(删除冻结字段,新增来源字段)
-- ========================================
-- 1. tb_shop_series_allocation 添加一次性佣金配置字段
-- ========================================
ALTER TABLE tb_shop_series_allocation
ADD COLUMN IF NOT EXISTS enable_one_time_commission BOOLEAN NOT NULL DEFAULT FALSE,
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;
-- 添加字段注释
COMMENT ON COLUMN tb_shop_series_allocation.enable_one_time_commission IS '是否启用一次性佣金';
COMMENT ON COLUMN tb_shop_series_allocation.one_time_commission_type IS '一次性佣金类型 fixed-固定 tiered-梯度';
COMMENT ON COLUMN tb_shop_series_allocation.one_time_commission_trigger IS '触发条件 single_recharge-单次充值 accumulated_recharge-累计充值';
COMMENT ON COLUMN tb_shop_series_allocation.one_time_commission_threshold IS '最低阈值(分)';
COMMENT ON COLUMN tb_shop_series_allocation.one_time_commission_mode IS '返佣模式 fixed-固定金额 percent-百分比';
COMMENT ON COLUMN tb_shop_series_allocation.one_time_commission_value IS '佣金金额(分)或比例(千分比)';
-- ========================================
-- 2. 创建 tb_shop_series_one_time_commission_tier 梯度配置表
-- ========================================
CREATE TABLE IF NOT EXISTS tb_shop_series_one_time_commission_tier (
id BIGSERIAL PRIMARY KEY,
allocation_id BIGINT NOT NULL,
tier_type VARCHAR(20) NOT NULL,
threshold_value BIGINT NOT NULL,
commission_mode VARCHAR(20) NOT NULL DEFAULT 'fixed',
commission_value BIGINT NOT NULL,
status INT NOT NULL DEFAULT 1,
creator BIGINT NOT NULL,
updater BIGINT NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
deleted_at TIMESTAMP WITH TIME ZONE
);
-- 添加索引
CREATE INDEX IF NOT EXISTS idx_one_time_tier_allocation_id ON tb_shop_series_one_time_commission_tier(allocation_id);
CREATE INDEX IF NOT EXISTS idx_one_time_tier_tier_type ON tb_shop_series_one_time_commission_tier(tier_type);
CREATE INDEX IF NOT EXISTS idx_one_time_tier_threshold ON tb_shop_series_one_time_commission_tier(threshold_value);
-- 添加表注释
COMMENT ON TABLE tb_shop_series_one_time_commission_tier IS '一次性佣金梯度配置表,基于销售业绩的一次性佣金档位';
COMMENT ON COLUMN tb_shop_series_one_time_commission_tier.allocation_id IS '系列分配ID';
COMMENT ON COLUMN tb_shop_series_one_time_commission_tier.tier_type IS '梯度类型 sales_count-销量 sales_amount-销售额';
COMMENT ON COLUMN tb_shop_series_one_time_commission_tier.threshold_value IS '梯度阈值(销量或销售额分)';
COMMENT ON COLUMN tb_shop_series_one_time_commission_tier.commission_mode IS '返佣模式 fixed-固定金额 percent-百分比';
COMMENT ON COLUMN tb_shop_series_one_time_commission_tier.commission_value IS '返佣值(分或千分比)';
COMMENT ON COLUMN tb_shop_series_one_time_commission_tier.status IS '状态 1-启用 2-停用';
COMMENT ON COLUMN tb_shop_series_one_time_commission_tier.creator IS '创建人ID';
COMMENT ON COLUMN tb_shop_series_one_time_commission_tier.updater IS '更新人ID';
-- ========================================
-- 3. 修改 tb_commission_record 表结构
-- ========================================
-- 3.1 删除旧字段
ALTER TABLE tb_commission_record
DROP COLUMN IF EXISTS agent_id,
DROP COLUMN IF EXISTS rule_id,
DROP COLUMN IF EXISTS commission_type,
DROP COLUMN IF EXISTS unfrozen_at;
-- 3.2 添加新字段
ALTER TABLE tb_commission_record
ADD COLUMN IF NOT EXISTS commission_source VARCHAR(20) NOT NULL DEFAULT 'cost_diff',
ADD COLUMN IF NOT EXISTS iot_card_id BIGINT,
ADD COLUMN IF NOT EXISTS device_id BIGINT,
ADD COLUMN IF NOT EXISTS remark VARCHAR(500);
-- 3.3 添加索引
CREATE INDEX IF NOT EXISTS idx_commission_record_commission_source ON tb_commission_record(commission_source);
CREATE INDEX IF NOT EXISTS idx_commission_record_iot_card_id ON tb_commission_record(iot_card_id);
CREATE INDEX IF NOT EXISTS idx_commission_record_device_id ON tb_commission_record(device_id);
-- 3.4 更新字段注释
COMMENT ON COLUMN tb_commission_record.shop_id IS '店铺ID佣金归属';
COMMENT ON COLUMN tb_commission_record.order_id IS '订单ID';
COMMENT ON COLUMN tb_commission_record.commission_source IS '佣金来源 cost_diff-成本价差 one_time-一次性佣金 tier_bonus-梯度奖励';
COMMENT ON COLUMN tb_commission_record.iot_card_id IS '关联卡ID可空';
COMMENT ON COLUMN tb_commission_record.device_id IS '关联设备ID可空';
COMMENT ON COLUMN tb_commission_record.amount IS '佣金金额(分)';
COMMENT ON COLUMN tb_commission_record.balance_after IS '入账后钱包余额(分)';
COMMENT ON COLUMN tb_commission_record.status IS '状态 1-已入账 2-已失效';
COMMENT ON COLUMN tb_commission_record.released_at IS '入账时间';
COMMENT ON COLUMN tb_commission_record.remark IS '备注';