## 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 已有
- 多个 Store（CommissionRecord、Shop、ShopPackageAllocation 等）- 需在方法内创建
- `*commission_stats.Service` - 需在方法内创建
- `*zap.Logger` - Handler 已有

参考 `registerCommissionStatsHandlers()` 的模式，在注册方法内部创建所有需要的 Store 和 Service。

## Risks / Trade-offs

| 风险 | 缓解措施 |
|------|---------|
| Store 实例重复创建 | 可接受，Store 是无状态的轻量级对象，且只在启动时创建一次 |
| 历史任务可能已过期 | 提供补偿机制（后台扫描 `commission_status=pending` 的已支付订单） |
| 并发任务可能重复处理 | 已有幂等检查（`commission_status == calculated` 则跳过） |
