Example #1
0
        /// <summary>
        /// 查询订票后价格
        /// </summary>
        /// <returns>执行结果</returns>
        public static ExecuteResult <IEnumerable <PriceView> > QueryPriceByPNR(PNRPair pnrPair, PassengerType passengerType, Guid oemId)
        {
            // 参数验证
            if (PNRPair.IsNullOrEmpty(pnrPair))
            {
                throw new ArgumentException("旅客订座记录编码");
            }

            // 这里到底是执行了RT还是RTX呢,PAT现在只在执行订座时会提,所以提取时应使用的订座配置;
            const ConfigUseType type = ConfigUseType.Reserve;
            var userName             = GetUserName(oemId, type);

            if (userName == null)
            {
                return(new ExecuteResult <IEnumerable <PriceView> >
                {
                    Result = null,
                    Success = false,
                    Message = "OEM未设置可用配置,且没有设置使用平台配置。"
                });
            }

            var repository = Factory.CreateCommandRepository();
            var result     = repository.PnrPat(pnrPair.PNR, passengerType, userName);

            if (result.Success)
            {
                PidManagementService.SaveCounter(oemId, HasUsePlatformConfig(oemId, type));
            }

            return(result);
        }
Example #2
0
        public static bool HasUsePlatformConfig(Guid oemId, ConfigUseType type)
        {
            if (oemId == Guid.Empty)
            {
                return(true);
            }

            var config = OEMAirlineConfigService.QueryConfig(oemId);

            if (config.Config.ContainsKey(type))
            {
                return(false);
            }
            else
            {
                if (OEMService.QueryOEMById(oemId).UseB3BConfig)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
Example #3
0
        /// <summary>
        /// 将待授权的旅客订座记录编号的权限授予指定的OfficeNo
        /// </summary>
        /// <param name="pnrPair">待授权的旅客订座记录编号</param>
        /// <param name="officeNo">待授权的OfficeNo</param>
        /// <param name="oemId"> </param>
        /// <returns></returns>
        /// <remarks>
        /// 使用在订好编码后,向出票方授权;
        /// </remarks>
        public static ExecuteResult <string> AuthorizeByOfficeNo(PNRPair pnrPair, string officeNo, Guid oemId)
        {
            // 参数验证
            if (PNRPair.IsNullOrEmpty(pnrPair))
            {
                throw new ArgumentException("旅客订座记录编码");
            }
            const ConfigUseType type = ConfigUseType.Reserve;
            var userName             = GetUserName(oemId, type);

            var officeNumber = GetOfficeNumber(oemId, type);

            if (userName == null || officeNumber == null)
            {
                return(new ExecuteResult <string>
                {
                    Result = null,
                    Success = false,
                    Message = "OEM未设置可用配置,且没有设置使用平台配置。"
                });
            }
            var repository = Factory.CreateCommandRepository();
            var result     = repository.Authorize(pnrPair.PNR, officeNumber, new string[] { officeNo }, userName);

            if (result.Success)
            {
                PidManagementService.SaveCounter(oemId, true);
            }

            return(result);
        }
Example #4
0
        /// <summary>
        /// 根据给出的订座信息和OEM编号,生成订座指令字串。
        /// </summary>
        /// <param name="reservationInfo">订座信息</param>
        /// <param name="oemId">OEM编号</param>
        /// <returns>订座指令字串</returns>
        public static string GetBookingTicketsString(ReservationInfo reservationInfo, Guid oemId)
        {
            const ConfigUseType type = ConfigUseType.Reserve;
            var officeNumber         = GetOfficeNumber(oemId, type);

            return(CommandBuilderService.GetBookInstructionSet(reservationInfo, officeNumber));
        }
Example #5
0
        /// <summary>
        /// 机票预定
        /// </summary>
        /// <param name="reservationInfo">预订信息</param>
        /// <param name="oemId"> </param>
        /// <param name="officeNumber"> </param>
        /// <returns></returns>
        public static ExecuteResult <ReservedPnr> ReserveTickets(ReservationInfo reservationInfo, Guid oemId)
        {
            if (reservationInfo == null)
            {
                throw new ArgumentException("预订信息不能为空");
            }

            const ConfigUseType type = ConfigUseType.Reserve;
            var userName             = GetUserName(oemId, type);
            var officeNumber         = GetOfficeNumber(oemId, type);

            if (userName == null || officeNumber == null)
            {
                return(new ExecuteResult <ReservedPnr>
                {
                    Result = null,
                    Success = false,
                    Message = "OEM未设置可用配置,且没有设置使用平台配置。"
                });
            }

            var repository    = Factory.CreateCommandRepository();
            var executeResult = repository.Book(reservationInfo, officeNumber, userName);

            if (executeResult.Success)
            {
                var reservedPnr = executeResult.Result;
                var pnrHistory  = new PNRHistory(0, DateTime.Now, reservedPnr.PnrPair.PNR, reservedPnr.OfficeNo, 1);
                HistoryService.Save(pnrHistory);
                PidManagementService.SaveCounter(oemId, HasUsePlatformConfig(oemId, type));
            }

            return(executeResult);
        }
Example #6
0
        /// <summary>
        /// 根据航班号和航班日期,获取经停点列表信息
        /// </summary>
        /// <param name="flightNumber">航班号</param>
        /// <param name="flightDate">航班日期</param>
        /// <param name="oemId"> </param>
        /// <returns>经停点列表</returns>
        public static ExecuteResult <List <TransitPoint> > GetTransitPoints(string flightNumber, DateTime flightDate, Guid oemId)
        {
            // 参数验证
            if (flightNumber == null)
            {
                throw new ArgumentException("航班号不能为空");
            }

            const ConfigUseType type = ConfigUseType.Query;
            var userName             = GetUserName(oemId, type);

            if (userName == null)
            {
                return(new ExecuteResult <List <TransitPoint> >()
                {
                    Result = null,
                    Success = false,
                    Message = "OEM未设置可用配置,且没有设置使用平台配置。"
                });
            }

            var repository = Factory.CreateCommandRepository();
            var result     = repository.Ff(flightNumber, flightDate, userName);

            if (result.Success)
            {
                PidManagementService.SaveCounter(oemId, HasUsePlatformConfig(oemId, type));
            }

            return(result);
        }
Example #7
0
        /// <summary>
        /// 根据出发机场、到达机场以及航班日期,获取符合条件的航班信息
        /// </summary>
        /// <param name="departureAirport">出发机场</param>
        /// <param name="arrivalAirport">到达机场</param>
        /// <param name="flightDate">航班日期</param>
        /// <param name="oemId"> </param>
        /// <returns>航班列表</returns>
        public static ExecuteResult <IEnumerable <Flight> > QueryFlight(string departureAirport, string arrivalAirport, DateTime flightDate, Guid oemId)
        {
            // 参数验证
            if (string.IsNullOrEmpty(departureAirport) || string.IsNullOrEmpty(arrivalAirport))
            {
                throw new ArgumentException("航段信息不能为空");
            }

            const ConfigUseType type = ConfigUseType.Query;
            var userName             = GetUserName(oemId, type);

            if (userName == null)
            {
                return(new ExecuteResult <IEnumerable <Flight> >()
                {
                    Result = null,
                    Success = false,
                    Message = "OEM未设置可用配置,且没有设置使用平台配置。"
                });
            }

            var repository = Factory.CreateCommandRepository();
            var carrier    = "";
            var result     = repository.Avh(departureAirport, arrivalAirport, flightDate, carrier, true, userName);

            if (result.Success)
            {
                PidManagementService.SaveCounter(oemId, HasUsePlatformConfig(oemId, type));
            }

            return(result);
        }
Example #8
0
        /// <summary>
        /// 获取指定航空公司下的某城市对的运价信息。
        /// </summary>
        /// <param name="airportPair">机场对</param>
        /// <param name="flightDate">航班时间</param>
        /// <param name="carrier">承运人</param>
        /// <param name="oemId">OEM编号</param>
        /// <returns>运价</returns>
        public static ExecuteResult <AirportPairFares> GetFare(AirportPair airportPair, DateTime flightDate, string carrier, Guid oemId)
        {
            const ConfigUseType type = ConfigUseType.Reserve;
            var userName             = GetUserName(oemId, type);

            var repository = Factory.CreateCommandRepository();

            return(repository.Fd(airportPair, flightDate, carrier, userName));
        }
Example #9
0
        /// <summary>
        /// 查询单页航班数据,用于免票时获取机型
        /// </summary>
        /// <param name="departure"></param>
        /// <param name="arrival"></param>
        /// <param name="takeoffTime"></param>
        /// <param name="oemId"> </param>
        /// <returns></returns>
        public static ExecuteResult <IEnumerable <Flight> > QuerySingleFlight(string departure, string arrival, DateTime takeoffTime, Guid oemId)
        {
            const ConfigUseType type = ConfigUseType.Query;
            var userName             = GetUserName(oemId, type);
            var executeResult        = new ExecuteResult <IEnumerable <Flight> >()
            {
                Message = "暂时不支持此方法",
                Success = false
            };

            return(executeResult);
        }
Example #10
0
        /// <summary>
        /// 根据给出的OEM编号和类型,得到其Office号;
        /// </summary>
        /// <param name="oemId"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        private static string GetOfficeNumber(Guid oemId, ConfigUseType type)
        {
            var config       = OEMAirlineConfigService.QueryConfig(oemId);
            var officeNumber = config.Config.ContainsKey(type) ? config.Config[type].Item2 : null;

            if (string.IsNullOrEmpty(officeNumber) && OEMService.QueryOEMById(oemId).UseB3BConfig)
            {
                config       = OEMAirlineConfigService.QueryConfig(Guid.Empty);
                officeNumber = config.Config.ContainsKey(type) ? config.Config[type].Item2 : null;
            }

            return(officeNumber);
        }
Example #11
0
        /// <summary>
        /// 结束信箱处理,并根据参数,决定当前邮件是否删除。
        /// </summary>
        /// <param name="deleteCurrentQueue">是否删除当前信件</param>
        /// <param name="oemId"> </param>
        public static void EndProcessQueue(bool deleteCurrentQueue, Guid oemId)
        {
            const ConfigUseType type = ConfigUseType.QS;
            var userName             = GetUserName(oemId, type);

            if (userName == null)
            {
                return;
            }
            PidManagementService.SaveCounter(oemId, HasUsePlatformConfig(oemId, type));
            var          repository   = Factory.CreateVeWebCommandRepository();
            const string option       = "E";
            var          returnString = deleteCurrentQueue ? repository.Qn(option, userName, "123") : repository.Qd(option, userName, "123");
        }
Example #12
0
        /// <summary>
        /// 根据邮箱类型,开始处理这种类型的邮箱,并得到此邮箱中的第一封信。
        /// </summary>
        /// <param name="queueType">邮箱类型</param>
        /// <param name="oemId"> </param>
        /// <returns>信件内容</returns>
        public static string StartProcessQueueAndGetTheFirst(QueueType queueType, Guid oemId)
        {
            const ConfigUseType type = ConfigUseType.QS;
            var userName             = GetUserName(oemId, type);

            if (userName == null)
            {
                return("");
            }
            PidManagementService.SaveCounter(oemId, HasUsePlatformConfig(oemId, type));
            var repository = Factory.CreateVeWebCommandRepository();

            return(repository.Qs(queueType, userName, "123"));
        }
Example #13
0
        //注意,这里用的是VeWeb
        /// <summary>
        /// 获取邮箱列表
        /// </summary>
        /// <param name="oemId"> </param>
        /// <returns></returns>
        public static List <QueueSummary> GetMailList(Guid oemId)
        {
            const ConfigUseType type = ConfigUseType.QS;
            var userName             = GetUserName(oemId, type);
            var officeNumber         = GetOfficeNumber(oemId, type);

            if (userName == null || officeNumber == null)
            {
                return(new List <QueueSummary>());
            }
            var repository = Factory.CreateVeWebCommandRepository();

            PidManagementService.SaveCounter(oemId, HasUsePlatformConfig(oemId, type));
            return(repository.Qt(userName, "123", officeNumber));
        }
Example #14
0
        // 注意,这里的流量统计不是很准确,是否要在那边记录一个值,看指令是否执行;
        // 还有,清Q时结束的话,如果没有获取到,不会并发问题吧?

        /// <summary>
        /// 根据给出的OEM编号和类型,得到PID用户名;
        /// </summary>
        /// <param name="oemId"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        private static string GetUserName(Guid oemId, ConfigUseType type)
        {
            // 取得配置信息;
            var config = OEMAirlineConfigService.QueryConfig(oemId);
            // 在配置信息中查找指定类型的配置,若存在,赋值,否则为空;
            var userName = config.Config.ContainsKey(type) ? config.Config[type].Item1 : null;

            if (userName == string.Empty)
            {
                return(null);
            }

            // 若用户名为空,但要求使用平台配置,则此时取得平台配置;
            if (userName == null && OEMService.QueryOEMById(oemId).UseB3BConfig)
            {
                config   = OEMAirlineConfigService.QueryConfig(Guid.Empty);
                userName = config.Config.ContainsKey(type) ? config.Config[type].Item1 : null;
            }

            return(userName);
        }
Example #15
0
        /// <summary>
        /// 根据PNR编号,取消指定姓名的旅客的预定
        /// </summary>
        /// <param name="pnrPair">PNR编号</param>
        /// <param name="voyages">姓名</param>
        /// <param name="oemId"> </param>
        /// <returns>执行结果</returns>
        public static bool CancelPassengersByPNR(string[] passengerNames, PNRPair pnrPair, Guid oemId)
        {
            // 参数验证
            if (PNRPair.IsNullOrEmpty(pnrPair))
            {
                throw new ArgumentException("旅客订座记录编码");
            }

            const ConfigUseType type = ConfigUseType.Reserve;
            var userName             = GetUserName(oemId, type);

            if (userName == null)
            {
                return(false);
            }
            var repository = Factory.CreateCommandRepository();
            var result     = repository.Xe(pnrPair.PNR, passengerNames, userName);

            PidManagementService.SaveCounter(oemId, HasUsePlatformConfig(oemId, type));
            return(result);
        }
Example #16
0
        /// <summary>
        /// 获取航班变动信息列表,并根据参数,决定是否保留此信箱信件。
        /// </summary>
        /// <param name="deleteCurrentQueue">是否删除信件</param>
        /// <returns>信件列表</returns>
        public static List <Service.Queue.Domain.Queue> GetScheduleChangeQueue(bool deleteCurrentQueue, Guid oemId)
        {
            const ConfigUseType type = ConfigUseType.QS;
            var officeNumber         = GetOfficeNumber(oemId, type);
            // 设定处理的邮箱类型为航班变动;
            const QueueType queueType = QueueType.SC;
            // 获取邮件列表;
            var queueSummaries = GetMailList(oemId);
            // 获取航班变动信箱信息;
            var scQueue = (from q in queueSummaries
                           where q.Name == "SC"
                           select q).FirstOrDefault();

            var queues = new List <Service.Queue.Domain.Queue>();

            // 若有未处理邮件,则执行清理操作;
            if (scQueue != null && scQueue.UnprocessedNumber > 0)
            {
                // 打开航班变更信箱,并获取第一封信;
                var rawData = StartProcessQueueAndGetTheFirst(queueType, oemId);
                var count   = scQueue.UnprocessedNumber;

                // 循环取得信件;
                var now = DateTime.Now;
                while (count > 0 && Service.Queue.Domain.Queue.Validate(rawData, officeNumber))
                {
                    var queue = new Service.Queue.Domain.Queue(now, count, rawData, queueType, officeNumber);
                    queues.Add(queue);
                    rawData = GetNextQueue(deleteCurrentQueue, oemId);
                    count--;
                }

                EndProcessQueue(deleteCurrentQueue, oemId);
            }

            return(queues);
        }