Files
soul-yongping/开发文档/8、部署/新分销逻辑-宝塔操作清单.md
2026-03-07 22:58:43 +08:00

6.6 KiB
Raw Permalink Blame History

新分销逻辑 - 宝塔面板操作清单

已完成的准备工作

  • 数据库字段已添加last_purchase_date, purchase_count, total_commission
  • 代码已部署到服务器(/www/wwwroot/soul/dist
  • 索引已创建

🔧 宝塔面板操作步骤

Step 1: 重启 Node.js 服务

  1. 登录宝塔面板:http://你的服务器IP:8888
  2. 左侧菜单 → 网站 → 找到 soul.quwanzhi.com
  3. 点击 设置Node项目 标签
  4. 找到项目 soul
  5. 点击 重启 按钮
  6. 等待状态变为"运行中"

或者使用命令行如果有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: 配置自动解绑定时任务

  1. 宝塔面板 → 左侧菜单 → 计划任务
  2. 点击 添加计划任务
  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
  1. 点击 添加
  2. 任务创建后,点击 执行 按钮测试一次

预期日志(如果没有过期记录):

============================================================
自动解绑定时任务
执行时间: 2026/2/5 14:30:00
============================================================
✅ 已连接到数据库: soul_miniprogram
✅ 无需解绑的记录
============================================================
任务完成
============================================================

Step 4: 查看定时任务日志

# 方式1SSH命令
cat /www/wwwroot/soul/logs/auto-unbind.log

# 方式2宝塔面板
计划任务 → 找到"自动解绑"任务 → 点击"日志"

🧪 功能测试(小程序端)

测试1立即切换绑定

  1. 准备两个测试账号

    • 账号A作为推荐人A获取推荐码 SOULA001
    • 账号C作为推荐人C获取推荐码 SOULC001
    • 账号B作为购买者
  2. 测试步骤

    Step 1: A 分享文章链接给 B
    Step 2: B 点击链接进入小程序会自动绑定A
    Step 3: 查数据库验证绑定
    Step 4: C 分享文章链接给 B
    Step 5: B 点击C的链接应该立即切换
    Step 6: 再次查数据库验证
    
  3. 数据库验证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购买分佣

  1. B 购买一篇文章1元

  2. 查看分佣结果

    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
    
  3. B 再次购买

    -- 查询应显示
    purchase_count: 2
    total_commission: 1.80
    pending_earnings: 1.80
    

测试3好友优惠新功能

  1. 后台设置好友优惠为 10%

    • 访问:https://soul.quwanzhi.com/admin/referral-settings
    • 修改"好友优惠"为 10
    • 保存
  2. B 通过推荐链接购买

    • 原价 1.00 元的文章
    • 支付时应显示 0.90 元10% off
  3. 验证佣金计算

    • 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服务运行正常
  • 网站可以访问
  • 推广设置页面正常
  • 定时任务已配置
  • 功能测试通过

下一步:执行上述测试验证,或告诉我遇到的任何问题!