コード例 #1
0
 public AuthorizationPolicyQueries(
     PolicyCache cache,
     IBasicQueries <AuthorizationPolicyInfo> policyQueries
     )
 {
     _policyQueries = policyQueries;
     _cache         = cache;
 }
コード例 #2
0
 public AuthorizationPolicyCommands(
     IDynamicPolicyDbContextFactory contextFactory,
     PolicyCache cache
     )
 {
     _contextFactory = contextFactory;
     _cache          = cache;
 }
コード例 #3
0
 public AuthorizationPolicyCommands(
     IBasicCommands <AuthorizationPolicyInfo> policyCommands,
     IBasicQueries <AuthorizationPolicyInfo> policyQueries,
     PolicyCache cache
     )
 {
     _policyCommands = policyCommands;
     _policyQueries  = policyQueries;
     _cache          = cache;
 }
コード例 #4
0
        //匹配扣点
        public List <PolicyCache> DeductionSetting(string code, List <AVHData> avhList, List <PolicyCache> pclist)
        {
            PlatformDeductionParam pfDp = new PlatformDeductionParam();

            foreach (AVHData leg in avhList)
            {
                pfDp.FlyLineList.Add(new FlyLine()
                {
                    CarrayCode   = leg.QueryParam.CarrierCode,
                    FromCityCode = leg.QueryParam.FromCode,
                    ToCityCode   = leg.QueryParam.ToCode
                });
            }
            DomesticService      domesticService  = ObjectFactory.GetInstance <DomesticService>();
            UserRelation         userRealtion     = domesticService.GetUserRealtion(code);
            DeductionGroup       deductionGroup   = userRealtion.deductionGroup;
            List <string>        codeList         = ObjectFactory.GetAllInstances <IPlatform>().Select(p => p.Code).ToList();
            DeductionType        deductionType    = DeductionType.Interface;
            EnumPolicySourceType PolicySourceType = EnumPolicySourceType.Interface;
            //本地运营的下级供应code
            List <string> LocalSupplierCodeList = userRealtion.SupplierList.Where(p => p.CarrierCode == userRealtion.carrier.Code).Select(p => p.Code).ToList();

            for (int i = 0; i < pclist.Count; i++)
            {
                PolicyCache pc = pclist[i];
                if (codeList.Contains(pc.PlatformCode))
                {
                    deductionType    = DeductionType.Interface;
                    PolicySourceType = EnumPolicySourceType.Interface;
                }
                else
                {
                    if (userRealtion.carrier.Code == pc.PlatformCode ||
                        LocalSupplierCodeList.Contains(pc.PlatformCode))
                    {
                        deductionType    = DeductionType.Local;
                        PolicySourceType = EnumPolicySourceType.Local;
                    }
                    else
                    {
                        deductionType    = DeductionType.Share;
                        PolicySourceType = EnumPolicySourceType.Share;
                    }
                }
                pc.Point = domesticService.MatchDeductionRole(PolicyCacheToPolicy(pc, PolicySourceType), pfDp, pc.CarrierCode, deductionGroup, userRealtion, deductionType);
            }
            return(pclist);
        }
コード例 #5
0
        private Policy PolicyCacheToPolicy(PolicyCache pc, EnumPolicySourceType PolicySourceType)
        {
            Policy p = new Policy();

            p.PolicyId            = pc.PolicyId;
            p.CarryCode           = pc.CarrierCode;
            p.PolicySourceType    = PolicySourceType;
            p.Code                = pc.PlatformCode;
            p.Name                = pc.PlatformCode;
            p.PlatformCode        = pc.PlatformCode;
            p.OriginalPolicyPoint = pc.Point;
            p.PaidPoint           = pc.Point;
            p.DownPoint           = 0m;
            p.PolicyPoint         = pc.Point;
            p.DeductionDetails    = p.DeductionDetails == null ? new List <DeductionDetail>() : p.DeductionDetails;
            return(p);
        }
