EVA Web 與 Android 協定 === ## 串接格式 ``` mobile.postMessage(param) ``` ### api request ``` { tag: 'api', rqmethod:..., rqurl:..., rqcontent:{} or {requestData: {...}} } ``` response ``` { returnCode:..., returnMsg:..., returnData:... } ``` ### geolocation request ``` {tag: 'geolocation'} ``` response ``` { latitude:..., longitude:... } ``` ### getauthtoken request ``` {tag: 'getauthtoken'} ``` response (token string) ``` eyJUeXAiOiJKV1QiLCJBbGciOiJIUzI1NiJ9.eyJKdGkiOiJiOGQ2NzI0Zi0yZTMxLTQwYTctOWZmNy0yMzYxZTg4YTQ4NGEiLCJFeHAiOiIyMDE5LzA4LzE1IDE0OjA1OjM1IiwiVWlkIjoiIn0=.tguj59TlFe/34P81OMfKaXb4pUpNUXVYwoFUD3mfRw0= ``` ### getdefaultuser request ``` {tag: 'getdefaultuser'} ``` response ``` [{ FUserID:..., LoginID:..., LoginDate:... }] ``` ### correcttime request ``` {tag: 'correcttime'} ``` 不需 response,但 APP 會跳系統校時視窗 ### versionupdate request ``` {tag: 'versionupdate'} ``` 不需 response,但 APP 會跳版本版新後重啟頁面 ### syncdata request ``` { tag: 'syncdata', page: ... * } ``` response ``` { returnCode:..., returnMsg:..., returnData:... } ``` ### uploadstatus request ``` { tag: 'uploadstatus' } ``` response (未上傳的ResultSheetId) ``` { resultSheetID:['xxx','xxx'] } ``` ## 串接流程整理 ### 3.1.0 eCheck System Login #### 畫面初始 ##### 取得場站資料 -> 取得登入快選使用者 -> 取得目前經緯度 > api (rqurl:'/Login/GetEva001') > -> [getdefaultuser](#getdefaultuser) > -> [geolocation](#geolocation) #### 登入動作 ##### 登入 -> 版本更新 > api (rqurl:'/Login/GetEvaLogin') > -> [versionupdate](#versionupdate) ``` isInWebView && res.versionUpdate === 'Y' ``` ##### 登入 -> 資料更新 > api (rqurl:'/Login/GetEvaLogin') > -> [syncdata (page:'login')](#syncdata) ``` isInWebView && res.dataUpdate === 'Y' ``` ### 3.2.0 Flight Schedule #### 載入 Flight Schedule 頁面資料 ###### 取得表單型態 -> 取得飛機班表對應的Sheets > api (rqurl:'/GetOther/GetSheetType') > -> api (rqurl:'/GetResult/GetStartChecking') | WEB REQUEST | IN-APP | | - | - | | api (rqurl:'/GetOther/GetSheetType')| TableName:SheetType | request ``` {} ``` response ``` { returnCode: …, returnMsg: …, returnData: [{ sheetTypeID: …, description: …, status: … }] } ``` | WEB REQUEST | IN-APP | | - | - | | api (rqurl:'/GetResult/GetStartChecking')| TableName:XXX、XXX| request ``` { "requestData": { "station": "...", "manual": "S" } } ``` response ``` { "returnCode": "...", "returnMsg": "...", "sequence": "...", "returnData": [ { "flightKey": "777", "actDate": "Jun/27/2019 00:00:00", "carrierCode": "BR", "flightNo": "3456", "aircraftNo": "B18340", "departure": "TPE", "arrival": "TPE", "serialNo": "1", "companyID": "EVA", "fleetID": "777", "foreign": "H", "fisAircraftType": "A32", "serviceType": "P", "licenseAircraftTypeID": "A32", "etd": "Aug/20/2019 02:55:58", "etdLocal": "Aug/20/2019 02:55:58", "resultSheet": [ { "resultSheetID": "RBR777157190611183060222", "sheetTypeID": "3", "manual": "S", "checkSheetID": "SEVA77712193005083047039", "sheetVersion": 2, "sheetStatus": "0", "accepted": "Y", "accepter": "893652", "acceptedTimeZone": null, "acceptedDatetimeUTC": "", "startDateTime": "Jul/01/2019 17:32:30", "endDataTime": "Jul/01/2019 17:32:37" }, { "resultSheetID": "RBR777157190611183060201", "sheetTypeID": "2", "manual": "S", "checkSheetID": "SEVA77712193005083047039", "sheetVersion": 3, "sheetStatus": "3", "accepted": "Y", "accepter": null, "acceptedTimeZone": -480, "acceptedDatetimeUTC": "Jan/01/0001 00:00:00", "startDateTime": "Jan/01/0001 00:00:00", "endDataTime": "Jan/01/0001 00:00:00" } ] } ] } ``` #### 同步頁面資料 ###### 上傳結果表單檔案資料 -> 取得結果表單檔案資料 -> [載入 Flight Schedule 頁面資料 ](#%E8%BC%89%E5%85%A5-Flight-Schedule-%E9%A0%81%E9%9D%A2%E8%B3%87%E6%96%99) > api (rqurl:'/Put/PutResultSheet') > -> api (rqurl:'/GetResult/GetResultSheet') | WEB REQUEST | IN-APP | | - | - | | api (rqurl:'/GetOther/PutResultSheet')| TableName:XXX、XXX| request ``` {} ``` response ``` { returnCode: …, returnMsg: … } ``` | WEB REQUEST | IN-APP | | - | - | | api (rqurl:'/GetResult/GetResultSheet')| TableName:XXX、XXX| request ``` { "requestData": { "station": "TPE", // 目前航班所有的 ResultSheetID List "currectResultSheetID": ['XXX','XXX'], // 需要同步的 ResultSheetID List "syncResultSheetID": ['XXX', 'XXX'] } } ``` response ``` { "returnCode": "...", "returnMsg": "...", "sequence": "...", "returnData": [] } ``` ### 3.3.0 Manual report #### 載入 Manual report 頁面資料 ###### 取得表單型態 -> 取得 Manual Report > api (rqurl:'/GetOther/GetSheetType') > -> api (rqurl:'/GetResult/GetMauualreport') | WEB REQUEST | IN-APP | | - | - | | api (rqurl:'/GetOther/GetSheetType')| TableName:SheetType | request ``` {} ``` response ``` { returnCode: …, returnMsg: …, returnData: [{ sheetTypeID: …, description: …, status: … }] } ``` | WEB REQUEST | IN-APP | | - | - | | api (rqurl:'/GetOther/GetMauualreport')| TableName:XXX、XXX| request ``` { "requestData": { "station": "...", "manual": "M" } } ``` response ``` { "returnCode": "...", "returnMsg": "...", "sequence": "...", "returnData": [ { "resultSheetID": "20190731AB1234B16784_TPENRT3M", "actDate": "Aug/02/2019 00:00:00", "carrierCode": "AB", "flightNo": "234", "aircraftNo": "B16784", "departure": "TPE", "arrival": "NRT", "serialNo": "1", "sheetTypeID": "3", "manual": "M", "fisAircraftType": "77M", "serviceType": "P", "checkSheetID": "0", "licenseAircraftTypeID": "777", "sheetVersion": 0, "etd": "Aug/21/2019 01:57:01", "etdLocal": "Aug/21/2019 01:57:01", "sheetStatus": "0", "accepted": "N", "accepter": null, "acceptedTimeZone": -480, "acceptedDatetimeLocal": null, "acceptedDatetimeUTC": "", "startDateTime": "", "endDataTime": "" } ] } ``` #### 同步頁面資料 ###### 上傳結果表單檔案資料 -> 取得結果表單檔案資料 -> [載入 Manual report 頁面資料 ](#%E8%BC%89%E5%85%A5-Manual-report-%E9%A0%81%E9%9D%A2%E8%B3%87%E6%96%99) > api (rqurl:'/Put/PutResultSheet') > -> api (rqurl:'/GetResult/GetResultSheet') | WEB REQUEST | IN-APP | | - | - | | api (rqurl:'/GetOther/PutResultSheet')| TableName:XXX、XXX| request ``` {} ``` response ``` { returnCode: …, returnMsg: … } ``` | WEB REQUEST | IN-APP | | - | - | | api (rqurl:'/GetResult/GetResultSheet')| TableName:XXX、XXX| request ``` { "requestData": { "station": "TPE", // 目前航班所有的 ResultSheetID List "currectResultSheetID": ['XXX','XXX'], // 需要同步的 ResultSheetID List "syncResultSheetID": ['XXX', 'XXX'] } } ``` response ``` { "returnCode": "...", "returnMsg": "...", "sequence": "...", "returnData": [] } ``` ### 3.3.1 Manual report / Empty Sheet 載入頁面資料時及建立資料時,直接呼叫API,不透過APP 導頁至 Manual report 時 要帶 queryParam['inAppReload'] = true 則 回到 Manual report 會先做 同步頁面資料 ### 3.4.0 Checked #### 載入 Checked 頁面資料 ###### 取得表單型態 -> 取得上傳表單 -> 取得目前上傳狀態清單 > api (rqurl:'/GetOther/GetSheetType') > -> api (rqurl:'/GetResult/GetChecked') > -> [uploadstatus](#uploadstatus) | WEB REQUEST | IN-APP | | - | - | | api (rqurl:'/GetOther/GetSheetType')| TableName:SheetType | request ``` {} ``` response ``` { returnCode: …, returnMsg: …, returnData: [{ sheetTypeID: …, description: …, status: … }] } ``` | WEB REQUEST | IN-APP | | - | - | | api (rqurl:'/GetOther/GetChecked')| TableName:XXX、XXX| request ``` { "requestData": { "station": "..." } } ``` response ``` { "returnCode": "...", "returnMsg": "...", "sequence": "...", "returnData": [ { "resultSheetID": "20190816BR3333B16782_TPETPE1M", "flightKey": null, "actDate": "Aug/16/2019 00:00:00", "carrierCode": "BR", "flightNo": "3333", "aircraftNo": "B16782", "departure": "TPE", "arrival": "TPE", "serialNo": "1", "sheetTypeID": "1", "manual": "M", "fisAircraftType": "77M", "serviceType": "P", "checkSheetID": "SEVA777121194916034914790", "licenseAircraftTypeID": "777", "sheetVersion": 21, "etd": "Aug/21/2019 02:59:20", "etdLocal": "Aug/21/2019 02:59:20", "sheetStatus": "2", "accepted": "N", "accepter": null, "acceptedTimeZone": -480, "acceptedDatetimeUTC": "", "startDateTime": "", "endDataTime": "", "employeeID1": null, "employeeID2": null, "employeeID3": null, "modifier": null, "modifyDateTimeUTC": null } ] } ``` #### 上傳 Checked 資料 ###### 上傳結果表單檔案資料 -> 取得結果表單檔案資料 -> [載入 Checked 頁面資料 ](#%E8%BC%89%E5%85%A5-Checked-%E9%A0%81%E9%9D%A2%E8%B3%87%E6%96%990) > api (rqurl:'/Put/PutResultSheet') > -> api (rqurl:'/GetResult/GetResultSheet') | WEB REQUEST | IN-APP | | - | - | | api (rqurl:'/GetOther/PutResultSheet')| TableName:XXX、XXX| request ``` {} ``` response ``` { returnCode: …, returnMsg: … } ``` | WEB REQUEST | IN-APP | | - | - | | api (rqurl:'/GetResult/GetResultSheet')| TableName:XXX、XXX| request ``` { "requestData": { "station": "TPE", // 目前航班所有的 ResultSheetID List "currectResultSheetID": ['XXX','XXX'], // 需要同步的 ResultSheetID List "syncResultSheetID": ['XXX', 'XXX'] } } ``` response ``` { "returnCode": "...", "returnMsg": "...", "sequence": "...", "returnData": [] } ``` ### 3.5.0 Check Sheet #### 載入 Check Sheet 頁面資料 ###### 取得使用者證照對應檔 -> 取得表單內容 > api (rqurl:'/SyncData/GetSyncData') > -> api (rqurl:'/GetResult/GetSheetContent') | WEB REQUEST | IN-APP | | - | - | | api (rqurl:'/SyncData/GetSyncData')| TableName:UserLicense | request ``` { "requestData": { "tableName": "UserLicense" } } ``` response ``` { "returnCode": "...", "returnMsg": "...", "sequence": "...", "returnData": [ { "fUserID": "1233", "licenseAircraftTypeID": "2019", "licenseCompanyID": "Mitake2" } ] } ``` | WEB REQUEST | IN-APP | | - | - | | api (rqurl:'/GetResult/GetSheetContent')| TableName:XXX | request ``` { "requestData": { "checkSheetID": "XXX", "resultSheetID": "XXXX" } } ``` response (需增加Uploaded欄位) ``` { "returnCode": "...", "returnMsg": "...", "sequence": "...", "returnData": { "resultSheetID": "20190816BR3333B16782_TPETPE1M", "checkSheetID": "SEVA777121194916034914790", "carrierCode": "BR", "flightNo": "3333", "aircraftNo": "B16782", "departure": "TPE", "arrival": "TPE", "serialNo": "1", "sheetTypeID": "1", "manual": "M", "serviceType": "P", "licenseAircraftTypeID": "777", "sheetVersion": 21, "sheetStatus": "2", "accepted": "N", "accepter": null, "acceptedTimeZone": -480, "startDateTime": "", "endDataTime": "", "employeeID1": null, "employeeID2": null, "employeeID3": null, // ↓↓↓ 需增加Uploaded欄位 ↓↓↓ "uploaded": "Y or N", // ↑↑↑ 需增加Uploaded欄位 ↑↑↑ "category": [ { "categoryID": "EVA7771191404081415125", "categoryNameE": "COLD WEATHER CHECK", "categoryIndex": 3, "question": [ { "questionID": "QEVA777121190816143834838", "questionIndex": 0, "questionFormat": 0, "questionJson": "...", "forCargoPassenger": "A", "bypass": "N", "resultQuestion": "123420190816181209578", "answerJson": "...", "checkOrPass": "C", "signerID": "1234", "signerName": "6666", "creator": "1234", "createDateTimeUTC": "Aug/16/2019 10:12:09", // ↓↓↓ 需增加Uploaded欄位 ↓↓↓ "uploaded": "Y or N" // ↑↑↑ 需增加Uploaded欄位 ↑↑↑ } ] } ] } } ``` #### 寫入問題資料 | WEB REQUEST | IN-APP | | - | - | | api (rqurl:'/Put/PutSheetContent')| TableName:XXX | request ``` { "requestData": { "answerJson": "...", "categoryID": "EVA7771191404081415125", "categoryIndex": 3, "categoryNameE": "COLD WEATHER CHECK", "checkOrPass": "C", "checkSheetID": "SEVA777121194916034914790", "createDateTimeUTC": "Aug/21/2019 09:17:14", "creator": "1234", "forCargoPassenger": "A", "questionFormat": 0, "questionID": "QEVA777121190816143834838", "questionIndex": 0, "questionJson": "...", "resultQuestion": "123420190821171714708", "resultSheetID": "20190816BR3333B16782_TPETPE1M", "signerID": "1234", "signerName": "6666" } } ``` response ``` { "returnCode": "...", "returnMsg": "...", "sequence": "...", "returnData": [] } ``` ### 3.6.0 Check Sheet Performed #### 表單Accept | WEB REQUEST | IN-APP | | - | - | | api (rqurl:'/Put/PutAccept')| TableName:XXX | request ``` { "requestData": { resultSheetID: "...", sheetStatus: '3', accepted: 'Y', acceptedTimeZone: "...", acceptedDatetimeUTC: "...", startDateTime: "...", endDataTime: "...", employeeID1: "...", employeeID2: "...", employeeID3: "..." } } ``` response ``` { "returnCode": "...", "returnMsg": "...", "sequence": "...", "returnData": [] } ``` #### 表單 Upload & Reload ###### 上傳結果表單檔案資料 -> 取得單獨Reload結果表單檔案資料 -> [載入 Checked 頁面資料 ](#%E8%BC%89%E5%85%A5-Check-Sheet-%E9%A0%81%E9%9D%A2%E8%B3%87%E6%96%99) > api (rqurl:'/Put/PutResultSheet') > -> api (rqurl:'/GetResult/GetReloadOneResultSheet') | WEB REQUEST | IN-APP | | - | - | | api (rqurl:'/GetOther/PutResultSheet')| TableName:XXX、XXX| request ``` {} ``` response ``` { returnCode: …, returnMsg: … } ``` | WEB REQUEST | IN-APP | | - | - | | api (rqurl:'/GetResult/GetReloadOneResultSheet')| TableName:XXX| request ``` { "requestData": { "resultSheetID": 'XXX' } } ``` response ``` { "returnCode": "...", "returnMsg": "...", "sequence": "...", "returnData": [] } ```