Files
huang b11edde720
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 6m19s
fix: 注册佣金计算任务 Handler 到队列处理器
佣金计算任务 (commission:calculate) 的 Handler 已实现但未在队列处理器中注册,
导致支付成功后入队的佣金计算任务永远不会被消费执行。

变更内容:
- 在 pkg/queue/handler.go 中添加 registerCommissionCalculationHandler() 方法
- 创建所有需要的 Store 和 Service 依赖
- 在 RegisterHandlers() 中调用注册方法

修复后,订单支付成功将正确触发佣金计算和发放。

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 16:08:03 +08:00

52 lines
2.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Context
支付成功后,订单服务通过 `enqueueCommissionCalculation()` 将佣金计算任务入队到 Asynq 队列(任务类型 `commission:calculate`)。然而,`pkg/queue/handler.go` 中的 `RegisterHandlers()` 方法没有注册对应的 Handler导致任务永远不会被消费。
**现有组件**
- `internal/task/commission_calculation.go` - 定义了 `CommissionCalculationHandler``NewCommissionCalculationHandler()`
- `internal/service/commission_calculation/service.go` - 实现了 `CalculateCommission()` 业务逻辑
- `pkg/constants/constants.go` - 定义了 `TaskTypeCommission = "commission:calculate"`
**缺失的连接**
- `pkg/queue/handler.go` 中没有调用 `task.NewCommissionCalculationHandler()` 并注册到 `mux`
## Goals / Non-Goals
**Goals:**
-`pkg/queue/handler.go` 中注册 `CommissionCalculationHandler`
- 确保所有依赖正确注入(`commission_calculation.Service` 及其依赖)
- 修复后队列中积压的 `commission:calculate` 任务能被正常消费
**Non-Goals:**
- 不修改佣金计算的业务逻辑
- 不修改任务入队的逻辑
- 不补偿历史丢失的任务(如果已从队列过期)
## Decisions
### 决策 1在 Handler 结构体中注入 `commission_calculation.Service`
**选项 A选中**:在 `pkg/queue/handler.go``registerCommissionCalculationHandler()` 方法中本地创建 Service 及其依赖
**选项 B**:修改 `NewHandler()` 签名,增加 `commission_calculation.Service` 参数
**选择理由**:选项 A 与现有的 `registerCommissionStatsHandlers()` 模式一致,不需要修改外部调用 `NewHandler()` 的代码。
### 决策 2依赖创建方式
`commission_calculation.Service` 需要以下依赖:
- `*gorm.DB` - Handler 已有
- 多个 StoreCommissionRecord、Shop、ShopPackageAllocation 等)- 需在方法内创建
- `*commission_stats.Service` - 需在方法内创建
- `*zap.Logger` - Handler 已有
参考 `registerCommissionStatsHandlers()` 的模式,在注册方法内部创建所有需要的 Store 和 Service。
## Risks / Trade-offs
| 风险 | 缓解措施 |
|------|---------|
| Store 实例重复创建 | 可接受Store 是无状态的轻量级对象,且只在启动时创建一次 |
| 历史任务可能已过期 | 提供补偿机制(后台扫描 `commission_status=pending` 的已支付订单) |
| 并发任务可能重复处理 | 已有幂等检查(`commission_status == calculated` 则跳过) |