Files
junhong_cmp_fiber/openspec/specs/order-management/spec.md
huang dfcf16f548
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m36s
feat: 实现订单支付功能模块
- 新增订单管理、支付回调、购买验证等核心服务
- 实现订单、订单项目的数据存储层和 API 接口
- 添加订单数据库迁移和 DTO 定义
- 更新 API 文档和路由配置
- 同步 3 个新规范到主规范库(订单管理、订单支付、套餐购买验证)
- 完成 OpenSpec 变更归档

Ultraworked with Sisyphus
2026-01-28 22:12:15 +08:00

86 lines
2.6 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.
## ADDED Requirements
### Requirement: 创建套餐购买订单
系统 SHALL 允许买家创建套餐购买订单。订单类型分为单卡购买和设备购买。创建前 MUST 验证购买权限。
#### Scenario: 个人客户创建单卡订单
- **WHEN** 个人客户为自己的卡创建订单,选择一个套餐
- **THEN** 系统创建订单,状态为待支付,返回订单信息
#### Scenario: 个人客户创建设备订单
- **WHEN** 个人客户为自己的设备创建订单
- **THEN** 系统创建订单,订单类型为设备购买
#### Scenario: 代理创建订单
- **WHEN** 代理为店铺关联的卡/设备创建订单
- **THEN** 系统创建订单买家类型为代理商买家ID为店铺ID
#### Scenario: 套餐不在可购买范围
- **WHEN** 买家尝试购买不在关联系列下的套餐
- **THEN** 系统返回错误 "该套餐不在可购买范围内"
#### Scenario: 套餐已下架
- **WHEN** 买家尝试购买已下架的套餐
- **THEN** 系统返回错误 "该套餐已下架"
---
### Requirement: 查询订单列表
系统 SHALL 提供订单列表查询,支持按支付状态、订单类型、时间范围筛选。
#### Scenario: 个人客户查询自己的订单
- **WHEN** 个人客户查询订单列表
- **THEN** 系统只返回该客户的订单
#### Scenario: 代理查询店铺订单
- **WHEN** 代理查询订单列表
- **THEN** 系统返回该店铺及下级店铺的订单
#### Scenario: 按支付状态筛选
- **WHEN** 指定支付状态筛选
- **THEN** 系统只返回匹配状态的订单
---
### Requirement: 查询订单详情
系统 SHALL 允许买家查询订单详情,包含订单明细。
#### Scenario: 查询订单详情
- **WHEN** 买家查询指定订单详情
- **THEN** 系统返回订单信息和订单明细列表
#### Scenario: 查询他人订单
- **WHEN** 买家尝试查询不属于自己的订单
- **THEN** 系统返回 "订单不存在" 错误
---
### Requirement: 取消订单
系统 SHALL 允许买家取消未支付的订单。
#### Scenario: 取消待支付订单
- **WHEN** 买家取消一个待支付的订单
- **THEN** 系统更新订单状态为已取消
#### Scenario: 取消已支付订单
- **WHEN** 买家尝试取消已支付的订单
- **THEN** 系统返回错误 "已支付订单无法取消"
---
### Requirement: 订单号生成
系统生成的订单号 MUST 全局唯一,格式为 ORD{YYYYMMDDHHMMSS}{6位随机数}。
#### Scenario: 订单号格式
- **WHEN** 创建新订单
- **THEN** 订单号格式为 ORD + 14位时间戳 + 6位随机数
#### Scenario: 订单号唯一
- **WHEN** 并发创建多个订单
- **THEN** 每个订单的订单号都唯一