コード例 #6
0
        private DataTable GetTable(List <PolicyCache> policyList, int patchNo, int cacheDay)
        {
            DataTable dt = new DataTable();

            if (policyList != null && policyList.Count > 0)
            {
                PolicyCache       policy  = policyList[0];
                List <DataColumn> listCol = new List <DataColumn>();
                listCol.Add(new DataColumn("_id", typeof(string)));
                listCol.Add(new DataColumn("PolicyId", typeof(string)));
                listCol.Add(new DataColumn("PlatformCode", typeof(string)));
                listCol.Add(new DataColumn("CarrierCode", typeof(string)));
                listCol.Add(new DataColumn("CabinSeatCode", typeof(string)));
                listCol.Add(new DataColumn("FromCityCode", typeof(string)));
                listCol.Add(new DataColumn("MidCityCode", typeof(string)));
                listCol.Add(new DataColumn("ToCityCode", typeof(string)));
                listCol.Add(new DataColumn("SuitableFlightNo", typeof(string)));
                listCol.Add(new DataColumn("ExceptedFlightNo", typeof(string)));
                listCol.Add(new DataColumn("SuitableWeek", typeof(string)));
                listCol.Add(new DataColumn("CheckinTime_FromTime", typeof(DateTime)));
                listCol.Add(new DataColumn("CheckinTime_EndTime", typeof(DateTime)));
                listCol.Add(new DataColumn("IssueTime_FromTime", typeof(DateTime)));
                listCol.Add(new DataColumn("IssueTime_EndTime", typeof(DateTime)));
                listCol.Add(new DataColumn("ServiceTime_WeekendTime_FromTime", typeof(DateTime)));
                listCol.Add(new DataColumn("ServiceTime_WeekendTime_EndTime", typeof(DateTime)));
                listCol.Add(new DataColumn("ServiceTime_WeekTime_FromTime", typeof(DateTime)));
                listCol.Add(new DataColumn("ServiceTime_WeekTime_EndTime", typeof(DateTime)));
                listCol.Add(new DataColumn("TFGTime_WeekendTime_FromTime", typeof(DateTime)));
                listCol.Add(new DataColumn("TFGTime_WeekendTime_EndTime", typeof(DateTime)));
                listCol.Add(new DataColumn("TFGTime_WeekTime_FromTime", typeof(DateTime)));
                listCol.Add(new DataColumn("TFGTime_WeekTime_EndTime", typeof(DateTime)));
                listCol.Add(new DataColumn("Remark", typeof(string)));
                listCol.Add(new DataColumn("TravelType", typeof(string)));
                listCol.Add(new DataColumn("PolicyType", typeof(string)));
                listCol.Add(new DataColumn("Point", typeof(decimal)));
                listCol.Add(new DataColumn("CacheDate", typeof(DateTime)));
                listCol.Add(new DataColumn("CacheExpiresDate", typeof(DateTime)));
                listCol.Add(new DataColumn("PatchNo", typeof(int)));
                dt.Columns.AddRange(listCol.ToArray());
                dt.TableName = policy.GetType().Name;
                DataRow dr = null;
                foreach (PolicyCache item in policyList)
                {
                    dr = dt.NewRow();
                    //赋值
                    dr["_id"]              = item._id;
                    dr["PolicyId"]         = item.PolicyId;
                    dr["PlatformCode"]     = item.PlatformCode;
                    dr["CarrierCode"]      = item.CarrierCode;
                    dr["CabinSeatCode"]    = string.Join("/", item.CabinSeatCode);
                    dr["FromCityCode"]     = item.FromCityCode;
                    dr["MidCityCode"]      = item.MidCityCode;
                    dr["ToCityCode"]       = item.ToCityCode;
                    dr["SuitableFlightNo"] = string.Join("/", item.SuitableFlightNo);
                    dr["ExceptedFlightNo"] = string.Join("/", item.ExceptedFlightNo);
                    string strSuitableWeek = "";
                    if (item.SuitableWeek != null && item.SuitableWeek.Length > 0)
                    {
                        List <string> ll = new List <string>();
                        for (int i = 0; i < item.SuitableWeek.Length; i++)
                        {
                            ll.Add(((int)item.SuitableWeek[i]).ToString());
                        }
                        strSuitableWeek = string.Join("/", ll.ToArray());
                    }
                    dr["SuitableWeek"]                     = strSuitableWeek;
                    dr["CheckinTime_FromTime"]             = item.CheckinTime.FromTime;
                    dr["CheckinTime_EndTime"]              = item.CheckinTime.EndTime;
                    dr["IssueTime_FromTime"]               = item.IssueTime.FromTime;
                    dr["IssueTime_EndTime"]                = item.IssueTime.EndTime;
                    dr["ServiceTime_WeekendTime_FromTime"] = item.ServiceTime.WeekendTime.FromTime;
                    dr["ServiceTime_WeekendTime_EndTime"]  = item.ServiceTime.WeekendTime.EndTime;
                    dr["ServiceTime_WeekTime_FromTime"]    = item.ServiceTime.WeekTime.FromTime;
                    dr["ServiceTime_WeekTime_EndTime"]     = item.ServiceTime.WeekTime.EndTime;
                    dr["TFGTime_WeekendTime_FromTime"]     = item.TFGTime.WeekendTime.FromTime;
                    dr["TFGTime_WeekendTime_EndTime"]      = item.TFGTime.WeekendTime.EndTime;
                    dr["TFGTime_WeekTime_FromTime"]        = item.TFGTime.WeekTime.FromTime;
                    dr["TFGTime_WeekTime_EndTime"]         = item.TFGTime.WeekTime.EndTime;
                    dr["Remark"]           = item.Remark;
                    dr["TravelType"]       = (int)item.TravelType;
                    dr["PolicyType"]       = item.PolicyType;
                    dr["Point"]            = item.Point;
                    dr["CacheDate"]        = item.CacheDate;
                    dr["CacheExpiresDate"] = System.DateTime.Now.AddDays(cacheDay);
                    dr["PatchNo"]          = patchNo;
                    dt.Rows.Add(dr);
                }
            }
            return(dt);
        }
