Exemple #1
0
 public RequestResult <IEnumerable <ExternalPolicyView> > Match(PNRPair pnrPair, ExternalPolicyFilter filter)
 {
     throw new NotImplementedException();
 }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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);
        }
Exemple #8
0
        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);
        }
Exemple #9
0
        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);
        }
Exemple #10
0
        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);
        }
Exemple #11
0
        /// <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
                });
            }
        }
Exemple #12
0
        /// <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
            });
        }