## 1. 数据库迁移

- [x] 1.1 创建迁移文件：tb_order 表新增 is_purchase_on_behalf 字段
- [x] 1.2 创建迁移文件：tb_shop_series_allocation 表新增强充配置字段（enable_force_recharge, force_recharge_amount）
- [x] 1.3 在测试环境执行迁移并验证字段添加成功
- [x] 1.4 验证迁移：检查字段默认值和数据类型是否正确

## 2. 常量定义

- [x] 2.1 在 pkg/constants/ 定义充值订单状态常量（待支付、已支付、已完成、已关闭）
- [x] 2.2 在 pkg/constants/ 定义充值订单号前缀常量（RCH）
- [x] 2.3 在 pkg/constants/ 定义线下支付方式常量（offline）
- [x] 2.4 在 pkg/constants/ 定义强充相关 Redis Key 生成函数（可选，如缓存系列配置）
- [x] 2.5 在 pkg/constants/ 定义充值金额限制常量（最小1元，最大100000元）

## 3. 错误码定义

- [x] 3.1 在 pkg/errors/ 定义充值相关错误码（充值金额不符、充值订单不存在等）
- [x] 3.2 在 pkg/errors/ 定义代购相关错误码（只有平台可使用线下支付、只能为下级代理代购等）
- [x] 3.3 在 pkg/errors/ 定义强充验证错误码（必须充值X元等）

## 4. Model 层修改

- [x] 4.1 修改 internal/model/order.go：新增 IsPurchaseOnBehalf 字段（bool, default false）
- [x] 4.2 修改 internal/model/shop_series_allocation.go：新增 EnableForceRecharge 字段（bool, default false）
- [x] 4.3 修改 internal/model/shop_series_allocation.go：新增 ForceRechargeAmount 字段（int64, default 0）
- [x] 4.4 验证 Model 修改：运行 lsp_diagnostics 检查类型错误

## 5. RechargeStore 数据访问层

- [x] 5.1 创建 internal/store/postgres/recharge_store.go
- [x] 5.2 实现 Create 方法：创建充值订单
- [x] 5.3 实现 GetByRechargeNo 方法：根据充值单号查询
- [x] 5.4 实现 GetByID 方法：根据ID查询充值订单详情
- [x] 5.5 实现 List 方法：分页查询充值订单列表，支持状态筛选、时间范围筛选
- [x] 5.6 实现 UpdateStatus 方法：更新充值订单状态（支付成功回调时使用）
- [x] 5.7 实现 UpdatePaymentInfo 方法：更新支付方式和支付时间
- [x] 5.8 编写单元测试：测试覆盖率 ≥ 90%
- [x] 5.9 验证测试：运行测试并确保全部通过

## 6. RechargeService 业务逻辑层

- [x] 6.1 创建 internal/service/recharge/service.go
- [x] 6.2 实现 Create 方法：创建充值订单
  - 验证资源存在（卡/设备）
  - 验证充值金额范围（1元~100000元）
  - 检查强充要求并验证金额
  - 生成充值单号（RCH + 时间戳 + 随机数）
  - 创建充值订单记录
- [x] 6.3 实现 GetRechargeCheck 方法：充值预检
  - 查询资源（卡/设备）
  - 查询系列分配配置
  - 判断是否需要强充
  - 返回强充要求、允许金额范围、提示信息
- [x] 6.4 实现 GetByID 方法：查询充值订单详情（数据权限过滤）
- [x] 6.5 实现 List 方法：查询充值订单列表（分页、筛选、数据权限过滤）
- [x] 6.6 实现 HandlePaymentCallback 方法：处理支付回调
  - 幂等性检查（检查订单状态）
  - 使用数据库事务：更新订单状态 → 增加钱包余额 → 更新累计充值 → 触发佣金判断
  - 钱包余额更新使用原子操作
- [x] 6.7 实现 updateAccumulatedRecharge 私有方法：更新卡/设备的累计充值金额
- [x] 6.8 实现 triggerOneTimeCommissionIfNeeded 私有方法：检查并触发一次性佣金
- [x] 6.9 实现 checkForceRechargeRequirement 私有方法：检查强充要求（供创建订单时使用）
- [x] 6.10 编写单元测试：测试覆盖率 ≥ 90%（包含各种充值场景、强充验证、支付回调幂等性）
- [x] 6.11 验证测试：运行测试并确保全部通过

