import { TransferRenderHandle } from './transfer-render-handle'; import { FlightOrder } from './flight-order'; export class FlightsDataHandle { public transferHandle = new TransferRenderHandle(); public formatter = { 'ARSF': this.transferHandle.arsfFormatter.bind(this.transferHandle), 'DESF': this.transferHandle.desfFormatter.bind(this.transferHandle), 'RENO': this.transferHandle.renoFormatter.bind(this.transferHandle), 'GCTM': this.transferHandle.gctmFormatter.bind(this.transferHandle), 'BOTM': this.transferHandle.botmFormatter.bind(this.transferHandle), 'ABDG': this.transferHandle.abdgFormatter.bind(this.transferHandle), 'AOTM_A': this.transferHandle.aotm_aFormatter.bind(this.transferHandle), 'AOTM_D': this.transferHandle.aotm_dFormatter.bind(this.transferHandle), 'BELT': this.transferHandle.beltFormatter.bind(this.transferHandle), 'CHKC': this.transferHandle.chkcFormatter.bind(this.transferHandle), 'CCTM': this.transferHandle.cctmFormatter.bind(this.transferHandle), 'COTM': this.transferHandle.cotmFormatter.bind(this.transferHandle), 'CHTM_ON': this.transferHandle.chtmOnFormatter.bind(this.transferHandle), 'CHTM_OFF': this.transferHandle.chtmOffFormatter.bind(this.transferHandle), 'LACL': this.transferHandle.laclFormatter.bind(this.transferHandle), 'CHUT': this.transferHandle.chutFormatter.bind(this.transferHandle), 'ACTT': this.transferHandle.acttFormatter.bind(this.transferHandle), 'PSST': this.transferHandle.psstFormatter.bind(this.transferHandle), 'ESTT': this.transferHandle.esttFormatter.bind(this.transferHandle), 'MVIN': this.transferHandle.mvinFormatter.bind(this.transferHandle), 'ERUT': this.transferHandle.erutFormatter.bind(this.transferHandle), 'FLIN': this.transferHandle.flinFormatter.bind(this.transferHandle), 'SODT': this.transferHandle.sodtFormatter.bind(this.transferHandle), 'GTDT': this.transferHandle.gateFormatter.bind(this.transferHandle), 'PADT': this.transferHandle.padtFormatter.bind(this.transferHandle), 'FLDT': this.transferHandle.fldtFormatter.bind(this.transferHandle) } public orderHandle = new FlightOrder(); public findLinkFlights(raw_flights) { if (typeof Object.assign != 'function') { // Must be writable: true, enumerable: false, configurable: true Object.defineProperty(Object, "assign", { value: function assign(target, varArgs) { // .length of function is 2 'use strict'; if (target == null) { // TypeError if undefined or null throw new TypeError('Cannot convert undefined or null to object'); } var to = Object(target); for (var index = 1; index < arguments.length; index++) { var nextSource = arguments[index]; if (nextSource != null) { // Skip over if undefined or null for (var nextKey in nextSource) { // Avoid bugs when hasOwnProperty is shadowed if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { to[nextKey] = nextSource[nextKey]; } } } } return to; }, writable: true, configurable: true }); } let combined_raw_flights: Array = []; let copy_raw_flights = []; raw_flights.forEach(element => { copy_raw_flights.push(Object.assign({}, element)) }) for (let i = 0; i < copy_raw_flights.length; i++) { if (copy_raw_flights[i]['MVIN'] === 'A') { if (copy_raw_flights[i]['TAID']) { let index = copy_raw_flights.findIndex(val => { return val['FLID'] === copy_raw_flights[i]['TAID'] }); if (index > -1) { copy_raw_flights[i]['isLinked'] = true; copy_raw_flights[i]['linkFlight'] = copy_raw_flights[index]; if (!copy_raw_flights[i]['linkFlight']['TAID']) { copy_raw_flights[i]['linkFlight']['TAID'] = copy_raw_flights[i]['FLID']; } copy_raw_flights.splice(index, 1); i--; } } } }; copy_raw_flights.forEach(element => { let flights_item = {}; if (element['MVIN'] === 'A' && !element['isLinked']) { flights_item['preFlight'] = element; } else if (element['MVIN'] === 'D' && !element['isLinked']) { flights_item['reaFlight'] = element; } else { flights_item['reaFlight'] = element['linkFlight']; delete element['linkFlight']; delete element['isLinked']; flights_item['preFlight'] = element; } combined_raw_flights.push(flights_item); }); return combined_raw_flights; } public flightsRenderTransfer(item, col_lists) { if (typeof Object.assign != 'function') { // Must be writable: true, enumerable: false, configurable: true Object.defineProperty(Object, "assign", { value: function assign(target, varArgs) { // .length of function is 2 'use strict'; if (target == null) { // TypeError if undefined or null throw new TypeError('Cannot convert undefined or null to object'); } var to = Object(target); for (var index = 1; index < arguments.length; index++) { var nextSource = arguments[index]; if (nextSource != null) { // Skip over if undefined or null for (var nextKey in nextSource) { // Avoid bugs when hasOwnProperty is shadowed if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { to[nextKey] = nextSource[nextKey]; } } } } return to; }, writable: true, configurable: true }); } let render_flight = {}, render_pre_flight = {}, render_rea_flight = {}, flights_item = Object.assign({}, item) try { if (flights_item['preFlight'] && !flights_item['reaFlight']) { // render_flight['FLID'] = flights_item['preFlight']['FLID'] for (let i = 0; i < col_lists.length; i++) { let key = col_lists[i]['COL_CODE']; render_flight[key] = this.formatter.hasOwnProperty(key) ? this.formatter[key](flights_item['preFlight']) : flights_item['preFlight'][key]; } flights_item['renderFlight'] = render_flight; } else if (!flights_item['preFlight'] && flights_item['reaFlight']) { // render_flight['FLID'] = flights_item['reaFlight']['FLID'] for (let i = 0; i < col_lists.length; i++) { let key = col_lists[i]['COL_CODE'] render_flight[key] = this.formatter.hasOwnProperty(key) ? this.formatter[key](flights_item['reaFlight']) : flights_item['reaFlight'][key]; } flights_item['renderFlight'] = render_flight; } else { // render_flight['FLID'] = flights_item['preFlight']['FLID'] + ' / ' + flights_item['reaFlight']['FLID']; // render_pre_flight['FLID'] = flights_item['preFlight']['FLID']; // render_rea_flight['FLID'] = flights_item['reaFlight']['FLID']; for (let i = 0; i < col_lists.length; i++) { let preHasValue, reaHasValue; let key = col_lists[i]['COL_CODE']; if (this.formatter.hasOwnProperty(key)) { preHasValue = this.formatter[key](flights_item['preFlight']); reaHasValue = this.formatter[key](flights_item['reaFlight']); } else { preHasValue = flights_item['preFlight'][key]; reaHasValue = flights_item['reaFlight'][key]; } if (preHasValue && !reaHasValue) { if (key === 'SODT' || key === 'ESTT' || key === 'ACTT') { render_flight[key] = preHasValue + ' / '; } else { render_flight[key] = preHasValue; } } else if (!preHasValue && reaHasValue) { if (key === 'SODT' || key === 'ESTT' || key === 'ACTT') { render_flight[key] = ' / ' + reaHasValue; } else { render_flight[key] = reaHasValue; } } else if (preHasValue && reaHasValue) { if (preHasValue === reaHasValue) { if (key === 'FLNO') { render_flight[key] = preHasValue + ' / ' + reaHasValue; } else { render_flight[key] = preHasValue; } } else { if (key === 'ERUT') { render_flight[key] = preHasValue.split(' - ').slice(0, -1).join(' - ') + ' - ' + reaHasValue; } else { render_flight[key] = preHasValue + ' / ' + reaHasValue; } } } else { render_flight[key] = ''; } render_pre_flight[key] = preHasValue; render_rea_flight[key] = reaHasValue; } flights_item['renderPreFlight'] = render_pre_flight; flights_item['renderReaFlight'] = render_rea_flight; flights_item['renderFlight'] = Object.assign({}, render_flight); } } catch (error) { console.log('数据有误,处理失败,请检查数据'); throw error; } finally { return flights_item; } } public basicDataTransHandle(item, airports, citys, airlines, flightStatus, flightTypes) { try { if (this.orderHandle.isArriFlight(item) || this.orderHandle.isDeptFlight(item)) { //航线处理 let erutCodeArray = item['renderFlight']['ERUT'].split(' - '); let erutChnArray = [] for (let i = 0; i < erutCodeArray.length; i++) { try { let airportIndex = airports.findIndex(val => val.airportCodeIata === erutCodeArray[i]); if (airportIndex > -1) { if (airports[airportIndex].briefNameChn) { erutChnArray.push(airports[airportIndex].briefNameChn); } else { erutChnArray.push(airports[airportIndex].airportNameChn); } } else { erutChnArray.push(erutCodeArray[i]); } } catch (error) { erutChnArray.push(erutCodeArray[i]); } } item['renderFlight']['ERUT'] = erutChnArray.join(' - '); //航空公司处理 let airlineIndex = airlines.findIndex(val => val.airlineCode === item['renderFlight']['ALCD']); item['renderFlight']['ALCD'] = airlines[airlineIndex].airlineName; //运营状态处理 item['renderFlight']['FTSS'] = flightStatus.find(val => val.sttc === item['renderFlight']['FTSS']).stdc; //航班类型处理 item['renderFlight']['FLTY'] = flightTypes.find(val => val.flightTypeCode === item['renderFlight']['FLTY']).flightTypeNameCn; } else { //航线处理 let erutLinkCodeArray = item['renderFlight']['ERUT'].split(' - '); let erutLinkChnArray = [] for (let i = 0; i < erutLinkCodeArray.length; i++) { try { let airportIndex = airports.findIndex(val => val.airportCodeIata === erutLinkCodeArray[i]); if (airportIndex > -1) { if (airports[airportIndex].briefNameChn) { erutLinkChnArray.push(airports[airportIndex].briefNameChn); } else { erutLinkChnArray.push(airports[airportIndex].airportNameChn); } } else { erutLinkChnArray.push(erutLinkCodeArray[i]); } } catch (error) { erutLinkChnArray.push(erutLinkCodeArray[i]); } } item['renderFlight']['ERUT'] = erutLinkChnArray.join(' - '); //航空公司处理 let airlineLinkIndex = airlines.findIndex(val => val.airlineCode === item['renderFlight']['ALCD']); item['renderFlight']['ALCD'] = airlines[airlineLinkIndex].airlineName; //运营状态处理 let ftssLinkCodeArray = item['renderFlight']['FTSS'].split(' / '); let ftssLinkChnArray = []; for (let i = 0; i < ftssLinkCodeArray.length; i++) { ftssLinkChnArray.push(flightStatus.find(val => val.sttc === ftssLinkCodeArray[i]).stdc) } item['renderFlight']['FTSS'] = ftssLinkChnArray.join(' / '); //航班类型处理 let fltyLinkCodeArray = item['renderFlight']['FLTY'].split(' / '); let fltyLinkChnArray = []; for (let i = 0; i < fltyLinkCodeArray.length; i++) { fltyLinkChnArray.push(flightTypes.find(val => val.flightTypeCode === fltyLinkCodeArray[i]).flightTypeNameCn) } item['renderFlight']['FLTY'] = fltyLinkChnArray.join(' / '); //航线处理 let erutPreCodeArray = item['renderPreFlight']['ERUT'].split(' - '); let erutPreChnArray = [] for (let i = 0; i < erutPreCodeArray.length; i++) { try { let airportIndex = airports.findIndex(val => val.airportCodeIata === erutPreCodeArray[i]); if (airportIndex > -1) { if (airports[airportIndex].briefNameChn) { erutPreChnArray.push(airports[airportIndex].briefNameChn); } else { erutPreChnArray.push(airports[airportIndex].airportNameChn); } } else { erutPreChnArray.push(erutPreCodeArray[i]); } } catch (error) { erutPreChnArray.push(erutPreCodeArray[i]); } } item['renderPreFlight']['ERUT'] = erutPreChnArray.join(' - '); //航空公司处理 let airlinePreIndex = airlines.findIndex(val => val.airlineCode === item['renderPreFlight']['ALCD']); item['renderPreFlight']['ALCD'] = airlines[airlinePreIndex].airlineName; //运营状态处理 item['renderPreFlight']['FTSS'] = flightStatus.find(val => val.sttc === item['renderPreFlight']['FTSS']).stdc //航班类型处理 item['renderPreFlight']['FLTY'] = flightTypes.find(val => val.flightTypeCode === item['renderPreFlight']['FLTY']).flightTypeNameCn; //航线处理 let erutReaCodeArray = item['renderReaFlight']['ERUT'].split(' - '); let erutReaChnArray = [] for (let i = 0; i < erutReaCodeArray.length; i++) { try { let airportIndex = airports.findIndex(val => val.airportCodeIata === erutReaCodeArray[i]); if (airportIndex > -1) { if (airports[airportIndex].briefNameChn) { erutReaChnArray.push(airports[airportIndex].briefNameChn); } else { erutReaChnArray.push(airports[airportIndex].airportNameChn); } } else { erutReaChnArray.push(erutReaCodeArray[i]); } } catch (error) { erutReaChnArray.push(erutReaCodeArray[i]); } } item['renderReaFlight']['ERUT'] = erutReaChnArray.join(' - '); //航空公司处理 let airlineReaIndex = airlines.findIndex(val => val.airlineCode === item['renderReaFlight']['ALCD']); item['renderReaFlight']['ALCD'] = airlines[airlineReaIndex].airlineName; //运营状态处理 item['renderReaFlight']['FTSS'] = flightStatus.find(val => val.sttc === item['renderReaFlight']['FTSS']).stdc //航班类型处理 item['renderReaFlight']['FLTY'] = flightTypes.find(val => val.flightTypeCode === item['renderReaFlight']['FLTY']).flightTypeNameCn; } } catch (error) { console.log('基础数据转换有误,处理失败,请检查数据'); throw error; } finally { return item; } } }