Procházet zdrojové kódy

📝 docs(stories): 新增订单支付成功打印功能故事文档

- 新增故事005.003文档,描述订单支付成功后自动打印小票功能
- 详细定义用户故事、验收标准和开发任务
- 包含防退款延迟打印、失败重试、状态同步等核心功能需求
- 提供相关架构信息、数据库结构、模块集成点和测试标准
yourname před 1 dnem
rodič
revize
90d801f080
1 změnil soubory, kde provedl 191 přidání a 0 odebrání
  1. 191 0
      docs/stories/005.003.story.md

+ 191 - 0
docs/stories/005.003.story.md

@@ -0,0 +1,191 @@
+# Story 005.003: 集成订单支付成功打印功能
+
+## Status
+Draft
+
+## Story
+**As a** 商家用户
+**I want** 订单支付成功后自动打印小票
+**so that** 及时处理订单
+
+## Acceptance Criteria
+1. [ ] 订单支付成功后等待2分钟确认无退款再自动打印小票
+2. [ ] 实现基础打印失败重试机制(最多重试3次)
+3. [ ] 打印状态同步到订单备注
+4. [ ] 支持配置防退款延迟时间(默认120秒)
+5. [ ] 如果2分钟内发生退款,则自动取消打印任务
+
+## Tasks / Subtasks
+- [ ] 任务1:实现订单支付成功事件监听和延迟打印触发 (AC: 1,4,5)
+  - [ ] 在订单模块中监听支付成功事件
+  - [ ] 调用飞鹅打印模块API触发延迟打印任务
+  - [ ] 实现防退款延迟时间配置读取(默认120秒)
+  - [ ] 设置打印任务为DELAYED状态,记录scheduled_at时间
+- [ ] 任务2:实现防退款延迟打印调度器集成 (AC: 1,5)
+  - [ ] 集成飞鹅打印模块的延迟打印调度器
+  - [ ] 实现延迟时间到达后的打印执行逻辑
+  - [ ] 实现延迟期间退款事件监听和任务取消
+  - [ ] 实现订单状态验证(延迟时间到达后再次检查订单是否退款)
+- [ ] 任务3:实现打印失败重试机制 (AC: 2)
+  - [ ] 集成飞鹅打印模块的重试机制
+  - [ ] 实现最大重试次数配置(默认3次)
+  - [ ] 实现重试间隔配置
+  - [ ] 实现重试失败后的错误处理
+- [ ] 任务4:实现打印状态同步到订单备注 (AC: 3)
+  - [ ] 在打印任务状态更新时同步到订单备注
+  - [ ] 实现订单备注更新API调用
+  - [ ] 记录打印时间、打印机信息、任务状态等
+  - [ ] 支持打印失败时的错误信息记录
+- [ ] 任务5:实现退款事件监听和打印任务取消 (AC: 5)
+  - [ ] 监听订单退款事件
+  - [ ] 查询关联的打印任务(状态为PENDING、DELAYED、PRINTING)
+  - [ ] 调用飞鹅打印模块API取消打印任务
+  - [ ] 更新打印任务状态为CANCELLED,记录取消原因为REFUND
+- [ ] 任务6:编写集成测试和E2E测试 (AC: 1,2,3,4,5)
+  - [ ] 编写订单支付成功触发延迟打印的集成测试
+  - [ ] 编写防退款延迟打印取消的集成测试
+  - [ ] 编写打印失败重试机制的集成测试
+  - [ ] 编写打印状态同步的集成测试
+  - [ ] 编写E2E测试验证完整流程
+
+## Dev Notes
+
+### 相关架构信息
+根据史诗005的技术设计部分:
+
+1. **防退款延迟打印流程(支付成功后)**:
+   - 订单支付成功 → 触发打印事件 → 打印模块接收事件
+   - 打印模块查询租户打印配置 → 获取防退款延迟时间(默认120秒/2分钟)
+   - 生成打印内容(小票模板) → 创建延迟打印任务
+   - 记录打印任务到数据库,状态为`DELAYED`,设置`scheduled_at`为当前时间+延迟时间
+   - 启动延迟任务调度器,等待延迟时间到达
+   - **延迟期间监控退款事件**:
+     - 如果2分钟内发生退款 → 取消打印任务(状态改为`CANCELLED`,原因`REFUND`)
+     - 如果2分钟内无退款 → 继续执行打印
+   - 延迟时间到达后,检查订单状态:
+     - 如果订单已退款 → 取消打印任务
+     - 如果订单正常 → 调用飞鹅API提交打印任务
+   - 提交打印任务 → 状态改为`PRINTING` → 记录飞鹅任务ID
+   - 定时轮询打印状态 → 更新任务状态
+   - 打印成功 → 状态改为`SUCCESS` → 更新订单备注
+   - 打印失败 → 根据重试策略重试
+
+2. **数据库表结构**:
+   - `feie_print_task_mt`表已包含防退款延迟相关字段:
+     - `print_status`: 打印状态(PENDING, DELAYED, PRINTING, SUCCESS, FAILED, CANCELLED)
+     - `scheduled_at`: 计划打印时间(用于延迟打印)
+     - `cancelled_at`: 取消时间
+     - `cancel_reason`: 取消原因(REFUND, MANUAL, TIMEOUT)
+     - `retry_count`: 重试次数
+     - `max_retries`: 最大重试次数
+
+3. **配置管理**:
+   - 租户级配置项在`feie_config_mt`表中:
+     - `feie.anti_refund_delay`: 防退款延迟时间(秒,默认120秒/2分钟)
+     - `feie.retry_max_count`: 最大重试次数
+     - `feie.retry_interval`: 重试间隔(秒)
+     - `feie.auto_print_on_payment`: 支付成功时自动打印开关
+
+4. **模块结构**:
+   - 飞鹅打印模块:`@d8d/feie-printer-module-mt`
+   - 打印管理UI模块:`@d8d/feie-printer-management-ui-mt`
+   - 订单模块:需要集成打印功能
+
+5. **API设计**:
+   - 飞鹅打印模块API已实现:
+     - `POST /api/feie/print` - 提交打印任务(支持延迟打印)
+     - `POST /api/feie/tasks/{taskId}/cancel` - 取消打印任务
+     - `GET /api/feie/config` - 查询打印配置
+
+### 源树信息
+根据史诗005的模块结构部分:
+
+```
+packages/
+├── @d8d/feie-printer-module-mt/     # 飞鹅打印模块(故事005.001已创建)
+│   ├── src/
+│   │   ├── services/
+│   │   │   ├── feie-api.service.ts    # 飞鹅API客户端(小票打印)
+│   │   │   ├── printer.service.ts     # 打印机管理服务
+│   │   │   ├── print-task.service.ts  # 打印任务服务
+│   │   │   ├── delay-scheduler.service.ts  # 延迟打印调度器
+│   │   │   └── index.ts
+│   │   └── index.ts                   # 主入口文件
+└── @d8d/feie-printer-management-ui-mt/   # 打印管理UI模块(故事005.002已创建)
+```
+
+### 集成点
+根据史诗005的集成点部分:
+
+1. **订单模块集成**:
+   - 订单支付成功时触发打印事件(延迟2分钟执行)
+   - 订单退款时触发打印取消事件
+   - 打印状态同步到订单备注
+
+2. **事件系统集成**:
+   - 监听订单支付成功事件(触发延迟打印)
+   - 监听订单退款事件(触发打印取消)
+
+### 测试标准
+根据史诗005的测试策略部分:
+
+1. **集成测试**:
+   - 订单打印触发测试
+   - 防退款延迟打印测试
+   - 打印取消功能测试
+   - 打印状态同步测试
+
+2. **E2E测试**:
+   - 自动打印触发测试(支付成功延迟打印)
+   - 防退款取消打印测试
+   - 打印记录查询测试
+
+### 编码标准
+- 严格遵循项目多租户包架构模式,使用`-mt`后缀和租户ID隔离
+- 异步处理打印任务,不阻塞核心业务流程
+- 完善的错误处理和重试机制
+- 配置驱动,支持不同租户的不同需求
+- 实时同步打印状态到订单系统
+
+## Testing
+### 测试文件位置
+- 集成测试:在相关模块的`tests/`目录下
+- E2E测试:在项目根目录的`tests/e2e/`目录下
+
+### 测试框架和模式
+- 集成测试:使用Vitest
+- E2E测试:使用Playwright
+- 测试模式:遵循项目现有的测试模式
+
+### 特定测试要求
+1. **防退款延迟打印测试**:
+   - 验证支付成功后延迟2分钟打印
+   - 验证延迟期间退款自动取消打印
+   - 验证延迟时间到达后订单状态验证
+
+2. **重试机制测试**:
+   - 验证打印失败后自动重试(最多3次)
+   - 验证重试间隔配置生效
+   - 验证重试失败后的错误处理
+
+3. **状态同步测试**:
+   - 验证打印状态同步到订单备注
+   - 验证打印失败错误信息记录
+   - 验证打印时间记录
+
+## Change Log
+| Date | Version | Description | Author |
+|------|---------|-------------|--------|
+| 2025-12-06 | 1.0 | 初始创建故事文档 | Scrum Master |
+
+## Dev Agent Record
+
+### Agent Model Used
+
+### Debug Log References
+
+### Completion Notes List
+
+### File List
+
+## QA Results