Files
ycc-proxy-server/新代理系统检查清单.md
2025-12-02 19:57:10 +08:00

17 KiB
Raw Blame History

新代理系统完整检查清单

检查说明

本文档提供新代理系统的完整检查方案,按照业务流程顺序组织,确保系统逻辑正确性和完整性。

检查原则

  1. 按照业务流程顺序检查(从注册到提现)
  2. 先检查核心链路,再检查辅助功能
  3. 每个检查点包含:功能点、关键逻辑、预期结果
  4. 重点关注数据一致性、事务完整性、边界条件

一、基础数据检查

1.1 数据表结构

  • 确认所有新表已创建(参考 deploy/sql/agent_system_migration.sql
  • 检查表结构是否与文档一致
  • 验证索引是否正确创建
  • 确认所有表都有 id, create_time, update_time, delete_time, del_state, version 字段

关键表

  • agent - 代理基本信息
  • agent_wallet - 代理钱包
  • agent_relation - 代理关系
  • agent_link - 推广链接
  • agent_order - 代理订单
  • agent_commission - 代理佣金
  • agent_rebate - 代理返佣
  • agent_upgrade - 代理升级
  • agent_withdrawal - 代理提现
  • agent_withdrawal_tax - 提现扣税
  • agent_config - 系统配置
  • agent_product_config - 产品配置
  • agent_real_name - 实名认证
  • agent_invite_code - 邀请码

1.2 系统配置初始化

  • 检查 agent_config 表是否有基础配置数据
  • 验证关键配置项是否存在:
    • base_price - 基础底价
    • system_max_price - 系统价格上限
    • level_1_bonus - 普通代理等级加成6元
    • level_2_bonus - 黄金代理等级加成3元
    • level_3_bonus - 钻石代理等级加成0元
    • upgrade_to_gold_fee - 升级为黄金费用199元
    • upgrade_to_diamond_fee - 升级为钻石费用980元
    • tax_rate - 税率0.06
    • tax_exemption_amount - 免税额度

二、核心业务流程检查

2.1 通过邀请码成为代理链路

入口POST /api/v1/agent/applyPOST /api/v1/agent/register/invite

检查点

2.1.1 邀请码验证

  • 文件app/main/api/internal/logic/agent/applyforagentlogic.go
  • 验证邀请码必填(没有邀请码直接拒绝)
  • 验证邀请码存在性(agent_invite_code 表)
  • 验证邀请码状态(status=0 未使用)
  • 验证邀请码是否过期(expire_time
  • 验证邀请码使用后状态更新为已使用(status=1

2.1.2 用户注册/绑定

  • 检查用户是否存在(通过手机号查询)
  • 不存在则注册新用户
  • 临时用户则绑定为正式用户
  • 验证手机号加密存储

2.1.3 代理记录创建

  • 检查是否已是代理(防止重复)
  • 根据邀请码的 target_level 设置代理等级
  • 创建 agent 记录
  • 初始化 agent_wallet余额为0
  • 可选字段处理:region, wechat_id 可以为空

2.1.4 关系建立

  • 代理发放的邀请码
    • 验证上级代理存在
    • 验证关系是否允许(下级等级不能高于上级)
    • 创建 agent_relation 记录(relation_type=1 直接关系)
    • 设置 team_leader_id(查找上级链中的钻石代理)
  • 平台发放的钻石邀请码
    • 独立成团队(team_leader_id = 自己

2.1.5 邀请码状态更新

  • 更新邀请码状态为已使用(status=1
  • 记录使用用户ID和代理ID
  • 记录使用时间

2.1.6 Token生成

  • 生成JWT Token
  • 返回给前端

测试场景

  1. 正常流程:使用有效邀请码注册
  2. 边界条件:邀请码不存在、已使用、已过期
  3. 重复注册:已是代理的用户再次申请
  4. 关系验证:下级等级高于上级的情况

2.2 推广链接生成链路

入口POST /api/v1/agent/generating_link

检查点

2.2.1 代理身份验证

  • 文件app/main/api/internal/logic/agent/generatinglinklogic.go
  • 从Token获取用户ID
  • 查询 agent 表验证代理身份
  • 非代理用户拒绝

2.2.2 价格计算

  • 获取系统配置(base_price, system_max_price
  • 计算实际底价 = 基础底价 + 等级加成
    • 普通代理:+6元
    • 黄金代理:+3元
    • 钻石代理:+0元
  • 验证设定价格范围:实际底价 ≤ 设定价格 ≤ 系统价格上限

2.2.3 链接生成

  • 检查是否已存在相同链接(agent_id + product_id + set_price
  • 构建 AgentIdentifier 结构(AgentID, ProductID, SetPrice
  • JSON序列化并AES加密生成 LinkIdentifier
  • 保存到 agent_link
  • 记录 set_priceactual_base_price

测试场景

  1. 正常生成:有效代理生成推广链接
  2. 价格验证:设定价格低于实际底价或高于系统上限
  3. 重复链接:相同代理、产品、价格的链接复用

2.3 订单处理与收益分配链路

入口POST /api/v1/pay/payment → 支付回调 → AgentService.AgentProcess

检查点

2.3.1 订单创建

  • 文件app/main/api/internal/logic/pay/paymentlogic.go
  • 解析推广链接标识(解密 LinkIdentifier
  • 查询 agent_link 表验证链接有效性
  • 创建 order 记录(订单金额 = SetPrice
  • 创建 agent_order 记录:
    • order_amount = SetPrice
    • set_price = 设定价格
    • actual_base_price = 实际底价(基础底价+等级加成)
    • price_cost = 提价成本
    • agent_profit = 代理收益SetPrice - ActualBasePrice - PriceCost
    • process_status = 0待处理

2.3.2 支付成功处理

  • 支付回调验证签名
  • 更新订单状态
  • 触发 AgentService.AgentProcess

2.3.3 代理订单处理

  • 文件app/main/api/internal/service/agentService.go - AgentProcess
  • 检查是否是代理订单(查询 agent_order 表)
  • 检查订单是否已处理(process_status=1 防重复)
  • 获取代理信息和系统配置
  • 使用事务处理:
    • 更新 agent_order 状态为处理成功
    • 创建 agent_commission 记录
    • 更新 agent_walletbalance += agent_profit, total_earnings += agent_profit

2.3.4 等级加成返佣分配

  • 文件app/main/api/internal/service/agentService.go - distributeLevelBonus
  • 普通代理6元
    • 给直接上级最多3元
    • 剩余给钻石上级(如有)
    • 如果无钻石上级给黄金上级最多3元
  • 黄金代理3元
    • 全部给钻石上级(如有)
  • 钻石代理0元
    • 无返佣
  • 创建 agent_rebate 记录
  • 更新上级钱包余额

测试场景

  1. 正常订单:普通代理订单,验证收益和返佣分配
  2. 防重复:已处理订单再次处理
  3. 返佣分配:不同等级代理的返佣分配逻辑
  4. 无上级:没有上级代理时的返佣处理

2.4 代理升级链路

2.4.1 自主付费升级

入口POST /api/v1/agent/upgrade/apply

检查点

  • 文件app/main/api/internal/logic/agent/applyupgradelogic.go
  • 验证升级条件(普通→黄金、普通→钻石、黄金→钻石)
  • 计算升级费用和返佣
  • 查找原直接上级(用于返佣)
  • 创建 agent_upgrade 记录(status=1 待处理)
  • 支付成功后调用 AgentService.ProcessUpgrade
  • 升级处理
    • 返佣给原直接上级(如需要)
    • 更新代理等级
    • 检查是否需要脱离直接上级关系
    • 更新团队首领(升级为钻石时独立成团队)
    • 更新所有下级的 team_leader_id

2.4.2 钻石升级下级

入口POST /api/v1/agent/upgrade/subordinate

检查点

  • 文件app/main/api/internal/logic/agent/upgradesubordinatelogic.go
  • 验证权限(必须是钻石代理)
  • 验证下级等级(只能是普通代理)
  • 验证关系(必须是直接下级)
  • 验证目标等级(只能升级为黄金)
  • 创建升级记录(upgrade_type=2upgrade_fee=0
  • 执行升级操作

测试场景

  1. 正常升级:普通→黄金,验证返佣和关系脱离
  2. 升级为钻石:验证团队独立
  3. 钻石升级下级:验证权限和限制
  4. 关系脱离:升级后等级高于上级的情况

2.5 实名认证链路

入口POST /api/v1/agent/real_name

检查点

  • 文件app/main/api/internal/logic/agent/realnameauthlogic.go
  • 验证代理身份
  • 验证手机号是否匹配
  • 验证手机验证码
  • 三要素核验(姓名、身份证号、手机号)
  • 加密身份证号和手机号
  • 保存实名认证记录(verify_time 不为空表示已通过)
  • 无需人工审核,核验通过即生效

测试场景

  1. 正常认证:三要素核验通过
  2. 核验失败:三要素不匹配
  3. 手机号不匹配:与代理注册手机号不一致

2.6 提现链路

入口POST /api/v1/agent/withdrawal/apply

检查点

2.6.1 提现申请

  • 文件app/main/api/internal/logic/agent/applywithdrawallogic.go
  • 验证实名认证(verify_time 不为空)
  • 验证提现金额(> 0
  • 验证钱包余额(balance >= amount
  • 计算税费:
    • 查询本月累计提现金额
    • 计算剩余免税额度
    • 计算应税金额和税费
  • 冻结余额(frozen_balance += amount, balance -= amount
  • 创建 agent_withdrawal 记录(status=1 待审核)
  • 创建 agent_withdrawal_tax 记录(tax_status=1 待扣税)

2.6.2 提现审核

  • 文件app/main/api/internal/logic/admin_agent/adminauditwithdrawallogic.go
  • 审核通过:调用支付宝转账接口
  • 审核拒绝:解冻余额
  • 转账成功:解冻并扣除余额,更新扣税状态
  • 转账失败:解冻余额

测试场景

  1. 正常提现:实名认证通过,余额充足
  2. 税费计算:验证月度累计和免税额度
  3. 余额不足:提现金额大于余额
  4. 未实名:未完成实名认证

三、查询接口检查

3.1 代理信息查询

  • 文件app/main/api/internal/logic/agent/getagentinfologic.go
  • 查询代理基本信息
  • 查询实名认证状态(verify_time 不为空)
  • 处理可选字段(region, wechat_id

3.2 收益信息查询

  • 文件app/main/api/internal/logic/agent/getrevenueinfologic.go
  • 查询钱包余额和累计收益
  • 返回 balance, frozen_balance, total_earnings, withdrawn_amount

3.3 佣金记录查询

  • 文件app/main/api/internal/logic/agent/getcommissionlistlogic.go
  • 分页查询佣金记录
  • 关联查询产品名称

3.4 返佣记录查询

  • 文件app/main/api/internal/logic/agent/getrebatelistlogic.go
  • 分页查询返佣记录
  • 显示返佣类型和金额

3.5 团队统计查询

  • 文件app/main/api/internal/logic/agent/getteamstatisticslogic.go
  • 递归查询所有下级(直接+间接)
  • 统计总人数、按等级统计
  • 权限检查(只能查看自己团队)

3.6 下级列表查询

  • 文件app/main/api/internal/logic/agent/getsubordinatelistlogic.go
  • 分页查询直接下级
  • 显示下级等级和信息

四、邀请码管理检查

4.1 生成邀请码

  • 文件app/main/api/internal/logic/agent/generateinvitecodelogic.go
  • 验证代理身份
  • 生成唯一邀请码
  • 设置目标等级默认1=普通)
  • 保存到 agent_invite_code

4.2 邀请码列表

  • 文件app/main/api/internal/logic/agent/getinvitecodelistlogic.go
  • 查询代理生成的邀请码
  • 显示状态(未使用、已使用、已失效)

4.3 邀请链接

  • 文件app/main/api/internal/logic/agent/getinvitelinklogic.go
  • 生成邀请链接和二维码
  • 链接包含邀请码信息

4.4 后台生成钻石邀请码

  • 文件app/main/api/internal/logic/admin_agent/admingeneratediamondinvitecodelogic.go
  • 管理员生成钻石邀请码
  • 目标等级为3钻石
  • 无发放代理ID平台发放

五、后台管理接口检查

5.1 代理列表查询

  • 文件app/main/api/internal/logic/admin_agent/admingetagentlistlogic.go
  • 分页查询代理列表
  • 显示代理等级、实名状态
  • 处理可选字段(region, wechat_id

5.2 代理订单查询

  • 文件app/main/api/internal/logic/admin_agent/admingetagentorderlistlogic.go
  • 分页查询代理订单
  • 显示订单金额、代理收益、处理状态

5.3 系统配置管理

  • 文件app/main/api/internal/logic/admin_agent/admingetagentconfiglogic.go
  • 查询系统配置
  • 文件app/main/api/internal/logic/admin_agent/adminupdateagentconfiglogic.go
  • 更新系统配置

5.4 产品配置管理

  • 文件app/main/api/internal/logic/admin_agent/admingetagentproductconfiglistlogic.go
  • 查询产品配置列表
  • 文件app/main/api/internal/logic/admin_agent/adminupdateagentproductconfiglogic.go
  • 更新产品配置

六、关键业务逻辑验证

6.1 关系约束验证

  • 下级等级不能高于上级
  • 同级不能作为上下级(除了普通代理)
  • 钻石可以拥有黄金下级(钻石等级高于黄金)
  • 升级后关系脱离逻辑(根据上级等级判断)

6.2 团队首领逻辑

  • 钻石代理独立成团队(team_leader_id = 自己
  • 普通/黄金代理指向上级链中的钻石代理
  • 升级为钻石时,所有下级跟随到新团队

6.3 价格计算逻辑

  • 实际底价 = 基础底价 + 等级加成
  • 提价成本计算(当设定价格 > 提价阈值时)
  • 代理收益 = 设定价格 - 实际底价 - 提价成本

6.4 返佣分配逻辑

  • 普通代理6元直接上级3元剩余给钻石/黄金上级
  • 黄金代理3元全部给钻石上级
  • 钻石代理0元无返佣

6.5 税费计算逻辑

  • 月度累计提现金额查询
  • 剩余免税额度计算
  • 应税金额和税费计算

七、数据一致性检查

7.1 事务完整性

  • 代理注册:用户创建、代理创建、钱包初始化、关系建立、邀请码更新在同一事务
  • 订单处理:订单状态更新、佣金发放、返佣分配在同一事务
  • 升级处理:等级更新、关系脱离、团队首领更新在同一事务
  • 提现申请:余额冻结、提现记录、扣税记录在同一事务

7.2 乐观锁

  • 所有更新操作使用 version 字段
  • 使用 UpdateWithVersion 方法
  • 更新失败时正确处理

7.3 防重复处理

  • 订单处理前检查 process_status
  • 升级处理前检查 status
  • 邀请码使用后立即更新状态

八、边界条件和异常处理

8.1 边界条件

  • 邀请码不存在、已使用、已过期
  • 已是代理的用户再次申请
  • 下级等级高于上级的情况
  • 设定价格低于实际底价或高于系统上限
  • 余额不足的提现申请
  • 未完成实名认证的提现申请

8.2 异常处理

  • 数据库操作失败的回滚
  • 三要素核验失败的处理
  • 支付回调失败的处理
  • 转账失败的处理

九、性能和安全检查

9.1 性能优化

  • 批量查询避免N+1问题
  • 索引使用(agent_relation, agent_rebate, agent_order
  • 递归深度限制(查找上级链时)

9.2 安全考虑

  • 手机号、身份证号加密存储
  • 推广链接标识加密传输
  • 权限控制(代理只能查看自己的数据)
  • 金额精度(使用 decimal 类型)

十、测试建议

10.1 单元测试

  • 价格计算函数
  • 税费计算函数
  • 返佣分配函数
  • 关系验证函数

10.2 集成测试

  • 完整注册流程
  • 完整订单处理流程
  • 完整升级流程
  • 完整提现流程

10.3 压力测试

  • 并发订单处理
  • 并发提现申请
  • 大量下级查询

检查顺序建议

  1. 第一阶段基础数据检查1.1, 1.2
  2. 第二阶段核心业务流程2.1, 2.2, 2.3
  3. 第三阶段升级和实名认证2.4, 2.5
  4. 第四阶段提现流程2.6
  5. 第五阶段:查询接口(三、四)
  6. 第六阶段:后台管理(五)
  7. 第七阶段:业务逻辑验证(六、七、八)
  8. 第八阶段:性能和安全(九)

检查完成后,建议

  1. 记录发现的问题
  2. 修复问题后重新检查
  3. 编写测试用例覆盖关键流程
  4. 进行端到端测试验证