private MatchedPolicy QueryPolicies(PolicyType policyType, string flights, string passengers, DataTransferObject.Order.OrderView orderView) { PassengerType passengerType = PassengerType.Adult; var policyFilterCondition = new PolicyFilterConditions { PolicyType = policyType, Purchaser = Company.CompanyId }; IEnumerable <VoyageFilterInfo> voyages = getVoyageFilterInfos(flights, passengers); // 特殊票时,只取航班查询处选择的价格 if (policyType == PolicyType.Special) { PolicyView policyView = null; var flightFlight = voyages.FirstOrDefault(); if (flightFlight != null && flightFlight.Bunk == null) { policyFilterCondition.PatPrice = orderView.PATPrice != null ? orderView.PATPrice.Fare : (decimal?)null; } else if (policyView != null && flightFlight != null && flightFlight.Bunk == null) { policyFilterCondition.PublishFare = policyView.PublishFare; } } else { policyFilterCondition.PatPrice = orderView.PATPrice != null ? orderView.PATPrice.Fare : (decimal?)null; } policyFilterCondition.Voyages.AddRange(voyages); policyFilterCondition.VoyageType = VoyageType.OneWay; policyFilterCondition.SuitReduce = hasReduce(voyages, orderView.PATPrice != null ? orderView.PATPrice.Fare : (decimal?)null); policyFilterCondition.NeedSubsidize = true; policyFilterCondition.IsUsePatPrice = false; policyFilterCondition.AllowTicketType = FilterByTime(voyages.Min(f => f.Flight.TakeOffTime)); policyFilterCondition.MaxdRebate = 0; IEnumerable <MatchedPolicy> matchedPolicies = PolicyMatchServcie.MatchBunk(policyFilterCondition, false, passengerType, 1).ToList(); if (!matchedPolicies.Any() || matchedPolicies.FirstOrDefault() == null) { InterfaceInvokeException.ThrowNotFindPolicyException(); } return(matchedPolicies.FirstOrDefault()); }
private object QueryAllPolicies(PolicyType policyType, int policyCount, string source, string policyOwner, bool needSubsidize, bool IsUsePatPrice, bool isExternalPolicy, decimal maxdRebate = 0) { PassengerType passengerType = getPassengerType(source); var policyFilterCondition = new PolicyFilterConditions { PolicyType = policyType, Purchaser = CurrentCompany.CompanyId }; var orderView = Session["OrderView"] as OrderView; // 升舱时,指向原订单出票方 if (FlightReserveModule.ChoosePolicy.UpgradeByPNRCodeSource == source || FlightReserveModule.ChoosePolicy.UpgradeByQueryFlightSource == source) { policyFilterCondition.Provider = Guid.Parse(policyOwner); } else if (FlightReserveModule.ChoosePolicy.ChangeProviderSource == source) { // 换出票方时,排除原订单出票方、产品方 和 采购方 Order order = FlightReserveModule.ChoosePolicy.GetOriginalOrder(source); policyFilterCondition.ExcludeProviders.Add(order.Purchaser.CompanyId); if (order.Supplier != null) { policyFilterCondition.ExcludeProviders.Add(order.Supplier.CompanyId); } if (order.Provider != null) { policyFilterCondition.ExcludeProviders.Add(order.Provider.CompanyId); } } if (FlightReserveModule.ChoosePolicy.ImportSource == source) { policyFilterCondition.PatContent = orderView.PatContent; policyFilterCondition.PnrContent = orderView.PnrContent; policyFilterCondition.PnrPair = orderView.PNR; } IEnumerable <VoyageFilterInfo> voyages = getVoyageFilterInfos(source); // 特殊票时,只取航班查询处选择的价格 if (policyType == PolicyType.Special) { PolicyView policyView = FlightReserveModule.ChoosePolicy.GetPolicyView(source); var firstFlight = voyages.FirstOrDefault(); if (firstFlight != null && firstFlight.Bunk == null) { policyFilterCondition.PatPrice = getPatPrice(source); } else if (policyView != null && firstFlight != null && firstFlight.Bunk == null) { policyFilterCondition.PublishFare = policyView.PublishFare; } } else { policyFilterCondition.PatPrice = getPatPrice(source); } policyFilterCondition.Voyages.AddRange(voyages); policyFilterCondition.VoyageType = FlightReserveModule.ChoosePolicy.GetVoyageType(source); policyFilterCondition.SuitReduce = hasReduce(source); policyFilterCondition.NeedSubsidize = needSubsidize; policyFilterCondition.IsUsePatPrice = IsUsePatPrice || orderView.FdSuccess; policyFilterCondition.AllowTicketType = FilterByTime(voyages.Min(f => f.Flight.TakeOffTime)); policyFilterCondition.MaxdRebate = maxdRebate; IEnumerable <MatchedPolicy> matchedPolicies = null; if (FlightReserveModule.ChoosePolicy.ChangeProviderSource == source && FlightReserveModule.ChoosePolicy.GetOriginalOrder(source).IsSpecial) { matchedPolicies = PolicyMatchServcie.MatchBunkForSpecial(policyFilterCondition, isExternalPolicy, policyCount).ToList(); } else { matchedPolicies = PolicyMatchServcie.MatchBunk(policyFilterCondition, isExternalPolicy, passengerType, policyCount).ToList(); } MatchedPolicyCache = matchedPolicies.ToList(); if (policyType == PolicyType.Special) { return(from item in matchedPolicies where item != null && item.OriginalPolicy != null let specialPolicy = item.OriginalPolicy as SpecialPolicyInfo let specialPolicyInfo = SpecialProductService.Query(specialPolicy.Type) select new { PolicyId = item.Id, PolicyDesc = ReplaceEnter(specialPolicyInfo.Description), spType = ReplaceEnter(specialPolicyInfo.Name), specialPolicy = ReplaceEnter(specialPolicy.Type.ToString()), PolicyOwner = item.Provider, PolicyType = (int)PolicyType.Special, Fare = item.ParValue.TrimInvaidZero(), item.SettleAmount, EI = ReplaceEnter(getProvision(item.OriginalPolicy as IHasRegulation)), EIList = getProvisionList(item.OriginalPolicy as IHasRegulation), Condition = ReplaceEnter(item.OriginalPolicy.Condition ?? "无"), SuccessOrderCount = item.Statistics.Total.SuccessTicketCount, WorkingTime = getTimeRange(item.WorkStart, item.WorkEnd), VoyageSuccessOrderCount = item.Statistics.Voyage.SuccessTicketCount, OrderSuccessRate = (item.Statistics.Total.OrderSuccessRate * 100).TrimInvaidZero() + "%", item.NeedAUTH, gradeFirst = Math.Floor(item.CompannyGrade), gradeSecond = item.CompannyGrade / 0.1m % 10, needApplication = specialPolicy.ConfirmResource, WarnInfo = (specialPolicy.Type == SpecialProductType.CostFree && !specialPolicy.IsSeat) ? "需要候补<br /><a class='tips_btn standby_ticket'>什么是候补票?</a>" : specialPolicy.ConfirmResource ? "需要申请<br /><a class='tips_btn'>什么是申请?</a>" : String.Empty, RenderTicketPrice = specialPolicy.Type == SpecialProductType.CostFree || item.ParValue != 0, PolicyTypes = item.PolicyType.GetDescription(), IsFreeTicket = specialPolicy.Type == SpecialProductType.CostFree, IsNOSeat = specialPolicy.Type == SpecialProductType.CostFree && !specialPolicy.IsSeat, RelationType = (int)item.RelationType }); } return(from item in matchedPolicies let generalPolicy = item.OriginalPolicy as IGeneralPolicy let regulation = item.OriginalPolicy as IHasRegulation select new { Fare = item.ParValue.TrimInvaidZero(), Rebate = (item.Commission * 100).TrimInvaidZero() + "%", dRebate = item.Commission, Commission = (item.ParValue - item.SettleAmount).TrimInvaidZero(), SettleAmount = item.SettleAmount.TrimInvaidZero(), WorkingTime = getTimeRange(item.WorkStart, item.WorkEnd), ScrapTime = getTimeRange(item.RefundStart, item.RefundEnd), ETDZEfficiency = (item.Speed.ETDZ / 60) + "分钟", RefundEfficiency = (item.Speed.Refund / 60) + "分钟", TicketType = (item.OriginalPolicy == null ? (item.OriginalExternalPolicy == null ? TicketType.BSP : item.OriginalExternalPolicy.TicketType) : item.OriginalPolicy.TicketType).ToString(), PolicyId = item.Id, PolicyOwner = item.Provider, PolicyType = (int)item.PolicyType, OfficeNo = item.OriginalPolicy == null ? item.OfficeNumber : item.OriginalPolicy.OfficeCode, EI = ReplaceEnter((regulation == null ? getEI(source) : getProvision(regulation))), EIList = getProvisionList(item.OriginalPolicy as IHasRegulation), Condition = (item.OriginalPolicy == null && item.OriginalExternalPolicy == null ? "无" : ReplaceEnter(item.OriginalPolicy != null ? item.OriginalPolicy.Condition : item.OriginalExternalPolicy.Condition) ?? "无") + ((generalPolicy != null && generalPolicy.ChangePNR) || (item.IsExternal && item.OriginalExternalPolicy.RequireChangePNR) ? "。需要换编码出票" : String.Empty), NeedAUTH = item.OriginalPolicy == null ? item.NeedAUTH : item.OriginalPolicy.NeedAUTH, PolicyTypes = item.PolicyType.GetDescription(), IsBusy = OrderRemindService.QueryProviderRemindInfo(item.Provider).ETDZ > 5, item.HasSubsidized, RelationType = (int)item.RelationType, setChangePNREnable = !item.IsExternal && (generalPolicy == null || !generalPolicy.ChangePNR) //采购是否能设置是否允许换编码 }); }