-- ============================================================= -- 平台端推广佣金相关表 -- yz_platform_commission_rule 佣金规则(按比例 / 固定金额 / 阶梯) -- yz_platform_commission_order 佣金单(台账,含发放登记) -- -- 业务约定: -- 1. 佣金由平台自有资金支出,与租户收款资金流解耦,不参与分账; -- 2. 佣金单在「业务订单支付成功」事件上按启用中的规则生成,状态先为 payable(应付); -- 3. 一笔支付单 + 同一推广方只应生成一张佣金单(uk_pay_promoter), -- 但 MySQL 唯一索引对 NULL 不去重(delete_time),业务层仍需按 pay_no 查重后再插入; -- 4. 金额一律以「分」为单位的 bigint 存储; -- 5. 规则修改只影响之后生成的佣金单,历史佣金单保留规则快照字段(rule_name/calc_type)。 -- -- 可重复执行(CREATE TABLE IF NOT EXISTS)。 -- 运行:mysql --default-character-set=utf8mb4 -h -P -u -p < create_platform_commission.sql -- ============================================================= -- ------------------------------------------------------------- -- 1. 佣金规则表 -- ------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `yz_platform_commission_rule` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键ID', `rule_name` varchar(128) NOT NULL DEFAULT '' COMMENT '规则名称,如「渠道推广-平台使用费 5%」', `calc_type` varchar(20) NOT NULL DEFAULT 'percent' COMMENT '计算方式:percent按比例/fixed固定金额/tiered阶梯', `value` bigint(20) NOT NULL DEFAULT '0' COMMENT '规则值:percent=百分比×100(5%存500,支持2.5%存250);fixed=固定金额(分);tiered=0且明细见 tier_json', `tier_json` text COMMENT '阶梯配置JSON:[{"min":0,"max":1000000,"rate":300}];金额单位为分,max 为 null 表示不限,rate 同为百分比×100', `order_type` varchar(32) NOT NULL DEFAULT 'platform_usage' COMMENT '适用订单类型:all全部/platform_usage平台使用费/module_shop模块购买/service_fee服务费', `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态:1启用/0停用(停用后新佣金单不再匹配该规则,历史佣金单不受影响)', `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注', `create_user_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人ID', `create_user_name` varchar(128) NOT NULL DEFAULT '' COMMENT '创建人姓名', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `delete_time` datetime DEFAULT NULL COMMENT '删除时间(软删除)', PRIMARY KEY (`id`), KEY `idx_status` (`status`,`order_type`), KEY `idx_delete_time` (`delete_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='平台推广佣金规则表'; -- ------------------------------------------------------------- -- 2. 佣金单表(台账) -- ------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `yz_platform_commission_order` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键ID', `commission_no` varchar(40) NOT NULL DEFAULT '' COMMENT '佣金单号,形如 CM202609150001', `pay_no` varchar(40) NOT NULL DEFAULT '' COMMENT '关联支付单号(yz_platform_payment_order.pay_no)', `out_trade_no` varchar(64) NOT NULL DEFAULT '' COMMENT '关联业务订单号', `rule_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '命中的佣金规则ID', `rule_name` varchar(128) NOT NULL DEFAULT '' COMMENT '命中规则名称快照', `calc_type` varchar(20) NOT NULL DEFAULT '' COMMENT '计算方式快照:percent/fixed/tiered', `promoter_id` varchar(64) NOT NULL DEFAULT '' COMMENT '推广方ID(渠道伙伴 / 服务商 / 内部员工)', `promoter_name` varchar(128) NOT NULL DEFAULT '' COMMENT '推广方名称', `promoter_type` varchar(32) NOT NULL DEFAULT '' COMMENT '推广方类型:channel渠道伙伴/service服务商/staff内部员工', `base_amount` bigint(20) NOT NULL DEFAULT '0' COMMENT '计佣基数(分)= 业务订单实付金额', `amount` bigint(20) NOT NULL DEFAULT '0' COMMENT '佣金金额(分)', `status` varchar(20) NOT NULL DEFAULT 'payable' COMMENT '佣金状态:payable应付/settled已付/tax_processing税务处理中/canceled已作废', `pay_method` varchar(20) NOT NULL DEFAULT '' COMMENT '发放方式:bank银行转账/balance余额抵扣/manual人工发放/offset下期抵扣', `pay_voucher` varchar(255) NOT NULL DEFAULT '' COMMENT '发放凭证 / 银行流水号', `paid_at` datetime DEFAULT NULL COMMENT '发放时间', `paid_user_id` varchar(64) NOT NULL DEFAULT '' COMMENT '登记发放人ID', `paid_user_name` varchar(128) NOT NULL DEFAULT '' COMMENT '登记发放人姓名', `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `delete_time` datetime DEFAULT NULL COMMENT '删除时间(软删除)', PRIMARY KEY (`id`), UNIQUE KEY `uk_commission_no` (`commission_no`,`delete_time`), UNIQUE KEY `uk_pay_promoter` (`pay_no`,`promoter_id`,`delete_time`), KEY `idx_out_trade_no` (`out_trade_no`), KEY `idx_status` (`status`,`create_time`), KEY `idx_promoter` (`promoter_id`,`create_time`), KEY `idx_delete_time` (`delete_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='平台推广佣金单表(台账)';