專案

一般

配置概況

動作

Feature #1398

進行中

Feature #1397: [功能開發] LIFF DriverState、離峰充電與 Remote Operation 狀態契約重構

[Backend] 實作 DriverState、離峰排程與 Remote Operation lifecycle

是由 陳國瑋5 天 前加入. 於 約 21 小時 前更新.

狀態:
In Progress
優先權:
Normal
被分派者:
開始日期:
2026-08-02
完成日期:
完成百分比:

0%

預估工時:
(總計: 0.00 小時)

概述

h2. 目標

依父項 #1397 及其英文/繁體中文規格附件,完成 Branch/HQ 後端的 DriverState、長期離峰充電排程與 RemoteStart/RemoteStop operation lifecycle。附件內容為本子任務的需求與驗收基準。

h2. 實作範圍

  • 由 Branch 作為 DriverState 與 actions 的唯一業務狀態來源;HQ 僅做契約一致的 passthrough/推播。
  • 正確區分 PUBLIC/PRIVATE Connector,以及 MANUAL/OFF_PEAK 操作來源。
  • 支援 OFF_PEAK_WAITING、QUEUED、PREPARING、CHARGING、FINISHING 等狀態與對應 semantic actions。
  • PREPARING 僅代表已有持久化且尚未終結的 RemoteStart;不得直接以 raw OCPP PREPARING 推導。
  • FINISHING 代表已有持久化且尚未終結的 RemoteStop。
  • 擴充既有 e_remote_transaction_log,保存 business operation lifecycle、source、request actor、deadline、transaction correlation、終結結果等必要資料。
  • e_connector_priority 保存來源與 requestedBy;Priority 真正建立前,已開啟離峰的私樁回 OFF_PEAK_WAITING,建立後回 QUEUED。
  • 保存離峰設定 enabledBy,以及本離峰時段 current-window suppression;StopTransaction 後以中性原因 TRANSACTION_ENDED_FOR_CURRENT_WINDOW 結束本輪,但不關閉長期離峰模式。
  • RemoteStart/RemoteStop 處理 Accepted、Rejected、timeout、有限 retry、late event reconciliation,並可在服務重啟後還原未完成 operation。
  • Command API 執行 authoritative authorization/business guard,針對不允許、衝突、重複 operation 回傳結構化 403/409 與 operationId;避免 API 與 MQ consumer 重複維護授權判斷。
  • 產出完整 OpenAPI DTO/enum/action contract,並透過 RabbitMQ/WebSocket 將最新 snapshot 推送至 HQ/LIFF。
  • 加入必要 schema migration、單元/整合測試、重啟恢復測試及 regression cases;依專案規範維護 E2E catalog。

h2. 驗收重點

  • 公樁不進入私樁離峰排程,保留公樁預留 slot 行為。
  • 私樁離峰開啟後,即使尚未建立 e_connector_priority,也立即可由 OFF_PEAK_WAITING 的 action 取消排隊;Priority 建立後轉 QUEUED。
  • CloudLink/Fortune 在「先插槍、尚未按開始」時,不會因 raw PREPARING 誤顯示為正在啟動。
  • RemoteStart/RemoteStop 失敗或逾時時,DriverState 能顯示可理解的暫態結果,再回復正確的 READY/OFF_PEAK_WAITING/QUEUED 狀態,而非讓使用者只看到可重複按下的開始按鈕。
  • 服務重啟、重複 request、late OCPP event 不會造成重複開始/停止或狀態倒退。
  • API、MQ event、WebSocket snapshot 與 OpenAPI contract 一致。

h2. 不含範圍

  • 不修改 LIFF/FE source code;前端串接由另一張子任務處理。
  • Charge Group 刪除 guard 另見 #1395
  • PUBLIC slot 設定 guard 與 runtime slots==0 防線另見 #1396

檔案

redmine-1398-backend-implementation-plan.md (23.7 KB) redmine-1398-backend-implementation-plan.md Backend implementation plan draft; awaiting Ken approval. 陳國瑋, 2026-07-31 04:15
redmine-1398-backend-implementation-plan-zh-TW.md (23.5 KB) redmine-1398-backend-implementation-plan-zh-TW.md 繁體中文 Backend implementation plan;等待 Ken 核准。 陳國瑋, 2026-07-31 04:19

子任務 1 (1 進行中0 已結束)

Bug #1403: [Backend Bug] Semantic command dispatch 成功後因 transaction snapshot 誤回 409Resolved陳國瑋2026-08-02動作
動作

匯出至 Atom PDF