17 KiB
17 KiB
新代理系统完整检查清单
检查说明
本文档提供新代理系统的完整检查方案,按照业务流程顺序组织,确保系统逻辑正确性和完整性。
检查原则:
- 按照业务流程顺序检查(从注册到提现)
- 先检查核心链路,再检查辅助功能
- 每个检查点包含:功能点、关键逻辑、预期结果
- 重点关注数据一致性、事务完整性、边界条件
一、基础数据检查
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/apply 或 POST /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
- 返回给前端
测试场景:
- 正常流程:使用有效邀请码注册
- 边界条件:邀请码不存在、已使用、已过期
- 重复注册:已是代理的用户再次申请
- 关系验证:下级等级高于上级的情况
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_price和actual_base_price
测试场景:
- 正常生成:有效代理生成推广链接
- 价格验证:设定价格低于实际底价或高于系统上限
- 重复链接:相同代理、产品、价格的链接复用
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= SetPriceset_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_wallet(balance += agent_profit,total_earnings += agent_profit)
- 更新
2.3.4 等级加成返佣分配
- 文件:
app/main/api/internal/service/agentService.go-distributeLevelBonus - 普通代理(6元):
- 给直接上级(最多3元)
- 剩余给钻石上级(如有)
- 如果无钻石上级,给黄金上级(最多3元)
- 黄金代理(3元):
- 全部给钻石上级(如有)
- 钻石代理(0元):
- 无返佣
- 创建
agent_rebate记录 - 更新上级钱包余额
测试场景:
- 正常订单:普通代理订单,验证收益和返佣分配
- 防重复:已处理订单再次处理
- 返佣分配:不同等级代理的返佣分配逻辑
- 无上级:没有上级代理时的返佣处理
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=2,upgrade_fee=0) - 执行升级操作
测试场景:
- 正常升级:普通→黄金,验证返佣和关系脱离
- 升级为钻石:验证团队独立
- 钻石升级下级:验证权限和限制
- 关系脱离:升级后等级高于上级的情况
2.5 实名认证链路
入口:POST /api/v1/agent/real_name
检查点:
- 文件:
app/main/api/internal/logic/agent/realnameauthlogic.go - 验证代理身份
- 验证手机号是否匹配
- 验证手机验证码
- 三要素核验(姓名、身份证号、手机号)
- 加密身份证号和手机号
- 保存实名认证记录(
verify_time不为空表示已通过) - 无需人工审核,核验通过即生效
测试场景:
- 正常认证:三要素核验通过
- 核验失败:三要素不匹配
- 手机号不匹配:与代理注册手机号不一致
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 - 审核通过:调用支付宝转账接口
- 审核拒绝:解冻余额
- 转账成功:解冻并扣除余额,更新扣税状态
- 转账失败:解冻余额
测试场景:
- 正常提现:实名认证通过,余额充足
- 税费计算:验证月度累计和免税额度
- 余额不足:提现金额大于余额
- 未实名:未完成实名认证
三、查询接口检查
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.2)
- 第二阶段:核心业务流程(2.1, 2.2, 2.3)
- 第三阶段:升级和实名认证(2.4, 2.5)
- 第四阶段:提现流程(2.6)
- 第五阶段:查询接口(三、四)
- 第六阶段:后台管理(五)
- 第七阶段:业务逻辑验证(六、七、八)
- 第八阶段:性能和安全(九)
检查完成后,建议:
- 记录发现的问题
- 修复问题后重新检查
- 编写测试用例覆盖关键流程
- 进行端到端测试验证