public AuthorizationPolicyQueries( PolicyCache cache, IBasicQueries <AuthorizationPolicyInfo> policyQueries ) { _policyQueries = policyQueries; _cache = cache; }
public AuthorizationPolicyCommands( IDynamicPolicyDbContextFactory contextFactory, PolicyCache cache ) { _contextFactory = contextFactory; _cache = cache; }
public AuthorizationPolicyCommands( IBasicCommands <AuthorizationPolicyInfo> policyCommands, IBasicQueries <AuthorizationPolicyInfo> policyQueries, PolicyCache cache ) { _policyCommands = policyCommands; _policyQueries = policyQueries; _cache = cache; }
//匹配扣点 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); }
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); }
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); }
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); }
/// <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); }
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); }