跳至主要内容

SBE Scenario 1: 開始配送

場景描述

配送員在配送員工作台中開始配送一筆待出貨的訂單,訂單狀態變更為「配送中」。


Given(前置條件)

系統狀態

  • 當前日期: 2025-12-02
  • 當前租戶: ABC (ABC 花店)
  • 已登入用戶: 李配送 (ROLE_DELIVERY)

測試資料

待出貨訂單

{
"orderId": "ABC-20251201-0001",
"orderNumber": "ABC-20251201-0001",
"tenantId": "ABC",
"status": "ready_for_delivery",
"customer": {
"name": "李大華",
"phone": "0912-345-678"
},
"deliveryAddress": {
"address": "台北市信義區信義路五段 7 號",
"city": "台北市",
"district": "信義區"
},
"deliveryDate": "2025-12-02",
"deliveryTimeSlot": "14:00-18:00",
"totalAmount": 2520,
"productionPhotos": [
"https://cdn.example.com/photos/ABC-20251201-0001/design-1.jpg"
],
"createdAt": "2025-12-01T09:00:00Z"
}

When(執行操作)

步驟 1: 進入配送員工作台

  • 配送員在 Application Launcher 中點擊「Delivery Workbench」
  • 系統導航至 /delivery
  • 訂單顯示在「待出貨」分組中

步驟 2: 點擊開始配送

  • 配送員在訂單卡片上點擊「開始配送」按鈕
  • 系統顯示確認對話框

步驟 3: 確認操作

  • 對話框顯示:「確定要開始配送嗎?」
  • 選項:[是] [否]
  • 配送員點擊「是」

Then(預期結果)

API 請求

端點: PATCH /api/v1/orders/ABC-20251201-0001/status

Request Body

{
"newStatus": "out_for_delivery"
}

Response Body (200 OK)

{
"orderId": "ABC-20251201-0001",
"oldStatus": "ready_for_delivery",
"newStatus": "out_for_delivery",
"updatedAt": "2025-12-02T13:00:00Z",
"updatedBy": {
"userId": "user-003",
"userName": "李配送",
"role": "ROLE_DELIVERY"
},
"message": "訂單狀態已更新為「配送中」"
}

UI 反饋

1. 成功訊息

  • Toast 通知: 「狀態更新成功」
  • 訊息類型: 成功(綠色)

2. 列表更新

  • 訂單從「待出貨」分組移動到「配送中」分組
  • 操作按鈕從「開始配送」變更為「確認簽收」

UI 顯示變化

變更前

┌─ 待出貨 (Ready for Delivery) ───────────────────┐
│ 訂單 #ABC-20251201-0001 │
│ 客戶: 李大華 │
│ 地址: 台北市信義區信義路五段 7 號 │
│ 時段: 14:00-18:00 [開始配送 🚚] │
└─────────────────────────────────────────────────┘
┌─ 配送中 (Out for Delivery) ────────────────────┐
│ (空) │
└─────────────────────────────────────────────────┘

變更後

┌─ 待出貨 (Ready for Delivery) ───────────────────┐
│ (空) │
└─────────────────────────────────────────────────┘
┌─ 配送中 (Out for Delivery) ────────────────────┐
│ 訂單 #ABC-20251201-0001 │
│ 客戶: 李大華 │
│ 地址: 台北市信義區信義路五段 7 號 │
│ 時段: 14:00-18:00 [確認簽收 ✓] │
└─────────────────────────────────────────────────┘

資料庫變更

1. 更新 orders 表

UPDATE orders
SET status = 'out_for_delivery',
updated_at = '2025-12-02T13:00:00Z'
WHERE order_id = 'ABC-20251201-0001';

2. 新增狀態歷史記錄

{
"id": "history-004",
"orderId": "ABC-20251201-0001",
"tenantId": "ABC",
"oldStatus": "ready_for_delivery",
"newStatus": "out_for_delivery",
"timestamp": "2025-12-02T13:00:00Z",
"operatorId": "user-003",
"operatorName": "李配送",
"operatorRole": "ROLE_DELIVERY",
"description": "開始配送"
}

通知觸發

SMS 通知(發送給客戶)

親愛的李大華先生/小姐,您的訂單 ABC-20251201-0001 正在配送中,
預計於 14:00-18:00 送達。如有問題請撥打 02-1234-5678。

驗證檢查清單

狀態流轉

  • 訂單狀態從 ready_for_delivery 變更為 out_for_delivery
  • 不需要上傳照片
  • 狀態歷史記錄正確生成

UI 更新

  • 訂單移動到「配送中」分組
  • 操作按鈕變更為「確認簽收」
  • 成功通知顯示

通知系統

  • 客戶收到配送中通知

最後更新: 2025-12-19