public RequestResult <IEnumerable <ExternalPolicyView> > Match(PNRPair pnrPair, ExternalPolicyFilter filter) { throw new NotImplementedException(); }
private RequestResult <IEnumerable <ExternalPolicyView> > parseResponse(_51bookMatchPolicy.getPolicyByPnrTxtReply response, ExternalPolicyFilter filter) { var result = new RequestResult <IEnumerable <ExternalPolicyView> >(); if (response.returnCode == "S") { result.Success = true; result.Result = parsePolicies(response.policyList, filter); } else { result.Success = false; result.ErrMessage = response.returnMessage; } return(result); }
private IEnumerable <ExternalPolicyView> parsePolicies(IEnumerable <_51bookMatchPolicy.wsPolicyData> policyDatas, ExternalPolicyFilter filter) { var result = new List <ExternalPolicyView>(); if (policyDatas != null) { var lowestRebate = filter.B3BMaxRebate + Platform.Setting.RebateBalance; var platformDeduct = Platform.Setting.Deduct; var provider = Platform.Setting.Provider; foreach (var item in policyDatas) { // 返点过滤 var rebate = (decimal)item.commisionPoint; if (rebate < lowestRebate) { continue; } TicketType?ticketType = null; if (item.policyType == "B2B") { ticketType = TicketType.B2B; } else if (item.policyType == "BSP") { ticketType = TicketType.BSP; } // 过滤客票类型 if (filter.TicketType.HasValue) { if (ticketType.HasValue) { if (ticketType.Value != filter.TicketType.Value) { continue; } } else { ticketType = filter.TicketType; } } try { var policy = new ExternalPolicyView { Platform = Platform.PlatformInfo, Provider = provider, OriginalContent = GetModelString(item), Id = item.policyId.ToString(), OriginalRebate = rebate }; // 政策类型 if (item.productType == 1) { policy.PolicyType = PolicyType.Normal; } else if (item.productType == 2) { policy.PolicyType = PolicyType.Bargain; } else { continue; } // 客票类型 policy.TicketType = ticketType.HasValue ? ticketType.Value : TicketType.BSP; // 处理平台留点 policy.Rebate = rebate > platformDeduct ? rebate - platformDeduct : 0; // 是否需要换编码 policy.RequireChangePNR = item.needSwitchPNR == 1; // 工作时间 Izual.Time workStartTime; Izual.Time workEndTime; parseTimeZone(item.workTime, out workStartTime, out workEndTime); policy.WorkStart = workStartTime; policy.WorkEnd = workEndTime; //TODO 没有看到文档或交互数据实例, 退废票时间暂未加载 // 废票时间 Izual.Time scrapStartTime; Izual.Time scrapEndTime; parseTimeZone(item.vtWorkTime, out scrapStartTime, out scrapEndTime); policy.ScrapStart = scrapStartTime; policy.ScrapEnd = scrapEndTime; // 出票速度 var etdzSpeed = 180; var etdzSpeedMatch = Regex.Match(item.ticketSpeed, "((?<mm>\\d*)分钟)?(?<ss>\\d*)秒?"); if (etdzSpeedMatch.Success) { var mmValue = etdzSpeedMatch.Groups["mm"] == null ? string.Empty : etdzSpeedMatch.Groups["mm"].Value; var mm = 0; int.TryParse(mmValue, out mm); var ss = 0; int.TryParse(etdzSpeedMatch.Groups["ss"].Value, out ss); if (mm * 60 + ss > 0) { etdzSpeed = mm * 60 + ss; } } policy.ETDZSpeed = etdzSpeed; // 出票方Office号 policy.OfficeNo = item.supplyOfficeNo; // 是否需要授权 policy.RequireAuth = !string.IsNullOrWhiteSpace(policy.OfficeNo); // 政策备注 policy.Condition = policy.Remark = item.comment; result.Add(policy); } catch (Exception ex) { LogService.SaveExceptionLog(ex, "解析51book政策数据"); } } } return(result); }
private RequestResult <IEnumerable <ExternalPolicyView> > parseMatchResponse(string matchResponse, ExternalPolicyFilter filter) { var result = new RequestResult <IEnumerable <ExternalPolicyView> >(); var doc = new XmlDocument(); doc.LoadXml(matchResponse); string errMessage; if (ResponseSuccess(doc, out errMessage)) { result.Success = true; result.Result = parsePolicies(doc, filter); } else { result.Success = false; result.ErrMessage = errMessage; } return(result); }
public RequestResult <IEnumerable <ExternalPolicyView> > Match(PNRPair pnrPair, string pnrContent, string patContent, ExternalPolicyFilter filter) { RequestResult <IEnumerable <ExternalPolicyView> > result; var request = string.Empty; var response = string.Empty; try { pnrContent = pnrContent.Trim().TrimEnd('>'); patContent = patContent.Trim().TrimEnd('>'); var requestModel = new _51bookMatchPolicy.getPolicyByPnrTxtRequest { agencyCode = Platform.UserName, pnrTxt = pnrContent, pataTxt = patContent, needSpeRulePolicy = 0, needSpePricePolicySpecified = true, needSpePricePolicy = 1, needSpeRulePolicySpecified = true, onlyOnWorking = 0, onlyOnWorkingSpecified = true, allowSwitchPnr = 1, allowSwitchPnrSpecified = true }; var signValue = new Dictionary <string, string> { { "agencyCode", Platform.UserName }, { "allowSwitchPnr", requestModel.allowSwitchPnr.ToString() }, { "needSpePricePolicy", requestModel.needSpePricePolicy.ToString() }, { "needSpeRulePolicy", requestModel.needSpeRulePolicy.ToString() }, { "onlyOnWorking", requestModel.onlyOnWorking.ToString() } }; requestModel.sign = Sign(signValue); var platform = new _51bookMatchPolicy.GetPolicyByPnrTxtServiceImpl_1_0Service { Url = Platform.Address_GetPolicyByPnrText, Timeout = Platform.Timeout }; request = GetModelString(requestModel); var responseModel = platform.getPolicyByPnrTxt(requestModel); response = GetModelString(responseModel); result = parseResponse(responseModel, filter); } catch (Exception ex) { LogService.SaveExceptionLog(ex, "通过编码匹配51book政策"); result = new RequestResult <IEnumerable <ExternalPolicyView> > { Success = false, ErrMessage = "系统错误,请联系平台" }; response = ex.Message; } SaveRequestLog(request, response, "匹配政策"); return(result); }
public RequestResult <IEnumerable <ExternalPolicyView> > Match(PNRPair pnrPair, ExternalPolicyFilter filter) { RequestResult <IEnumerable <ExternalPolicyView> > result; var request = string.Empty; var response = string.Empty; try { var platform = new IBEService { Url = Platform.Address, Timeout = Platform.Timeout }; var signValue = new Dictionary <string, string> { { "userName", Platform.UserName }, { "pnr", pnrPair.PNR } }; var signText = Sign(signValue); request = GetRequestValue(signValue, signText); var matchResponse = platform.PnrMatchAirp(Platform.UserName, pnrPair.PNR, signText); response = matchResponse; result = parseMatchResponse(matchResponse, filter); } catch (Exception ex) { LogService.SaveExceptionLog(ex, "通过编码匹配易行政策"); result = new RequestResult <IEnumerable <ExternalPolicyView> > { Success = false, ErrMessage = "系统错误,请联系平台" }; response = ex.Message; } SaveRequestLog(response, request, "匹配政策"); return(result); }
public RequestResult <IEnumerable <ExternalPolicyView> > Match(PNRPair pnrPair, string pnrContent, string patContent, ExternalPolicyFilter filter) { if (filter.VoyageType != ItineraryType.OneWay) { return(new RequestResult <IEnumerable <ExternalPolicyView> > { Success = false, ErrMessage = "不支持行程:" + filter.VoyageType.GetDescription() }); } RequestResult <IEnumerable <ExternalPolicyView> > result; var request = string.Empty; var response = string.Empty; try { var platform = new IBEService { Url = Platform.Address, Timeout = Platform.Timeout }; var pnrCode = filter.UseBPNR?pnrPair.BPNR:pnrPair.PNR; var pnrText = GetPnrParameter(pnrContent, patContent); var signValue = new Dictionary <string, string> { { "userName", Platform.UserName }, { "pnr", pnrCode }, { "pnrText", pnrText } }; var signText = Sign(signValue); request = GetRequestValue(signValue, signText); response = platform.ParsePnrMatchAirp(Platform.UserName, pnrCode, pnrText, signText); result = parseMatchResponse(response, filter); } catch (Exception ex) { LogService.SaveExceptionLog(ex, "通过编码内容匹配易行政策"); result = new RequestResult <IEnumerable <ExternalPolicyView> > { Success = false, ErrMessage = "系统错误,请联系平台" }; response = ex.Message; } SaveRequestLog(response, request, "匹配政策"); return(result); }
private IEnumerable <ExternalPolicyView> parsePolicies(XmlDocument doc, ExternalPolicyFilter filter) { var result = new List <ExternalPolicyView>(); var policiesNode = doc.SelectSingleNode("/result/priceinfos"); if (policiesNode != null) { var lowestRebate = filter.B3BMaxRebate + Platform.Setting.RebateBalance; var platformDeduct = Platform.Setting.Deduct; var provider = Platform.Setting.Provider; var autoPayTypes = Platform.Setting.PayInterface; foreach (XmlNode policyNode in policiesNode.ChildNodes) { // 过滤掉特殊高返 // 是否特殊高返 0:不是 1:是 if (GetAttributeValue(policyNode, "isSphigh") == "1") { continue; } // 是否支持我们现在的支付方式 var supportPayTypes = GetAttributeValue(policyNode, "payType").Select(p => Platform.GetPayInterface(p.ToString())).ToList(); if (supportPayTypes.Any() && !supportPayTypes.Any(autoPayTypes.Contains)) { continue; } try { var policy = new YeexingPolicyView { Platform = Platform.PlatformInfo, Provider = provider, OriginalContent = policyNode.OuterXml, OfficeNo = string.Empty, RequireAuth = false, PolicyType = null }; // 客票类型 1:B2B 2:BSP var ticketTypeValue = GetAttributeValue(policyNode, "tickType"); policy.TicketType = ticketTypeValue == "1" ? Common.Enums.TicketType.B2B : Common.Enums.TicketType.BSP; // 客票类型过滤 if (filter.TicketType.HasValue && policy.TicketType != filter.TicketType.Value) { continue; } // 返点 policy.Disc = GetAttributeValue(policyNode, "disc"); var rebate = decimal.Parse(policy.Disc) / 100; if (rebate < lowestRebate) { continue; } policy.OriginalRebate = rebate; // 返现 由于没有返现了,暂时不处理该字段 policy.extReward = GetAttributeValue(policyNode, "extReward"); // 处理平台留点 if (rebate > platformDeduct) { rebate -= platformDeduct; } else { rebate = 0; } policy.Rebate = rebate; // 政策编号 policy.Id = GetAttributeValue(policyNode, "plcid"); // ibe价格 policy.IBEPrice = GetAttributeValue(policyNode, "ibePrice"); policy.ParValue = decimal.Parse(policy.IBEPrice); // 是否需要换编码 0:不需要 1:需要 var requireChangePnrValue = GetAttributeValue(policyNode, "changePnr"); policy.RequireChangePNR = requireChangePnrValue == "1"; // 政策备注 policy.Condition = policy.Remark = GetAttributeValue(policyNode, "memo"); // 出票速度 HH分钟mm秒 var etdzSpeedValue = GetAttributeValue(policyNode, "outTime"); var etdzSpeed = 180; var etdzSpeedMatch = Regex.Match(etdzSpeedValue, "((?<mm>\\d*)分钟)?(?<ss>\\d*)秒"); if (etdzSpeedMatch.Success) { var mmValue = etdzSpeedMatch.Groups["mm"] == null ? string.Empty : etdzSpeedMatch.Groups["mm"].Value; var mm = 0; int.TryParse(mmValue, out mm); var ss = 0; int.TryParse(etdzSpeedMatch.Groups["ss"].Value, out ss); if (mm * 60 + ss > 0) { etdzSpeed = mm * 60 + ss; } } policy.ETDZSpeed = etdzSpeed; // 工作时间 var workTimeValue = DateTime.Today.IsWeekend() ? GetAttributeValue(policyNode, "restWorkTime") : GetAttributeValue(policyNode, "workTime"); Time workStartTime; Time workEndTime; parseWorkTime(workTimeValue, out workStartTime, out workEndTime); policy.ScrapStart = policy.WorkStart = workStartTime; policy.ScrapEnd = policy.WorkEnd = workEndTime; Time workTimeStart; Time workTimeEnd; parseWorkTime(GetAttributeValue(policyNode, "workTime"), out workTimeStart, out workTimeEnd); policy.WorkRefundTimeStart = policy.WorkTimeStart = workTimeStart; policy.WorkRefundTimeEnd = policy.WorkTimeEnd = workTimeEnd; Time restWorkTimeStart; Time restWorkTimeEnd; parseWorkTime(GetAttributeValue(policyNode, "restWorkTime"), out restWorkTimeStart, out restWorkTimeEnd); policy.RestRefundTimeStart = policy.RestWorkTimeStart = restWorkTimeStart; policy.RestRefundTimeEnd = policy.RestWorkTimeEnd = restWorkTimeEnd; //Time workRefundTimeStart; //Time workRefundTimeEnd; //parseWorkTime(GetAttributeValue(policyNode, "workReturnTime"), out workRefundTimeStart, out workRefundTimeEnd); //policy.WorkRefundTimeStart = workRefundTimeStart; //policy.WorkRefundTimeEnd = workRefundTimeEnd; //Time restRefundTimeStart; //Time restRefundTimeEnd; //parseWorkTime(GetAttributeValue(policyNode,"restReturnTime"),out restRefundTimeStart,out restRefundTimeEnd); //policy.RestRefundTimeStart = restRefundTimeStart; //policy.RestRefundTimeEnd = restRefundTimeEnd; // 支持的支付方式 policy.PayInterfaces = (from char c in GetAttributeValue(policyNode, "payType") from pi in Platform.PayInterfaces where pi.Value == c.ToString() select pi.Key).ToList(); result.Add(policy); } catch (Exception ex) { LogService.SaveExceptionLog(ex, "解析易行政策数据"); } } } return(result); }
private IEnumerable <ExternalPolicyView> parsePolicies(XmlNodeList policyNodes, ExternalPolicyFilter filter) { var result = new List <ExternalPolicyView>(); if (policyNodes != null) { var lowestRebate = filter.B3BMaxRebate + Platform.Setting.RebateBalance; var platformDeduct = Platform.Setting.Deduct; var provider = Platform.Setting.Provider; foreach (XmlNode node in policyNodes) { var dataArray = node.InnerText.Split('^'); if (dataArray.Length != 28) { continue; } var isHighRebatePolicy = dataArray[16]; // 过滤特殊高返政策 if (isHighRebatePolicy == "1") { continue; } var rebateText = dataArray[9]; var originalRebate = decimal.Parse(rebateText) / 100; // 根据政策差,过滤没有优势的政策 if (originalRebate < lowestRebate) { continue; } var ticketTypeText = dataArray[8]; var ticketType = ticketTypeText == "2" ? TicketType.B2B : TicketType.BSP; // 过滤客票类型 if (filter.TicketType.HasValue && filter.TicketType.Value != ticketType) { continue; } var policy = new _517NaPolicyView { Platform = Platform.PlatformInfo, Provider = provider, OriginalContent = node.OuterXml, Id = dataArray[0], TicketType = ticketType, OriginalRebate = originalRebate, Rebate = originalRebate > platformDeduct ? originalRebate - platformDeduct : 0, PolicyType = null, Condition = dataArray[11], SubId = dataArray[18] }; policy.Remark = policy.Condition; policy.RequireChangePNR = dataArray[17] == "True"; policy.OfficeNo = dataArray[27]; policy.RequireAuth = !string.IsNullOrWhiteSpace(policy.OfficeNo); // 票面价 var fareText = dataArray[20]; policy.ParValue = decimal.Parse(fareText); // 出票速度 var etdzSpeedText = dataArray[25]; int etdzSpeed; if (!int.TryParse(etdzSpeedText, out etdzSpeed)) { etdzSpeed = 180; } policy.ETDZSpeed = etdzSpeed; // 工作时间 var workTimeText = DateTime.Today.IsWeekend() ? dataArray[15] : dataArray[14]; Izual.Time workStartTime; Izual.Time workEndTime; parseTimeZone(workTimeText, out workStartTime, out workEndTime); policy.WorkStart = workStartTime; policy.WorkEnd = workEndTime; Time workTimeStart; Time workTimeEnd; parseTimeZone(dataArray[14], out workTimeStart, out workTimeEnd); policy.WorkTimeStart = workTimeStart; policy.WorkTimeEnd = workTimeEnd; Time restWorkTimeStart; Time restWorkTimeEnd; parseTimeZone(dataArray[15], out restWorkTimeStart, out restWorkTimeEnd); policy.RestWorkTimeStart = restWorkTimeStart; policy.RestWorkTimeEnd = restWorkTimeEnd; // 废票时间 var scrapTimeText = DateTime.Today.IsWeekend() ? dataArray[24] : dataArray[23]; Izual.Time scrapStartTime; Izual.Time scrapEndTime; parseTimeZone(scrapTimeText, out scrapStartTime, out scrapEndTime); policy.ScrapStart = scrapStartTime; policy.ScrapEnd = scrapEndTime; Time workRefundTimeStart; Time workRefundTimeEnd; parseTimeZone(dataArray[23], out workRefundTimeStart, out workRefundTimeEnd); policy.WorkRefundTimeStart = workRefundTimeStart; policy.WorkRefundTimeEnd = workRefundTimeEnd; Time restRefundTimeStart; Time restRefundTimeEnd; parseTimeZone(dataArray[24], out restRefundTimeStart, out restRefundTimeEnd); policy.RestRefundTimeStart = restRefundTimeStart; policy.RestRefundTimeEnd = restRefundTimeEnd; result.Add(policy); } } return(result); }
public RequestResult <IEnumerable <ExternalPolicyView> > Match(PNRPair pnrPair, string pnrContent, string patContent, ExternalPolicyFilter filter) { if (filter.VoyageType != ItineraryType.OneWay && filter.VoyageType != ItineraryType.Roundtrip) { return(new RequestResult <IEnumerable <ExternalPolicyView> > { Success = false, ErrMessage = "不支持行程:" + filter.VoyageType.GetDescription() }); } RequestResult <IEnumerable <ExternalPolicyView> > result; var request = string.Empty; var response = string.Empty; try { var signValue = new Dictionary <string, string> { { "pnrcontent", GetPnrParameter(pnrContent) }, { "patcontent", GetPnrParameter(patContent) } }; request = GetRequest("get_benefit_pnrcontent", signValue); var platform = new _517Na.BenefitInterface { Url = Platform.Address, Timeout = Platform.Timeout, RequestEncoding = Platform.Encoding }; response = platform.InterfaceFacade(request); result = parseMatchResponse(response, filter); } catch (Exception ex) { LogService.SaveExceptionLog(ex, "通过编码内容匹配517Na政策"); result = new RequestResult <IEnumerable <ExternalPolicyView> > { Success = false, ErrMessage = "系统错误,请联系平台" }; response = ex.Message; } SaveRequestLog(response, request, "匹配政策"); return(result); }
/// <summary> /// 通过编码内容和pat内容获取政策 /// </summary> /// <param name="pnrPair">编码</param> /// <param name="pnrContent">编码内容</param> /// <param name="patContent">PAT内容</param> /// <param name="filter">过滤条件</param> public static RequestResult <IEnumerable <ExternalPolicyView> > Match(PNRPair pnrPair, string pnrContent, string patContent, ExternalPolicyFilter filter) { if (filter == null) { throw new ArgumentNullException("filter"); } if (string.IsNullOrWhiteSpace(pnrContent)) { return(new RequestResult <IEnumerable <ExternalPolicyView> > { Success = false, ErrMessage = "缺少rt内容" }); } else if (string.IsNullOrWhiteSpace(patContent)) { return(new RequestResult <IEnumerable <ExternalPolicyView> > { Success = false, ErrMessage = "缺少pat内容" }); } else { pnrContent = pnrContent.RemovePrintedContent().RemoveETermSpecialContentOnWeb(); var matchedResult = new List <ExternalPolicyView>(); var platforms = new List <Processor.PlatformBase> { Yeexing.Platform.Instance, _517Na.Platform.Instance }; var validPlatforms = platforms.Where(p => p.Setting != null && p.Setting.Enabled).ToList(); if (validPlatforms.Count > 1) { Parallel.ForEach(validPlatforms, platform => { var processor = platform.GetPolicyProcessor(); var matchResult = processor.Match(pnrPair, pnrContent, patContent, filter); if (matchResult.Success) { matchedResult.AddRange(matchResult.Result); } }); } else { foreach (var platform in validPlatforms) { var processor = platform.GetPolicyProcessor(); var matchResult = processor.Match(pnrPair, pnrContent, patContent, filter); if (matchResult.Success) { matchedResult.AddRange(matchResult.Result); } } } return(new RequestResult <IEnumerable <ExternalPolicyView> > { Success = true, Result = matchedResult }); } }
/// <summary> /// 通过编码获取政策 /// </summary> /// <param name="pnrPair">编码</param> /// <param name="filter">过滤条件</param> public static RequestResult <IEnumerable <ExternalPolicyView> > Match(PNRPair pnrPair, ExternalPolicyFilter filter) { if (filter == null) { throw new ArgumentNullException("filter"); } if (PNRPair.IsNullOrEmpty(pnrPair)) { throw new ArgumentNullException("pnrPair"); } var matchedResult = new List <ExternalPolicyView>(); var platforms = new List <Processor.PlatformBase> { Yeexing.Platform.Instance }; var validPlatforms = platforms.Where(p => p.Setting != null && p.Setting.Enabled).ToList(); if (validPlatforms.Count > 1) { Parallel.ForEach(validPlatforms, platform => { var processor = platform.GetPolicyProcessor(); var matchResult = processor.Match(pnrPair, filter); if (matchResult.Success) { matchedResult.AddRange(matchResult.Result); } }); } else { foreach (var platform in validPlatforms) { var processor = platform.GetPolicyProcessor(); var matchResult = processor.Match(pnrPair, filter); if (matchResult.Success) { matchedResult.AddRange(matchResult.Result); } } } return(new RequestResult <IEnumerable <ExternalPolicyView> > { Success = true, Result = matchedResult }); }