import dateFormatter from './date-formatter'; export class DynamicFlightOrder { public TOP_1 = 1000000000000; public TOP_2 = 2000000000000; public TOP_3 = 3000000000000; public TOP_4 = 4000000000000; public TOP_5 = 5000000000000; public TOP_6 = 6000000000000; public TOP_7 = 7000000000000; public TOP_8 = 8000000000000; public TOP_9 = 9000000000000; public TOP_10 = 10000000000000; public TOP_11 = 11000000000000; public TOP_12 = 12000000000000; public TOP_13 = 13000000000000; public TOP_14 = 14000000000000; /** * 获取航班实际时间 * @param flight * @return */ public getActualDatetime(flight) { return flight['ACTT']; } /** * 获取航班预计时间 * @param flight * @return */ public getEstimatedDatetime(flight) { return flight['ESTT'] } /** * 获取航班计划时间 * @param flight * @return */ public getScheduledDatetime(flight) { return flight['SODT'] } /** * 判断航班是否是链接航班 * @param flight * @return */ public isLinked(flight) { if (flight['preFlight'] && flight['reaFlight']) { return true } else { return false } } /** * 判断航班是否是纯离港航班 * @param flight * @return */ public isDeptFlight(flight) { if (!flight['preFlight'] && flight['reaFlight']) { return true } else { return false } } /** * 判断航班是否是纯到港航班 * @param flight * @return */ public isArriFlight(flight) { if (flight['preFlight'] && !flight['reaFlight']) { return true; } else { return false; } } /** * 判断航班是否已经前站起飞 * @param flight * @return */ public isFlying(flight) { if (this.isArriFlight(flight) || this.isLinked(flight)) { if (flight['preFlight']['PADT']) { return true; } else { return false; } } else { return false; } } /** * 判断航班是否取消 * @param flight * @return */ public isCancled(flight) { if (this.isArriFlight(flight)) { if (flight['preFlight']['CNCL']) { return true; } else { return false; } } else if (this.isDeptFlight(flight)) { if (flight['reaFlight']['CNCL']) { return true; } else { return false; } } else { return false; } } /** * 判断航班是否延误(只针对纯离港航班或链接航班中的离港航班) * @param flight * @return */ public isDelayed(flight) { if (this.isDeptFlight(flight) || this.isLinked(flight)) { if (flight['reaFlight']['DELY']) { return true } else { return false } } else { return false; } } /** * 判断航班是否已经执行完成 * @param flight * @return */ public isDone(flight) { if (this.isLinked(flight) || this.isDeptFlight(flight)) { if (!this.getActualDatetime(flight['reaFlight'])) { return false; } else { return true; } } else if (this.isArriFlight(flight)) { if (!this.getActualDatetime(flight['preFlight'])) { return false; } else { return true; } } else { return false; } } /** * 判断航班是否开始登机 * @param flight * @return */ public startBoading(flight) { if (this.isLinked(flight) || this.isDeptFlight(flight)) { if (!flight['reaFlight']['BOTM']) { return false; } else { return true; } } else { return false; } } /** * 判断航班是否正在登机中 * @param flight * @return */ public isBoading(flight) { if (this.isLinked(flight) || this.isDeptFlight(flight)) { if (flight['reaFlight']['BOTM'] && !(flight['reaFlight']['GTDT'] && flight['reaFlight']['GTDT']['GCTM'])) { return true; } else { return false; } } else { return false; } } /** * 判断航班是否登机结束 * @param flight * @return */ public isOverBoading(flight) { if (this.isLinked(flight) || this.isDeptFlight(flight)) { if (flight['reaFlight']['GTDT'] && flight['reaFlight']['GTDT']['GCTM']) { return true; } else { return false; } } else { return false; } } /** * 行排序规则方法 * @param flight * @return */ public sequence(flight) { let dateTag: number = 10; let dateToCompare = new Date().getTime(); if (!this.isCancled(flight) && !this.isDone(flight) && this.isDelayed(flight)) { if (this.isLinked(flight)) { if (this.getActualDatetime(flight['preFlight']) && !this.getActualDatetime(flight['reaFlight'])) { dateToCompare = new Date(dateFormatter(this.getActualDatetime(flight['preFlight']))).getTime(); dateTag = this.TOP_1; } else { dateToCompare = new Date(dateFormatter(this.getScheduledDatetime(flight['reaFlight']))).getTime(); dateTag = this.TOP_2; } } else { dateToCompare = new Date(dateFormatter(this.getScheduledDatetime(flight['reaFlight']))).getTime(); dateTag = this.TOP_3; } return dateToCompare + dateTag; } if (!this.isCancled(flight) && !this.isDone(flight) && this.isBoading(flight)) { dateToCompare = new Date(dateFormatter(this.getScheduledDatetime(flight['reaFlight']))).getTime(); dateTag = this.TOP_4; return dateToCompare + dateTag; } if (!this.isCancled(flight) && !this.isDone(flight) && this.isFlying(flight) && !this.getActualDatetime(flight['preFlight'])) { if (this.getEstimatedDatetime(flight['preFlight'])) { dateToCompare = new Date(dateFormatter(this.getEstimatedDatetime(flight['preFlight']))).getTime(); } else { dateToCompare = new Date(dateFormatter(this.getScheduledDatetime(flight['preFlight']))).getTime(); } dateTag = this.TOP_5; return dateToCompare + dateTag; } if (!this.isCancled(flight) && !this.isDone(flight) && this.isLinked(flight) && this.getActualDatetime(flight['preFlight']) && !this.getActualDatetime(flight['reaFlight'])) { dateToCompare = new Date(dateFormatter(this.getActualDatetime(flight['preFlight']))).getTime(); dateTag = this.TOP_6; return dateToCompare + dateTag; } if (!this.isCancled(flight) && !this.isDone(flight) && this.isDeptFlight(flight) && !this.startBoading(flight)) { dateToCompare = new Date(dateFormatter(this.getScheduledDatetime(flight['reaFlight']))).getTime(); dateTag = this.TOP_7; return dateToCompare + dateTag; } if (!this.isCancled(flight) && this.isArriFlight(flight) && this.isDone(flight)) { dateToCompare = new Date(dateFormatter(this.getActualDatetime(flight['preFlight']))).getTime(); dateTag = this.TOP_8; return dateToCompare + dateTag; } if (!this.isCancled(flight) && !this.isDone(flight) && this.isOverBoading(flight)) { dateToCompare = new Date(dateFormatter(this.getScheduledDatetime(flight['reaFlight']))).getTime(); dateTag = this.TOP_9; return dateToCompare + dateTag; } if (!this.isCancled(flight) && !this.isDone(flight) && !this.isFlying(flight)) { if (this.isLinked(flight)) { dateToCompare = new Date(dateFormatter(this.getScheduledDatetime(flight['reaFlight']))).getTime(); dateTag = this.TOP_10; } else if (this.isArriFlight(flight)) { dateToCompare = new Date(dateFormatter(this.getScheduledDatetime(flight['preFlight']))).getTime(); dateTag = this.TOP_11; } return dateToCompare + dateTag; } if (!this.isCancled(flight) && this.isDone(flight) && (this.isLinked(flight) || this.isDeptFlight(flight))) { dateToCompare = new Date(dateFormatter(this.getActualDatetime(flight['reaFlight']))).getTime(); dateTag = this.TOP_12; return dateToCompare + dateTag; } if (this.isCancled(flight)) { if (this.isDeptFlight(flight)) { dateToCompare = new Date(dateFormatter(this.getScheduledDatetime(flight['reaFlight']))).getTime(); } else { dateToCompare = new Date(dateFormatter(this.getScheduledDatetime(flight['preFlight']))).getTime(); } dateTag = this.TOP_13; return dateToCompare + dateTag; } return this.TOP_14 } }