Files
junhong_cmp_fiber/docs/order_status_search_summary.md
huang 8f66ca7bcb
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m14s
文档提交
2026-04-11 11:27:43 +08:00

6.1 KiB
Raw Permalink Blame History

订单状态与佣金系统搜索结果总结

搜索范围

  • 关键词订单状态、冻结、差价佣金、order status、frozen、commission
  • 搜索范围:整个项目代码库
  • 文件类型Go 源代码文件

核心发现

1. 订单状态定义(无冻结状态)

重要发现:订单本身没有冻结状态,只有支付状态和佣金状态。

订单支付状态4 种)

  • PaymentStatusPending = 1:待支付
  • PaymentStatusPaid = 2:已支付
  • PaymentStatusCancelled = 3:已取消
  • PaymentStatusRefunded = 4:已退款

订单佣金状态2 种)

  • CommissionStatusPending = 1:待计算
  • CommissionStatusCalculated = 2:已计算

文件位置internal/model/order.go:98-110

2. 冻结状态存在于钱包,不在订单

重要发现:冻结状态是钱包的概念,用于提现流程。

代理钱包状态3 种)

  • AgentWalletStatusNormal = 1:正常
  • AgentWalletStatusFrozen = 2:冻结(整个钱包冻结)
  • AgentWalletStatusClosed = 3:关闭

钱包冻结余额字段

  • balance:总余额
  • frozen_balance:冻结余额(用于提现)
  • 可用余额 = balance - frozen_balance

文件位置pkg/constants/wallet.go:17-22internal/model/agent_wallet.go:15-16

3. 订单状态流转逻辑

支付方式决定初始状态

  1. 线下支付offline:创建时直接为 PaymentStatusPaid
  2. 钱包支付wallet:创建时直接为 PaymentStatusPaid
  3. 微信/支付宝wechat/alipay:创建时为 PaymentStatusPending,支付回调后变为 PaymentStatusPaid

订单超时自动取消

  • 待支付订单 30 分钟未支付自动取消
  • 状态变为 PaymentStatusCancelled
  • 解冻钱包余额(如有)

文件位置internal/service/order/service.go:1314-1385

4. 订单与佣金的关系

佣金计算触发条件

  • 订单支付成功后立即入队佣金计算任务
  • 异步处理,不阻塞订单创建

佣金类型

  1. 成本价差佣金cost_diff

    • 计算方式:销售价 - 销售成本价
    • 沿代理链向上分配
  2. 一次性佣金one_time

    • 仅非代购订单触发
    • 仅首次购买时触发

文件位置internal/service/commission_calculation/service.go:74-230

5. 佣金提现流程3 阶段)

阶段 1代理发起申请

  • 验证可用余额
  • 冻结余额frozen_balance += amount
  • 创建提现申请Status = 待审核)

阶段 2a平台审核通过

  • 检查冻结余额
  • 从冻结余额扣款frozen_balance -= amount
  • 更新提现申请Status = 已通过)

阶段 2b平台审核拒绝

  • 解冻余额frozen_balance -= amount
  • 更新提现申请Status = 已拒绝)

文件位置

  • 发起申请:internal/service/shop_commission/service.go:517-649
  • 审核通过:internal/service/commission_withdrawal/service.go:145-256
  • 审核拒绝:internal/service/commission_withdrawal/service.go:258-310

关键代码位置

功能 文件 行数
订单模型定义 internal/model/order.go 9-138
订单支付状态常量 internal/model/order.go 98-104
订单佣金状态常量 internal/model/order.go 106-110
订单创建逻辑 internal/service/order/service.go 114-928
订单超时取消 internal/service/order/service.go 1314-1385
佣金计算 internal/service/commission_calculation/service.go 74-230
提现申请 internal/service/shop_commission/service.go 517-649
提现审核 internal/service/commission_withdrawal/service.go 145-310
钱包模型 internal/model/agent_wallet.go 9-94
钱包常量 pkg/constants/wallet.go 1-234

重要业务规则

订单支付规则

  1. 待支付订单 30 分钟未支付自动取消
  2. 取消时解冻钱包余额(如有)
  3. 防止重复下单(幂等性检查)

佣金计算规则

  1. 成本价差佣金:仅当 销售价 > 销售成本价 时计算
  2. 一次性佣金:仅非代购订单首次购买时触发
  3. 佣金链路断裂时标记为待审核

提现规则

  1. 提现申请时冻结余额
  2. 可用余额 = 总余额 - 冻结余额
  3. 手续费 = 提现金额 × 费率 / 10000

数据流向图

订单创建
  ├─ 线下/钱包支付 → PaymentStatus=2(已支付) → 激活套餐 → 入队佣金计算
  └─ 微信/支付宝 → PaymentStatus=1(待支付) → 支付回调 → PaymentStatus=2 → 激活套餐 → 入队佣金计算
                                          ↓
                                  30分钟超时 → PaymentStatus=3(已取消)

佣金计算
  ├─ 成本价差佣金:销售价 - 销售成本价 → 沿代理链分配 → 入账分佣钱包
  └─ 一次性佣金:非代购订单首次购买 → 入账分佣钱包

提现流程
  ├─ 代理申请 → 冻结余额 → 创建申请(待审核)
  ├─ 平台通过 → 从冻结余额扣款 → 更新申请(已通过)
  └─ 平台拒绝 → 解冻余额 → 更新申请(已拒绝)

生成的文档

已生成两份详细文档:

  1. order_status_commission_analysis.md

    • 完整的系统分析报告
    • 包含所有状态定义、流程、数据模型
    • 适合深入理解系统设计
  2. order_status_quick_reference.md

    • 快速参考指南
    • 包含速查表、常见问题、SQL 查询
    • 适合日常开发查询

关键发现总结

已确认

  • 订单有支付状态和佣金状态,但没有冻结状态
  • 冻结状态存在于代理钱包,用于提现流程
  • 差价佣金通过 seller_cost_price 字段计算
  • 佣金与订单的关系通过 commission_status 字段维护

⚠️ 注意事项

  • 订单超时自动取消不会触发佣金计算
  • 代购订单不计算一次性佣金
  • 提现时冻结的余额在审核通过时直接扣款,不是解冻后再扣

📌 最佳实践

  • 查询订单时同时检查 payment_statuscommission_status
  • 查询可提现金额时使用 balance - frozen_balance
  • 提现流程中使用事务确保数据一致性