All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m40s
- 归档 OpenSpec 变更到 archive 目录 - 创建 2 个新的主规范文件:commission-trigger 和 order-commission-snapshot - 实现订单佣金快照字段和支付自动触发 - 确保事务一致性,所有佣金操作在同一事务内完成 - 提取成本价计算为公共工具函数
26 lines
1.5 KiB
Markdown
26 lines
1.5 KiB
Markdown
# 佣金计算链路修复:支付后自动入队 + 订单佣金字段快照
|
||
|
||
## Why
|
||
|
||
你确认的目标:**订单支付成功后自动触发佣金计算(异步任务)**,且佣金计算所需的关键字段应当来源于“购买校验结果”。
|
||
|
||
当前实现存在以下风险:
|
||
- 佣金计算依赖订单字段(如 `series_id/seller_shop_id/seller_cost_price`),但订单创建时未填充,可能导致计算错误或空指针风险。
|
||
- 佣金计算任务已定义,但缺少稳定触发入口,导致支付后佣金不计算或需要人工补偿。
|
||
|
||
## What Changes
|
||
|
||
- **订单创建时写入佣金快照字段**:基于购买校验结果(allocation/series)填充订单的 `SeriesID/SellerShopID/SellerCostPrice` 等字段,确保后续计算稳定。
|
||
- **支付成功后自动入队佣金计算任务**:在订单从待支付变为已支付的“首次成功支付”场景,enqueue `commission:calculate` 异步任务,执行佣金计算。
|
||
- **计算事务一致性(可选但推荐)**:调整佣金计算服务的事务使用方式,确保“佣金记录 + 钱包入账 + 订单佣金状态更新”具备一致性。
|
||
- **补充测试**:新增/完善测试,避免回归。
|
||
|
||
## Impact
|
||
|
||
涉及模块(预期):
|
||
- 订单创建:`internal/service/order/service.go`
|
||
- 异步任务:`internal/task/commission_calculation.go`(触发入口)与队列注入
|
||
- 佣金计算:`internal/service/commission_calculation/service.go`
|
||
- 测试:`internal/service/order/service_test.go`、`internal/task/*` 或集成测试
|
||
|