コード例 #7
0
        public List <PolicyCache> GetPolicyCache(string sqlWhere)
        {
            List <PolicyCache> reList = new List <PolicyCache>();
            string             sql    = "select * from PolicyCache ";

            if (!string.IsNullOrEmpty(sqlWhere))
            {
                sql += " where " + sqlWhere;
            }
            try
            {
                using (SqlConnection conn = new SqlConnection(strConnectionString))
                {
                    SqlCommand cmd = new SqlCommand(sql, conn);
                    if (conn.State == ConnectionState.Closed)
                    {
                        conn.Open();
                    }
                    SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    while (rdr.Read())
                    {
                        PolicyCache pc = new PolicyCache();
                        pc._id              = rdr["_id"] != DBNull.Value ? rdr["_id"].ToString() : "";
                        pc.PolicyId         = rdr["PolicyId"] != DBNull.Value ? rdr["PolicyId"].ToString() : "";
                        pc.CarrierCode      = rdr["CarrierCode"] != DBNull.Value ? rdr["CarrierCode"].ToString() : "";
                        pc.CabinSeatCode    = (rdr["CabinSeatCode"] != DBNull.Value ? rdr["CabinSeatCode"].ToString() : "").Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
                        pc.FromCityCode     = rdr["FromCityCode"] != DBNull.Value ? rdr["FromCityCode"].ToString() : "";
                        pc.MidCityCode      = rdr["MidCityCode"] != DBNull.Value ? rdr["MidCityCode"].ToString() : "";
                        pc.ToCityCode       = rdr["ToCityCode"] != DBNull.Value ? rdr["ToCityCode"].ToString() : "";
                        pc.SuitableFlightNo = (rdr["SuitableFlightNo"] != DBNull.Value ? rdr["SuitableFlightNo"].ToString() : "").Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
                        pc.ExceptedFlightNo = (rdr["ExceptedFlightNo"] != DBNull.Value ? rdr["ExceptedFlightNo"].ToString() : "").Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
                        string[]         strSuitableWeek = (rdr["SuitableWeek"] != DBNull.Value ? rdr["SuitableWeek"].ToString() : "").Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
                        List <DayOfWeek> daylist         = new List <DayOfWeek>();
                        foreach (string item in strSuitableWeek)
                        {
                            switch (item)
                            {
                            case "1":
                                daylist.Add(DayOfWeek.Monday);
                                break;

                            case "2":
                                daylist.Add(DayOfWeek.Tuesday);
                                break;

                            case "3":
                                daylist.Add(DayOfWeek.Wednesday);
                                break;

                            case "4":
                                daylist.Add(DayOfWeek.Thursday);
                                break;

                            case "5":
                                daylist.Add(DayOfWeek.Friday);
                                break;

                            case "6":
                                daylist.Add(DayOfWeek.Saturday);
                                break;

                            case "0":
                                daylist.Add(DayOfWeek.Sunday);
                                break;

                            default: break;
                            }
                        }
                        pc.SuitableWeek = daylist.ToArray();

                        DateTime CheckinTime_FromTime             = System.DateTime.Now;
                        DateTime CheckinTime_EndTime              = System.DateTime.Now;
                        DateTime IssueTime_FromTime               = System.DateTime.Now;
                        DateTime IssueTime_EndTime                = System.DateTime.Now;
                        DateTime ServiceTime_WeekendTime_FromTime = System.DateTime.Now;
                        DateTime ServiceTime_WeekendTime_EndTime  = System.DateTime.Now;
                        DateTime ServiceTime_WeekTime_FromTime    = System.DateTime.Now;
                        DateTime ServiceTime_WeekTime_EndTime     = System.DateTime.Now;
                        DateTime TFGTime_WeekendTime_FromTime     = System.DateTime.Now;
                        DateTime TFGTime_WeekendTime_EndTime      = System.DateTime.Now;
                        DateTime TFGTime_WeekTime_FromTime        = System.DateTime.Now;
                        DateTime TFGTime_WeekTime_EndTime         = System.DateTime.Now;

                        if (rdr["CheckinTime_FromTime"] != DBNull.Value)
                        {
                            CheckinTime_FromTime = DateTime.Parse(rdr["CheckinTime_FromTime"].ToString());
                        }
                        if (rdr["CheckinTime_EndTime"] != DBNull.Value)
                        {
                            CheckinTime_EndTime = DateTime.Parse(rdr["CheckinTime_EndTime"].ToString());
                        }
                        if (rdr["IssueTime_FromTime"] != DBNull.Value)
                        {
                            IssueTime_FromTime = DateTime.Parse(rdr["IssueTime_FromTime"].ToString());
                        }
                        if (rdr["IssueTime_EndTime"] != DBNull.Value)
                        {
                            IssueTime_EndTime = DateTime.Parse(rdr["IssueTime_EndTime"].ToString());
                        }

                        pc.CheckinTime = new TimePeriod()
                        {
                            FromTime = CheckinTime_FromTime,
                            EndTime  = CheckinTime_EndTime
                        };
                        pc.IssueTime = new TimePeriod()
                        {
                            FromTime = IssueTime_FromTime,
                            EndTime  = IssueTime_EndTime
                        };
                        if (rdr["ServiceTime_WeekendTime_FromTime"] != DBNull.Value)
                        {
                            ServiceTime_WeekendTime_FromTime = DateTime.Parse(rdr["ServiceTime_WeekendTime_FromTime"].ToString());
                        }
                        if (rdr["ServiceTime_WeekendTime_EndTime"] != DBNull.Value)
                        {
                            ServiceTime_WeekendTime_EndTime = DateTime.Parse(rdr["ServiceTime_WeekendTime_EndTime"].ToString());
                        }

                        if (rdr["ServiceTime_WeekTime_FromTime"] != DBNull.Value)
                        {
                            ServiceTime_WeekTime_FromTime = DateTime.Parse(rdr["ServiceTime_WeekTime_FromTime"].ToString());
                        }
                        if (rdr["ServiceTime_WeekTime_EndTime"] != DBNull.Value)
                        {
                            ServiceTime_WeekTime_EndTime = DateTime.Parse(rdr["ServiceTime_WeekTime_EndTime"].ToString());
                        }
                        pc.ServiceTime = new WorkTime()
                        {
                            WeekTime = new TimePeriod()
                            {
                                FromTime = ServiceTime_WeekTime_FromTime,
                                EndTime  = ServiceTime_WeekTime_EndTime
                            },
                            WeekendTime = new TimePeriod()
                            {
                                FromTime = ServiceTime_WeekendTime_FromTime,
                                EndTime  = ServiceTime_WeekendTime_EndTime
                            }
                        };
                        if (rdr["TFGTime_WeekendTime_FromTime"] != DBNull.Value)
                        {
                            TFGTime_WeekendTime_FromTime = DateTime.Parse(rdr["TFGTime_WeekendTime_FromTime"].ToString());
                        }
                        if (rdr["TFGTime_WeekendTime_EndTime"] != DBNull.Value)
                        {
                            TFGTime_WeekendTime_EndTime = DateTime.Parse(rdr["TFGTime_WeekendTime_EndTime"].ToString());
                        }
                        if (rdr["TFGTime_WeekTime_FromTime"] != DBNull.Value)
                        {
                            TFGTime_WeekTime_FromTime = DateTime.Parse(rdr["TFGTime_WeekTime_FromTime"].ToString());
                        }
                        if (rdr["TFGTime_WeekTime_EndTime"] != DBNull.Value)
                        {
                            TFGTime_WeekTime_EndTime = DateTime.Parse(rdr["TFGTime_WeekTime_EndTime"].ToString());
                        }
                        pc.TFGTime = new WorkTime()
                        {
                            WeekTime = new TimePeriod()
                            {
                                FromTime = TFGTime_WeekTime_FromTime,
                                EndTime  = TFGTime_WeekTime_EndTime
                            },
                            WeekendTime = new TimePeriod()
                            {
                                FromTime = TFGTime_WeekendTime_FromTime,
                                EndTime  = TFGTime_WeekendTime_EndTime
                            }
                        };
                        pc.Remark = rdr["Remark"] != DBNull.Value ? rdr["Remark"].ToString() : "";
                        string strTravelType = rdr["TravelType"] != DBNull.Value ? rdr["TravelType"].ToString() : "1";
                        pc.TravelType = strTravelType == "1" ? TravelType.Oneway : (strTravelType == "2" ? TravelType.Twoway : TravelType.Connway);
                        string strPolicyType = rdr["PolicyType"] != DBNull.Value ? rdr["PolicyType"].ToString() : "B2B";
                        pc.PolicyType = (strPolicyType == "B2B") ? PolicyType.B2B : PolicyType.BSP;
                        decimal _point = 0m;
                        decimal.TryParse((rdr["Point"] != DBNull.Value ? rdr["Point"].ToString() : "0"), out _point);
                        pc.Point            = _point;
                        pc.OldPoint         = _point;
                        pc.PlatformCode     = rdr["PlatformCode"] != DBNull.Value ? rdr["PlatformCode"].ToString() : "";
                        pc.CacheDate        = rdr["CacheDate"] != DBNull.Value ? DateTime.Parse(rdr["CacheDate"].ToString()) : System.DateTime.Now;
                        pc.CacheExpiresDate = rdr["CacheExpiresDate"] != DBNull.Value ? DateTime.Parse(rdr["CacheExpiresDate"].ToString()) : System.DateTime.Now.AddMonths(1);
                        pc.PolicySourceType = EnumPolicySourceType.Interface;
                        reList.Add(pc);
                    }
                    rdr.Close();
                }
            }
            catch (SqlException ex)
            {
                JoveZhao.Framework.Logger.WriteLog(JoveZhao.Framework.LogType.ERROR, "航班数据库查询[GetPolicyCache]", ex);
            }
            catch (Exception e)
            {
                JoveZhao.Framework.Logger.WriteLog(JoveZhao.Framework.LogType.ERROR, "航班数据库查询[GetPolicyCache]", e);
            }
            return(reList);
        }
