# 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 一樣)。

測試案例:
- 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`,就不需要顯示這個資訊。
- 因為包含「即時任務」,所以跟舊版一樣**會需要前端帶查詢時間的參數**。

#### 測試案例
目前回傳值都是亂數產生,有需要測試特定情境可以再跟我說。
#### 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}`)

#### 測試案例
目前回傳值都是亂數產生,有需要測試特定情境可以再跟我說。
#### 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}`)

#### 測試案例
目前回傳值都是亂數產生,有需要測試特定情境可以再跟我說。
#### 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}`)


#### 測試案例
目前回傳值都是亂數產生,有需要測試特定情境可以再跟我說。
#### 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}`)

#### 測試案例
目前回傳值都是亂數產生,有需要測試特定情境可以再跟我說。
#### 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}`)

#### 測試案例
目前回傳值都是亂數產生,有需要測試特定情境可以再跟我說。
#### 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
- 取得設備狀態資訊

#### 測試案例
目前回傳值都是亂數產生,有需要測試特定情境可以再跟我說。
#### 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 通知清單

#### 測試案例
目前回傳值都是亂數產生,有需要測試特定情境可以再跟我說。
#### 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. 新增「設備」、「帳戶」、「通知」說明。