private Policy GetLocalPolicy(PolicyParam policyParam, string policyId, string innerPlatformCode, UserRelation userRealtion, bool IspolicyIsNull, PolicyService policyService, Policy localPolicy) { PnrData pnrData = PnrHelper.GetPnrData(order.PnrContent); if (IspolicyIsNull) { //全部查询匹配一下 localPolicy = policyService.GetLocalPolicy(userRealtion, innerPlatformCode, policyParam, pnrData).Find((p) => p.PolicyId == policyId); if (localPolicy == null) { localPolicy = policyService.GetSharePolicy(userRealtion, innerPlatformCode, policyParam, pnrData).Find((p) => p.PolicyId == policyId); } if (localPolicy == null && policyId.StartsWith(userRealtion.carrier.Code + "_")) { //本地 默认 localPolicy = policyService.GetDefaultPolicy(userRealtion, innerPlatformCode, policyParam, pnrData, policyId).FirstOrDefault(); } } else { //非接口重新获取政策 //本地 localPolicy = policyService.GetLocalPolicy(userRealtion, innerPlatformCode, policyParam, pnrData).Find((p) => p.PolicyId == policyId); if (localPolicy == null) { //共享 异地 localPolicy = policyService.GetSharePolicy(userRealtion, innerPlatformCode, policyParam, pnrData).Find((p) => p.PolicyId == policyId); } if (localPolicy == null) { if (policyId.StartsWith(userRealtion.carrier.Code + "_")) { //本地 默认 localPolicy = policyService.GetDefaultPolicy(userRealtion, innerPlatformCode, policyParam, pnrData, policyId).FirstOrDefault(); } } } return(localPolicy); }
public void Test2() { BootStrapper.Boot(); string pnrContent = @" 1.陈绪炎 2.陈耀胜 3.李祖新 4.逄增奎 5.王勇 6.易小平 HTFT12 7. CA4487 Y SU02NOV CTUJZH HK6 1405 1500 E T2-- 8.CTU/T CTU/T 028-85512345/CTU HUA LONG AIR SERVICE CO.,LTD/YANGHONG ABCDEFG 9.TL/1405/02NOV/CTU186 10.SSR FOID CA HK1 NI420583198402223411/P6 11.SSR FOID CA HK1 NI222426198404075215/P4 12.SSR FOID CA HK1 NI420523196512060013/P3 13.SSR FOID CA HK1 NI422723196608154631/P2 14.SSR FOID CA HK1 NI422723196309291919/P1 15.SSR FOID CA HK1 NI422723196611120037/P5 16.SSR FQTV CA HK1 CTUJZH 4487 Y02NOV CA002810349584/P1 + 17.SSR ADTK 1E BY CTU30OCT14/1250 OR CXL CA ALL SEGS - 18.OSI CA CTCM18215523063/P5 19.OSI CA CTCT13518105618 20.RMK CA/NW2W0K 21.CTU186 >PAT:A 01 Y FARE:CNY1310.00 TAX:CNY50.00 YQ:CNY50.00 TOTAL:1410.00 SFC:01 SFN:01 "; PnrData pnrData = PnrHelper.GetPnrData(pnrContent); string PolicyId = "13703423"; PlatformPolicy platformPolicy = PlatformFactory.GetPlatformByCode("517").GetPoliciesByPnrContent(pnrContent, true, pnrData).Find((p) => p.Id == PolicyId); return; OrderService IOrderService = ObjectFactory.GetInstance <OrderService>(); AuthManager.SaveUser(new BPiaoBao.SystemSetting.Domain.Services.Auth.CurrentUserInfo() { Code = "5105241974", OperatorAccount = "梦之旅", OperatorName = "陈良文" }); IOrderService.CreateInterfaceOrder("517", "04787578460867039561"); }
private void SetInterface(string platformCode, string operatorName, string source, ref decimal TotlePaidPirce, PlatformPolicy policy, UserRelation userRealtion, ref PlatformOrder platformOrder, PnrData pnrData) { #region 接口政策信息 order.Policy.AreaCity = policy.AreaCity; order.Policy.PolicyId = policy.Id; order.Policy.PlatformCode = platformCode; order.Policy.OriginalPolicyPoint = policy.PolicyPoint; order.Policy.DownPoint = 0m; order.Policy.PaidPoint = policy.PolicyPoint; if (source != "back") { order.Policy.PolicyPoint = order.Policy.PaidPoint; } order.Policy.ReturnMoney = policy.ReturnMoney; order.Policy.IsLow = policy.IsLow; order.Policy.SeatPrice = policy.SeatPrice; order.Policy.ABFee = policy.ABFee; order.Policy.RQFee = policy.RQFee; order.Policy.Remark = policy.Remark; order.Policy.IsChangePNRCP = policy.IsChangePNRCP; order.Policy.IsSp = policy.IsSp; order.Policy.PolicyType = policy.PolicyType; order.Policy.WorkTime = policy.WorkTime; order.Policy.ReturnTicketTime = policy.ReturnTicketTime; order.Policy.AnnulTicketTime = policy.AnnulTicketTime; order.Policy.CPOffice = policy.CPOffice; order.Policy.OrderId = order.OrderId; order.Policy.PolicySourceType = EnumPolicySourceType.Interface; order.Policy.CarryCode = order.SkyWays[0].CarrayCode; order.Policy.IssueSpeed = policy.IssueSpeed; order.Policy.TodayGYCode = policy.TodayGYCode; #endregion }
public override object Execute() { //记录时间 StringBuilder sbLog = new StringBuilder(); Stopwatch watch = new Stopwatch(); try { watch.Start(); string platformCode = getParame("platformCode").ToString(); string policyId = getParame("policyId").ToString(); string operatorName = getParame("operatorName").ToString(); string source = getParame("source").ToString(); PolicyDto policyUI = source != "back" ? (getParame("policy") as PolicyDto) : null; decimal TotlePaidPirce = 0m; OldOutOrderId = order.OutOrderId; string innerPlatformCode = "系统"; DataBill databill = new DataBill(); DomesticService domesticService = ObjectFactory.GetInstance <DomesticService>(); UserRelation userRealtion = domesticService.GetUserRealtion(order.BusinessmanCode); bool IspolicyIsNull = false; if (policyUI != null) { //赋值 order.Policy = PolicyDtoPolicy(policyUI, order.Policy, source); } else { #region 原获取政策 PolicyParam policyParam = new PolicyParam(); policyParam.code = order.BusinessmanCode; policyParam.PnrContent = order.PnrContent; policyParam.OrderId = order.OrderId; policyParam.OrderType = order.OrderType; policyParam.OrderSource = order.OrderSource; policyParam.IsChangePnrTicket = order.IsChangePnrTicket; policyParam.IsDestine = order.OrderSource == EnumOrderSource.WhiteScreenDestine ? true : false; Passenger pasData = order.Passengers.Where(p => p.PassengerType != EnumPassengerType.Baby).FirstOrDefault(); if (pasData != null) { policyParam.defFare = pasData.SeatPrice.ToString(); policyParam.defTAX = pasData.ABFee.ToString(); policyParam.defRQFare = pasData.RQFee.ToString(); } if (order.Policy == null) { IspolicyIsNull = true; order.Policy = new Policy(); } Policy localPolicy = null; PlatformPolicy policy = null; PlatformOrder platformOrder = null; PolicyService policyService = ObjectFactory.GetInstance <PolicyService>(); watch.Stop(); sbLog.AppendFormat("初始话变量时间:{0}\r\n", watch.Elapsed.ToString()); watch.Restart(); if (platformCode != innerPlatformCode) { PnrData pnrData = PnrHelper.GetPnrData(order.PnrContent); policy = PlatformFactory.GetPlatformByCode(platformCode).GetPoliciesByPnrContent(order.PnrContent, order.IsLowPrice, pnrData).Find((p) => p.Id == policyId); watch.Stop(); sbLog.AppendFormat("0.调用方法【GetPlatformByCode】用时:{0}\r\n", watch.Elapsed.ToString()); watch.Restart(); if (policy == null) { localPolicy = GetLocalPolicy(policyParam, policyId, innerPlatformCode, userRealtion, IspolicyIsNull, policyService, localPolicy); watch.Stop(); sbLog.AppendFormat("1.调用方法【GetLocalPolicy】用时:{0}\r\n", watch.Elapsed.ToString()); watch.Restart(); if (localPolicy != null) { order.Policy = localPolicy; } else { throw new OrderCommException("政策发生变动,请重新获取政策!!!"); } } else { SetInterface(platformCode, operatorName, source, ref TotlePaidPirce, policy, userRealtion, ref platformOrder, pnrData); watch.Stop(); sbLog.AppendFormat("2.调用方法【SetInterface】用时:{0}\r\n", watch.Elapsed.ToString()); watch.Restart(); } } else { localPolicy = GetLocalPolicy(policyParam, policyId, innerPlatformCode, userRealtion, IspolicyIsNull, policyService, localPolicy); watch.Stop(); sbLog.AppendFormat("3.调用方法【GetLocalPolicy】用时:{0}\r\n", watch.Elapsed.ToString()); watch.Restart(); if (localPolicy == null) { PnrData pnrData = PnrHelper.GetPnrData(order.PnrContent); localPolicy = policyService.GetInterfacePolicy(policyParam, "", userRealtion, pnrData).Find((p) => p.PolicyId == policyId); watch.Stop(); sbLog.AppendFormat("4.调用方法【GetInterfacePolicy】用时:{0}\r\n", watch.Elapsed.ToString()); watch.Restart(); if (localPolicy != null) { policy.AreaCity = localPolicy.AreaCity; policy.Id = localPolicy.PolicyId; policy.PolicyPoint = localPolicy.PolicyPoint; if (source != "back") { policy.PolicyPoint = localPolicy.PaidPoint; } policy.ReturnMoney = localPolicy.ReturnMoney; policy.IsLow = localPolicy.IsLow; policy.SeatPrice = localPolicy.SeatPrice; policy.ABFee = localPolicy.ABFee; policy.RQFee = localPolicy.RQFee; policy.Remark = localPolicy.Remark; policy.IsChangePNRCP = localPolicy.IsChangePNRCP; policy.IsSp = localPolicy.IsSp; policy.PolicyType = localPolicy.PolicyType; policy.WorkTime = localPolicy.WorkTime; policy.ReturnTicketTime = localPolicy.ReturnTicketTime; policy.AnnulTicketTime = localPolicy.AnnulTicketTime; policy.CPOffice = localPolicy.CPOffice; policy.IssueSpeed = localPolicy.IssueSpeed; TotlePaidPirce = platformOrder.TotlePaidPirce; SetInterface(platformCode, operatorName, source, ref TotlePaidPirce, policy, userRealtion, ref platformOrder, pnrData); watch.Stop(); sbLog.AppendFormat("5.调用方法【GetInterfacePolicy】用时:{0}\r\n", watch.Elapsed.ToString()); watch.Restart(); } else { if (localPolicy == null) { throw new OrderCommException("政策发生变动,请重新获取政策!"); } } } else { //赋值 order.Policy = localPolicy; } } #endregion } decimal _OrderMoney = 0m; if (source != "back") { //扣点组类型 DeductionType deductionType = order.Policy.PolicySourceType == EnumPolicySourceType.Local ? DeductionType.Local : (order.Policy.PolicySourceType == EnumPolicySourceType.Share ? DeductionType.Share : DeductionType.Interface); if (policyUI != null) { order.Policy.PolicyPoint = order.Policy.PaidPoint; } PlatformDeductionParam pfDp = new PlatformDeductionParam(); foreach (SkyWay leg in order.SkyWays) { pfDp.FlyLineList.Add(new FlyLine() { CarrayCode = leg.CarrayCode, FromCityCode = leg.FromCityCode, ToCityCode = leg.ToCityCode }); } //匹配扣点规则 domesticService.MatchDeductionRole(order.Policy, pfDp, order.SkyWays[0].CarrayCode, userRealtion.deductionGroup, userRealtion, deductionType); watch.Stop(); sbLog.AppendFormat("6.调用方法【MatchDeductionRole】用时:{0}\r\n", watch.Elapsed.ToString()); watch.Restart(); //佣金 order.Policy.Commission = databill.GetCommission(order.Policy.PolicyPoint, order.Policy.SeatPrice, order.Policy.ReturnMoney); //单人支付金额 根据选择的政策 设置价格 for (int i = 0; i < order.Passengers.Count; i++) { Passenger p = order.Passengers[i]; if (p.PassengerType != EnumPassengerType.Baby) { p.SeatPrice = order.Policy.SeatPrice; p.ABFee = order.Policy.ABFee; p.RQFee = order.Policy.RQFee; p.PayMoney = databill.GetPayPrice(order.Policy.SeatPrice, order.Policy.ABFee, order.Policy.RQFee, order.Policy.PolicyPoint, order.Policy.ReturnMoney); } else { p.PayMoney = databill.GetPayPrice(p.SeatPrice, p.ABFee, p.RQFee, 0, 0); } } _OrderMoney = order.Passengers.Sum(p => p.PayMoney); order.OrderCommissionTotalMoney = order.Passengers.Sum(p => p.PassengerType != EnumPassengerType.Baby ? databill.GetCommission(order.Policy.PolicyPoint, order.Policy.SeatPrice, order.Policy.ReturnMoney) : 0); } #region 支付信息 if (order.OrderPay == null) { order.OrderPay = new OrderPay(); } order.OrderPay.OrderId = order.OrderId; order.OrderPay.PaidMoney = TotlePaidPirce; if (source != "back") { order.OrderPay.PayMoney = _OrderMoney; order.OrderMoney = _OrderMoney; order.OrderPay.PayStatus = EnumPayStatus.NoPay; } order.OrderPay.PaidStatus = EnumPaidStatus.NoPaid; order.OrderPay.TradePoundage = 0m; order.OrderPay.SystemFee = 0m; order.CpOffice = order.Policy.CPOffice; #endregion #region 根据政策扣点明细计算支付分润 if (source != "back") { domesticService.CreateBillDetails(order, userRealtion); watch.Stop(); sbLog.AppendFormat("7.调用方法【CreateBillDetails】用时:{0}\r\n", watch.Elapsed.ToString()); } #endregion order.WriteLog(new OrderLog() { OperationContent = string.Format("{0}选择政策,政策:{1},编号:{2},订单号:{3},出票速度:{4}", source, order.Policy.PolicyPoint, order.Policy.PolicyId, order.OrderId, order.Policy.IssueSpeed), OperationDatetime = DateTime.Now, OperationPerson = operatorName, IsShowLog = false }); order.WriteLog(new OrderLog() { OperationContent = string.Format("选择政策,订单号:{0},出票速度:{1}", order.OrderId, order.Policy.IssueSpeed), OperationDatetime = DateTime.Now, OperationPerson = operatorName, IsShowLog = true }); if (source == "back") { //order.ChangeStatus(EnumOrderStatus.WaitAndPaid); order.ChangeStatus(EnumOrderStatus.PayWaitCreatePlatformOrder); } else { order.ChangeStatus(EnumOrderStatus.NewOrder); } } finally { if (sbLog.ToString() != "") { new CommLog().WriteLog("NewSelectPolicyBehavior", sbLog.ToString()); } } if (order.Policy.PolicySourceType == EnumPolicySourceType.Interface) { order.Policy.Code = string.Empty; order.Policy.Name = string.Empty; order.Policy.CashbagCode = string.Empty; } return(null); }
public Order CreateOrderByPnrContent(Order order, string pnrContent, EnumPnrImportType PnrImportType, CreateOrderParam OrderParam, string businessmanCode, string CarrierCode, string businessmanName, string account, bool IsChangePnrTicket) { #region 验证PNR if (pnrContent.ToUpper().Contains("NO PNR")) { pnrContent = pnrContent.ToUpper().Replace("NO PNR", ""); } FormatPNR format = new FormatPNR(); if (format.GetPnrContentByteLength(pnrContent) > 2000) { throw new PnrAnalysisFailException("RT和PAT内容长度超出范围[0-2000]个字符,请去掉多余的空格,再导入!"); } if (pnrContent.Trim().Contains("授权")) { throw new PnrAnalysisFailException(pnrContent); } if (pnrContent.Trim().Contains("数据包不完整")) { throw new PnrAnalysisFailException(pnrContent); } string Msg = ""; PnrModel pnrMode = null; PatModel patMode = null; PatModel infPatMode = null; string Pnr = string.Empty; PnrAnalysis.Model.SplitPnrCon splitPnrCon = null; //PNR内容导入 if (OrderParam == null) { splitPnrCon = format.GetSplitPnrCon(pnrContent); string RTCon = splitPnrCon.RTCon; string PatCon = splitPnrCon.AdultPATCon != string.Empty ? splitPnrCon.AdultPATCon : splitPnrCon.ChdPATCon; if (string.IsNullOrEmpty(PatCon) || string.IsNullOrEmpty(RTCon) || !PatCon.Contains("PAT:A")) { throw new PnrAnalysisFailException("RT和PAT内容不能为空!"); } //去重复和备注 string pnrRemark = string.Empty; RTCon = format.DelRepeatRTCon(RTCon, ref pnrRemark); if (!string.IsNullOrEmpty(pnrRemark)) { PatCon = PatCon.Replace(pnrRemark, ""); } pnrContent = RTCon + "\r\n" + PatCon; Pnr = format.GetPNR(RTCon, out Msg); if (string.IsNullOrEmpty(Pnr) || !format.IsPnr(Pnr)) { throw new PnrAnalysisFailException("PNR内容提取编码失败,请检查编码内容!"); } pnrMode = format.GetPNRInfo(Pnr, RTCon, false, out Msg); if (pnrMode == null || pnrMode._LegList.Count == 0) { throw new PnrAnalysisFailException("PNR内容解析航段信息失败,请检查编码内容"); } //成人或者儿童PAT patMode = format.GetPATInfo(PatCon, out Msg); if (PnrImportType == EnumPnrImportType.PnrContentImport) { if (pnrMode._PasType == "2") { throw new PnrAnalysisFailException("该编码【" + Pnr + "】为儿童编码,请选择“儿童编码”通道导入!"); } } else if (PnrImportType == EnumPnrImportType.GenericPnrImport) { if (pnrMode._PasType == "2") { throw new PnrAnalysisFailException("该编码【" + Pnr + "】为儿童编码,请选择“儿童编码”通道导入!"); } } } else { PnrData pnrData = OrderParam.pnrData; if (pnrData == null) { if (PnrImportType == EnumPnrImportType.WhiteScreenDestine) { throw new PnrAnalysisFailException("订座失败,请重新预定!失败原因:预定内容有误!"); } else { throw new PnrAnalysisFailException("导入失败,请重新导入!失败原因:PNR内容解析失败!"); } } //订座失败,请重新预定!失败原因:预定内容有误! //导入失败,请重新导入!失败原因:[PnrData]PNR内容解析失败,PnrData Fail! pnrMode = pnrData.PnrMode; patMode = pnrData.PatMode; infPatMode = pnrData.InfPatMode; Pnr = order.OrderType == 0 ? pnrData.AdultPnr : pnrData.ChdPnr; if (pnrMode == null || pnrMode._LegList.Count == 0) { if (PnrImportType == EnumPnrImportType.WhiteScreenDestine) { throw new PnrAnalysisFailException("订座失败,请重新预定!失败原因:预定航段内容有误!"); } else { throw new PnrAnalysisFailException("导入失败,请重新导入!失败原因:解析编码航段内容有误!"); } } //订座失败,请重新预定!失败原因:预定航段内容有误! //导入失败,请重新导入!失败原因:解析编码航段内容有误! } if (!pnrMode.PnrConIsOver) { if (PnrImportType == EnumPnrImportType.WhiteScreenDestine) { throw new PnrAnalysisFailException("订座失败,请重新预定!失败原因:预定内容有误!"); } else { throw new PnrAnalysisFailException("导入失败,请重新导入!失败原因:编码内容信息有误,RT编码内容需以Office号结尾,请检查编码内容!"); } } //订座失败,请重新预定!失败原因:预定内容有误! //导入失败,请重新导入!失败原因:编码内容信息有误,RT编码内容需以Office号结尾,请检查编码内容! if (pnrMode.PnrStatus.Trim() == "") { if (PnrImportType == EnumPnrImportType.WhiteScreenDestine) { throw new PnrAnalysisFailException("订座失败,请重新预定!失败原因:解析出编码状态有误!"); } else { throw new PnrAnalysisFailException("导入失败,请重新导入!失败原因:解析出编码状态有误,请检查编码内容!"); } } //订座失败,请重新预定!失败原因:解析出编码状态有误! //导入失败,请重新导入!失败原因:解析出编码状态有误,请检查编码内容 if (pnrMode.PnrStatus.Contains("XX") || pnrMode.PnrStatus.Contains("NO") || pnrMode.PnrStatus.Contains("HL") || pnrMode.PnrStatus.Contains("HN") ) { if (PnrImportType == EnumPnrImportType.WhiteScreenDestine) { throw new PnrAnalysisFailException("订座失败,请重新预定!失败原因:编码状态有误,状态为:" + pnrMode.PnrStatus + "!"); } else { throw new PnrAnalysisFailException("导入失败,请重新导入!失败原因:编码状态有误,状态为XX,NO,HL,HN项不能导入!"); } //订座失败,请重新预定!失败原因:编码状态有误,状态为:“+pnrMode.PnrStatus+”! //导入失败,请重新导入!失败原因:编码状态有误,状态为XX,NO,HL,HN项不能导入! } else if (!pnrMode.PassengerNameIsCorrent && pnrMode.ErrorPassengerNameList.Count > 0)//乘机人名字检查 { if (PnrImportType == EnumPnrImportType.WhiteScreenDestine) { throw new PnrAnalysisFailException("订座失败,请重新预定!失败原因:乘机人名字(" + string.Join(",", pnrMode.ErrorPassengerNameList.ToArray()) + ")有误,请检查乘客姓名,生僻字用拼音代替!"); } else { throw new PnrAnalysisFailException("导入失败,请重新导入!失败原因:乘机人名字(" + string.Join(",", pnrMode.ErrorPassengerNameList.ToArray()) + ")有误,请检查乘客姓名,生僻字用拼音代替!"); } } //订座失败,请重新预定!失败原因:乘机人名字(" + string.Join(",", pnrMode.ErrorPassengerNameList.ToArray()) + ")有误,请检查乘客姓名,生僻字用拼音代替!"); //导入失败,请重新导入!失败原因:乘机人名字(" + string.Join(",", pnrMode.ErrorPassengerNameList.ToArray()) + ")有误,请检查乘客姓名,生僻字用拼音代替!"); else if (!pnrMode.PnrConHasFirstNum)//乘客姓名序号是否已1开始 { if (PnrImportType == EnumPnrImportType.WhiteScreenDestine) { throw new PnrAnalysisFailException("订座失败,请重新预定!失败原因:PNR内容中乘客姓名序号项不规范,请检查编码内容!"); } else { throw new PnrAnalysisFailException("导入失败,请重新导入!失败原因:PNR内容中乘客姓名序号项不规范,请检查编码内容!"); } } //订座失败,请重新预定!失败原因:PNR内容中乘客姓名序号项不规范,请检查编码内容! //导入失败,请重新导入!失败原因:PNR内容中乘客姓名序号项不规范,请检查编码内容! //else if (string.IsNullOrEmpty(pnrMode._BigPnr)) // throw new PnrAnalysisFailException("编码[" + Pnr + "]PNR内容中没有大编码,请补齐大编码后导入!"); //else if (pnrMode.HasExistNoSsr) // throw new PnrAnalysisFailException("编码内容中乘客证件号不全,请补全证件号!"); //else if (pnrMode.SsrIsRepeat) // throw new PnrAnalysisFailException("编码内容中乘客证件号重复,请检查PNR内容证件号!"); else if (pnrMode.TravelType > 3) { if (PnrImportType == EnumPnrImportType.WhiteScreenDestine) { throw new PnrAnalysisFailException("订座失败,请重新预定!失败原因:系统暂不支持缺口程和多程航段!"); } else { throw new PnrAnalysisFailException("导入失败,请重新导入!失败原因:系统暂不支持缺口程和多程航段!"); } } //订座失败,请重新预定!失败原因:系统暂不支持缺口程和多程航段! //导入失败,请重新导入!失败原因:系统暂不支持缺口程和多程航段! //JD导入 验证 if (pnrMode._CarryCode.ToUpper().Contains("JD")) { bool JDIsPass = true; //编码中成人 儿童 婴儿 个数 int adultNum = 0, childNum = 0, YNum = 0; foreach (PassengerInfo item in pnrMode._PassengerList) { if (item.PassengerType == "1") { adultNum++; } if (item.PassengerType == "2") { childNum++; } if (item.PassengerType == "3") { YNum++; } } bool b1 = adultNum == 1 && childNum == 0 && YNum == 0; bool b2 = adultNum == 0 && childNum == 1 && YNum == 0; bool b3 = adultNum == 1 && childNum == 1 && YNum == 0; bool b4 = adultNum == 1 && childNum == 1 && YNum == 1; bool b5 = adultNum == 1 && childNum == 0 && YNum == 1; if (!(b1 || b2 || b3 || b4 || b5)) { JDIsPass = false; } if (!JDIsPass) { throw new PnrAnalysisFailException("JD航空编码【" + Pnr + "】中只能有一个成人,一个儿童,一个婴儿,请手动处理编码内容!"); } } decimal TicketPrice = 0m, INFTicketPrice = 0m; decimal SeatPrice = 0m, TaxFare = 0m, RQFare = 0m; decimal INFSeatPrice = 0m, INFTaxFare = 0m, INFRQFare = 0m; if (patMode == null || patMode.UninuePatList.Count == 0) { throw new PnrAnalysisFailException("PAT解析价格失败"); } if (patMode.IsOverMaxPrice) { throw new PnrAnalysisFailException("PAT支付价格超出范围!"); } //默认取低价 PatInfo pat = order.IsLowPrice ? patMode.UninuePatList[0] : patMode.UninuePatList[patMode.UninuePatList.Count - 1]; decimal.TryParse(pat.Price, out TicketPrice); decimal.TryParse(pat.Fare, out SeatPrice); decimal.TryParse(pat.TAX, out TaxFare); decimal.TryParse(pat.RQFare, out RQFare); if (SeatPrice <= 0) { throw new PnrAnalysisFailException("舱位价不能小于等于0"); } if (TicketPrice <= 0) { throw new PnrAnalysisFailException("PAT总价不能小于等于0"); } //PNR内容导入 if (OrderParam == null) { if (pnrMode.HasINF && !string.IsNullOrEmpty(splitPnrCon.INFPATCon.Trim())) //如果有婴儿 { if (string.IsNullOrEmpty(splitPnrCon.INFPATCon) || !splitPnrCon.INFPATCon.Contains("PAT:A*IN")) { throw new PnrAnalysisFailException("编码中含有婴儿,为获取到婴儿的PAT价格信息!"); } infPatMode = format.GetPATInfo(splitPnrCon.INFPATCon, out Msg); if (infPatMode == null || infPatMode.UninuePatList.Count == 0) { throw new PnrAnalysisFailException("婴儿PAT解析价格失败"); } //默认取低价 PatInfo patInf = order.IsLowPrice ? infPatMode.UninuePatList[0] : infPatMode.UninuePatList[infPatMode.UninuePatList.Count - 1]; decimal.TryParse(patInf.Price, out INFTicketPrice); decimal.TryParse(patInf.Fare, out INFSeatPrice); decimal.TryParse(patInf.TAX, out INFTaxFare); decimal.TryParse(patInf.RQFare, out INFRQFare); if (INFTicketPrice <= 0) { throw new PnrAnalysisFailException("婴儿舱位价不能小于等于0"); } if (INFTicketPrice <= 0) { throw new PnrAnalysisFailException("婴儿PAT总价不能小于等于0"); } pnrContent = pnrContent + "\r\n" + splitPnrCon.INFPATCon; } } else { if (pnrMode != null && pnrMode.HasINF && infPatMode != null) //如果有婴儿 { if (infPatMode == null || infPatMode.UninuePatList.Count == 0) { throw new PnrAnalysisFailException("婴儿PAT解析价格失败"); } //默认取低价 PatInfo patInf = order.IsLowPrice ? infPatMode.UninuePatList[0] : infPatMode.UninuePatList[infPatMode.UninuePatList.Count - 1]; decimal.TryParse(patInf.Price, out INFTicketPrice); decimal.TryParse(patInf.Fare, out INFSeatPrice); decimal.TryParse(patInf.TAX, out INFTaxFare); decimal.TryParse(patInf.RQFare, out INFRQFare); if (INFTicketPrice <= 0) { throw new PnrAnalysisFailException("婴儿舱位价不能小于等于0"); } if (INFTicketPrice <= 0) { throw new PnrAnalysisFailException("婴儿PAT总价不能小于等于0"); } } } if (TicketPrice <= 0) { throw new PnrAnalysisFailException("票面总价不能小于等于0"); } #endregion //构造数据 double FlyAdvanceTime = 1;// SettingSection.GetInstances().Cashbag.FlyAdvanceTime; double.TryParse(System.Configuration.ConfigurationManager.AppSettings["FlyAdvanceTime"].ToString(), out FlyAdvanceTime); order.PnrCode = Pnr; order.BigCode = pnrMode._BigPnr; order.OrderType = pnrMode._PasType == "1" ? 0 : 1; order.PnrType = pnrMode._PnrType == "1" ? 0 : 1; order.Remark = ""; order.TicketPrice = TicketPrice; order.INFTicketPrice = INFTicketPrice; order.BusinessmanCode = businessmanCode; order.BusinessmanName = businessmanName; order.CarrierCode = CarrierCode; order.OperatorAccount = account; order.CreateTime = DateTime.Now; order.PnrContent = pnrContent; order.HasAfterSale = false; order.YdOffice = pnrMode._Office; decimal defaultOrderMoney = 0m; bool HaveBabyFlag = false; List <SkyWay> SkyWays = new List <SkyWay>(); List <Passenger> Passengers = new List <Passenger>(); if (OrderParam == null) { DateTime tempStartTime = System.DateTime.Now; string Seat = string.Empty; //内容导入 foreach (var leg in pnrMode._LegList) { Seat = leg.Seat; //如果有子舱位就用子舱位 if (!string.IsNullOrEmpty(leg.ChildSeat) && leg.ChildSeat.Trim().Length == 2) { Seat = leg.ChildSeat.Trim(); } SkyWays.Add(new SkyWay() { FromCityCode = leg.FromCode, ToCityCode = leg.ToCode, FlightNumber = leg.FlightNum, StartDateTime = DateTime.Parse(leg.FlyDate1 + " " + leg.FlyStartTime.Insert(2, ":") + ":00"), ToDateTime = DateTime.Parse(leg.FlyDateE + " " + leg.FlyEndTime.Insert(2, ":") + ":00"), CarrayCode = leg.AirCode, Seat = Seat, FromTerminal = getHZL(leg.FromCode, leg.AirCode, leg.FromCityT1), ToTerminal = getHZL(leg.ToCode, leg.AirCode, leg.ToCityT2), Discount = baseQuery.GetZK(leg.FromCode, leg.ToCode, leg.AirCode, leg.Seat, SeatPrice) }); } tempStartTime = SkyWays[0].StartDateTime.AddHours(-FlyAdvanceTime); if (DateTime.Compare(tempStartTime, System.DateTime.Now) <= 0) { //起飞时间小于预定时间 已起飞 已失效 不能导入 throw new PnrAnalysisFailException("航班起飞前" + FlyAdvanceTime + "小时内不能导入编码内容!"); } foreach (var pas in pnrMode._PassengerList) { if (pas.PassengerType == "3") { Passengers.Add(new Passenger() { PassengerName = pas.PassengerName, CardNo = pas.SsrCardID, SeatPrice = INFSeatPrice, ABFee = INFTaxFare, RQFee = INFRQFare, PassengerType = EnumPassengerType.Baby, TicketStatus = EnumTicketStatus.Unknown, Mobile = pas.PassengerTel, }); defaultOrderMoney += INFSeatPrice + INFTaxFare + INFRQFare; HaveBabyFlag = true; } else { Passengers.Add(new Passenger() { PassengerName = pas.PassengerName, CardNo = pas.SsrCardID, SeatPrice = SeatPrice, ABFee = TaxFare, RQFee = RQFare, PassengerType = (EnumPassengerType)pas.PassengerType.ToInt(), TicketStatus = EnumTicketStatus.Unknown, Mobile = pas.PassengerTel }); defaultOrderMoney += SeatPrice + TaxFare + RQFare; } } } else { //是否儿童订单 bool IsChdOrder = false; foreach (PassengerDto pas in OrderParam.PassengerDtos) { if (pas.PassengerType == EnumPassengerType.Baby) { Passengers.Add(new Passenger() { PassengerName = pas.PassengerName, CardNo = pas.CardNo, SeatPrice = INFSeatPrice, ABFee = INFTaxFare, RQFee = INFRQFare, PassengerType = EnumPassengerType.Baby, TicketStatus = EnumTicketStatus.Unknown, Mobile = pas.Mobile, IdType = pas.IdType, SexType = pas.SexType, Birth = pas.Birth }); defaultOrderMoney += INFSeatPrice + INFTaxFare + INFRQFare; HaveBabyFlag = true; } else { IsChdOrder = pas.PassengerType == EnumPassengerType.Child ? true : false; Passengers.Add(new Passenger() { PassengerName = pas.PassengerName, CardNo = pas.CardNo, SeatPrice = SeatPrice, ABFee = TaxFare, RQFee = RQFare, PassengerType = pas.PassengerType, TicketStatus = EnumTicketStatus.Unknown, Mobile = pas.Mobile, IdType = pas.IdType, SexType = pas.SexType, Birth = pas.Birth }); defaultOrderMoney += SeatPrice + TaxFare + RQFare; } } List <LegInfo> legInfo = pnrMode._LegList; //白屏预定 int i = 0; foreach (SkyWayDto leg in OrderParam.SkyWayDtos) { string strSeat = leg.Seat; //处理儿童的舱位问题 if (IsChdOrder) { if (!"FCY".Contains(leg.Seat.ToUpper())) { if (legInfo[0].Seat.Trim().ToUpper() != leg.Seat.Trim().ToUpper()) { strSeat = "Y"; } } } else { //如果有子舱位就用子舱位 if (legInfo.Count > i && !string.IsNullOrEmpty(legInfo[i].ChildSeat) && legInfo[i].ChildSeat.Trim().Length == 2) { strSeat = legInfo[i].ChildSeat.Trim(); } } SkyWays.Add(new SkyWay() { FromCityCode = leg.FromCityCode, ToCityCode = leg.ToCityCode, FlightNumber = leg.FlightNumber, StartDateTime = leg.StartDateTime, ToDateTime = leg.ToDateTime, CarrayCode = leg.CarrayCode, Seat = strSeat, FromTerminal = leg.FromTerminal, ToTerminal = leg.ToTerminal, Discount = leg.Discount, FlightModel = leg.FlightModel }); i++; } } order.SkyWays = SkyWays; order.Passengers = Passengers; order.OrderMoney = defaultOrderMoney; order.HaveBabyFlag = HaveBabyFlag; //是否换编码出票 order.IsChangePnrTicket = IsChangePnrTicket; //order.Policy = new Policy(); order.OrderPay = new OrderPay() { PaidStatus = EnumPaidStatus.NoPaid, PayStatus = EnumPayStatus.NoPay, OrderId = order.OrderId }; order.ChangeStatus(EnumOrderStatus.WaitChoosePolicy); //订单日志 order.WriteLog(new OrderLog() { OperationDatetime = System.DateTime.Now, OperationPerson = account, Remark = "", OperationContent = "生成订单", IsShowLog = true }); return(order); }
public static List <PlatformPolicy> GetPoliciesByPnrContent(string pnrContent, bool IsLowPrice, PnrData pnrData) { List <PlatformPolicy> lst = new List <PlatformPolicy>(); var plst = ObjectFactory.GetAllInstances <IPlatform>().Where(p => p.IsClosed == false); StringBuilder sbLog = new StringBuilder(); sbLog.Append("查询政策开始:=============================\r\n"); sbLog.AppendFormat("时间:{0}", System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); if (pnrData.PnrMode != null && pnrData.PnrMode._LegList.Count > 0) { Parallel.ForEach(plst, p => { System.Diagnostics.Stopwatch swch = new System.Diagnostics.Stopwatch(); List <PlatformPolicy> listPlatformPolicy = new List <PlatformPolicy>(); try { swch.Start(); listPlatformPolicy = p.GetPoliciesByPnrContent(pnrContent, IsLowPrice, pnrData); lst.AddRange(listPlatformPolicy); } catch { Logger.WriteLog(LogType.WARN, "取" + p.GetPlatformName() + "接口政策失败"); } finally { swch.Stop(); string strTime = swch.Elapsed.ToString(); sbLog.AppendFormat("[{0}]平台:{1} 查询政策用时:{2} \r\n", listPlatformPolicy.Count, p.Code, strTime); } }); } else { sbLog.AppendFormat("编码内容解析失败:PnrContent={0}\r\n", pnrContent); } sbLog.Append("查询政策结束:=============================\r\n"); Logger.WriteLog(LogType.INFO, sbLog.ToString()); return(lst); }