# 实现任务清单 **Change ID**: `add-commission-withdrawal-approval` --- ## 阶段 1: DTO 定义 (20 分钟) ### Task 1.1: 创建 DTO 文件 **文件**: `internal/model/commission_withdrawal_dto.go` **实现内容**: - [x] 1.1.1 `WithdrawalRequestListReq` 请求结构(分页、状态、时间范围等) - [x] 1.1.2 `WithdrawalRequestItem` 响应结构 - [x] 1.1.3 `ApproveWithdrawalReq` 审批通过请求 - [x] 1.1.4 `RejectWithdrawalReq` 拒绝请求 - [x] 1.1.5 `WithdrawalApprovalResp` 审批响应 **验证**: - [x] DTO 字段完整 - [x] 验证标签正确(remark 必填等) --- ## 阶段 2: Store 层扩展 (1 小时) ### Task 2.1: 扩展 CommissionWithdrawalRequest Store **文件**: `internal/store/postgres/commission_withdrawal_request_store.go` **实现内容**: - [x] 2.1.1 `List(req)` - 分页查询提现申请 - [x] 2.1.2 `GetByID(id)` - 获取单条记录(已有) - [x] 2.1.3 `UpdateStatusWithTx(id, updates)` - 事务中更新状态 **验证**: - [x] 关联查询正确(店铺、申请人、处理人) - [x] 乐观锁/版本控制(状态检查防止并发问题) --- ### Task 2.2: 扩展 Wallet Store **文件**: `internal/store/postgres/wallet_store.go` **实现内容**: - [x] 2.2.1 `GetByID(walletID)` - 获取钱包 - [x] 2.2.2 `DeductFrozenBalanceWithTx(walletID, amount)` - 从冻结中扣除 - [x] 2.2.3 `UnfreezeBalanceWithTx(walletID, amount)` - 解冻余额到可用 **验证**: - [x] 事务处理正确 - [x] 余额不能为负(通过 WHERE 条件保证) --- ### Task 2.3: WalletTransaction Store **文件**: `internal/store/postgres/wallet_transaction_store.go` **实现内容**: - [x] 2.3.1 `CreateWithTx(transaction)` - 事务中创建交易流水 - [x] 2.3.2 `Create(transaction)` - 创建交易流水 **验证**: - [x] 流水类型正确 - [x] 关联信息完整 --- ## 阶段 3: Service 层 (1.5 小时) ### Task 3.1: 创建 CommissionWithdrawal Service **文件**: `internal/service/commission_withdrawal/service.go` **实现内容**: - [x] 3.1.1 `ListWithdrawalRequests(ctx, req)` - 查询提现申请列表 - [x] 3.1.2 `Approve(ctx, id, req)` - 审批通过 - [x] 3.1.3 `Reject(ctx, id, req)` - 拒绝 **业务逻辑**: - [x] 3.1.4 审批通过:状态检查 → 金额修正 → 扣款 → 记录流水 → 更新状态 - [x] 3.1.5 拒绝:状态检查 → 解冻 → 记录流水 → 更新状态 - [x] 3.1.6 使用事务确保原子性 **验证**: - [x] 状态流转正确 - [x] 钱包操作正确 - [x] 事务处理正确 --- ## 阶段 4: Handler 层 (45 分钟) ### Task 4.1: 创建 Handler **文件**: `internal/handler/admin/commission_withdrawal.go` **实现内容**: - [x] 4.1.1 `ListWithdrawalRequests` - GET /api/admin/commission/withdrawal-requests - [x] 4.1.2 `ApproveWithdrawal` - POST /api/admin/commission/withdrawal-requests/:id/approve - [x] 4.1.3 `RejectWithdrawal` - POST /api/admin/commission/withdrawal-requests/:id/reject **验证**: - [x] 参数校验正确 - [x] 权限检查正确 --- ### Task 4.2: 路由注册 **文件**: `internal/routes/commission.go` **实现内容**: - [x] 4.2.1 注册三个 API 路由 - [x] 4.2.2 配置权限(需要认证) **验证**: - [x] 路由可访问 - [x] 权限限制生效 --- ## 阶段 5: 组件注册与测试 (45 分钟) ### Task 5.1: Bootstrap 注册 **实现内容**: - [x] 5.1.1 注册 WalletTransaction Store - [x] 5.1.2 注册 CommissionWithdrawal Service - [x] 5.1.3 注册 CommissionWithdrawal Handler --- ### Task 5.2: 测试 **实现内容**: - [x] 5.2.1 审批通过流程测试 - [x] 5.2.2 拒绝流程测试 - [x] 5.2.3 并发审批测试 - [x] 5.2.4 余额不足测试 --- ## 完成标准 - [x] 所有 DTO 定义完成 - [x] Store 层方法实现完成 - [x] Service 层业务逻辑完成 - [x] Handler 层 API 实现完成 - [x] 事务处理正确 - [x] 编译通过 - [x] 审批流程测试通过