|
|
@@ -1,7 +1,7 @@
|
|
|
# Story 011.002: 实现订单取消功能
|
|
|
|
|
|
## Status
|
|
|
-Draft
|
|
|
+Completed
|
|
|
|
|
|
## Story
|
|
|
**As a** 小程序用户,
|
|
|
@@ -17,28 +17,28 @@ Draft
|
|
|
6. 在OrderMtService中添加cancelOrder方法
|
|
|
|
|
|
## Tasks / Subtasks
|
|
|
-- [ ] 在 OrderMtService 中添加 cancelOrder 方法 (AC: 2, 3, 4, 5, 6)
|
|
|
- - [ ] 在 `packages/orders-module-mt/src/services/order.mt.service.ts` 中添加方法签名:`cancelOrder(tenantId: number, orderId: number, reason: string, userId: number): Promise<void>`
|
|
|
- - [ ] 实现订单状态验证逻辑(仅允许取消支付状态为0或2的订单)
|
|
|
- - [ ] 对于已支付订单(支付状态=2),调用支付模块的退款功能
|
|
|
- - [ ] 更新订单状态为5(订单关闭),记录取消时间和原因
|
|
|
- - [ ] 确保多租户数据隔离
|
|
|
-- [ ] 添加取消订单API接口 (AC: 1, 2, 3)
|
|
|
- - [ ] 创建 `packages/orders-module-mt/src/routes/user/cancel-order.mt.ts` 单独路由文件
|
|
|
- - [ ] 实现请求参数验证(订单ID、取消原因)
|
|
|
- - [ ] 调用 OrderMtService 的 cancelOrder 方法
|
|
|
- - [ ] 添加适当的错误处理和响应格式
|
|
|
- - [ ] 在 `packages/orders-module-mt/src/routes/user/orders.mt.ts` 中聚合路由
|
|
|
-- [ ] 集成取消订单UI到订单详情页面 (AC: 1)
|
|
|
- - [ ] 在 `mini/src/pages/order-detail/index.tsx` 中添加取消订单按钮
|
|
|
- - [ ] 实现取消订单的UI交互逻辑
|
|
|
- - [ ] 添加取消原因输入对话框
|
|
|
- - [ ] 处理取消成功/失败的页面反馈
|
|
|
-- [ ] 编写集成测试 (AC: 1-6)
|
|
|
- - [ ] 在 `packages/orders-module-mt/tests/integration/` 现有订单API集成测试中添加取消订单测试
|
|
|
- - [ ] 验证订单状态验证逻辑
|
|
|
- - [ ] 测试多租户数据隔离
|
|
|
- - [ ] 测试已支付订单的退款触发
|
|
|
+- [x] 在 OrderMtService 中添加 cancelOrder 方法 (AC: 2, 3, 4, 5, 6)
|
|
|
+ - [x] 在 `packages/orders-module-mt/src/services/order.mt.service.ts` 中添加方法签名:`cancelOrder(tenantId: number, orderId: number, reason: string, userId: number): Promise<void>`
|
|
|
+ - [x] 实现订单状态验证逻辑(仅允许取消支付状态为0或2的订单)
|
|
|
+ - [x] 对于已支付订单(支付状态=2),调用支付模块的退款功能
|
|
|
+ - [x] 更新订单状态为5(订单关闭),记录取消时间和原因
|
|
|
+ - [x] 确保多租户数据隔离
|
|
|
+- [x] 添加取消订单API接口 (AC: 1, 2, 3)
|
|
|
+ - [x] 创建 `packages/orders-module-mt/src/routes/user/cancel-order.mt.ts` 单独路由文件
|
|
|
+ - [x] 实现请求参数验证(订单ID、取消原因)
|
|
|
+ - [x] 调用 OrderMtService 的 cancelOrder 方法
|
|
|
+ - [x] 添加适当的错误处理和响应格式
|
|
|
+ - [x] 在 `packages/orders-module-mt/src/routes/user/orders.mt.ts` 中聚合路由
|
|
|
+- [x] 集成取消订单UI到订单详情页面 (AC: 1)
|
|
|
+ - [x] 在 `mini/src/pages/order-detail/index.tsx` 中添加取消订单按钮
|
|
|
+ - [x] 实现取消订单的UI交互逻辑
|
|
|
+ - [x] 添加取消原因输入对话框
|
|
|
+ - [x] 处理取消成功/失败的页面反馈
|
|
|
+- [x] 编写集成测试 (AC: 1-6)
|
|
|
+ - [x] 在 `packages/orders-module-mt/tests/integration/` 现有订单API集成测试中添加取消订单测试
|
|
|
+ - [x] 验证订单状态验证逻辑
|
|
|
+ - [x] 测试多租户数据隔离
|
|
|
+ - [x] 测试已支付订单的退款触发
|
|
|
|
|
|
## Dev Notes
|
|
|
|
|
|
@@ -138,6 +138,16 @@ Claude Sonnet 4.5 (d8d-model)
|
|
|
- 拒绝不存在的订单
|
|
|
- 跨租户和跨用户权限验证
|
|
|
|
|
|
+### 最新完成工作 (2025-11-21)
|
|
|
+- ✅ 修复了测试工厂中的TypeScript类型错误
|
|
|
+ - 修复了 `OrderGoodsMt` 实体字段定义(移除不存在的 `totalAmount` 和 `totalCostAmount` 字段)
|
|
|
+ - 修复了 `OrderRefundMt` 实体字段定义(移除不存在的 `orderId` 字段,添加正确的 `orderNo` 字段)
|
|
|
+ - 所有12个集成测试全部通过,包括多租户数据隔离和用户权限验证
|
|
|
+- ✅ 完善了订单创建API的响应格式验证
|
|
|
+ - 使用 `parseWithAwait` 验证响应格式
|
|
|
+ - 修复了金额字段类型匹配问题
|
|
|
+ - 确保API响应与Schema定义完全一致
|
|
|
+
|
|
|
### File List
|
|
|
- **新增文件**:
|
|
|
- `packages/orders-module-mt/src/schemas/cancel-order.schema.ts`
|
|
|
@@ -149,12 +159,15 @@ Claude Sonnet 4.5 (d8d-model)
|
|
|
- `packages/orders-module-mt/src/routes/user/orders.mt.ts`
|
|
|
- `mini/src/pages/order-detail/index.tsx`
|
|
|
- `packages/orders-module-mt/tests/integration/user-orders-routes.integration.test.ts`
|
|
|
+ - `packages/orders-module-mt/tests/factories/orders-test-factory.ts` (修复TypeScript类型错误)
|
|
|
+ - `packages/orders-module-mt/src/routes/user/create-order.mt.ts` (添加响应格式验证)
|
|
|
|
|
|
### Change Log
|
|
|
| Date | Version | Description | Author |
|
|
|
|------|---------|-------------|---------|
|
|
|
| 2025-11-21 | 1.0 | 初始故事创建 | Bob (Scrum Master) |
|
|
|
| 2025-11-21 | 1.1 | 实现订单取消功能 | James (Developer) |
|
|
|
+| 2025-11-21 | 1.2 | 修复测试工厂TypeScript类型错误,完善集成测试 | James (Developer) |
|
|
|
|
|
|
## QA Results
|
|
|
*Results from QA Agent QA review of the completed story implementation*
|