代理佣金系统是博彩平台运营的核心引擎之一。一个优秀的代理系统不仅能帮助平台快速获客,还能有效管理代理层级和佣金计算。本文将从代理体系设计、佣金计算模型、结算引擎等方面提供完整的技术实现。
┌─────────────────────────────────────────────────────────┐
│ 后台管理面板 │
│ 代理列表 · 佣金报表 · 结算记录 · 数据看板 │
└──────────────────────┬──────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────┐
│ 代理核心服务 │
├──────────────┬───────────────┬──────────────────────────┤
│ 代理层级 │ 佣金计算 │ 结算与支付 │
│ - 多级树结构 │ - 洗码返水 │ - 周期结算 │
│ - 关系管理 │ - 亏损返佣 │ - USDT/Tron自动支付 │
│ - 升降级 │ - 活跃度奖励 │ - 对账报表 │
└──────────────┴───────────────┴──────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────┐
│ 平台数据层 │
│ 投注记录 · 用户层级 · 流水统计 · 财务报表 │
└──────────────────────────────────────────────────────────┘
-- 代理核心表设计
CREATE TABLE agents (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL REFERENCES users(id),
parent_id BIGINT REFERENCES agents(id), -- 上级代理
level INT NOT NULL DEFAULT 1, -- 代理层级深度
commission_rate DECIMAL(5,4) NOT NULL DEFAULT 0.0100, -- 佣金比例 1.00%
rebate_rate DECIMAL(5,4) NOT NULL DEFAULT 0.0050, -- 返水比例 0.50%
status SMALLINT NOT NULL DEFAULT 1, -- 1=正常 0=禁用
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
);
-- 代理关系闭包表(高效查询所有下级)
CREATE TABLE agent_closure (
ancestor_id BIGINT NOT NULL REFERENCES agents(id),
descendant_id BIGINT NOT NULL REFERENCES agents(id),
depth INT NOT NULL DEFAULT 0, -- 0=自身
PRIMARY KEY (ancestor_id, descendant_id)
);
CREATE INDEX idx_agent_closure_desc ON agent_closure(descendant_id);
-- 佣金结算记录
CREATE TABLE commission_settlements (
id BIGSERIAL PRIMARY KEY,
agent_id BIGINT NOT NULL REFERENCES agents(id),
period_start DATE NOT NULL,
period_end DATE NOT NULL,
team_turnover DECIMAL(18,2) NOT NULL DEFAULT 0, -- 团队流水
team_win_loss DECIMAL(18,2) NOT NULL DEFAULT 0, -- 团队输赢
commission DECIMAL(18,2) NOT NULL DEFAULT 0, -- 应发佣金
status SMALLINT NOT NULL DEFAULT 0, -- 0=待结算 1=已结算 2=已支付
paid_at TIMESTAMP,
created_at TIMESTAMP NOT NULL DEFAULT NOW()
);
使用闭包表(Closure Table)来存储代理层级关系,可以在一次查询中获取任意代理的所有下级或上级,无需递归查询,性能远优于邻接表模型。
# commission/calculator.py - 佣金计算引擎
from decimal import Decimal, ROUND_HALF_UP
from dataclasses import dataclass
from typing import List, Optional
import asyncpg
from datetime import date, timedelta
@dataclass
class AgentCommission:
agent_id: int
self_turnover: Decimal # 自身流水
self_win_loss: Decimal # 自身输赢(负数=盈利)
team_turnover: Decimal # 团队总流水
team_win_loss: Decimal # 团队总输赢
commission_rate: Decimal # 佣金比例
sub_agent_count: int # 下级代理数
active_player_count: int # 活跃玩家数
commission_amount: Decimal # 计算出的佣金
class CommissionEngine:
def __init__(self, db_pool):
self.db = db_pool
async def calculate_agent_commission(
self, agent_id: int, start: date, end: date
) -> AgentCommission:
"""计算单个代理的佣金"""
# 获取代理信息
async with self.db.acquire() as conn:
agent = await conn.fetchrow(
"SELECT * FROM agents WHERE id = $1", agent_id
)
# 获取代理的所有下级用户ID
descendants = await conn.fetch(
"""SELECT descendant_id FROM agent_closure
WHERE ancestor_id = $1 AND depth > 0""",
agent_id
)
descendant_ids = [d["descendant_id"] for d in descendants]
# 获取自身流水和输赢
self_turnover, self_wl = await self._get_player_stats(
agent_id, start, end
)
# 获取团队流水和输赢(包含下级代理的团队)
team_turnover = self_turnover
team_wl = self_wl
for desc_id in descendant_ids:
t, w = await self._get_player_stats(desc_id, start, end)
team_turnover += t
team_wl += w
# 佣金计算逻辑
# 模式1:按团队流水×佣金比例
commission_turnover = Decimal('0')
if team_turnover > 0:
commission_turnover = team_turnover * agent["commission_rate"]
# 模式2:按团队输赢的一定比例
commission_wl = Decimal('0')
if team_wl > 0: # 平台盈利时才发佣金
commission_wl = team_wl * Decimal('0.3') # 30%分成
# 取两者中较高的作为最终佣金(同时结合盈亏)
final_commission = max(commission_turnover, commission_wl)
# 如果平台整体亏损,佣金为0
if team_wl < 0:
final_commission = commission_turnover # 亏损期只给流水佣金
return AgentCommission(
agent_id=agent_id,
self_turnover=round(self_turnover, 2),
self_win_loss=round(self_wl, 2),
team_turnover=round(team_turnover, 2),
team_win_loss=round(team_wl, 2),
commission_rate=agent["commission_rate"],
sub_agent_count=len(descendants),
active_player_count=0,
commission_amount=round(final_commission, 2),
)
async def _get_player_stats(
self, agent_id: int, start: date, end: date
) -> tuple:
"""统计指定代理(作为玩家)的流水和输赢"""
async with self.db.acquire() as conn:
row = await conn.fetchrow(
"""SELECT
COALESCE(SUM(bet_amount), 0) as turnover,
COALESCE(SUM(bet_amount - payout), 0) as win_loss
FROM bets
WHERE user_id = (SELECT user_id FROM agents WHERE id = $1)
AND created_at >= $2 AND created_at < $3""",
agent_id, start, end + timedelta(days=1)
)
return Decimal(str(row["turnover"])), Decimal(str(row["win_loss"]))
多级体系中,上级代理赚取与下级代理的佣金比例差额。示例如下:
# commission/multi_level.py - 多级差额佣金
async def calculate_hierarchy_commission(
top_agent_id: int, start: date, end: date, db
):
"""
从顶级代理开始,递归计算整个代理树的佣金。
每个代理获得自身的直接团队佣金 + 下级差额佣金。
"""
async def process_agent(agent_id: int, parent_rate: Decimal) -> Decimal:
# 获取自身佣金
engine = CommissionEngine(db)
result = await engine.calculate_agent_commission(agent_id, start, end)
# 获取直接下级代理
async with db.acquire() as conn:
children = await conn.fetch(
"SELECT id, commission_rate FROM agents WHERE parent_id = $1",
agent_id
)
# 递归处理下级代理
total_child_commission = Decimal('0')
for child in children:
child_commission = await process_agent(
child["id"], child["commission_rate"]
)
total_child_commission += child_commission
# 差额佣金:我的佣金率 - 下级的佣金率
diff_rate = result.commission_rate - child["commission_rate"]
if diff_rate > 0:
child_team = await engine._get_team_turnover(
child["id"], start, end
)
diff_commission = child_team * diff_rate
total_child_commission += diff_commission
# 总佣金 = 自身团队佣金 + 下级差额佣金
final = result.commission_amount + total_child_commission
print(f"代理{agent_id}: 自身={result.commission_amount:.2f}, "
f"下级差额={total_child_commission:.2f}, 总计={final:.2f}")
return final
return await process_agent(top_agent_id, Decimal('0'))
结算系统必须保证幂等性,防止重复支付:
# commission/settlement.py - 结算服务
class SettlementService:
async def settle_period(self, end_date: date) -> dict:
"""执行周期结算"""
async with self.db.acquire() as conn:
# 1. 加锁:使用分布式锁防止重复结算
lock_key = f"settlement:lock:{end_date.isoformat()}"
locked = await self.redis.setnx(lock_key, "1")
if not locked:
raise Exception("本期结算正在进行中")
self.redis.expire(lock_key, 3600) # 1小时超时
try:
# 2. 获取所有活跃代理
agents = await conn.fetch(
"SELECT id FROM agents WHERE status = 1"
)
# 3. 逐批计算(每批100个,防止内存溢出)
batch_size = 100
results = []
for i in range(0, len(agents), batch_size):
batch = agents[i:i + batch_size]
tasks = [
self.calculate_agent_commission(a["id"], end_date)
for a in batch
]
batch_results = await asyncio.gather(*tasks)
results.extend(batch_results)
# 4. 写入结算记录
for r in results:
if r.commission_amount > 0:
await conn.execute(
"""INSERT INTO commission_settlements
(agent_id, period_start, period_end,
team_turnover, team_win_loss,
commission, status)
VALUES ($1, $2, $3, $4, $5, $6, 1)
ON CONFLICT (agent_id, period_end) DO NOTHING""",
r.agent_id, end_date - timedelta(days=7),
end_date, r.team_turnover, r.team_win_loss,
r.commission_amount,
)
return {"total_settled": len(results)}
finally:
self.redis.delete(lock_key)
代理后台需要提供以下关键功能:
代理团队的高效管理是博彩平台持续增长的核心驱动力。优秀的代理管理不仅依赖于佣金制度的合理性,更在于建立完整的激励体系和培训机制。现代代理管理系统支持多层次的团队管理功能,包括代理团队目标设定、业绩追踪、晋升路径设计和竞赛排行榜。例如平台可以设置月度团队流水PK赛,前三名获得额外奖金加成或专属VIP权益,通过良性竞争激发代理团队的战斗力。在激励策略方面,除了基础佣金外平台还应设计多种激励工具。新人培育奖金——代理邀请的下级代理在一周内达到特定活跃度,上级可获得额外一次性的培养奖励。留存奖金——代理名下的玩家持续活跃超过30天,代理可获得该玩家的额外流水提成。团队裂变奖金——当代理团队人数突破特定门槛如10人、50人、100人,平台发放一次性裂变奖励。这些组合激励策略能有效驱动代理不断拓展团队规模并维护玩家留存。同时代理管理还需要建立科学的升降级制度,平台应根据代理近三个月的平均流水量级划分代理等级如普通代理、高级代理、金牌代理、钻石代理,不同等级享有不同的佣金比例和平台权限。系统自动每月评估一次代理等级,升级自动进行,降级则提前30天预警给予代理缓冲期,透明化的升降级制度能极大提升代理的归属感和长期合作意愿。
数据看板是代理日常运营的核心工具,一个功能完善的数据看板应当覆盖实时数据监控、历史趋势分析和团队画像三大维度。实时数据监控包括当前在线人数、今日团队流水、今日输赢和预估今日佣金,数据以5至10秒为间隔自动刷新,帮助代理随时掌握运营动态。历史趋势分析则展示最近30天或自定义时间段的流水趋势图、新增玩家趋势图、代理团队增长曲线等可视化报表。在团队画像方面,数据看板需要提供精细化的玩家分层能力。系统根据玩家的充值频次、投注偏好、留存时长等维度将玩家分为核心玩家、活跃玩家、沉默玩家和流失玩家四类。代理可以针对不同分层的玩家制定差异化的维护策略,例如对沉默玩家发送专属优惠券、对核心玩家提供私人客服。此外看板还应展示每个玩家的详细投注记录、输赢统计和充值履历,让代理对团队每个成员了如指掌。数据看板的移动端适配同样不容忽视,代理人员日常工作场景高度碎片化,需要随时随地查看业绩数据。因此看板系统应同时支持Web端和移动端H5,并在移动端提供关键指标卡片展示、每日简报推送和异常告警通知功能。当团队中出现大额输赢波动、重要玩家流失或佣金接近结算日时,系统自动推送消息给代理,确保代理不会错过任何关键信息。
代理体系的防作弊是保障平台利益的核心防线。常见的代理作弊手段包括自充自刷、关联账号对刷和虚拟投注。自充自刷指代理用自己的小号充值并将流水导向自己名下套取佣金。关联账号对刷指多名代理配合在平台进行对冲投注骗取返水。虚拟投注指通过API模拟对局制造虚假流水。针对这些手段,平台需要构建多层联防体系。第一层是行为监控层,系统实时分析每个代理名下的投注模式,包括平均投注金额、投注时间分布、结算后留存率等。如果发现某个代理名下玩家的行为模式高度一致如同IP、同设备指纹、投注习惯极度相似,自动触发风控告警并冻结该代理的佣金计算。第二层是资金流分析层,追踪代理名下玩家的充值资金来源,如果发现多个玩家的充值来自同一个钱包地址或银行卡号,判定为高度嫌疑的刷佣行为。第三层是人工核查层,所有自动风控告警由运营团队逐条复核,并支持牌局回放功能,人工查看异常对局的详细过程。防作弊系统的设计还需要考虑误判率控制,过于严格的风控策略会伤害正常代理的积极性。建议采用梯度风控策略,低风险标注仅记录不做处理,中风险标注冻结佣金但代理仍可正常推广,高风险标注暂停代理权限并进入人工复核流程。同时系统应提供申诉通道,代理可通过提交证据材料对风控判定进行申诉。一个成熟的防作弊系统应当达到95%以上的准确率,误判率控制在1%以下,在保障平台利益的同时不伤害正常代理的推广积极性。
📕 需要相关系统搭建服务?青禾技术提供一站式解决方案,欢迎咨询。
✈ Telegram: @guanshui549© 2026 青禾技术服务 | lilesc88.top