/// <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); }
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); } } }
/// <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); }
/// <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)); }
/// <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); }
/// <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); }
/// <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); }
/// <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)); }
/// <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); }
/// <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); }
/// <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"); }
/// <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")); }
//注意,这里用的是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)); }
// 注意,这里的流量统计不是很准确,是否要在那边记录一个值,看指令是否执行; // 还有,清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); }
/// <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); }
/// <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); }