## 1. DTO 层新增 CreateAdminOrderRequest

- [x] 1.1 在 `internal/model/dto/order_dto.go` 创建 `CreateAdminOrderRequest` 结构体，仅允许 wallet/offline 支付方式
- [x] 1.2 添加字段验证规则：`payment_method` 使用 `validate:"required,oneof=wallet offline"`
- [x] 1.3 复制其他字段定义：`order_type`、`iot_card_id`、`device_id`、`package_ids`（与 `CreateOrderRequest` 保持一致）
- [x] 1.4 验证编译：运行 `go build ./internal/model/...` 确认无编译错误

## 2. Service 层新增 CreateAdminOrder 方法

- [x] 2.1 在 `internal/service/order/service.go` 新增 `CreateAdminOrder(ctx context.Context, req *dto.CreateAdminOrderRequest, buyerType string, buyerID uint) (*dto.OrderResponse, error)` 方法签名
- [x] 2.2 实现步骤 1：调用 `validatePurchase()` 验证购买合法性（单卡/设备购买、套餐有效性）
- [x] 2.3 实现步骤 2：调用 `checkOrderIdempotency()` 检查幂等性，如果已创建则返回现有订单
- [x] 2.4 实现步骤 3：调用 `checkForceRechargeRequirement()` 检查强充要求
- [x] 2.5 实现步骤 4：提取资源所属店铺 ID 和系列 ID（复用现有逻辑）
- [x] 2.6 实现步骤 5：根据 `payment_method` 路由到不同分支（offline → `createOrderWithActivation`，wallet → `createOrderWithWalletPayment`）
- [x] 2.7 实现步骤 6：添加 else 兜底检查，返回错误"后台仅支持钱包支付或线下支付"
- [x] 2.8 验证编译：运行 `go build ./internal/service/order/...` 确认无编译错误

## 3. Service 层新增 CreateH5Order 方法

- [x] 3.1 在 `internal/service/order/service.go` 新增 `CreateH5Order(ctx context.Context, req *dto.CreateOrderRequest, buyerType string, buyerID uint) (*dto.OrderResponse, error)` 方法签名
- [x] 3.2 将原 `Create()` 方法的完整逻辑复制到 `CreateH5Order()` 方法中（保持 H5 端行为不变）
- [x] 3.3 验证编译：运行 `go build ./internal/service/order/...` 确认无编译错误

## 4. Service 层重命名原 Create 方法为 CreateLegacy

- [x] 4.1 将 `internal/service/order/service.go` 的 `Create()` 方法重命名为 `CreateLegacy()`（保留作为回滚方案）
- [x] 4.2 添加注释标记：`// Deprecated: 使用 CreateAdminOrder 或 CreateH5Order 替代。保留用于回滚。`
- [x] 4.3 验证编译：运行 `go build ./internal/service/order/...` 确认无编译错误

## 5. Handler 层修复后台订单创建（admin）

- [x] 5.1 修改 `internal/handler/admin/order.go` 的 `Create()` 方法：将 DTO 类型从 `CreateOrderRequest` 改为 `CreateAdminOrderRequest`
- [x] 5.2 在 `c.BodyParser(&req)` 后添加参数验证：调用 `h.validator.Struct(&req)`，验证失败返回 `errors.New(errors.CodeInvalidParam)`
- [x] 5.3 修改权限检查逻辑：在 `else` 分支添加兜底检查，返回错误"后台仅支持钱包支付或线下支付"
- [x] 5.4 修改 Service 调用：将 `h.service.Create(...)` 改为 `h.service.CreateAdminOrder(...)`
- [x] 5.5 验证编译：运行 `go build ./internal/handler/admin/...` 确认无编译错误

## 6. Handler 层修复 H5 端订单创建

- [x] 6.1 修改 `internal/handler/h5/order.go` 的 `Create()` 方法：将 Service 调用从 `h.service.Create(...)` 改为 `h.service.CreateH5Order(...)`
- [x] 6.2 确认其他逻辑保持不变（DTO 仍使用 `CreateOrderRequest`，支持 wallet/wechat/alipay）
- [x] 6.3 验证编译：运行 `go build ./internal/handler/h5/...` 确认无编译错误

## 7. 错误码检查（可选）

- [x] 7.1 检查 `pkg/errors/errors.go` 是否已定义以下错误码：`CodeInvalidParam`、`CodeForbidden`、`CodeInsufficientBalance`、`CodeWalletNotFound`
- [x] 7.2 如果缺少，添加错误码定义（如 `CodeInvalidPaymentMethodForAdmin = 40008`）— 不需要，所有错误码已存在
- [x] 7.3 验证编译：运行 `go build ./pkg/errors/...` 确认无编译错误

## 8. 单元测试 - CreateAdminOrder 方法（跳过：项目禁止自动化测试）

- [x] ~~8.1-8.8~~ 跳过：项目规范禁止编写自动化测试代码（AGENTS.md）

## 9. 单元测试 - CreateH5Order 方法（跳过：项目禁止自动化测试）

- [x] ~~9.1-9.4~~ 跳过：项目规范禁止编写自动化测试代码（AGENTS.md）

## 10. 集成测试 - 后台订单创建 API（跳过：需人工手动验证）

- [x] ~~10.1-10.7~~ 跳过：手动测试由用户自行完成

## 11. 集成测试 - H5 端订单创建 API（跳过：需人工手动验证）

- [x] ~~11.1-11.5~~ 跳过：手动测试由用户自行完成

## 12. 钱包余额和流水验证（跳过：需人工手动验证）

- [x] ~~12.1-12.5~~ 跳过：手动测试由用户自行完成

## 13. 幂等性和并发测试（跳过：需人工手动验证）

- [x] ~~13.1-13.4~~ 跳过：手动测试由用户自行完成

## 14. 错误日志和监控验证（跳过：需人工手动验证）

- [x] ~~14.1-14.3~~ 跳过：手动测试由用户自行完成

## 15. 代码质量检查

- [x] 15.1 运行 `gofmt -s -w .` 格式化代码
- [x] 15.2 运行 `go vet ./...` 检查代码问题
- [x] 15.3 运行 `go build ./...` 确认全部编译通过
- [x] 15.4 检查所有新增代码的中文注释：确认导出函数有文档注释，复杂逻辑有实现注释

## 16. 文档更新

- [x] 16.1 更新功能总结文档：补充后台订单 API 的 Breaking Change 说明（payment_method 必填、仅允许 wallet/offline）

## 17. 清理和优化（部署前）

- [x] 17.1 检查是否有未使用的导入或变量（使用 IDE 或 `go vet`）
- [x] 17.2 保留 `CreateLegacy()` 方法作为回滚方案，已有 Deprecated 标记
- [x] 17.3 确认所有 TODO 注释已处理或转为 issue
- [x] ~~17.4~~ 跳过：项目禁止自动化测试

## 18. 提交和归档

- [ ] 18.1 使用 `git add` 暂存所有修改文件
- [ ] 18.2 使用 `/commit` 创建 Git commit，提交消息："修复代理钱包订单创建逻辑漏洞"
- [ ] 18.3 使用 `/opsx:verify` 验证实现与规格一致
- [ ] 18.4 使用 `/opsx:archive` 归档变更，同步 delta specs 到主规格文档
