6.6 KiB
6.6 KiB
新分销逻辑 - 宝塔面板操作清单
✅ 已完成的准备工作
- ✅ 数据库字段已添加(last_purchase_date, purchase_count, total_commission)
- ✅ 代码已部署到服务器(/www/wwwroot/soul/dist)
- ✅ 索引已创建
🔧 宝塔面板操作步骤
Step 1: 重启 Node.js 服务
- 登录宝塔面板:
http://你的服务器IP:8888 - 左侧菜单 → 网站 → 找到
soul.quwanzhi.com - 点击 设置 → Node项目 标签
- 找到项目
soul - 点击 重启 按钮
- 等待状态变为"运行中"
或者使用命令行(如果有SSH权限):
# 使用宝塔的pm2完整路径
/www/server/nodejs/v16.20.2/bin/pm2 restart soul
# 查看状态
/www/server/nodejs/v16.20.2/bin/pm2 status
# 查看日志
/www/server/nodejs/v16.20.2/bin/pm2 logs soul --lines 50
Step 2: 验证服务是否正常
2.1 检查网站访问
在浏览器打开:https://soul.quwanzhi.com
预期:
- ✅ 网站正常加载
- ✅ 无404错误
- ✅ 可以正常登录
2.2 检查新API是否生效
打开浏览器控制台,访问:
https://soul.quwanzhi.com/api/db/config?key=referral_config
预期返回:
{
"success": true,
"config": {
"distributorShare": 90,
"minWithdrawAmount": 10,
"bindingDays": 30,
"userDiscount": 5,
"enableAutoWithdraw": false
}
}
2.3 检查推广设置页面
访问:https://soul.quwanzhi.com/admin/referral-settings
预期:
- ✅ 页面正常加载
- ✅ 显示当前配置
- ✅ 可以修改并保存
Step 3: 配置自动解绑定时任务
- 宝塔面板 → 左侧菜单 → 计划任务
- 点击 添加计划任务
- 填写以下信息:
任务配置:
任务类型:Shell脚本
任务名称:自动解绑过期推荐关系
执行周期:每天 02:00(凌晨2点)
脚本内容:
cd /www/wwwroot/soul/dist && /www/server/nodejs/v16.20.2/bin/node scripts/auto-unbind-expired-simple.js >> /www/wwwroot/soul/logs/auto-unbind.log 2>&1
- 点击 添加
- 任务创建后,点击 执行 按钮测试一次
预期日志(如果没有过期记录):
============================================================
自动解绑定时任务
执行时间: 2026/2/5 14:30:00
============================================================
✅ 已连接到数据库: soul_miniprogram
✅ 无需解绑的记录
============================================================
任务完成
============================================================
Step 4: 查看定时任务日志
# 方式1:SSH命令
cat /www/wwwroot/soul/logs/auto-unbind.log
# 方式2:宝塔面板
计划任务 → 找到"自动解绑"任务 → 点击"日志"
🧪 功能测试(小程序端)
测试1:立即切换绑定
-
准备两个测试账号:
- 账号A:作为推荐人A(获取推荐码 SOULA001)
- 账号C:作为推荐人C(获取推荐码 SOULC001)
- 账号B:作为购买者
-
测试步骤:
Step 1: A 分享文章链接给 B Step 2: B 点击链接进入小程序(会自动绑定A) Step 3: 查数据库验证绑定 Step 4: C 分享文章链接给 B Step 5: B 点击C的链接(应该立即切换) Step 6: 再次查数据库验证 -
数据库验证SQL:
-- 查看B当前的绑定状态 SELECT referee_id, referrer_id, status, binding_date, expiry_date FROM referral_bindings WHERE referee_id = 'B的用户ID' ORDER BY binding_date DESC;预期结果:
- 最新一条:
referrer_id = C的ID, status = active - 上一条:
referrer_id = A的ID, status = cancelled
- 最新一条:
测试2:购买分佣
-
B 购买一篇文章(1元)
-
查看分佣结果:
SELECT rb.referrer_id, rb.purchase_count, rb.total_commission, rb.last_purchase_date, u.pending_earnings FROM referral_bindings rb JOIN users u ON rb.referrer_id = u.id WHERE rb.referee_id = 'B的用户ID' AND rb.status = 'active';预期结果(假设90%分成):
referrer_id: C的ID purchase_count: 1 total_commission: 0.90 pending_earnings: 0.90 -
B 再次购买:
-- 查询应显示 purchase_count: 2 total_commission: 1.80 pending_earnings: 1.80
测试3:好友优惠(新功能)
-
后台设置好友优惠为 10%
- 访问:
https://soul.quwanzhi.com/admin/referral-settings - 修改"好友优惠"为
10 - 保存
- 访问:
-
B 通过推荐链接购买
- 原价 1.00 元的文章
- 支付时应显示 0.90 元(10% off)
-
验证佣金计算:
- C 应获得佣金 = 0.90 × 90% = 0.81 元
- 而不是 1.00 × 90% = 0.90 元
📊 后台监控
查看绑定切换记录
SQL查询:
-- 查看最近的绑定切换
SELECT
rb.referee_id,
rb.referrer_id,
rb.status,
rb.binding_date,
rb.purchase_count,
rb.total_commission
FROM referral_bindings rb
WHERE rb.status IN ('active', 'cancelled')
ORDER BY rb.binding_date DESC
LIMIT 20;
查看即将过期的绑定
-- 7天内即将过期且无购买的绑定
SELECT
rb.referee_id,
rb.referrer_id,
rb.binding_date,
rb.expiry_date,
DATEDIFF(rb.expiry_date, NOW()) as days_left,
rb.purchase_count
FROM referral_bindings rb
WHERE rb.status = 'active'
AND rb.expiry_date > NOW()
AND DATEDIFF(rb.expiry_date, NOW()) <= 7
AND rb.purchase_count = 0
ORDER BY days_left ASC;
⚠️ 常见问题
Q1: 点击新链接后没有切换?
检查:
- 宝塔面板 → Node项目 → 查看日志
- 搜索
[Referral Bind]关键词 - 确认是否有报错
Q2: 购买后 purchase_count 还是 0?
检查:
- 查看支付回调日志:
pm2 logs soul | grep PayNotify - 确认字段
purchase_count是否存在 - 执行SQL验证:
SHOW COLUMNS FROM referral_bindings;
Q3: 定时任务没有执行?
检查:
- 宝塔面板 → 计划任务 → 找到任务 → 点击"执行"测试
- 查看日志:
cat /www/wwwroot/soul/logs/auto-unbind.log - 确认脚本路径正确:
ls -la /www/wwwroot/soul/dist/scripts/auto-unbind-expired-simple.js
📝 部署后清理
部署成功后,删除临时文件:
# 本地清理
rm .env.migration
✅ 完成检查清单
- 数据库字段已添加
- 代码已部署
- PM2服务运行正常
- 网站可以访问
- 推广设置页面正常
- 定时任务已配置
- 功能测试通过
下一步:执行上述测试验证,或告诉我遇到的任何问题!