Files
junhong_cmp_fiber/openspec/changes/add-order-payment/tasks.md
huang a945a4f554
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m37s
feat: 实现卡和设备的套餐系列绑定功能
- 添加 Device 和 IotCard 模型的 SeriesID 字段
- 实现 DeviceService 和 IotCardService 的套餐系列绑定逻辑
- 添加 DeviceStore 和 IotCardStore 的数据库操作方法
- 更新 API 接口和路由支持套餐系列绑定
- 创建数据库迁移脚本(000027_add_series_binding_fields)
- 添加完整的单元测试和集成测试
- 更新 OpenAPI 文档
- 归档 OpenSpec 变更文档

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-01-28 19:49:45 +08:00

107 lines
4.4 KiB
Markdown
Raw 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.
## 1. 新增模型
- [ ] 1.1 创建 `internal/model/order.go`,定义 Order 模型order_no, order_type, buyer_type, buyer_id, iot_card_id, device_id, total_amount, payment_method, payment_status, paid_at, commission_status, commission_config_version
- [ ] 1.2 定义 OrderItem 模型order_id, package_id, package_name, quantity, unit_price, amount
## 2. 数据库迁移
- [ ] 2.1 创建迁移文件,创建 tb_order 表
- [ ] 2.2 创建 tb_order_item 表
- [ ] 2.3 添加索引order_no 唯一索引, buyer_type+buyer_id, payment_status, iot_card_id, device_id
- [ ] 2.4 本地执行迁移验证
## 3. 订单 DTO
- [ ] 3.1 创建 `internal/model/dto/order.go`,定义 CreateOrderRequestorder_type, iot_card_id/device_id, package_ids
- [ ] 3.2 定义 OrderListRequestpayment_status, order_type, start_time, end_time, page, page_size
- [ ] 3.3 定义 PayOrderRequestpayment_method
- [ ] 3.4 定义 OrderResponse包含订单信息和明细列表
- [ ] 3.5 定义 OrderItemResponse
## 4. 订单 Store
- [ ] 4.1 创建 `internal/store/postgres/order_store.go`,实现 Create 方法(事务创建订单和明细)
- [ ] 4.2 实现 GetByID 方法(含明细)
- [ ] 4.3 实现 GetByOrderNo 方法
- [ ] 4.4 实现 Update 方法
- [ ] 4.5 实现 List 方法(支持分页和筛选)
- [ ] 4.6 实现 UpdatePaymentStatus 方法
- [ ] 4.7 实现 GenerateOrderNo 方法ORD + 时间戳 + 随机数)
## 5. 订单明细 Store
- [ ] 5.1 创建 `internal/store/postgres/order_item_store.go`,实现 BatchCreate 方法
- [ ] 5.2 实现 ListByOrderID 方法
## 6. 购买验证 Service
- [ ] 6.1 创建 `internal/service/purchase_validation/service.go`,实现 ValidateCardPurchase 方法
- [ ] 6.2 实现 ValidateDevicePurchase 方法
- [ ] 6.3 实现 ValidatePackageStatus 方法
- [ ] 6.4 实现 GetPurchasePrice 方法(根据买家身份返回价格)
## 7. 订单 Service
- [ ] 7.1 创建 `internal/service/order/service.go`,实现 Create 方法(验证权限、创建订单和明细、快照佣金配置版本)
- [ ] 7.2 实现 Get 方法
- [ ] 7.3 实现 List 方法
- [ ] 7.4 实现 Cancel 方法(验证状态、更新为已取消)
- [ ] 7.5 实现 WalletPay 方法(事务:扣减余额、更新状态、激活套餐、更新销售统计)
- [ ] 7.6 实现 HandlePaymentCallback 方法(验证签名、幂等处理、激活套餐、更新销售统计)
- [ ] 7.7 实现 ActivatePackage 辅助方法(创建 PackageUsage 记录、更新 ShopSeriesCommissionStats
- [ ] 7.8 实现 SnapshotCommissionConfig 辅助方法(查询并快照当前佣金配置版本)
## 8. 订单 Handler后台
- [ ] 8.1 创建 `internal/handler/admin/order.go`,实现 Create 接口
- [ ] 8.2 实现 Get 接口
- [ ] 8.3 实现 List 接口
- [ ] 8.4 实现 Cancel 接口
## 9. 订单 HandlerH5
- [ ] 9.1 创建 `internal/handler/h5/order.go`,实现 Create 接口
- [ ] 9.2 实现 Get 接口
- [ ] 9.3 实现 List 接口
- [ ] 9.4 实现 WalletPay 接口
## 10. 支付回调 Handler
- [ ] 10.1 创建 `internal/handler/callback/payment.go`,实现 WechatPayCallback 接口
- [ ] 10.2 实现 AlipayCallback 接口
## 11. Bootstrap 注册
- [ ] 11.1 在 stores.go 中注册 OrderStore, OrderItemStore
- [ ] 11.2 在 services.go 中注册 PurchaseValidationService, OrderService
- [ ] 11.3 在 handlers.go 中注册 AdminOrderHandler, H5OrderHandler, PaymentCallbackHandler
## 12. 路由注册
- [ ] 12.1 注册 `/api/admin/orders` 路由组POST, GET, GET/:id, POST/:id/cancel
- [ ] 12.2 注册 `/api/h5/orders` 路由组POST, GET, GET/:id, POST/:id/pay
- [ ] 12.3 注册 `/api/callback/wechat-pay` 回调路由
- [ ] 12.4 注册 `/api/callback/alipay` 回调路由
## 13. 文档生成器更新
- [ ] 13.1 在 docs.go 和 gendocs/main.go 中添加新 Handler
- [ ] 13.2 执行文档生成验证
## 14. 测试
- [ ] 14.1 OrderStore 单元测试
- [ ] 14.2 PurchaseValidationService 单元测试(覆盖各种验证场景)
- [ ] 14.3 OrderService 单元测试(覆盖创建、支付、取消)
- [ ] 14.4 WalletPay 事务测试(覆盖成功和失败回滚)
- [ ] 14.5 订单创建 API 集成测试
- [ ] 14.6 钱包支付 API 集成测试
- [ ] 14.7 执行 `go test ./...` 确认通过
## 15. 最终验证
- [ ] 15.1 执行 `go build ./...` 确认编译通过
- [ ] 15.2 启动服务,手动测试订单创建流程
- [ ] 15.3 手动测试钱包支付流程
- [ ] 15.4 验证套餐激活PackageUsage 记录创建)