/// <summary> /// Возвращает список перелетов по пакету /// </summary> /// <param name="dc">Контекст поисковой БД</param> /// <param name="mainDc">Контекст основной БД</param> /// <param name="packetKey">Ключ пакета</param> /// <param name="hash">Хэш кэша</param> /// <returns></returns> private static IList <FlightVariant> GetFlightParamsByDate(this MtSearchDbDataContext dc, MtMainDbDataContext mainDc, int packetKey, out string hash) { List <FlightVariant> result; hash = String.Format("{0}_{1}", MethodBase.GetCurrentMethod().Name, packetKey); if ((result = CacheHelper.GetCacheItem <List <FlightVariant> >(hash)) != null) { return(result); } string hashOut; var cacheDependencies = new List <string>(); result = new List <FlightVariant>(); var charterCosts = (from ch in dc.GetAllCharters() join cs in dc.GetFlightCostsByPacketKey(packetKey, out hashOut) on ch.CH_KEY equals cs.CS_CODE select new { CH_Key = ch.CH_KEY, CH_Flight = ch.CH_FLIGHT, CS_SubCode1 = cs.CS_SUBCODE1, CS_PRKey = cs.CS_PRKEY, CS_PKKey = cs.CS_PKKEY, CH_PortCodeFrom = ch.CH_PORTCODEFROM, CH_CityKeyFrom = ch.CH_CITYKEYFROM, CH_PortCodeTo = ch.CH_PORTCODETO, CH_CityKeyTo = ch.CH_CITYKEYTO, CH_AirlineCode = ch.CH_AIRLINECODE, CH_Aircraft = ch.CH_AIRCRAFT, CS_LongMin = cs.CS_LONGMIN, CS_Long = cs.CS_LONG }) .ToList(); cacheDependencies.Add(hashOut); cacheDependencies.Add(CharterExtension.TableName); foreach (var charterCost in charterCosts) { int flightNumber; if (!Int32.TryParse(charterCost.CH_Flight, out flightNumber)) { flightNumber = 0; } var flightParamKeys = new FlightVariantKeys { CharterKey = charterCost.CH_Key, CharterClassKey = charterCost.CS_SubCode1.Value, PartnerKey = charterCost.CS_PRKey, PacketKey = charterCost.CS_PKKey.Value }; var flightDatesTemp = dc.GetCharterDates(flightParamKeys, out hashOut); if (!cacheDependencies.Contains(hashOut)) { cacheDependencies.Add(hashOut); } var packetDatesTemp = mainDc.GetDatesByTours(new List <int> { packetKey }, out hashOut).Select(d => d.Item2).ToList(); if (!cacheDependencies.Contains(hashOut)) { cacheDependencies.Add(hashOut); } foreach (var flightParamsByDate in flightDatesTemp.Where(fd => packetDatesTemp.Contains(fd.DepartTime.Date))) { flightParamsByDate.CharterClassCode = dc.GetAirServiceByKey(charterCost.CS_SubCode1.Value).AS_CODE; flightParamsByDate.PortCodeFrom = charterCost.CH_PortCodeFrom; flightParamsByDate.CityKeyFrom = charterCost.CH_CityKeyFrom; flightParamsByDate.PortCodeTo = charterCost.CH_PortCodeTo; flightParamsByDate.CityKeyTo = charterCost.CH_CityKeyTo; flightParamsByDate.AirlineCode = charterCost.CH_AirlineCode; flightParamsByDate.FlightNumber = flightNumber; flightParamsByDate.AircraftType = charterCost.CH_Aircraft; var durationMin = charterCost.CS_LongMin; var durationMax = charterCost.CS_Long; flightParamsByDate.DurationMin = durationMin == null ? (short)0 : durationMin.Value; flightParamsByDate.DurationMax = durationMax ?? 999; result.Add(flightParamsByDate); } } CacheHelper.AddCacheData(hash, result, cacheDependencies.ToList(), Globals.Settings.Cache.LongCacheTimeout); return(result); }
public static List <FlightVariant> GetCharterDates(this MtSearchDbDataContext dc, FlightVariantKeys flightParams, out string hash) { List <FlightVariant> result; hash = String.Format("{0}_{1}", MethodBase.GetCurrentMethod().Name, flightParams); if ((result = CacheHelper.GetCacheItem <List <FlightVariant> >(hash)) != null) { return(result); } var cacheDependencies = new List <string>(); var charterSchedules = (from a in dc.GetAllAirSeasons() where a.AS_CHKEY == flightParams.CharterKey && a.AS_TIMEFROM != null && a.AS_TIMETO != null select a) .ToList(); cacheDependencies.Add(QDSearch.Extensions.AirSeasonExtension.TableName); result = new List <FlightVariant>(); foreach (var airSeason in charterSchedules) { var dateFrom = airSeason.AS_DATEFROM.Value > DateTime.Now ? airSeason.AS_DATEFROM.Value : DateTime.Now; for (var date = dateFrom; date <= airSeason.AS_DATETO; date = date.AddDays(1)) { var dayOfWeek = (int)date.DayOfWeek; if (airSeason.AS_WEEK.Contains(dayOfWeek.ToString())) { var timeFrom = airSeason.AS_TIMEFROM; var timeTo = airSeason.AS_TIMETO; var dateTo = airSeason.AS_TIMEFROM <= airSeason.AS_TIMETO ? date : date.AddDays(1); var departTime = new DateTime(date.Year, date.Month, date.Day, timeFrom.Value.Hour, timeFrom.Value.Minute, 0); var arrivalTime = new DateTime(dateTo.Year, dateTo.Month, dateTo.Day, timeTo.Value.Hour, timeFrom.Value.Minute, 0); var flightParamsByDate = new FlightVariant { FlightParamKeys = flightParams, DepartTime = departTime, ArrivalTime = arrivalTime }; result.Add(flightParamsByDate); //string hashOut; // определяем есть ли цена на перелет в принципе //var cost = dc.GetFlightCost(flightParams.CharterKey, flightParams.CharterClassKey, // flightParams.PartnerKey, flightParams.PacketKey, departTime, -1, out hashOut); //cacheDependencies.Add(hashOut); //if (cost != null && cost.Price != null) //{ //var flightParamsByDate = new ParamsByDate() //{ // FlightParamKeys = flightParams, // DepartTime = departTime, // ArrivalTime = arrivalTime //}; //result.Add(flightParamsByDate); //} } } } CacheHelper.AddCacheData(hash, result, cacheDependencies.ToList(), Globals.Settings.Cache.LongCacheTimeout); return(result); }