跳至主要内容

Epic 2: 端到端訂單生命週期管理

業務目標 (Business Goal)

打造一個清晰、高效的訂單處理工作流程,涵蓋從接單到完成簽收的每一個環節,最大化地減少人工錯誤,並確保所有利害關係人都能即時掌握訂單狀態。

核心價值主張

  • 簡化接單流程 - 店員能在 2 分鐘內完成訂單創建
  • 透明化訂單狀態 - 客戶與員工隨時掌握訂單進度
  • 減少溝通成本 - 自動通知取代人工電話確認
  • 提升客戶滿意度 - 簽收照片增加信任感

成功指標 (Success Metrics)

指標目標值衡量方式
平均訂單處理時間< 24 小時從創建到完成的平均時長
訂單錯誤率< 2%需要修改或取消的訂單比例
客戶滿意度> 90%訂單完成後的客戶評分
狀態通知送達率> 95%成功發送通知的比例
簽收照片上傳率> 98%已簽收訂單中有照片的比例

功能範疇 (Scope)

1. 訂單狀態機 (Order State Machine)

訂單狀態流轉如下:

待確認 → 已確認 → 設計中 → 待出貨 → 配送中 → 已簽收 → 已完成
↓ ↓ ↓ ↓
已取消 已取消 已取消 配送失敗

狀態定義

狀態英文說明可執行操作
待確認pending_confirmation訂單剛創建,等待確認細節修改、確認、取消
已確認confirmed訂單已確認,等待分配設計師分配設計師、修改、取消
設計中in_production設計師正在製作商品上傳作品照片、標記完成、取消
待出貨ready_for_delivery商品完成,等待送貨員取貨分配送貨員、取消
配送中out_for_delivery送貨員正在配送途中上傳簽收照片、標記失敗、取消
已簽收delivered客戶已簽收,簽收照片已上傳標記為已完成
已完成completed訂單完全結束(已支付 + 已簽收)查看歷史記錄
已取消cancelled訂單被取消查看取消原因
配送失敗delivery_failed配送失敗(客戶不在或拒收)重新配送、取消

狀態流轉規則

從狀態到狀態觸發條件執行者
待確認已確認手動確認店員/管理者
已確認設計中分配給設計師系統/管理者
設計中待出貨上傳作品照片並標記完成設計師
待出貨配送中送貨員接單送貨員
配送中已簽收上傳簽收照片送貨員
已簽收已完成支付狀態為「已支付」系統自動
任何狀態已取消手動取消並註明原因管理者/店主
配送中配送失敗送貨員標記失敗並註明原因送貨員

2. 訂單創建 (Order Creation)

必填資訊

  • 客戶資訊: 選擇現有客戶或創建新客戶
  • 商品列表: 可選擇多個商品(每個商品可調整數量)
  • 配送地址: 完整地址與聯絡電話
  • 期望配送日期: 日期與時段(如 14:00-18:00)

可選資訊

  • 卡片訊息: 贈送時的祝福語
  • 特殊要求: 如「不要百合」、「多加玫瑰」
  • 收件人資訊: 如與訂購客戶不同(姓名、電話)
  • 訂單備註: 內部使用(不顯示給客戶)

價格計算

  • 系統根據選擇的商品自動計算小計
  • 店員可手動調整最終價格(需記錄調整原因)
  • 自動計算稅額(根據租戶設定的稅率,如 5%)

3. 訂單客製化 (Order Customization)

  • 在創建訂單時記錄客戶的特殊要求並調整最終價格
  • 支援「完全客製化」訂單(如會場佈置)
    • 無需選擇預設商品
    • 直接輸入需求描述
    • 店員與客戶協商價格

4. 訂單分配 (Order Assignment)

設計師分配

  • 手動分配: 管理者選擇特定設計師
  • 自動分配:
    • 輪流分配(Round Robin)
    • 負載平衡(分配給訂單最少的設計師)

送貨員分配

  • 手動分配: 管理者選擇特定送貨員
  • 自助接單: 送貨員從「待出貨」列表中自行接單
  • 批量分配: 將同一區域的訂單分配給同一送貨員

5. 訂單修改與取消 (Order Modification & Cancellation)

訂單修改規則

訂單狀態可修改項目限制
待確認、已確認所有欄位完整修改權限
設計中之後配送資訊、卡片訊息商品與價格不可改
已簽收之後不可修改-

訂單取消規則

  • 可取消時機: 「已簽收」之前
  • 取消原因 (必填):
    • 客戶要求
    • 無法聯繫客戶
    • 庫存不足
    • 其他(需填寫說明)
  • 退款處理: 若已支付,自動觸發退款流程(整合 Epic 4)

6. 訂單搜尋與過濾 (Order Search & Filtering)

搜尋條件

  • 訂單編號
  • 客戶姓名
  • 客戶電話
  • 配送地址

過濾條件

  • 狀態: 可多選(如僅顯示「待確認」與「已確認」)
  • 日期範圍:
    • 創建日期
    • 配送日期
  • 金額區間: 最低金額至最高金額
  • 分配對象: 特定設計師或送貨員

7. 訂單通知 (Order Notifications)

整合 Epic 0 通知系統,在關鍵狀態變更時自動發送通知:

觸發事件通知對象通知內容
訂單確認客戶「您的訂單 {編號} 已確認,預計 {日期} 送達」
設計完成客戶、送貨員「訂單 {編號} 已完成設計,即將配送」
配送中客戶「訂單 {編號} 配送中,預計 {時段} 送達」
已簽收客戶「訂單 {編號} 已簽收,查看簽收照片」
訂單取消客戶「訂單 {編號} 已取消,原因:{原因}」

