# DMS APP: API 規格書 ## 功能代碼:DPA001 - 檢視全部碼頭狀態 - 檢視單一碼頭詳情 - 碼頭報到 (交貨開始) - 碼頭報到 (交貨結束) ## API 規格 | 編號 | API | Method | 說明 | | ---- | --------------------------------------------------- | ------ | ------------------------------------ | | 1 | /wolverine/api/v1/DPA001/init | GET | 畫面初始 API (包含各個 `optionList`) | | 2 | /wolverine/api/v1/DPA001/query | POST | 查詢碼頭總覽資訊 | | 3 | /wolverine/api/v1/DPA001/query/{dockNum} | GET | 查詢碼頭詳情 | | 4 | /wolverine/api/v1/DPA001/dock/status/{dockNum} | PUT | 更新碼頭狀態 | | 5 | /wolverine/api/v1/DPA001/dock/order/query/{dockNum} | POST | 查詢碼頭單據 (報到用) | | 6 | /wolverine/api/v1/DPA001/dock/checkIn/{dockNum} | POST | 碼頭報到 (交貨開始) | | 7 | /wolverine/api/v1/DPA001/dock/checkOut/{dockNum} | POST | 碼頭報到 (交貨結束) | ## 1. GET /wolverine/api/v1/DPA001/init > 回傳畫面上呈現所需要的一些 `optionList` ### Request >`N/A` ### Response #### 參數說明 | 參數 | 型態 | 說明 | 範例 | | ------------------------------ | ---- | -------------- | ------------- | | acceptedDockCategoryOptionList | list | 碼頭出入庫類型 | value & label | | dockStatusOptionList | list | 碼頭狀態 | value & label | | dockUsageCategoryOptionList | list | 單據出入庫類型 | value & label | | dockOrderStatusOptionList | list | 單據狀態 | value & label | #### 範例 ```json { "result": { "acceptedDockCategoryOptionList" : [ { "label": "出庫" , "value": "2" }, { "label": "入庫" , "value": "1" }, { "label": "入出庫" , "value": "3" } ], "dockStatusOptionList": [ { "label": "可用", "value": "1" }, { "label": "不可用", "value": "2" } ], "略" } } ``` ## 2. POST /wolverine/api/v1/DPA001/query > 碼頭總覽查詢 ### 說明 - Backend: - 碼頭查詢結果的排序依照 (由上到下) 1. 依照 customDockNum 2. 低樓層到高樓層 ### Request #### 參數說明 | 參數 | 型態 | 說明 | 範例 | | -------------- | ------ | --------------------------------- | ------- | | comNum | number | 使用者所選的公司編號 | 1 | | customDockName | string | 使用者想查詢的碼頭名稱 (模糊查詢) | "碼頭1" | #### 範例 ```json { "comNum": 1, "customDockName": "碼頭" } ``` ```json { "comNum": 3 } ``` ### Response #### 參數說明 | 參數 | 型態 | 說明 | 範例 | | -------------------- | ------ | ---------------------------------- | ----------------- | | dockNum | number | 碼頭編號 (unique) (N/A) | `1` | | contractDetailNum | number | 客戶對應該碼頭的合約細節編號 (N/A) | `23` | | customDockName | string | 客戶對應該碼頭的顯示名稱 (label) | `"1 - 1F"` | | acceptedDockCategory | string | 碼頭出入庫類型 (value) | `"2"` | | isSpecificDock | string | 是否為專用碼頭 (value) | `true` or `false` | | dockStatus | string | 碼頭狀態 (value) | `"2"` | | subStatusDo | object | 子狀態的物件 (obj) | `N/A` | | subStatusType | string | 子狀態的類型 (value) | `1` | | subStatusTime | string | 子狀態的時間描述 (label) | `41` or `10:00` | > - unique: 唯一值。 > - N/A: 不用顯示。 > - label: 可以直接顯示回傳值。 > - value: 要從 /init 回傳的 `optionList` 裡面讀取對應的 `label` 顯示。 > - obj: 一個物件,裡面會包含其他參數。 #### 範例 ```json { "result": [ { "dockNum": 1, "contractDetailNum": 1, "customDockName": "1-1F", "acceptedDockCategory": "2", "isSpecificDock": true, "dockStatus": "1", "subStatusDo": { "substatusType": "1", "subStatusTime": "10:00", } }, { "dockNum": 2, "contractDetailNum": 2, "customDockName": "2-1F", "acceptedDockCategory": "1", "isSpecificDock": false, "dockStatus": "2", "subStatusDo": { "substatusType": "2", "subStatusTime": "41", } } ], "status": "ok" } ``` ## 3. GET /wolverine/api/v1/DPA001/query/{dockNum} > 查詢碼頭狀態詳情 ### 說明 - Backend: - 單據查詢結果的排序依照 (由上到下) 1. 預計交貨時間的 start time 由早到晚 ### Request #### 參數說明 | 參數 | 型態 | 說明 | 範例 | | ------- | ------ | -------- | ---- | | dockNum | number | 碼頭編號 | 1 | #### 範例 ``` /wolverine/api/v1/DPA001/query/2 /wolverine/api/v1/DPA001/query/3 /wolverine/api/v1/DPA001/query/46 ``` ### Response #### 參數說明 | 參數 | 型態 | 說明 | 範例 | | ------------------------ | ------- | ---------------------------------- | ------------------- | | dockNum | number | 碼頭編號 (unique) (N/A) | `1` | | contractDetailNum | number | 客戶對應該碼頭的合約細節編號 (N/A) | `23` | | customDockName | string | 客戶對應該碼頭的顯示名稱 (label) | `"1 - 1F"` | | acceptedDockCategory | string | 碼頭出入庫類型 (value) | `"2"` | | isSpecificDock | boolean | 是否為專用碼頭 (N/A) | `true` or `false` | | dockStatus | string | 碼頭狀態 (N/A) | `"2"` | | subStatusDo | object | 子狀態的物件 (obj) | `N/A` | | subStatusType | string | 子狀態的類型 (N/A) | `"1"` | | subStatusTime | string | 子狀態的時間描述 (N/A) | `"41"` or `"10:00"` | | onGoingOrderList | list | 進行中的單據清單 (N/A) | `N/A` | | upComingOrderList | list | 即將到來的單據清單 (N/A) | `N/A` | | reservationCode | string | 單號 (label) | `"2212260000004"` | | dockUsageCategory | string | 單據出入庫類型 (value) | `"1"` | | dockOrderStatus | string | 單據狀態 (value) | `"2"` | | expectedUsagePeriodStart | string | 單據預期使用時段 (開始) (label) | `"10:00"` | | expectedUsagePeriodEnd | string | 單據預期使用時段 (開始) (label) | `"11:00"` | | expectedUsagePeriodGap | number | 單據預期使用時段長度 (label) | `60` | | supplierComName | string | 供應商公司名稱 (label) | `"義美食品"` | | carrierComName | string | 承運商公司名稱 (label) | `"新竹物流"` | | driverName | string | 司機姓名 (label) | `"賈苡秉"` | | licensePlateNo | string | 車牌號碼 (label) | `ETH2323` | > - unique: 唯一值。 > - N/A: 不用顯示。 > - label: 可以直接顯示回傳值。 > - value: 要從 /init 回傳的 `optionList` 裡面讀取對應的 `label` 顯示。 > - obj: 一個物件,裡面會包含其他參數。 #### 範例 ```json { "result": [ { "dockNum": 1, "contractDetailNum": 1, "customDockName": "1-1F", "acceptedDockCategory": "2", "isSpecificDock": true, "dockStatus": "1", "subStatusDo": { "substatusType": "1", "subStatusTime": "10:00", }, "onGoingOrderList": [ { "reservationCode": "221114000007", "dockUsageCategory": "1", "dockOrderStatus": "2", "expectedUsagePeriodStart": "10:00", "expectedUsagePeriodEnd": "11:00", "expectedUsagePeriodGap": 60, "supplierComName": "義美食品", "carrierComName": "新竹物流", "driverName": "賈苡秉", "licensePlateNo": "ETH2323" } ], "upComingOrderList": [ { "reservationCode": "221114000008", "dockUsageCategory": "1", "dockOrderStatus": "2", "expectedUsagePeriodStart": "11:00", "expectedUsagePeriodEnd": "11:30", "expectedUsagePeriodGap": 30, "supplierComName": "義美食品", "carrierComName": "新竹物流", "driverName": "賈苡秉", "licensePlateNo": "ETH5656" }, { "reservationCode": "221114000009", "dockUsageCategory": "2", "dockOrderStatus": "1", "expectedUsagePeriodStart": "11:30", "expectedUsagePeriodEnd": "12:00", "expectedUsagePeriodGap": 30, "supplierComName": "義美食品", "carrierComName": "新竹物流", "driverName": "賈苡秉", "licensePlateNo": "ETH7878" } ], } ], "status": "ok" } ``` ## 4. PUT /wolverine/api/v1/DPA001/dockStatus/{dockNum} > 更新碼頭狀態 ### Request #### 參數說明 | 參數 | 型態 | 說明 | 範例 | | -------------------- | ------ | ------------------ | ----- | | dockAvailableType | string | 實體碼頭可用狀態 | `"1"` | | dockAvailableSubType | string | 實體碼頭可用子狀態 | `"2"` | #### 範例 ````json { "dockAvailableType": "2", "dockAvailableSubType": "1" } ```` ### Response #### Success ```json { "status": "ok" } ``` #### Fail > 依照現存的業務邏輯 ## 5. POST /wolverine/api/v1/DPA001/dock/order/query/{dockNum} > 查詢碼頭單據 (車牌報到用) ### Request #### 參數說明 | 參數 | 型態 | 說明 | 範例 | | -------------- | ------ | -------- | ----------- | | licensePlateNo | string | 車牌號碼 | `"ETH2323"` | #### 範例 ```json { "licensePlateNo": "ETH2323" } ``` ### Response #### 參數說明 | 參數 | 型態 | 說明 | 範例 | | ------------------------ | ------ | ------------------------------- | ----------------- | | reservationCode | string | 單號 (label) | `"2212260000004"` | | dockUsageCategory | string | 單據出入庫類型 (value) | `"1"` | | dockOrderStatus | string | 單據狀態 (value) | `"2"` | | expectedUsagePeriodStart | string | 單據預期使用時段 (開始) (label) | `"10:00"` | | expectedUsagePeriodEnd | string | 單據預期使用時段 (開始) (label) | `"11:00"` | | expectedUsagePeriodGap | number | 單據預期使用時段長度 (label) | `60` | | supplierComName | string | 供應商公司名稱 (label) | `"義美食品"` | | carrierComName | string | 承運商公司名稱 (label) | `"新竹物流"` | | driverName | string | 司機姓名 (label) | `"賈苡秉"` | | licensePlateNo | string | 車牌號碼 (label) | `ETH2323` | #### 範例 ```json { "result": [ { "reservationCode": "221114000008", "dockUsageCategory": "1", "dockOrderStatus": "2", "expectedUsagePeriodStart": "11:00", "expectedUsagePeriodEnd": "11:30", "expectedUsagePeriodGap": 30, "supplierComName": "義美食品", "carrierComName": "新竹物流", "driverName": "賈苡秉", "licensePlateNo": "ETH5656" } ], "status": "ok" } ``` ## 6. POST /wolverine/api/v1/DPA001/dock/checkIn/{dockNum} > 碼頭報到 ### 說明 - 不管專用還是一般碼頭,都是 call 同一個 api,後端可以自己判斷這個碼頭是不是專用碼頭。 - `isForceCheckIn` 預設為 `false`。 - 如果 `hasAlert` 為 `true`,要顯示提示訊息 (`alertMsg`),當使用者點選`確定`,即可強制報到 (`isForceCheckIn = true`)。 ### Request #### 參數說明 | 參數 | 型態 | 說明 | 範例 | | --------------- | ------ | ------------ | ----------------- | | reservationCode | string | 單號 | `"2211050000006"` | | isForceCheckIn | string | 是否強制報到 | `true` or `false` | #### 範例 ```json { "reservationCode": "221105000006", "isForceCheckIn": true } ``` ### Response #### 參數說明 | 參數 | 型態 | 說明 | 範例 | | --------------- | ------- | -------------- | ------------------------------------------------------ | | hasAlert | boolean | 是否有提示訊息 | `true` or `false` | | reservationCode | string | 單號 | `"2211070000006"` | | alertMsg | string | 提示訊息 | `"原預計交貨單據為 XXX,要改為報到專用碼頭單 AAA 嗎?"` | #### 範例 會有以下幾種情況 - 成功 - 失敗 - 既有的失敗訊息 (必填沒填 or unauthorized or 業務邏輯檢核錯誤) - 特殊業務邏輯檢核 (判斷 `hasAlert` 為 `true`) - 確認要報到專用碼頭單? - 原預計交貨單據是XXX,要改為報到專用碼頭單? > 成功 > ```json > { > "result": { > "hasAlert": false, > "reservationCode": "2211010000007" > }, > "status": "ok", > } > ``` > 失敗 (既有的失敗訊息) > ```json > { > "errors": [ > { > "code": "com.alp.dp.a0.controller.v1.DpA001", > "message": "[單號]不得為空白!" > } > ], > "status": "fail" > } > ``` > 失敗 (特殊業務邏輯檢核) > ```json > { > "result": { > "hasAlert": true, > "alertMsg": "原預計交貨單據為 XXX,要改為報到專用碼頭單 AAA 嗎?" > }, > "status": "ok" > } > ``` ## 7. PUT /wolverine/api/v1/DPA001/dock/checkOut/{dockNum} > 碼頭報到 (交貨結束) ### Request #### 參數說明 | 參數 | 型態 | 說明 | 範例 | | --------------- | ------ | ---- | ----------------- | | reservationCode | string | 單號 | `"2210040000004"` | #### 範例 ```json { "reservationCode": "2210040000004" } ``` ### Response #### Success ```json { "status": "ok" } ``` #### Fail > 依照現存的業務邏輯