コード例 #8
0
        /// <summary>
        /// 获取航班数据
        /// </summary>
        /// <param name="avhList"></param>
        /// <param name="PolicyList"></param>
        /// <returns></returns>
        public List <AVHData> MatchPolicy(string code, List <AVHData> avhList, TravelType travelType, List <PolicyCache> PolicyList)
        {
            DataBill dataBill = new DataBill();

            try
            {
                //PolicyList = PolicyList.Where(p => p.PlatformCode == "系统").ToList();
                if (avhList != null && PolicyList != null && avhList.Count > 0 && PolicyList.Count > 0)
                {
                    //周六至周日
                    DayOfWeek[] WeekendTimes = new DayOfWeek[]
                    {
                        DayOfWeek.Saturday,
                        DayOfWeek.Sunday
                    };
                    //调整缓存政策
                    PolicyList = PolicyCacheSetting(PolicyList);
                    PolicyList = DeductionSetting(code, avhList, PolicyList);
                    List <string> codeList = ObjectFactory.GetAllInstances <IPlatform>().Select(p => p.Code).ToList();
                    for (int i = 0; i < avhList.Count; i++)
                    {
                        AVHData  avhData = avhList[i];
                        DateTime flyDate = DateTime.Parse(avhData.QueryParam.FlyDate);

                        //循环IBE数据
                        for (int j = 0; j < avhData.IbeData.Count; j++)
                        {
                            //排除没有舱位的
                            if (avhData.IbeData[j].IBESeat == null || avhData.IbeData[j].IBESeat.Count() == 0)
                            {
                                continue;
                            }
                            //循环舱位 每个舱位可能对应多条政策 取最优的一条
                            List <IbeSeat> addRowList = new List <IbeSeat>();
                            for (int k = 0; k < avhData.IbeData[j].IBESeat.Count; k++)
                            {
                                avhData.IbeData[j].IBESeat[k].IbeSeatPrice = avhData.IbeData[j].IBESeat[k].SeatPrice;
                                if (avhData.DicYSeatPrice != null &&
                                    avhData.DicYSeatPrice.ContainsKey(avhData.IbeData[j].CarrierCode)
                                    )
                                {
                                    if (avhData.IbeData[j].IBESeat[k].SeatPrice > 0)
                                    {
                                        avhData.IbeData[j].IBESeat[k].Commission = dataBill.GetCommission(avhData.IbeData[j].IBESeat[k].Policy, avhData.IbeData[j].IBESeat[k].SeatPrice, avhData.IbeData[j].IBESeat[k].ReturnMoney);
                                    }
                                }
                                else
                                {
                                    //没有Y舱直接过滤
                                    continue;
                                }

                                //每个舱位可能对应多条政策 政策过滤
                                var result = PolicyList.Where(p => Filter(p, codeList, avhList, avhData, travelType, flyDate, WeekendTimes, j, k)).ToList();

                                #region 特价舱位匹配政策
                                //if (avhList.Count == 1)//暂时只适用单程
                                if (true)
                                {
                                    //特价舱位 不通的特价类型的多条政策
                                    List <PolicyCache> spPolicyList = result.Where(p => p.PolicySpecialType != EnumPolicySpecialType.Normal).OrderByDescending(p => p.Point).ToList();//.FirstOrDefault();
                                    if (spPolicyList != null && spPolicyList.Count > 0)
                                    {
                                        //获取4种类型政策最优的特价
                                        List <PolicyCache> spList           = new List <PolicyCache>();
                                        PolicyCache        spDynamicSpecial = spPolicyList.Where(p => p.PolicySpecialType == EnumPolicySpecialType.DynamicSpecial).OrderByDescending(p => p.Point).FirstOrDefault();
                                        if (spDynamicSpecial != null)
                                        {
                                            spList.Add(spDynamicSpecial);
                                        }
                                        PolicyCache spFixedSpecial = spPolicyList.Where(p => p.PolicySpecialType == EnumPolicySpecialType.FixedSpecial).OrderByDescending(p => p.Point).FirstOrDefault();
                                        if (spFixedSpecial != null)
                                        {
                                            spList.Add(spFixedSpecial);
                                        }
                                        PolicyCache spDownSpecial = spPolicyList.Where(p => p.PolicySpecialType == EnumPolicySpecialType.DownSpecial).OrderByDescending(p => p.Point).FirstOrDefault();
                                        if (spDownSpecial != null)
                                        {
                                            spList.Add(spDownSpecial);
                                        }
                                        PolicyCache spDiscountOnDiscount = spPolicyList.Where(p => p.PolicySpecialType == EnumPolicySpecialType.DiscountOnDiscount).OrderByDescending(p => p.Point).FirstOrDefault();
                                        if (spDiscountOnDiscount != null)
                                        {
                                            spList.Add(spDiscountOnDiscount);
                                        }
                                        //循环克隆一份舱位
                                        spList.ForEach(spPolicy =>
                                        {
                                            IbeSeat ibeSeat = avhData.IbeData[j].IBESeat[k].Clone() as IbeSeat;
                                            if (ibeSeat != null)
                                            {
                                                ibeSeat.Policy                 = spPolicy.Point;
                                                ibeSeat.PolicySpecialType      = spPolicy.PolicySpecialType;
                                                ibeSeat.SpecialPriceOrDiscount = spPolicy.SpecialPriceOrDiscount;
                                                ibeSeat.PolicyRMK              = spPolicy.Remark;
                                                ibeSeat.PolicyId               = spPolicy.PolicyId;
                                                ibeSeat.PlatformCode           = spPolicy.PlatformCode;
                                                //处理特价
                                                if (spPolicy.PolicySpecialType == EnumPolicySpecialType.FixedSpecial)
                                                {
                                                    //固定特价不为0时 更改舱位价为固定特价
                                                    if (ibeSeat.SpecialPriceOrDiscount != 0)
                                                    {
                                                        ibeSeat.SeatPrice = ibeSeat.SpecialPriceOrDiscount;
                                                    }
                                                }
                                                else if (spPolicy.PolicySpecialType == EnumPolicySpecialType.DownSpecial)
                                                {
                                                    //直降  直降不为0时 舱位价中减除直降的价格
                                                    if (ibeSeat.SpecialPriceOrDiscount != 0)
                                                    {
                                                        ibeSeat.SeatPrice -= ibeSeat.SpecialPriceOrDiscount;
                                                    }
                                                }
                                                else if (spPolicy.PolicySpecialType == EnumPolicySpecialType.DiscountOnDiscount)
                                                {
                                                    //折上折 折扣不为0 在现有的舱位价上根据折扣再次计算
                                                    if (ibeSeat.SpecialPriceOrDiscount != 0)
                                                    {
                                                        decimal zk         = ibeSeat.SpecialPriceOrDiscount / 100;
                                                        ibeSeat.SeatPrice *= zk;
                                                        //进到十位
                                                        ibeSeat.SeatPrice = dataBill.CeilAddTen((int)ibeSeat.SeatPrice);
                                                    }
                                                }
                                                //舱位价小于0时为0处理
                                                if (ibeSeat.SeatPrice <= 0)
                                                {
                                                    ibeSeat.SeatPrice = 0;
                                                }
                                                ibeSeat.Commission = dataBill.GetCommission(spPolicy.Point, ibeSeat.SeatPrice, ibeSeat.ReturnMoney);
                                                //屏蔽非单程的非动态特价
                                                //if (avhList.Count > 1 && ibeSeat.PolicySpecialType != EnumPolicySpecialType.DynamicSpecial)
                                                //    return;
                                                //添加到集合
                                                addRowList.Add(ibeSeat);
                                            }
                                        });
                                    }
                                }
                                #endregion

                                //普通舱位
                                PolicyCache policy = result.Where(p => p.PolicySpecialType == EnumPolicySpecialType.Normal).OrderByDescending(p => p.Point).FirstOrDefault();
                                if (policy != null)
                                {
                                    //排除异地政策为0的显示
                                    if (policy.PolicySourceType == EnumPolicySourceType.Share && policy.OldPoint == 0)
                                    {
                                        continue;
                                    }
                                    avhData.IbeData[j].IBESeat[k].Policy                 = policy.Point;
                                    avhData.IbeData[j].IBESeat[k].PolicySpecialType      = policy.PolicySpecialType;
                                    avhData.IbeData[j].IBESeat[k].SpecialPriceOrDiscount = policy.SpecialPriceOrDiscount;
                                    avhData.IbeData[j].IBESeat[k].PolicyRMK              = policy.Remark;
                                    avhData.IbeData[j].IBESeat[k].PolicyId               = policy.PolicyId;
                                    avhData.IbeData[j].IBESeat[k].PlatformCode           = policy.PlatformCode;
                                    avhData.IbeData[j].IBESeat[k].Commission             = dataBill.GetCommission(policy.Point, avhData.IbeData[j].IBESeat[k].SeatPrice, avhData.IbeData[j].IBESeat[k].ReturnMoney);
                                }
                            }
                            if (addRowList.Count > 0)
                            {
                                avhData.IbeData[j].IBESeat.AddRange(addRowList.ToArray());
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                //记录日志
                log.WriteLog("MatchPolicy", "异常信息:" + ex.Message + "\r\n");
            }
            return(avhList);
        }
コード例 #9
0
        private bool Filter(PolicyCache policy, List <string> InterfaceCode, List <AVHData> avhList, AVHData avhData, TravelType travelType, DateTime flyDate, DayOfWeek[] WeekendTimes, int i, int k)
        {
            bool Issuc = false;

            try
            {
                //出发城市
                if (!(policy.FromCityCode != null && policy.FromCityCode.Contains(avhData.QueryParam.FromCode)))
                {
                    return(Issuc);
                }
                //到达城市
                if (!(policy.ToCityCode != null && policy.ToCityCode.Contains(avhData.QueryParam.ToCode)))
                {
                    return(Issuc);
                }
                //乘机有效期
                if (!(flyDate > policy.CheckinTime.FromTime && flyDate < policy.CheckinTime.EndTime))
                {
                    return(Issuc);
                }
                //出票有效期
                //if (!(flyDate > policy.IssueTime.FromTime && flyDate < policy.IssueTime.EndTime))
                //{
                //    return Issuc;
                //}
                //适用星期
                if (policy.SuitableWeek.Length > 0)
                {
                    if (!policy.SuitableWeek.Contains(flyDate.DayOfWeek))
                    {
                        return(Issuc);
                    }
                }
                //承运人
                if (policy.CarrierCode.ToUpper() != avhData.IbeData[i].CarrierCode)
                {
                    return(Issuc);
                }
                //适用舱位
                if (policy.CabinSeatCode.Length == 0 ||
                    !policy.CabinSeatCode.Contains(avhData.IbeData[i].IBESeat[k].Seat))
                {
                    return(Issuc);
                }
                if (policy.Applay == EnumApply.Apply)
                {
                    //适用航班号
                    if (policy.SuitableFlightNo.Length == 0 ||
                        !policy.SuitableFlightNo.Contains(avhData.IbeData[i].FlightNo)
                        )
                    {
                        return(Issuc);
                    }
                }
                else if (policy.Applay == EnumApply.NotApply)
                {
                    //排除航班号
                    if (policy.ExceptedFlightNo.Length > 0 &&
                        policy.ExceptedFlightNo.Contains(avhData.IbeData[i].FlightNo))
                    {
                        return(Issuc);
                    }
                }
                //第二程
                if (avhList.Count > 1)
                {
                    string carryCode  = avhData.IbeData[i].CarrierCode;
                    string flightNo   = avhData.IbeData[i].FlightNo;
                    string seat       = avhData.IbeData[i].IBESeat[k].Seat;
                    var    IbeRowList = avhList[1].IbeData.Where(p => p.CarrierCode.ToUpper().Trim() == carryCode.ToUpper().Trim()).ToList();
                    //承运人
                    if (policy.CarrierCode.ToUpper() != carryCode || IbeRowList == null)
                    {
                        return(Issuc);
                    }
                    int seatCount = IbeRowList.Where(p => p.IBESeat.Where(p1 => p1.Seat == seat).Count() > 0).Count();
                    //适用舱位
                    if (policy.CabinSeatCode.Length == 0 ||
                        seatCount == 0
                        )
                    {
                        return(Issuc);
                    }
                }
                if (InterfaceCode.Contains(policy.PlatformCode))
                {
                    ////适用航班号
                    //if (policy.SuitableFlightNo.Length > 0)
                    //{
                    //    if (!policy.SuitableFlightNo.Contains(avhData.IbeData[i].FlightNo))
                    //    {
                    //        return Issuc;
                    //    }
                    //}
                    ////排除航班号
                    //if (policy.ExceptedFlightNo.Length > 0 && policy.ExceptedFlightNo.Contains(avhData.IbeData[i].FlightNo))
                    //{
                    //    return Issuc;
                    //}
                    //上下班时间
                    //周六周日
                    if (WeekendTimes.Contains(System.DateTime.Now.DayOfWeek))
                    {
                        if (!(DateTime.Compare(DateTime.Parse(policy.ServiceTime.WeekendTime.FromTime.ToString("HH:mm:ss")), DateTime.Parse(System.DateTime.Now.ToString("HH:mm:ss"))) < 0 &&
                              DateTime.Compare(DateTime.Parse(policy.ServiceTime.WeekendTime.EndTime.ToString("HH:mm:ss")), DateTime.Parse(System.DateTime.Now.ToString("HH:mm:ss"))) > 0
                              ))
                        {
                            return(Issuc);
                        }
                    }
                    else
                    {
                        //周一至周五
                        if (!(DateTime.Compare(DateTime.Parse(policy.ServiceTime.WeekTime.FromTime.ToString("HH:mm:ss")), DateTime.Parse(System.DateTime.Now.ToString("HH:mm:ss"))) < 0 &&
                              DateTime.Compare(DateTime.Parse(policy.ServiceTime.WeekTime.EndTime.ToString("HH:mm:ss")), DateTime.Parse(System.DateTime.Now.ToString("HH:mm:ss"))) > 0
                              ))
                        {
                            return(Issuc);
                        }
                    }
                }
                //....
            }
            catch (Exception ex)
            {
                log.WriteLog("MatchPolicy_1", "异常信息:" + ex.Message + ex.StackTrace + "\r\n");
            }
            Issuc = true;
            return(Issuc);
        }