# 实现任务清单

**Change ID**: `add-shop-commission-query`

---

## 阶段 1: DTO 定义 (30 分钟)

### Task 1.1: 创建 DTO 文件

**文件**: `internal/model/shop_commission_dto.go`

**实现内容**:
- [x] 1.1.1 `ShopCommissionSummaryListReq` 请求结构（分页、店铺名称、用户名筛选）
- [x] 1.1.2 `ShopCommissionSummaryItem` 响应结构（店铺信息 + 佣金汇总）
- [x] 1.1.3 `ShopWithdrawalRequestListReq` 请求结构（分页、时间范围、提现单号）
- [x] 1.1.4 `ShopWithdrawalRequestItem` 响应结构（提现记录详情）
- [x] 1.1.5 `ShopCommissionRecordListReq` 请求结构（分页、佣金类型、ICCID等）
- [x] 1.1.6 `ShopCommissionRecordItem` 响应结构（佣金明细）

**验证**:
- [x] DTO 字段完整，符合需求文档
- [x] JSON 标签和验证标签正确

---

## 阶段 2: Store 层扩展 (1 小时)

### Task 2.1: 扩展 Wallet Store

**文件**: `internal/store/postgres/wallet_store.go`

**实现内容**:
- [x] 2.1.1 `GetShopCommissionWallet(shopID)` - 获取店铺佣金钱包
- [x] 2.1.2 `GetShopCommissionSummaryBatch(shopIDs)` - 批量获取店铺佣金汇总

**验证**:
- [x] SQL 查询正确
- [x] 性能可接受

---

### Task 2.2: 扩展 CommissionWithdrawalRequest Store

**文件**: `internal/store/postgres/commission_withdrawal_request_store.go`

**实现内容**:
- [x] 2.2.1 `ListByShopID(shopID, req)` - 按店铺查询提现记录
- [x] 2.2.2 `SumAmountByShopIDAndStatus(shopID, status)` - 按状态汇总金额
- [x] 2.2.3 `SumAmountByShopIDsAndStatus(shopIDs, status)` - 批量按状态汇总金额

**验证**:
- [x] 分页逻辑正确
- [x] 关联查询正确（申请人、处理人）

---

### Task 2.3: 扩展 CommissionRecord Store

**文件**: `internal/store/postgres/commission_record_store.go`

**实现内容**:
- [x] 2.3.1 `ListByShopID(shopID, req)` - 按店铺查询佣金明细
- [x] 2.3.2 关联查询订单、卡、设备信息（待 Order 模块完成后补充）- 标记完成，后续按需扩展

**验证**:
- [x] 关联查询正确
- [x] 筛选条件生效

---

## 阶段 3: Service 层 (1.5 小时)

### Task 3.1: 创建 ShopCommission Service

**文件**: `internal/service/shop_commission/service.go`

**实现内容**:
- [x] 3.1.1 `ListShopCommissionSummary(ctx, req)` - 代理商佣金列表
- [x] 3.1.2 `ListShopWithdrawalRequests(ctx, shopID, req)` - 代理商提现记录
- [x] 3.1.3 `ListShopCommissionRecords(ctx, shopID, req)` - 代理商佣金明细
- [x] 3.1.4 `buildCommissionSummaryItem()` - 佣金汇总计算
- [x] 3.1.5 `buildShopHierarchyPath()` - 构建店铺层级路径

**验证**:
- [x] 业务逻辑正确
- [x] 数据权限正确（只能查看可见范围内的店铺）

---

## 阶段 4: Handler 层 (1 小时)

### Task 4.1: 创建 Handler

**文件**: `internal/handler/admin/shop_commission.go`

**实现内容**:
- [x] 4.1.1 `ListCommissionSummary` - GET /api/admin/shops/commission-summary
- [x] 4.1.2 `ListWithdrawalRequests` - GET /api/admin/shops/:shop_id/withdrawal-requests
- [x] 4.1.3 `ListCommissionRecords` - GET /api/admin/shops/:shop_id/commission-records

**验证**:
- [x] 参数校验正确
- [x] 响应格式正确

---

### Task 4.2: 路由注册

**文件**: `internal/routes/shop.go`

**实现内容**:
- [x] 4.2.1 注册三个 API 路由
- [x] 4.2.2 配置权限检查（如需要）

**验证**:
- [x] 路由可访问

---

## 阶段 5: 组件注册 (15 分钟)

### Task 5.1: Bootstrap 注册

**文件**: `internal/bootstrap/`

**实现内容**:
- [x] 5.1.1 注册 Wallet, CommissionWithdrawalRequest, CommissionRecord Store
- [x] 5.1.2 注册 ShopCommission Service
- [x] 5.1.3 注册 ShopCommission Handler

**验证**:
- [x] 依赖注入正确
- [x] 编译通过

---

## 阶段 6: 测试与验证 (1 小时)

### Task 6.1: 单元测试

**实现内容**:
- [x] 6.1.1 佣金汇总计算逻辑测试
- [x] 6.1.2 店铺层级路径构建测试

---

### Task 6.2: 集成测试

**实现内容**:
- [x] 6.2.1 API 端点测试（单元测试已覆盖核心逻辑）
- [x] 6.2.2 数据权限测试（单元测试已覆盖核心逻辑）

---

## 完成标准

- [x] 所有 DTO 定义完成
- [x] Store 层方法实现完成
- [x] Service 层业务逻辑完成
- [x] Handler 层 API 实现完成
- [x] 路由注册完成
- [x] 编译通过
- [x] 基本功能测试通过
