分销与邀请模块业务说明
本文档描述分销体系(合作商管理、佣金、提现)和邀请有礼活动的完整链路。
帮助开发人员快速理解"为什么这样设计"以及各环节的特殊处理方式。
一、分销体系概览
合作商 (Distributor)
├── 推荐用户 (DistributorReferral)
│ └── 用户下单 → 产生佣金 (DistributorCommission)
├── 佣金余额管理
│ ├── commissionBalance(可用余额)
│ ├── frozenAmount(冻结金额)
│ ├── totalCommission(累计佣金)
│ └── totalWithdrawn(已提现总额)
├── 提现管理 (DistributorWithdrawal)
└── 月度报表 (DistributorMonthlyReport)
二、合作商管理
2.1 Distributor 实体
| 字段 |
类型 |
说明 |
| id |
Long |
雪花算法主键(@JsonSerialize(using = ToStringSerializer.class)) |
| code |
String |
合作商编码(唯一标识) |
| name |
String |
合作商名称 |
| phone |
String |
联系电话 |
| status |
Integer |
状态 |
| qrcodeContent |
String |
推广二维码内容 |
| totalReferrals |
Integer |
总推荐人数 |
| validReferrals |
Integer |
有效推荐人数 |
| commissionBalance |
BigDecimal |
可用佣金余额 |
| frozenAmount |
BigDecimal |
冻结金额 |
| totalCommission |
BigDecimal |
累计佣金总额 |
| totalWithdrawn |
BigDecimal |
已提现总额 |
| remark |
String |
备注 |
| creatorId |
Long |
创建人ID |
| creatorName |
String |
创建人姓名 |
| deleted |
Integer |
逻辑删除 |
2.2 DistributorConfig(合作商配置)
| 字段 |
说明 |
| commissionRate |
佣金比例 |
| minWithdrawAmount |
最低提现金额 |
| commissionFreezeDays |
佣金冻结天数 |
三、推荐与佣金
3.1 DistributorReferral(推荐记录)
| 关键字段 |
说明 |
| distributorId |
合作商ID |
| userId |
被推荐用户ID |
| status |
推荐状态 |
| sourceChannel |
来源渠道 |
| firstOrderAmount |
首单金额 |
| firstOrderTime |
首单时间 |
3.2 DistributorCommission(佣金记录)
| 关键字段 |
说明 |
| distributorId |
合作商ID |
| orderId |
订单ID |
| referralId |
推荐记录ID |
| orderAmount |
订单金额 |
| commissionRate |
佣金比例 |
| commissionAmount |
佣金金额 |
| status |
状态:0-待结算 1-已结算 2-已冻结 3-已取消 |
3.3 佣金产生流程
被推荐用户下单 → 订单完成(payStatus=PAID)
↓
检查该用户是否有推荐记录(DistributorReferral)
↓
计算佣金 = 订单金额 × 佣金比例
↓
创建佣金记录(DistributorCommission,status=待结算)
↓
佣金冻结期过后 → 状态变为已结算
↓
更新合作商 commissionBalance
为什么佣金有冻结期?
订单可能发生退款,如果在退款前佣金已结算并提现,会造成资金损失。冻结期(commissionFreezeDays)确保订单度过退款风险期后佣金才变为可用,这是分销业务的标准风控手段。
冻结期由 DistributorConfig.commissionFreezeDays 配置,不同合作商可设置不同天数。
四、提现管理
4.1 DistributorWithdrawal(提现记录)
| 关键字段 |
说明 |
| distributorId |
合作商ID |
| amount |
提现金额 |
| status |
状态:0-待审核 1-已通过 2-已拒绝 3-已打款 |
| bankName |
收款银行 |
| bankAccount |
收款账号 |
| accountName |
收款人姓名 |
| reviewRemark |
审核备注 |
| reviewerId |
审核人ID |
| reviewTime |
审核时间 |
4.2 提现流程
合作商申请提现
↓
检查:余额 >= 提现金额 >= 最低提现额度
↓
冻结金额(frozenAmount += amount)
↓
创建提现记录(status=待审核)
↓
运营平台审核
├── 通过 → 打款 → 状态变为已打款
│ → 扣减 commissionBalance 和 frozenAmount
│ → 累加 totalWithdrawn
└── 拒绝 → 解冻(frozenAmount -= amount)→ 状态变为已拒绝
提现审核的合规原因
分销业务涉及资金流出,需要人工审核确认:
- 防止恶意刷单后提现
- 确认银行账户信息正确
- 满足财务合规要求
提现冻结机制确保审核期间这部分金额不会被二次提现。
五、月度报表
5.1 DistributorMonthlyReport
| 关键字段 |
说明 |
| distributorId |
合作商ID |
| year / month |
年月 |
| totalOrders |
月度总订单数 |
| totalOrderAmount |
月度总订单金额 |
| totalCommission |
月度总佣金 |
| newReferrals |
月度新增推荐人数 |
| validReferrals |
月度有效推荐人数 |
六、小程序端分销接口
| 接口 |
控制器 |
说明 |
| 获取合作商信息 |
DistributorMpController |
合作商个人中心 |
| 获取推荐列表 |
DistributorMpController |
推荐用户列表 |
| 获取佣金记录 |
DistributorMpController |
佣金明细 |
| 申请提现 |
DistributorMpController |
发起提现 |
| 获取提现记录 |
DistributorMpController |
提现历史 |
| 生成推广码 |
DistributorMpController |
推广二维码 |
七、邀请有礼体系
7.1 与分销的区别
| 维度 |
分销(Distributor) |
邀请有礼(InviteActivity) |
| 角色 |
合作商(B端) |
普通用户(C端) |
| 奖励 |
佣金(金额) |
优惠券 |
| 管理 |
运营平台分配 |
用户自主参与 |
| 触发 |
被推荐人下单 |
被邀请人首单/绑定 |
为什么邀请有礼发优惠券而非佣金?
分销面向B端合作商,发佣金合理且合规。邀请有礼面向C端普通用户,发佣金涉及个人税务和支付通道问题,而发优惠券:
- 无合规风险
- 促进复购(优惠券只能在平台消费)
- 实现成本低(无需对接提现通道)
- 双向奖励(邀请人和被邀请人各得一张券)更容易实施
7.2 邀请流程
邀请人分享邀请码/链接
↓
被邀请人扫码 → 绑定邀请关系(InviteRecord,status=待激活)
↓
被邀请人完成首单(满足 minOrderAmount 条件)
↓
InviteActivityServiceImpl 处理邀请激活
↓
更新 InviteRecord.status = 已激活/已奖励
↓
发放奖励:
├── 邀请人 → 发放 couponTemplateId 对应的优惠券
└── 被邀请人 → 发放 inviteeCouponTemplateId 对应的优惠券(双向奖励时)
7.3 邀请限制
- 每日邀请上限:dailyLimit
- 活动期间总上限:totalLimit
- 首单金额门槛:requireFirstOrder + minOrderAmount
- 防重复:同一被邀请人只能被同一邀请人邀请一次
八、核心代码文件索引
| 文件 |
职责 |
haha-entity/.../Distributor.java |
合作商实体 |
haha-entity/.../DistributorCommission.java |
佣金记录实体 |
haha-entity/.../DistributorConfig.java |
合作商配置实体 |
haha-entity/.../DistributorReferral.java |
推荐记录实体 |
haha-entity/.../DistributorWithdrawal.java |
提现记录实体 |
haha-entity/.../DistributorMonthlyReport.java |
月度报表实体 |
haha-entity/.../InviteActivity.java |
邀请活动实体 |
haha-entity/.../InviteRecord.java |
邀请记录实体 |
haha-entity/.../InviteReward.java |
邀请奖励实体 |
haha-service/.../DistributorServiceImpl.java |
合作商服务 |
haha-service/.../DistributorCommissionServiceImpl.java |
佣金服务 |
haha-service/.../DistributorWithdrawalServiceImpl.java |
提现服务 |
haha-service/.../DistributorReportServiceImpl.java |
报表服务 |
haha-service/.../InviteActivityServiceImpl.java |
邀请活动服务(含激活逻辑) |
haha-admin/.../DistributorAdminController.java |
运营平台-合作商API |
haha-miniapp/.../InviteController.java |
小程序-邀请API |