專案

一般

配置概況

動作

Bug #1403

進行中

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

Feature #1398: [Backend] 實作 DriverState、離峰排程與 Remote Operation lifecycle

[Backend Bug] Semantic command dispatch 成功後因 transaction snapshot 誤回 409

是由 陳國瑋約 22 小時 前加入. 於 約 17 小時 前更新.

狀態:
Resolved
優先權:
Normal
被分派者:
開始日期:
2026-08-02
完成日期:
預估工時:

概述

問題

Ken 環境對 CP001-001 執行 START_CHARGING 時,Branch 已建立 operation、送出 RemoteStartTransaction,但 HQ 實際回給 LIFF 409,導致 FE 正確顯示「操作未成功」。FE 對 HTTP 200/202 與 WebSocket operationResult 的處理已符合 contract,不需修改。

已確認證據

  • 2026-08-02 15:54:48,HQ access log 顯示 POST /api/connector/commands409
  • Branch DB operation 539 已建立,CP 後續回 Accepted
  • Ken DB transaction isolation 為 REPEATABLE-READ
  • ConnectorCommandService 先以 hasActive() 建立 transaction snapshot;RemoteOperationPersistenceService 再以 REQUIRES_NEW commit operation;outer transaction 隨後重新查 getActiveOperation() 時看不到新 row,誤丟 START_OPERATION_MISSING
  • STOP command 存在相同重新查詢模式,也需一併修正。

修正方向

保留 dispatch 前 REQUIRES_NEW 持久化。由 charging orchestration 直接回傳本次建立的 operation reference,ConnectorCommandService 使用該 reference 建立 202 Accepted response,不再重新查詢 connector 最新 active operation。

驗收

  • START/STOP dispatch 成功後皆回 202,包含正確 operationIdoperationStatusactiveOperation
  • 不受 MySQL REPEATABLE-READ snapshot 影響。
  • 真正 dispatch/設備拒絕仍依既有錯誤 contract 回應。
  • FE 無須修改。
動作

匯出至 Atom PDF