507 lines
17 KiB
Markdown
507 lines
17 KiB
Markdown
# 新代理系统完整检查清单
|
||
|
||
## 检查说明
|
||
|
||
本文档提供新代理系统的完整检查方案,按照业务流程顺序组织,确保系统逻辑正确性和完整性。
|
||
|
||
**检查原则**:
|
||
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/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
|
||
- [ ] 返回给前端
|
||
|
||
**测试场景**:
|
||
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_price` 和 `actual_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_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` 记录
|
||
- [ ] 更新上级钱包余额
|
||
|
||
**测试场景**:
|
||
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=2`,`upgrade_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. 进行端到端测试验证
|
||
|