233 lines
5.0 KiB
Markdown
233 lines
5.0 KiB
Markdown
# 佣金计算问题 - 快速诊断和修复
|
||
|
||
## 🚨 问题描述
|
||
|
||
用户反馈:"推广者应该获取支付金额的90%,但却是10%"
|
||
|
||
---
|
||
|
||
## 🔍 快速诊断
|
||
|
||
### 方法1: 检查管理后台配置
|
||
|
||
1. 登录管理后台:`https://soul.quwanzhi.com/admin`
|
||
2. 进入「推广设置」页面:`/admin/referral-settings`
|
||
3. 查看「分销比例」输入框中的数值
|
||
|
||
**如果显示 10** → 配置错误,应该改为 **90**
|
||
|
||
**如果显示 90** → 配置正确,问题在其他地方
|
||
|
||
---
|
||
|
||
### 方法2: 检查实际佣金
|
||
|
||
1. 找一个推荐关系的订单
|
||
2. 查看推荐人获得的佣金
|
||
|
||
**示例**:
|
||
- 用户B购买1元商品(无折扣)
|
||
- 推荐人A应得:0.90元(90%)
|
||
- 如果实际只得:0.10元 → 说明比例算反了
|
||
|
||
---
|
||
|
||
### 方法3: 检查小程序显示
|
||
|
||
打开小程序「分销中心」,查看推广规则:
|
||
|
||
**应该显示**:
|
||
```
|
||
好友成功付款后,你获得 90% 收益
|
||
```
|
||
|
||
**如果显示**:
|
||
```
|
||
好友成功付款后,你获得 10% 收益
|
||
```
|
||
|
||
→ 说明后端返回的 `shareRate` 值错误
|
||
|
||
---
|
||
|
||
## 🔧 修复方案
|
||
|
||
### 修复1: 如果管理后台配置值错误
|
||
|
||
**步骤**:
|
||
1. 进入管理后台 `/admin/referral-settings`
|
||
2. 将「分销比例」改为 **90**
|
||
3. 点击「保存配置」
|
||
4. 刷新小程序验证
|
||
|
||
---
|
||
|
||
### 修复2: 如果数据库配置值错误
|
||
|
||
**手动修复SQL**:
|
||
```sql
|
||
-- 1. 查看当前配置
|
||
SELECT config_value FROM system_config WHERE config_key = 'referral_config';
|
||
|
||
-- 2. 如果 distributorShare 不是 90,手动更新
|
||
UPDATE system_config
|
||
SET config_value = JSON_SET(
|
||
config_value,
|
||
'$.distributorShare',
|
||
90
|
||
)
|
||
WHERE config_key = 'referral_config';
|
||
|
||
-- 3. 验证修改
|
||
SELECT config_value FROM system_config WHERE config_key = 'referral_config';
|
||
```
|
||
|
||
---
|
||
|
||
### 修复3: 如果计算公式错误
|
||
|
||
**检查文件**: `app/api/miniprogram/pay/notify/route.ts`
|
||
|
||
**第395行,当前代码应该是**:
|
||
```typescript
|
||
const commission = Math.round(amount * distributorShare * 100) / 100
|
||
```
|
||
|
||
**如果错误写成了**:
|
||
```typescript
|
||
// ❌ 错误1:算反了
|
||
const commission = Math.round(amount * (1 - distributorShare) * 100) / 100
|
||
|
||
// ❌ 错误2:没有先除100
|
||
const distributorShare = config.distributorShare // 90(没除100)
|
||
const commission = amount * distributorShare / 100 // 1 * 90 / 100 = 0.9(看似对,但后续会错)
|
||
```
|
||
|
||
---
|
||
|
||
## 🧪 验证步骤
|
||
|
||
### 验证1: 手动计算
|
||
|
||
假设配置 `distributorShare = 90`:
|
||
|
||
```javascript
|
||
// 读取配置
|
||
const configValue = 90
|
||
|
||
// 转换为小数
|
||
const distributorShare = configValue / 100 // = 0.9
|
||
|
||
// 计算佣金(购买1元)
|
||
const commission = 1.00 * 0.9 // = 0.90元
|
||
|
||
// 返回给小程序
|
||
const shareRate = distributorShare * 100 // = 90
|
||
```
|
||
|
||
**预期**:
|
||
- 购买1元 → 推荐人得 0.90元
|
||
- 小程序显示:90% 返利
|
||
|
||
---
|
||
|
||
### 验证2: 查看实际订单
|
||
|
||
**SQL查询**:
|
||
```sql
|
||
SELECT
|
||
o.order_sn,
|
||
o.amount as 订单金额,
|
||
rb.total_commission as 累计佣金,
|
||
rb.purchase_count as 购买次数,
|
||
o.amount * 0.9 as 预期佣金90percent,
|
||
o.amount * 0.1 as 如果是10percent
|
||
FROM orders o
|
||
JOIN referral_bindings rb ON o.user_id = rb.referee_id
|
||
WHERE o.status = 'paid'
|
||
AND rb.purchase_count > 0
|
||
ORDER BY o.pay_time DESC
|
||
LIMIT 5;
|
||
```
|
||
|
||
**对比**:
|
||
- 如果 `total_commission ≈ 预期佣金90percent` → 计算正确
|
||
- 如果 `total_commission ≈ 如果是10percent` → 计算错误(算反了)
|
||
|
||
---
|
||
|
||
## 🔍 代码审查
|
||
|
||
### 关键代码1: 读取配置
|
||
|
||
**文件**: `app/api/miniprogram/pay/notify/route.ts` 第357-360行
|
||
|
||
```typescript
|
||
const config = await getConfig('referral_config')
|
||
if (config?.distributorShare) {
|
||
distributorShare = config.distributorShare / 100 // ✅ 应该是这样
|
||
}
|
||
```
|
||
|
||
**如果错误写成**:
|
||
```typescript
|
||
distributorShare = config.distributorShare // ❌ 没除100
|
||
```
|
||
|
||
---
|
||
|
||
### 关键代码2: 计算佣金
|
||
|
||
**文件**: `app/api/miniprogram/pay/notify/route.ts` 第395行
|
||
|
||
```typescript
|
||
const commission = Math.round(amount * distributorShare * 100) / 100
|
||
// ✅ 正确:1 * 0.9 = 0.9
|
||
```
|
||
|
||
**如果错误写成**:
|
||
```typescript
|
||
const commission = Math.round(amount * (1 - distributorShare) * 100) / 100
|
||
// ❌ 错误:1 * (1 - 0.9) = 0.1(算反了)
|
||
```
|
||
|
||
---
|
||
|
||
### 关键代码3: 返回比例
|
||
|
||
**文件**: `app/api/referral/data/route.ts` 第198行
|
||
|
||
```typescript
|
||
shareRate: Math.round(distributorShare * 100)
|
||
// ✅ 正确:0.9 * 100 = 90
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 立即检查
|
||
|
||
请你帮我确认一下:
|
||
|
||
### 问题1: 管理后台的配置值
|
||
进入 `https://soul.quwanzhi.com/admin/referral-settings`,看看「分销比例」输入框中显示的是:
|
||
- [ ] 90(正确)
|
||
- [ ] 10(错误)
|
||
- [ ] 0.9(错误)
|
||
|
||
### 问题2: 小程序显示的比例
|
||
打开小程序「分销中心」,查看推广规则显示的是:
|
||
- [ ] "你获得 90% 收益"(正确)
|
||
- [ ] "你获得 10% 收益"(错误)
|
||
|
||
### 问题3: 实际佣金金额
|
||
如果有测试订单,查看:
|
||
- 购买金额:1.00元
|
||
- 推荐人获得:_____ 元
|
||
|
||
**如果是 0.90元** → 计算正确
|
||
**如果是 0.10元** → 计算错误
|
||
|
||
---
|
||
|
||
**请告诉我上述三个问题的实际情况,我会立即定位并修复!**
|