Example #1
0
        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;
            }
        }
Example #2
0
        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 小时内");
            }
        }