8. 角色工作台 (Role-Based Workbenches)

訂單流程透過三個專用工作台實現角色分工,每個工作台針對特定角色的工作流程優化:

店員工作台 (Sales Workbench)

  • 角色: ROLE_SALES
  • 路徑: /sales
  • 處理狀態: PENDING_CONFIRMATION
  • 主要功能:
    • 查看所有待確認訂單
    • 確認訂單(狀態流轉至 CONFIRMED)
    • 快速新增訂單
    • 查看訂單詳情

設計師工作台 (Design Workbench)

  • 角色: ROLE_FLORIST
  • 路徑: /design
  • 處理狀態: CONFIRMED, IN_PRODUCTION
  • 主要功能:
    • 開始設計(CONFIRMED → IN_PRODUCTION)
    • 上傳作品照片
    • 完成設計(IN_PRODUCTION → READY_FOR_DELIVERY,需上傳照片)

配送員工作台 (Delivery Workbench)

  • 角色: ROLE_DELIVERY
  • 路徑: /delivery
  • 處理狀態: READY_FOR_DELIVERY, OUT_FOR_DELIVERY
  • 主要功能:
    • 開始配送(READY_FOR_DELIVERY → OUT_FOR_DELIVERY)
    • 上傳簽收照片
    • 確認簽收(OUT_FOR_DELIVERY → DELIVERED,需上傳照片)

工作台共用組件

三個工作台共用以下組件(位於 src/applets/shared/):

組件說明
TaskCard單張訂單任務卡片
TaskGroup按狀態分組的任務容器
OrderDetailDrawer訂單詳情側邊抽屜
TaskConfig任務狀態配置類型

User Stories 列表

核心流程 (P0 - 最高優先級)

角色工作台 (P0 - 最高優先級) 🆕

訂單管理 (P1 - 高優先級)

  • US-207: 修改訂單
  • US-208: 取消訂單
  • US-209: 查看訂單詳情

進階功能 (P2 - 中優先級)

  • US-210: 批量分配訂單
  • US-211: 訂單狀態通知
  • US-212: 配送失敗處理

技術依賴 (Technical Dependencies)

依賴對象依賴內容影響
Epic 1 (產品管理)獲取商品資訊(名稱、價格、庫存)創建訂單時選擇商品
Epic 3 (客戶管理)關聯訂購客戶創建訂單時選擇客戶
Epic 5 (數位資產管理)上傳作品照片與簽收照片設計完成與配送簽收環節
Epic 0 (通知系統)發送狀態變更通知自動通知客戶與員工
Epic 4 (支付管理)處理取消訂單的退款訂單取消時觸發退款
src/applets/shared/工作台共用組件TaskCard, TaskGroup, OrderDetailDrawer
src/config/applet-registry.tsApplet 註冊與權限配置導航與角色權限控制
ADR-005Application Launcher 導航架構工作台導航入口
ADR-006AppletShell 統一外殼架構訂單管理 Applet 佈局

多租戶考量 (Multi-Tenancy Considerations)

1. 數據隔離

  • 所有訂單資料必須與 tenantId 綁定
  • API 層級自動過濾(僅返回當前租戶的訂單)
  • 訂單編號系統採用租戶層級獨立編號

2. 訂單編號格式

{租戶代碼}-{YYYYMMDD}-{流水號}
範例: ABC-20251031-0001
  • 租戶代碼: 3-5 個字元(可在租戶設定中配置)
  • 日期: 訂單創建日期
  • 流水號: 當日的流水號(從 0001 開始)

3. 員工分配限制

  • 訂單僅能分配給同一租戶的員工
  • 設計師與送貨員的選擇列表自動過濾為當前租戶

4. 跨租戶訪問保護

  • 嘗試訪問其他租戶的訂單返回 404 Not Found(而非 403,避免資訊洩漏)

安全性考量 (Security Considerations)

1. 權限控制

操作所需權限說明
創建訂單ROLE_STAFF 以上店員、管理者
確認訂單ROLE_STAFF 以上店員、管理者
分配設計師ROLE_MANAGER 以上管理者、店主
上傳作品照片ROLE_FLORIST 以上設計師、管理者
分配送貨員ROLE_MANAGER 以上管理者、店主
上傳簽收照片ROLE_DELIVERY 以上送貨員、管理者
取消訂單ROLE_MANAGER 以上管理者、店主
查看訂單ROLE_STAFF 以上所有內部用戶

2. 敏感資料保護

  • 客戶電話與地址僅特定角色可見
  • 訂單備註(內部使用)不顯示給客戶

3. 審計日誌

所有關鍵操作都需記錄審計日誌:

  • 訂單創建、修改、取消
  • 狀態流轉
  • 價格調整
  • 分配變更

非功能性需求 (Non-Functional Requirements)

效能需求

  • 訂單列表載入時間 < 1 秒(20 筆/頁)
  • 訂單創建 API 響應時間 < 500ms
  • 支援單租戶 1000 筆訂單的搜尋與過濾

可用性需求

  • 訂單狀態變更時立即更新 UI(使用 WebSocket 或輪詢)
  • 照片上傳支援拖放與粘貼
  • 手機端友好的簽收照片上傳

擴展性需求

  • 支援單租戶每日 100 筆訂單創建
  • 訂單歷史數據歸檔策略(超過 1 年的訂單移至冷儲存)

參考資料 (References)


最後更新: 2025-12-20 撰寫者: Product Team