private void CheckTransfer(Transfer transfer) { if (ForbiddenTransfer.Contains(transfer.Airport)) { InvalidRoute(); AddMessage($"不可在 {transfer.Airport} 转机。"); return; } var sameDay = transfer.LocalDepartureTime.Date == transfer.LocalArrivalTime.Date; var duration = (transfer.LocalDepartureTime - transfer.LocalArrivalTime).TotalSeconds; if (duration <= 0) { InvalidRoute(); AddMessage($"{transfer.Airport} 转机时后程起飞比前程降落更早。"); return; } var mct = GetMCT(transfer.Airport, transfer.ArrivalAirlineCode, transfer.DepartureAirlineCode); if (mct > duration / 60) { SuspiciousRoute(); AddMessage($"{transfer.Airport} 转机时间可能不足。建议至少 {mct} 分钟。"); } if (duration >= 86400 && !AllowLongTransfer.Contains(transfer.Airport)) { InvalidRoute(); AddMessage($"{transfer.Airport} 转机须在 24 小时内。"); return; } if (duration >= 86400 * 2 && transfer.Airport == "KUL") { InvalidRoute(); AddMessage($"{transfer.Airport} 转机须在 48 小时内。"); return; } if (transfer.Airport == "AUH") { if (duration >= 6 * 3600) { InvalidRoute(); AddMessage($"AUH 转机须在 6 小时内。"); return; } else { AddMessage("AUH 转机需要联程票。"); return; } } if (duration >= 12 * 3600 && transfer.Airport == "RUH") { InvalidRoute(); AddMessage($"RUH 转机须在 6 小时内。"); return; } if (!sameDay && SameDayOnlyTransfer.Contains(transfer.Airport)) { InvalidRoute(); AddMessage($"{transfer.Airport} 转机须在同日。"); return; } switch (transfer.Airport) { case "YVR": if (!sameDay && transfer.LocalDepartureTime.Hour >= 4) { AddMessage("过夜转机需在机场 Fairmont 有预订,并且不能离开机场。"); } break; case "SVO": if (Segments.Count != 2 || transfer.DepartureAirlineCode != "SU" || transfer.ArrivalAirlineCode != "SU" || !AirportInEurope.Contains(Segments[0].AirlineCode)) { AddMessage("不符合俄罗斯转机要求。"); InvalidRoute(); return; } break; case "LHR": RequireVisa("美国/加拿大/英国签证"); break; case "DOH": if (Segments.Count != 2) { AddMessage("不符合 EK 转机要求。"); InvalidRoute(); return; } break; case "MNL": AddMessage("菲律宾有可能不能转机。"); SuspiciousRoute(); break; case "PNH": case "KOS": RequireVisa("柬埔寨商务签"); break; case "HKG": if (transfer.ArrivalAirlineCode != transfer.DepartureAirlineCode || transfer.ArrivalAirlineCode != "CX") { InvalidRoute(); AddMessage("不满足香港转机要求。"); } break; } }
private void CheckTransferSimple(Transfer transfer) { var specialTransferTime = false; switch (transfer.Airport) { case "YUL": case "SVO": case "HKG": case "HND": case "SIN": case "BKK": case "AKL": case "SYD": case "TPE": case "TSA": InvalidRoute(); AddMessage("不可在该机场转机。"); break; case "YVR": case "YYZ": AddMessage("您的整体行程需要满足 China Transit Program。请使用高级版或者查询相关资料。"); break; case "LHR": RequireVisa("有效美国/加拿大/英国签证"); break; case "MNL": AddMessage("菲律宾有可能不能转机。"); SuspiciousRoute(); break; case "PNH": case "KOS": RequireVisa("柬埔寨商务签"); break; case "LIS": AddMessage("如果是葡萄牙航空转首都航空,托运行李请咨询首都航空工作人员,有可能不能直挂。"); break; case "NRT": case "KIX": case "ADD": AddMessage("请注意转机需要在同一日内。(非 24 小时内)即前一半航班的降落时间和后一半航班的起飞时间在当地同一天。"); specialTransferTime = true; break; case "RUH": AddMessage("利亚德转机需要在 6 小时内。"); specialTransferTime = true; break; case "AUH": AddMessage("转机需要在 6 小时内,并且需要是联程票(一张票,而非分开预订的票)。"); specialTransferTime = true; break; case "KUL": AddMessage("转机需要在 48 小时内。"); specialTransferTime = true; break; } if (!specialTransferTime && Status != RouteStatus.Invalid) { AddMessage("除非特别说明的情况,否则转机需要在 24 小时内"); } }