# OMega APP v2 API 規格文件 ## 此為 API 規格文件,詳細 UI/UX 邏輯以 Figma 為主 \*\* [Figma 參考資料](https://www.figma.com/file/j1iSWSmqGYwANJRbDsHvSe/OMega-App-Wireframe?type=design&node-id=419-7808&mode=design&t=b5dD1DvoV48quTFI-0) \*\* ## Agenda - A0 (登入及註冊) - A1 (首頁) - B (任務) - C1 (儲位) - C2 (流量) - D (設備) - E (帳戶) - F (通知) ## API 規格 (登入其餘都沒變) ### A0 (登入及註冊) 1. /wolverine/api/v1/MGE001/userViewPermissions/{ownerCode} > 修改參數 Response 增加一個參數 `isShowEquipmentInfo`,用於判斷是否需要顯示設備的資訊 (就跟 isShowEta 用來判斷是否顯示流量額度的 tab 一樣)。 ![image](/uploads/f13e13296c7d2adb15f69c8f8d95aa10/image.png) 測試案例: - Demo Corp.: `false` - 永聯: `true` #### Response Example: ```json { "result": [ { "isShowViewCompanySwitch": false, "isShowBilling": true, "isShowEta": true, "isShowQuota": true, "isShowEquipmentInfo": true, "companySwitchOptionList": [] } ], "status": "ok" } ``` --- ### A1 (首頁) 1. /wolverine/api/v2/DSB002/info POST > 新增的 API - 取得首頁資訊 - 首頁資訊包含: - 即時任務 - 即時儲格 - 設備異常列表 - 如果 `/userViewPermissions` 回覆的 `isShowEquipmentInfo` 為 `false`,就不需要顯示這個資訊。 - 因為包含「即時任務」,所以跟舊版一樣**會需要前端帶查詢時間的參數**。 ![image](/uploads/61c3ae134623f8c3d644c84948786e21/image.png) #### 測試案例 目前回傳值都是亂數產生,有需要測試特定情境可以再跟我說。 #### Request Example 如果是依照公司維度檢視: ```json { "whId": "DE-MO-1", "comId": "54642712", "startTimestamp": "2023-10-05 00:00", "endTimestamp": "2023-10-05 20:00" } ``` 如果是依照分區維度檢視: ```json { "whId": "DE-MO-1", "spaceId": "72b6beb8-16e6-4084-9a44-75b48631bc9c", "startTimestamp": "2023-10-05 00:00", "endTimestamp": "2023-10-05 20:00" } ``` #### Response 說明 - 基本上是舊版的即時任務 + 即時儲格 + 預估完成 + 設備異常,各個 API 的參數合在一起。 - 即時任務的參數名稱沒什麼修改,多了 ETA 在使用者只有選出庫的時候要出現。 - 即時儲格有兩個 list,分別是「依照巷道(groupBySpace)」與「依照屬性(groupByAttribute)」 #### Response Example ```json { "result": [ { "task": { "totalWait": 190, "totalFail": 156, "totalSuccess": 232, "totalCommand": 578, "totalRatio": 40, "lastUpdateTime": "2023-10-05 15:10", "taskDetailList": [ { "orderSeq": 2, "category": "outbound", "title": "出庫", "ratio": 34, "fail": 87, "wait": 98, "success": 99, "command": 284 }, { "orderSeq": 3, "category": "inbound", "title": "入庫", "ratio": 45, "fail": 64, "wait": 86, "success": 125, "command": 275 }, { "orderSeq": 4, "category": "stationMove", "title": "站間移動", "ratio": 60, "fail": 1, "wait": 1, "success": 3, "command": 5 }, { "orderSeq": 5, "category": "storageMove", "title": "儲位移動", "ratio": 35, "fail": 4, "wait": 5, "success": 5, "command": 14 } ], "eta": "2023-10-05 15:37" }, "storage": { "totalStorage": 143944, "totalRatio": 36, "totalStorageUsed": 52481, "totalCount": 2, "groupBySpace": [ { "orderSeq": 21, "storage": 4656, "title": "21 號巷道", "storageUsed": 3957, "ratio": 85 } ], "groupByAttribute": [ { "orderSeq": 1, "storage": 3764, "title": "屬性 1", "storageUsed": 3425, "ratio": 91 } ] }, "equipment": { "equipmentList": [ { "category": "IO-PORT", "alertCount": 2 }, { "category": "AGV", "alertCount": 2 }, { "category": "CONVEYOR", "alertCount": 2 } ] } } ], "status": "ok" } ``` --- ### B (任務) 1. 待完成任務:/wolverine/api/v2/DSB002/task/todo POST > 新增的 API - 取得待完成任務的數量 - 跟舊的 API 沒什麼差 (`/missionGrand/{whId}/{ownerCode}`) ![image](/uploads/27ac3e40d589fb75d0ca2d77211834e9/image.png) #### 測試案例 目前回傳值都是亂數產生,有需要測試特定情境可以再跟我說。 #### Request Example 如果是依照公司維度檢視: ```json { "whId": "DE-MO-1", "comId": "54642712" } ``` 如果是依照分區維度檢視: ```json { "whId": "DE-MO-1", "spaceId": "72b6beb8-16e6-4084-9a44-75b48631bc9c" } ``` #### Response 說明 - 沒什麼差異 #### Response Example ```json { "result": [ { "inbound": 25, "outbound": 103, "storageMove": 62, "stationMove": 182, "all": 372, "lastUpdateTime": "2023-10-05 15:12" } ], "status": "ok" } ``` 2. 歷史任務:/wolverine/api/v2/DSB002/task/done POST > 新增的 API - 取得歷史任務的數量 - 跟舊的 API 沒什麼差 (`/missionHis/{whId}/{ownerCode}/{timeType}/{queryStart}/{queryEnd}`) ![image](/uploads/e4ec58dd8f922b87e054d155e3309988/image.png) #### 測試案例 目前回傳值都是亂數產生,有需要測試特定情境可以再跟我說。 #### Request 說明 - 舊版的 API 是將時間類型的參數帶在路徑裡面,新的 API 是帶在 body 裡面的 `timeType`。 - 時間的參數跟舊的 API 一樣需要帶入。 #### Request Example 跟上面一樣依照公司檢視或是依照分區檢視分別帶入 `comId` or `spaceId`。 a. 依「周」檢視: ```json { "comId": "54642712", "whId": "DE-MO-1", "startTimestamp": "2023-10-02 10:00", "endTimestamp": "2023-10-08 20:00", "timeType": "w" } ``` b. 依「月」檢視 ```json { "comId": "54642712", "whId": "DE-MO-1", "startTimestamp": "2023-10-01 10:00", "endTimestamp": "2023-10-31 20:00", "timeType": "m" } ``` c. 依「年」檢視 ```json { "comId": "54642712", "whId": "DE-MO-1", "startTimestamp": "2023-01-01 10:00", "endTimestamp": "2023-12-31 20:00", "timeType": "y" } ``` #### Response 說明 - 跟舊的差不多 #### Response Example a. 依「周」檢視: ```json { "result": [ { "totalExecuted": 43544, "totalCommand": 43544, "taskDetailList": [ { "orderSeq": 1, "date": "10/02", "dateText": "一", "fail": { "inbound": 533, "outbound": 924, "storageMove": 2, "stationMove": 74 }, "failDiff": { "inbound": 431, "outbound": 464, "storageMove": 17, "stationMove": 16 }, "wait": { "inbound": 647, "outbound": 518, "storageMove": 0, "stationMove": 44 }, "waitDiff": { "inbound": -356, "outbound": -232, "storageMove": -6, "stationMove": -49 }, "success": { "inbound": 908, "outbound": 735, "storageMove": 7, "stationMove": 16 }, "successDiff": { "inbound": 417, "outbound": -333, "storageMove": 0, "stationMove": -38 }, "command": { "inbound": 772, "outbound": 527, "storageMove": 9, "stationMove": 99 }, "commandDiff": { "inbound": 124, "outbound": -498, "storageMove": -2, "stationMove": 10 } }, { "orderSeq": 2, "date": "10/03", "dateText": "二", "fail": { "inbound": 565, "outbound": 717, "storageMove": 2, "stationMove": 7 }, "failDiff": { "inbound": -459, "outbound": 13, "storageMove": 14, "stationMove": 89 }, "wait": { "inbound": 776, "outbound": 719, "storageMove": 3, "stationMove": 4 }, "waitDiff": { "inbound": -90, "outbound": -454, "storageMove": -8, "stationMove": -45 }, "success": { "inbound": 927, "outbound": 694, "storageMove": 3, "stationMove": 22 }, "successDiff": { "inbound": 336, "outbound": 16, "storageMove": -4, "stationMove": 26 }, "command": { "inbound": 809, "outbound": 649, "storageMove": 1, "stationMove": 57 }, "commandDiff": { "inbound": -270, "outbound": 75, "storageMove": 17, "stationMove": 15 } }, ~略~ ] } ], "status": "ok" } ``` b. 依「月」檢視 ```json { "result": [ { "totalExecuted": 67564, "totalCommand": 67564, "taskDetailList": [ { "orderSeq": 1, "dateText": "10/01-10/08", "fail": { "inbound": 749, "outbound": 920, "storageMove": 8, "stationMove": 43 }, "failDiff": { "inbound": 263, "outbound": -239, "storageMove": 13, "stationMove": 85 }, "wait": { "inbound": 637, "outbound": 525, "storageMove": 10, "stationMove": 23 }, "waitDiff": { "inbound": 493, "outbound": -118, "storageMove": 11, "stationMove": 69 }, "success": { "inbound": 947, "outbound": 974, "storageMove": 4, "stationMove": 51 }, "successDiff": { "inbound": 391, "outbound": 204, "storageMove": 10, "stationMove": 70 }, "command": { "inbound": 538, "outbound": 690, "storageMove": 7, "stationMove": 1 }, "commandDiff": { "inbound": 410, "outbound": 215, "storageMove": 5, "stationMove": -20 } }, { "orderSeq": 2, "dateText": "10/09-10/16", "fail": { "inbound": 531, "outbound": 947, "storageMove": 3, "stationMove": 85 }, "failDiff": { "inbound": -360, "outbound": -330, "storageMove": 14, "stationMove": 84 }, "wait": { "inbound": 658, "outbound": 819, "storageMove": 8, "stationMove": 78 }, "waitDiff": { "inbound": 124, "outbound": -64, "storageMove": 2, "stationMove": -47 }, "success": { "inbound": 823, "outbound": 929, "storageMove": 1, "stationMove": 46 }, "successDiff": { "inbound": -281, "outbound": -302, "storageMove": 15, "stationMove": -42 }, "command": { "inbound": 927, "outbound": 704, "storageMove": 7, "stationMove": 91 }, "commandDiff": { "inbound": 210, "outbound": 70, "storageMove": 19, "stationMove": -37 } }, ~略~ ] } ], "status": "ok" } ``` c. 依「年」檢視 ```json { "result": [ { "totalExecuted": 40517, "totalCommand": 40517, "taskDetailList": [ { "orderSeq": 1, "dateText": "1", "fail": { "inbound": 614, "outbound": 974, "storageMove": 3, "stationMove": 68 }, "failDiff": { "inbound": 83, "outbound": -218, "storageMove": 17, "stationMove": 17 }, "wait": { "inbound": 570, "outbound": 563, "storageMove": 7, "stationMove": 36 }, "waitDiff": { "inbound": -376, "outbound": -150, "storageMove": 16, "stationMove": -45 }, "success": { "inbound": 691, "outbound": 603, "storageMove": 6, "stationMove": 51 }, "successDiff": { "inbound": 450, "outbound": 63, "storageMove": -2, "stationMove": 60 }, "command": { "inbound": 530, "outbound": 840, "storageMove": 7, "stationMove": 34 }, "commandDiff": { "inbound": -76, "outbound": 394, "storageMove": 13, "stationMove": 13 } }, { "orderSeq": 2, "dateText": "2", "fail": { "inbound": 726, "outbound": 787, "storageMove": 1, "stationMove": 31 }, "failDiff": { "inbound": 387, "outbound": -196, "storageMove": 19, "stationMove": -3 }, "wait": { "inbound": 648, "outbound": 635, "storageMove": 8, "stationMove": 12 }, "waitDiff": { "inbound": 264, "outbound": 300, "storageMove": -1, "stationMove": -44 }, "success": { "inbound": 557, "outbound": 529, "storageMove": 8, "stationMove": 82 }, "successDiff": { "inbound": -147, "outbound": -208, "storageMove": 9, "stationMove": 8 }, "command": { "inbound": 569, "outbound": 978, "storageMove": 4, "stationMove": 55 }, "commandDiff": { "inbound": 353, "outbound": -448, "storageMove": 7, "stationMove": -42 } }, ~略~ ] } ], "status": "ok" } ``` ### C1 (儲位) (2023/10/30 update) 1. 即時儲位:/wolverine/api/v2/DSB002/storage POST > 新增的 API - 取得即時儲格資訊 - 跟舊的 API 沒什麼差 (`/storage/{whId}/{ownerCode}`) ![image](/uploads/c42f85fb02507dd547e7b4777ae46c98/image.png) ![image](/uploads/e218b20fd9efac7774e6e806594b9468/image.png) #### 測試案例 目前回傳值都是亂數產生,有需要測試特定情境可以再跟我說。 #### Request Example 如果是依照公司維度檢視: ```json { "whId": "DE-MO-1", "comId": "54642712" } ``` 如果是依照分區維度檢視: ```json { "whId": "DE-MO-1", "spaceId": "72b6beb8-16e6-4084-9a44-75b48631bc9c" } ``` #### Response 說明 - 分為兩個 list,分別是: - `groupBySpace`: 依照分區 - `groupByAttribute`: 依照屬性 - `showChart` 為 `true` 才顯示上方長條圖表。 #### Response Example ```json { "result": [ { "showChart": true, "totalStorage": 64734, "totalRatio": 20, "totalStorageUsed": 12967, "groupBySpace": [ { "orderSeq": 1, "storage": 7455, "title": "包道 1 號巷道", "aisle": "1", "storageUsed": 1029, "doubleFlag": "L", "ratio": 13 }, { "orderSeq": 1, "storage": 8865, "title": "包道 1 號巷道", "aisle": "1", "storageUsed": 1709, "doubleFlag": "R", "ratio": 19 }, { "orderSeq": 2, "storage": 5160, "title": "包道 2 號巷道", "aisle": "2", "storageUsed": 1508, "ratio": 29 }, { "orderSeq": 3, "storage": 5559, "title": "包道 3 號巷道", "aisle": "3", "storageUsed": 523, "ratio": 9 }, { "orderSeq": 4, "storage": 2661, "title": "共享區", "aisle": "4~8", "storageUsed": 1010, "ratio": 37 } ], "groupByAttribute": [ { "orderSeq": 1, "storage": 5719, "title": "屬性 1", "storageUsed": 1502, "ratio": 26 }, { "orderSeq": 2, "storage": 6087, "title": "屬性 2", "storageUsed": 1549, "ratio": 25 }, { "orderSeq": 3, "storage": 9571, "title": "屬性 3", "storageUsed": 1710, "ratio": 17 }, { "orderSeq": 4, "storage": 18116, "title": "屬性 4", "storageUsed": 78, "ratio": 0 } ] } ], "status": "ok" } ``` 2. 貨品類型:/wolverine/api/v2/DSB002/storage/category POST > 新增的 API - 取得貨品類型的數量 - 跟舊的 API 差不多 (`/category/{whId}/{ownerCode}`) ![image](/uploads/fe5cd95f277929f8e713f1f2c2f64f8c/image.png) #### 測試案例 目前回傳值都是亂數產生,有需要測試特定情境可以再跟我說。 #### Request Example 如果是依照公司維度檢視: ```json { "whId": "DE-MO-1", "comId": "54642712" } ``` 如果是依照分區維度檢視: ```json { "whId": "DE-MO-1", "spaceId": "72b6beb8-16e6-4084-9a44-75b48631bc9c" } ``` #### Response Example ```json { "result": [ { "detailList": [ { "orderSeq": 1, "quantity": 8032, "id": "1", "category": "貨品類型 1", "ratio": 17 }, { "orderSeq": 2, "quantity": 8586, "id": "2", "category": "貨品類型 2", "ratio": 18 }, { "orderSeq": 3, "quantity": 1667, "id": "3", "category": "貨品類型 3", "ratio": 4 }, { "orderSeq": 4, "quantity": 28909, "id": "4", "category": "貨品類型 4", "ratio": 61 } ], "totalQuantity": 47194 } ], "status": "ok" } ``` ### C2 流量 1. 流量額度:/wolverine/api/v2/DSB002/task/quota POST > 新增的 API - 取得流量額度資訊 - 跟舊的 API 沒什麼差 (`/quota/{whId}/{ownerCode}/{queryStart}/{queryEnd}`) ![image](/uploads/b687e87226c4e915abd109076bd92723/image.png) #### 測試案例 目前回傳值都是亂數產生,有需要測試特定情境可以再跟我說。 #### Request Example 如果是依照公司維度檢視: ```json { "whId": "DE-MO-1", "comId": "54642712", "startTimestamp": "2023-10-05 00:00", "endTimestamp": "2023-10-05 20:00" } ``` 如果是依照分區維度檢視: ```json { "whId": "DE-MO-1", "spaceId": "72b6beb8-16e6-4084-9a44-75b48631bc9c", "startTimestamp": "2023-10-05 00:00", "endTimestamp": "2023-10-05 20:00" } ``` #### Response Example ```json { "result": [ { "standardPallet": { "leftOver": 113082, "ratio": 1, "palletSize": "standardPallet", "overQuota": 0, "quota": 1758, "lastQuota": 113082, "expiredQuota": 280, "totalCommand": 1758, "expectedToUse": 1758, "data": [ { "inbound": 5, "outbound": 2, "storageMove": 16, "stationMove": 18, "dateTime": "2023-10-05 00:00", "ratio": 56, "showText": "00-01", "handlingEfficiencyPerHour": 3480 }, { "inbound": 5, "outbound": 9, "storageMove": 8, "stationMove": 25, "dateTime": "2023-10-05 01:00", "ratio": 64, "showText": "01-02", "handlingEfficiencyPerHour": 3480 }, ~略~ ] }, "largePallet": { "leftOver": 75228, "ratio": 34, "palletSize": "largePallet", "overQuota": 0, "quota": 39612, "lastQuota": 75228, "expiredQuota": 280, "totalCommand": 39612, "expectedToUse": 39612, "data": [ { "inbound": 130, "outbound": 319, "storageMove": 75, "stationMove": 176, "dateTime": "2023-10-05 00:00", "ratio": 42, "showText": "00-01", "handlingEfficiencyPerHour": 3480 }, { "inbound": 37, "outbound": 376, "storageMove": 1, "stationMove": 133, "dateTime": "2023-10-05 01:00", "ratio": 33, "showText": "01-02", "handlingEfficiencyPerHour": 3480 }, ~略~ ] } } ], "status": "ok" } ``` ### D 設備 (2023/10/30 update) 1. 設備列表:/wolverine/api/v2/DSB002/equipments POST > 新增的 API - 取得設備狀態資訊 ![設備狀態](https://hackmd.io/_uploads/Bknh-AhfT.png) #### 測試案例 目前回傳值都是亂數產生,有需要測試特定情境可以再跟我說。 #### Request Example 如果是依照公司維度檢視: ```json { "whId": "DE-MO-1", "comId": "54642712" } ``` 如果是依照分區維度檢視: **設備列表沒有依照分區檢視的維度** #### Response 說明 - 設備列表按照後端回覆的 API 順序顯示 #### Response Example ```json { "result": [ { "category": "crane", "status": "NORMAL", "label": "Crane", "equipmentList": [ { "equipmentId": "Crane 01", "orderSeq": 1, "status": "ABNORMAL", "zone": "Nike Leased Zone", "error": { "code": "2142", "msg": "FORK2 LOAD PROFILE:RIGHT" } }, { "equipmentId": "Crane 02", "orderSeq": 2, "status": "ABNORMAL", "zone": "Nike Leased Zone", "error": { "code": "2142", "msg": "FORK2 LOAD PROFILE:RIGHT" } }, { "equipmentId": "Crane 03", "orderSeq": 3, "status": "ABNORMAL", "zone": "Nike Leased Zone", "error": { "code": "2142", "msg": "FORK2 LOAD PROFILE:RIGHT" } }, { "equipmentId": "Crane 04", "orderSeq": 4, "status": "NORMAL", "zone": "Nike Leased Zone" } ] }, { "category": "t-point", "status": "ABNORMAL", "label": "T-Point", "equipmentList": [ { "equipmentId": "Crane 01", "orderSeq": 1, "status": "NORMAL", "type": "in", "floor": "1F", "area": "East" }, { "equipmentId": "Crane 01", "orderSeq": 2, "status": "NORMAL", "type": "Out", "floor": "1F", "area": "East" }, { "equipmentId": "Crane 02", "orderSeq": 3, "status": "NORMAL", "type": "In", "floor": "1F", "area": "East" }, { "equipmentId": "Crane 02", "orderSeq": 4, "status": "NORMAL", "type": "Out", "floor": "1F", "area": "East" } ] }, { "category": "io-port", "status": "ABNORMAL", "label": "I/O Port", "equipmentList": [ { "equipmentId": "ST113", "orderSeq": 1, "status": "ABNORMAL", "type": "In", "portName": "Station 1", "clientName": "PX", "floor": "1F", "area": "East", "error": { "code": "2142", "msg": "FORK2 LOAD PROFILE:RIGHT" } }, { "equipmentId": "ST221", "orderSeq": 2, "status": "ABNORMAL", "type": "out", "portName": "Station 1", "clientName": "POYA", "floor": "2F", "area": "West", "error": { "code": "2142", "msg": "FORK2 LOAD PROFILE:RIGHT" } } ] }, { "category": "agv", "status": "NORMAL", "label": "AGV", "equipmentList": [ { "equipmentId": "6543213", "orderSeq": 1, "status": "ABNORMAL", "floor": "1F", "area": "East" }, { "equipmentId": "6543214", "orderSeq": 2, "status": "ABNORMAL", "floor": "1F", "area": "East" }, { "equipmentId": "6543215", "orderSeq": 3, "status": "ABNORMAL", "floor": "1F", "area": "East" } ] } ], "status": "ok" } ``` ### E 帳戶 (2023/10/30 update) 1. 登出 > 不變 2. 帳單 > 不變 3. 切換檢視權限 /wolverine/api/v1/MGE001/userViewPermissions/{ownerCode} GET > 更新 API Special Notes: 登入後可選擇的公司是根據 /register/token/{mobAppNum} 裡面的選單選擇。 選擇完之後預設為 `依公司維度檢視`,然後在呼叫 /MGE001/userViewPermissions/{ownerCode} 得到切換檢視維度的公司或是空間清單。這邊有點複雜,如果有不懂的話在跟我說~ 新增 `spaceSwitchOptionList` #### Response Example ```json { "result": [ { "isShowViewCompanySwitch": false, "isShowBilling": true, "isShowEta": true, "isShowQuota": true, "companySwitchOptionList": [], "spaceSwitchOptionList": [ { "spaceName": "Share A", "spaceId": "ioa83jklsdff-asdkfjlksfje-d3184jvg4k" }, { "spaceName": "Share B", "spaceId": "jfewlkfdjsi=dsjiofasdle-jsaidfjelm3" } ] } ], "status": "ok" } ``` 4. 切換語言 > 不變 5. 忘記密碼 > 不變 ### F 通知 (2023/10/30 update) 1. 獲取 APP 通知清單:/wolverine/api/v2/DSB002/notifications POST > 新增的 API - 取得 OMega APP 通知清單 ![設備通知](https://hackmd.io/_uploads/S1aANJ6Mp.png) #### 測試案例 目前回傳值都是亂數產生,有需要測試特定情境可以再跟我說。 #### Request Example 如果是依照公司維度檢視: ```json { "whId": "DE-MO-1", "comId": "54642712" } ``` 如果是依照分區維度檢視: **設備列表沒有依照分區檢視的維度** #### Response 說明 - `category` 用來判斷訊息左邊要顯示的顏色 - `type` 用來判斷應該在上方哪個 TAB 中 - `equipmentType` 用來判斷設備類型的通知中,各自屬於那些設備的 TAG #### Response Example ```json { "result": [ { "appRecordNum":1, "category": "malfunction", "type": "equipment", "equipmentType": "crane", "createAt": "2023-10-30 10:03", "subject": "狀態更新通知", "content": "1樓 輸送機目前無法使用,相關人員已在處理中", "read": true }, { "appRecordNum":2, "category": "restore", "type": "equipment", "equipmentType": "crane", "createAt": "2023-10-30 10:03", "subject": "狀態更新通知", "content": "1樓 輸送機 已恢復運行", "read": true }, { "appRecordNum":3, "category": "other", "type": "storage", "createAt": "2023-10-30 10:03", "subject": "水位通知", "content": "堆垛機 01 區域的儲位使用率已達 90%", "read": true }, { "appRecordNum":4, "category": "other", "type": "other", "createAt": "2023-10-30 10:03", "subject": "保養公告", "content": "堆垛機 {01} 將於 11/2 02:00~04:00 進行保養作業", "read": true } ], "status": "ok" } ``` ## 更新日誌 ### 2023-10-30 1. Request 參數的日期格式從 `2023/10/30` 改為 `2023-10-30`。 2. 儲位資訊的 API 曾加一個 FLAG `showChart`,判斷是否要顯示上方的長條圖。 3. 新增「設備」、「帳戶」、「通知」說明。