## 7. OrderService 修改（代购订单和强充验证）

- [x] 7.1 修改 internal/service/order/service.go：Create 方法增加强充验证
  - 调用预检逻辑获取强充要求
  - 验证支付金额是否符合强充要求
  - 不符合则返回错误
- [x] 7.2 新增 CreatePurchaseOnBehalf 方法：创建代购订单
  - 验证权限（只有平台可以使用线下支付）
  - 查询资源归属代理（buyer_id）
  - 查询买家的成本价
  - 创建订单（is_purchase_on_behalf = true, payment_method = offline, payment_status = 2）
  - 自动激活套餐（创建 PackageUsage）
  - 触发佣金计算任务
- [x] 7.3 新增 GetPurchaseCheck 方法：套餐购买预检
  - 查询套餐总价
  - 检查强充要求
  - 计算实际支付金额和钱包到账金额
  - 返回预检信息（含提示消息）
- [x] 7.4 修改支付成功后的处理逻辑：增加 is_purchase_on_behalf 判断
  - 如果是代购订单，跳过钱包扣款
  - 如果是普通订单，正常扣款
- [x] 7.5 编写单元测试：测试代购订单创建、强充验证、预检逻辑
- [x] 7.6 验证测试：运行测试并确保全部通过

## 8. CommissionCalculationService 修改

- [x] 8.1 修改 internal/service/commission_calculation/service.go：CalculateCommission 方法增加代购订单判断
  - 差价佣金：所有订单都计算（包括代购）
  - 累计充值更新：仅非代购订单更新（is_purchase_on_behalf = false）
  - 一次性佣金：仅非代购订单触发（is_purchase_on_behalf = false）
- [x] 8.2 修改 updateAccumulatedRecharge 方法：增加代购订单检查
  - 如果 is_purchase_on_behalf = true，直接返回，不更新累计充值
  - 如果 is_purchase_on_behalf = false，正常更新累计充值
- [x] 8.3 修改 triggerOneTimeCommission 方法：增加代购订单检查
  - 如果 is_purchase_on_behalf = true，直接返回，不触发一次性佣金
  - 如果 is_purchase_on_behalf = false，正常检查阈值并触发佣金
- [x] 8.4 编写单元测试：使用 table-driven tests 测试各种场景（普通订单、代购订单、充值订单）
- [x] 8.5 验证测试：运行测试并确保全部通过

## 9. RechargeHandler HTTP 接口层

- [x] 9.1 创建 internal/handler/h5/recharge.go
- [x] 9.2 实现 POST /api/h5/wallets/recharge：创建充值订单
  - 参数验证（resource_type, resource_id, amount）
  - 调用 Service 创建充值订单
  - 返回充值订单信息
- [x] 9.3 实现 GET /api/h5/wallets/recharge-check：充值预检
  - 参数验证（resource_type, resource_id）
  - 调用 Service 获取强充要求
  - 返回预检信息
- [x] 9.4 实现 GET /api/h5/wallets/recharges：查询充值订单列表
  - 支持分页参数（page, page_size）
  - 支持状态筛选（status）
  - 支持时间范围筛选（start_time, end_time）
- [x] 9.5 实现 GET /api/h5/wallets/recharges/:id：查询充值订单详情
- [x] 9.6 为所有接口添加中文注释（路由路径、参数说明、响应说明）
- [x] 9.7 验证接口：运行 lsp_diagnostics 检查类型错误

## 10. OrderHandler 修改（代购订单接口）

- [x] 10.1 修改 internal/handler/admin/order.go：Create 方法增加代购订单支持
  - 检查 payment_method = offline 时，验证用户类型为 Platform
  - 如果是平台账号且线下支付，调用 CreatePurchaseOnBehalf
  - 否则调用正常的 Create 方法
- [x] 10.2 新增 POST /api/admin/orders/purchase-check：套餐购买预检
  - 参数验证（order_type, resource_id, package_ids）
  - 调用 Service 获取预检信息
  - 返回预检结果
- [x] 10.3 为新增接口添加中文注释
- [x] 10.4 验证接口：运行 lsp_diagnostics 检查类型错误

## 11. PaymentCallback 修改（充值订单回调）

- [x] 11.1 修改 internal/handler/callback/payment.go：WechatPayCallback 方法增加充值订单判断
  - 根据订单号前缀判断类型（RCH 开头 → 充值订单）
  - 如果是充值订单，调用 RechargeService.HandlePaymentCallback
  - 如果是套餐订单，调用 OrderService.HandlePaymentCallback
