動作
Feature #1366
進行中[API] Connector WebSocket payload add statusLabel
開始日期:
2026-07-06
完成日期:
完成百分比:
0%
預估工時:
概述
背景¶
FE ticket #1365 需要 Branch Admin websocket connector status UI 可以取得 connectorData.statusLabel,用來顯示 status 的中文文字。請後端/API 補上此欄位,讓 websocket payload 同時提供機器可判斷的 status 與人可讀的 statusLabel。
需求¶
在 connector websocket response 的 connectorData 內新增欄位:
| 欄位 | 型別 | 說明 |
|---|---|---|
status |
string |
既有欄位,保留為狀態 code,例如 AVAILABLE、CHARGING、SUSPENDEDEVSE。FE 用此欄位判斷 UI 邏輯與 CTA。 |
statusLabel |
string |
新增欄位,表示 status 對應的中文顯示文字,例如 待命、充電中、充電站暫停。FE 用此欄位顯示中文 label。 |
預期 websocket message example:
{
"eventType": "UPDATED",
"buildingId": "building-id",
"connectorId": "connector-id",
"timestamp": "2026-07-06T18:30:00",
"connectorData": {
"id": "connector-id",
"buildingId": "building-id",
"areaType": "public",
"status": "CHARGING",
"statusLabel": "充電中",
"connectorType": "J1772",
"image": null,
"startTime": "2026-07-06T18:00:00",
"totalEnergy": 12.34,
"energyUsage": 3.21,
"remainTime": 45,
"currentVoltage": 220.0,
"currentCurrent": 16.0,
"currentPower": 3.52,
"costPredict": 25.0,
"currentTariff": 7.5,
"enableOffPeak": true,
"nextOffPeakTimeStart": "2026-07-06T22:00:00",
"nextOffPeakTimeEnd": "2026-07-07T06:00:00"
}
}
Status label mapping¶
status code |
statusLabel |
|---|---|
AVAILABLE |
待命 |
ENQUEUED |
排隊中 |
PREPARING |
準備中 |
CHARGING |
充電中 |
SUSPENDEDEVSE |
充電站暫停 |
SUSPENDEDEV |
車輛暫停 |
FINISHING |
結束中 |
RESERVED |
已預約 |
UNAVAILABLE |
不可用 |
FAULTED |
故障 |
注意:statusLabel 是 UI 顯示文字,不應取代 status。FE 的狀態判斷仍以 status code 為準。
實作範圍¶
請同時處理兩條 websocket 資料來源:
-
連線成功後的 initial connector data
- 目前由
ConnectorWebSocketHandler.sendInitialConnectorData()從 Branch API 取得 connector,再轉成ConnectorEventData。 - 這條路徑也必須填入
statusLabel。
- 目前由
-
RabbitMQ connector event 轉推 websocket
- 目前
ems_branch的ConnectorEventPublisher.convertToEventData()建立 connector event data。 -
ems_hq的ConnectorEventSubscriber直接把 event 的connectorData包進ConnectorUpdateMessage。 - 因此 MQ event data 也必須包含並正確序列化/反序列化
statusLabel。
- 目前
建議修改位置¶
java/ems_branch/src/main/java/com/sylksoft/ems/branch/mq/model/ConnectorEventData.javajava/ems_branch/src/main/java/com/sylksoft/ems/branch/mq/publisher/ConnectorEventPublisher.javajava/ems_hq/src/main/java/com/sylksoft/ems/hq/mq/model/ConnectorEventData.javajava/ems_hq/src/main/java/com/sylksoft/ems/hq/websocket/ConnectorWebSocketHandler.java- 如 Branch HTTP connector DTO/OpenAPI 也會作為 initial websocket 來源,請同步確認是否需要在
ConnectorFromBranchDto或 branch connector response 補statusLabel,避免 initial data 與 event update 欄位不一致。
Acceptance Criteria¶
- websocket payload 的
connectorData包含statusLabel。 - initial websocket message 與後續 RabbitMQ UPDATED event 轉推 message 都包含
statusLabel。 -
status保持原本 code,不因新增statusLabel而改變。 -
statusLabel對應表符合本票的 Status label mapping。 -
SUSPENDEDEVSE顯示為充電站暫停,SUSPENDEDEV顯示為車輛暫停。 -
FINISHING顯示為結束中,不是完成。 - 若 status 為 null 或未知值,
statusLabel可以為 null 或未知狀態;但不可把 status 或 label 改成AVAILABLE/待命。 - 相關 DTO / OpenAPI schema 若有產生文件,需同步更新。
- 補上單元測試或序列化測試,至少覆蓋
AVAILABLE、CHARGING、SUSPENDEDEVSE、SUSPENDEDEV、FINISHING、unknown/null。
Related¶
- FE UI mapping ticket: #1365
動作