コード例 #1
0
        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());
        }
コード例 #2
0
        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)           //采购是否能设置是否允许换编码
            });
        }