- [x] 11.2 修改 AlipayCallback 方法：增加充值订单判断（同上）
- [x] 11.3 验证修改：运行 lsp_diagnostics 检查类型错误

## 12. Bootstrap 依赖注入

- [x] 12.1 修改 internal/bootstrap/stores.go：注册 RechargeStore
- [x] 12.2 修改 internal/bootstrap/services.go：注册 RechargeService
- [x] 12.3 修改 internal/bootstrap/handlers.go：注册 RechargeHandler（H5）
- [x] 12.4 验证依赖注入：确保所有依赖正确传递

## 13. 路由注册

- [x] 13.1 修改 internal/router/h5.go：注册充值相关路由
  - POST /api/h5/wallets/recharge
  - GET /api/h5/wallets/recharge-check
  - GET /api/h5/wallets/recharges
  - GET /api/h5/wallets/recharges/:id
- [x] 13.2 修改 internal/router/admin.go：注册代购预检路由
  - POST /api/admin/orders/purchase-check
- [x] 13.3 验证路由：确保所有路由正确绑定到 Handler 方法

## 14. API 文档生成器更新

- [x] 14.1 修改 cmd/api/docs.go：在 Handlers 初始化中添加 RechargeHandler
- [x] 14.2 修改 cmd/gendocs/main.go：在 Handlers 初始化中添加 RechargeHandler
- [x] 14.3 运行文档生成命令：go run cmd/gendocs/main.go
- [x] 14.4 验证生成的 OpenAPI 文档：检查充值和代购相关接口是否出现

## 15. 集成测试

- [x] 15.1 编写充值完整流程集成测试
  - 创建充值订单（无强充）
  - 创建充值订单（首次强充验证）
  - 创建充值订单（累计强充验证）
  - 模拟支付回调
  - 验证钱包余额增加
  - 验证累计充值更新
  - 验证一次性佣金触发
- [x] 15.2 编写代购订单完整流程集成测试
  - 平台创建代购订单
  - 验证订单自动完成
  - 验证套餐激活
  - 验证差价佣金计算
  - 验证一次性佣金不触发
  - 验证累计充值不更新
- [x] 15.3 编写强充预检集成测试
  - 充值预检（各种强充场景）
  - 套餐购买预检（各种强充场景）
- [x] 15.4 验证测试：运行所有集成测试并确保通过

## 16. 功能手动验证（开发环境）

- [x] 16.1 验证充值预检接口：调用接口确认返回正确的强充要求
- [x] 16.2 验证购买预检接口：调用接口确认实际支付金额计算正确
- [x] 16.3 验证充值订单创建：创建订单并确认数据库记录正确
- [x] 16.4 验证代购订单创建：创建代购订单并确认套餐自动激活

## 17. 数据库验证（使用 PostgreSQL MCP）

- [x] 17.1 验证 tb_order 表字段：检查 is_purchase_on_behalf 字段及默认值
- [x] 17.2 验证 tb_shop_series_allocation 表字段：检查 enable_force_recharge 和 force_recharge_amount 字段
- [x] 17.3 验证充值订单创建：执行创建后查询数据库确认记录正确
- [x] 17.4 验证代购订单创建：执行创建后查询订单表和套餐使用表
- [x] 17.5 验证累计充值更新：执行充值/购买后查询卡/设备的 accumulated_recharge 字段
- [x] 17.6 验证佣金计算：执行订单后查询佣金记录表，确认代购订单不触发一次性佣金

## 18. 文档更新

- [x] 18.1 在 docs/ 目录创建功能总结文档（中文，简要说明业务规则和 API 接口）
- [x] 18.2 更新 README.md：添加强充系统和代购订单功能说明（可选）

## 19. 代码规范检查

- [x] 19.1 运行 lsp_diagnostics 检查所有修改的文件
- [x] 19.2 运行代码规范检查脚本（如有）
- [x] 19.3 确保所有注释使用中文
- [x] 19.4 确保所有常量定义在 pkg/constants/
- [x] 19.5 确保所有错误码定义在 pkg/errors/

## 20. 开发完成验证

- [x] 20.1 执行数据库迁移（开发环境）
- [x] 20.2 运行完整测试套件并确保全部通过
- [x] 20.3 本地启动服务验证功能可用性
