專案

一般

配置概況

動作

Bug #1418

已結束

Bug #1343: [Branch] 華城充電樁 FINISHING 後未送 StatusNotification(Available),導致 connector 卡住無法充電 (FINISHING timeout fallback 修補)

[Backend Bug] EXPO Fortune 停止期間 PREPARING 誤觸 RemoteStart,LIFF 由 FINISHING 倒退 CHARGING

是由 陳國瑋 於 約 2 個月 前加入. 於 約 2 個月 前更新.

狀態:
Closed
優先權:
High
被分派者:
開始日期:
2026-08-10
完成日期:
預估工時:

概述

問題描述

2026-08-10 在 EXPO 案場實測 Fortune 私人樁 CBDAX50A-24L-XX-B351-001。車主按下「停止充電」後,LIFF 先顯示 FINISHING / 停止中,隨後短暫倒退為 CHARGING / 充電中,並出現「充電樁未接受啟動指令」。使用者並未再次按下開始充電。

此問題與父單 #1343 的 Fortune PREPARING -> SEND_REMOTE_START 根因相同,但本單聚焦於 RemoteStop 期間相反方向 operation 重疊,以及 LIFF 狀態倒退。

實機時序

時間 事件
14:20:27.824 車主送出 STOP_CHARGING
14:20:27.913 CP 回 RemoteStopTransaction.conf(Accepted)
14:20:30.080 CP 回 StatusNotification(PREPARING)
14:20:30.151 Branch 由 Fortune strategy 自動建立 START operation 並送出 RemoteStartTransaction
14:20:30.261 CP 回 RemoteStartTransaction.conf(Rejected),LIFF 顯示啟動失敗
14:20:32.755 CP 回 StatusNotification(FINISHING)
14:20:34.704 CP 回 StopTransaction(reason=Remote)
14:20:41.123 CP 回 StatusNotification(AVAILABLE)

DB/Log 結果

  • 原 transaction 正常 COMPLETED,未建立第二筆充電 transaction。
  • STOP operation 最終為 STOPPED。
  • 停止期間自動建立的 START operation 最終為 REJECTED / REMOTE_START_REJECTED。
  • LIFF 跳回充電中是 operation/driverState projection 錯誤,不代表實際重新供電。
  • Branch request log 只有原 START command 與本次 STOP command;14:20:30 的 RemoteStart 由 StatusNotification 流程內部觸發,不是第二次使用者請求。

根本原因

  1. FortuneConnectorTypeRotationStrategy.onPreparingWithoutRotation() 無條件回傳 SEND_REMOTE_START。
  2. RemoteChargingSupport.remoteStart() 只阻擋重複 active START,未阻擋 active STOP 期間建立 START。
  3. ConnectorDriverPresentationService 只取得最新一筆 active operation;新 START 會遮蔽仍 active 的 STOP,既有 transaction 尚未完成時 driverState 因而回到 CHARGING。

預期行為

  1. RemoteStop dispatch 後,收到同 transaction 的 StopTransaction 或 timeout/failure 前,LIFF 維持 FINISHING。
  2. Active STOP 存在期間,raw PREPARING 不得觸發 RemoteStart。
  3. 同一 connector 不得同時存在相反方向的 active START/STOP operation。
  4. 防禦性 projection 必須讓 STOP 優先,LIFF 不得從 FINISHING 倒退為 CHARGING。
  5. StopTransaction 後、Available 前不得再顯示充電中;應呈現安全的已停止/等待拔槍狀態。
  6. StatusNotification(AVAILABLE) 後回到 READY。
  7. 不得以全域禁止 raw PREPARING RemoteStart 修正,必須保留先插槍後由合法 command 啟動的流程。

影響範圍

  • Backend:ems_branch Fortune strategy、Remote operation conflict guard、driverState projection。
  • LIFF:原則上沿用 Backend driverState,不新增前端自行推導規則。
  • CloudLink:正常 START/STOP、CANCEL_START、ChangeAvailability 與輪充行為不得改變。
  • DB schema:預期無變更。

E2E Impact

  • Add:Fortune private CHARGING -> RemoteStop -> PREPARING -> FINISHING -> StopTransaction -> AVAILABLE production regression。
  • Priority:P0。
  • Trigger:Fortune/Other connector strategy、Remote operation lifecycle、driverState 或 LIFF charging flow 變更,以及 Fortune 案場發版。
  • Release pack:Charging/OCPP + Site/Vendor。
  • CloudLink baseline:更新或執行既有 CHG-001、CHG-005、CHG-034 及相關 cancel/rotation 案例,證明無回歸。

驗收標準

  • 不產生非使用者授權的第二筆 START operation/RemoteStartTransaction。
  • 不產生相反方向 active operation 重疊。
  • LIFF 狀態順序符合預期,且成功/失敗 modal 對應真正發起的 operation。
  • Fortune 實機 P0 regression 通過。
  • CloudLink public/private baseline regression 通過。
  • E2E catalog validator 通過。
動作

匯出至 Atom PDF