Ai_GirlFriend/开发/2026年2月3日/邀请码功能修复.md
2026-02-03 18:00:47 +08:00

5.3 KiB
Raw Blame History

邀请码功能修复

问题描述

用户使用邀请码登录后没有成功获得5金币奖励。

问题原因

数据库表 nf_user 缺少邀请码相关的字段:

  • invite_code - 邀请码
  • invited_by - 被谁邀请
  • invite_count - 邀请人数
  • invite_reward_total - 邀请奖励总额

这些字段只在 Python 的 lover/models.py 中定义了,但数据库中并没有实际创建这些列。

解决方案

情况 1字段不存在

如果数据库中没有邀请码字段,执行:

mysql -u aiuser -p fastadmin < lover/migrations/add_invite_fields.sql

情况 2字段已存在推荐

如果遇到 "Duplicate column name" 错误,说明字段已存在,使用智能修复脚本:

mysql -u aiuser -p fastadmin < lover/migrations/fix_invite_fields.sql

这个脚本会:

  • 检查每个字段是否存在,只添加缺失的字段
  • 检查索引是否存在,只添加缺失的索引
  • 显示最终的字段和索引信息

1. 执行修复脚本

# 推荐:使用智能修复脚本(自动检查并修复)
mysql -u aiuser -p fastadmin < lover/migrations/fix_invite_fields.sql

2. 检查字段状态

# 查看邀请码相关字段
mysql -u aiuser -p fastadmin < lover/migrations/check_invite_fields.sql

3. 测试邀请码功能

# 查看邀请码数据和日志
mysql -u aiuser -p fastadmin < lover/migrations/test_invite_function.sql
  1. 获取邀请码

    • 登录系统
    • 访问"我的" -> "邀请好友"页面
    • 系统会自动生成邀请码
  2. 使用邀请码

    • 新用户注册/登录时
    • 在登录页面输入邀请码
    • 登录成功后会自动调用邀请码接口
  3. 验证奖励

    • 邀请人获得 10 金币
    • 被邀请人获得 5 金币
    • 检查 nf_user_money_log 表中的记录

邀请码功能说明

奖励规则

  • 邀请人奖励10 金币
  • 被邀请人奖励5 金币
  • 每个用户只能使用一次邀请码
  • 不能使用自己的邀请码

API 接口

1. 获取邀请信息

GET /config/invite/info
Authorization: Bearer {token}

响应:

{
  "code": 1,
  "data": {
    "invite_code": "ABC123",
    "invite_count": 5,
    "invite_reward_total": 50.00,
    "invite_url": "https://your-domain.com/register?invite=ABC123"
  }
}

2. 使用邀请码

POST /config/invite/apply
Authorization: Bearer {token}
Content-Type: application/json

{
  "invite_code": "ABC123"
}

响应:

{
  "code": 1,
  "data": {
    "message": "邀请码使用成功您获得了5.0金币",
    "reward": 5.0,
    "balance": 5.0
  }
}

前端调用流程

  1. 登录页面 (xuniYou/pages/login/index.vue)

    • 用户输入邀请码(可选)
    • 登录成功后自动调用 applyInviteCode() 方法
  2. 邀请页面 (xuniYou/pages/mine/invite.vue)

    • 显示用户的邀请码
    • 显示邀请统计(邀请人数、奖励总额)
    • 提供复制邀请码功能

数据库表结构

-- nf_user 表新增字段
invite_code VARCHAR(10) DEFAULT NULL COMMENT '邀请码'
invited_by VARCHAR(10) DEFAULT NULL COMMENT '被谁邀请(邀请码)'
invite_count INT(11) DEFAULT 0 COMMENT '邀请人数'
invite_reward_total DECIMAL(10,2) DEFAULT 0.00 COMMENT '邀请奖励总额'

-- 索引
UNIQUE INDEX idx_invite_code (invite_code)
INDEX idx_invited_by (invited_by)

金币日志记录

所有邀请奖励都会记录在 nf_user_money_log 表中:

-- 邀请人的记录
memo = '邀请新用户奖励'
money = 10.00

-- 被邀请人的记录
memo = '使用邀请码奖励'
money = 5.00

注意事项

  1. 邀请码生成规则

    • 6位字符
    • 只包含大写字母和数字
    • 排除易混淆字符0、O、1、I
    • 自动检查重复
  2. 安全性

    • 使用数据库行锁防止并发问题
    • 验证邀请码是否存在
    • 验证用户是否已使用过邀请码
    • 不能使用自己的邀请码
  3. 事务处理

    • 使用数据库事务确保数据一致性
    • 失败时自动回滚
    • 记录详细的金币日志

测试步骤

1. 本地测试

# 1. 执行数据库迁移
mysql -u aiuser -p fastadmin < lover/migrations/add_invite_fields.sql

# 2. 重启 Python 服务
# Windows
taskkill /F /IM python.exe
python -m uvicorn lover.main:app --host 0.0.0.0 --port 30101 --reload

# Linux
sudo systemctl restart aigirlfriend-python

2. 功能测试

  1. 用户 A 登录,获取邀请码
  2. 用户 B 注册/登录时输入用户 A 的邀请码
  3. 检查用户 A 和用户 B 的金币余额
  4. 检查 nf_user_money_log 表中的记录

3. 异常测试

  1. 使用不存在的邀请码 → 应提示"邀请码不存在"
  2. 重复使用邀请码 → 应提示"您已经使用过邀请码"
  3. 使用自己的邀请码 → 应提示"不能使用自己的邀请码"

相关文件

  • 数据库迁移lover/migrations/add_invite_fields.sql
  • 数据模型lover/models.py
  • 后端 APIlover/routers/config.py
  • 前端登录页xuniYou/pages/login/index.vue
  • 前端邀请页xuniYou/pages/mine/invite.vue

更新日志

  • 2026-02-03:创建邀请码字段迁移文件
  • 2026-02-03:编写修复文档

下一步

  1. 执行数据库迁移
  2. 测试邀请码功能
  3. 更新部署文档,添加邀请码迁移步骤