Example #1
0
        public static IList <Tuple <int, string> > GetCharterScheduleCitiesFrom(this MtSearchDbDataContext dc, int countryKeyTo, out string hash)
        {
            List <Tuple <int, string> > result;

            hash = String.Format("{0}_{1}", MethodBase.GetCurrentMethod().Name, countryKeyTo);
            if ((result = CacheHelper.GetCacheItem <List <Tuple <int, string> > >(hash)) != null)
            {
                return(result);
            }

            string hashOut;
            var    cacheDependencies = new List <string>();

            var charterKeys = dc.GetAllCharterKeys(out hashOut);

            cacheDependencies.Add(hashOut);

            result = (from ch in dc.GetAllCharters()
                      join ctto in dc.GetAllCities() on ch.CH_CITYKEYTO equals ctto.CT_KEY
                      join ctfrom in dc.GetAllCities() on ch.CH_CITYKEYFROM equals ctfrom.CT_KEY
                      where charterKeys.Contains(ch.CH_KEY) &&
                      ctto.CT_CNKEY == countryKeyTo
                      select new Tuple <int, string>(ch.CH_CITYKEYFROM, ctfrom.CT_NAME))
                     .Distinct()
                     .ToList();

            cacheDependencies.Add(CharterExtension.TableName);
            cacheDependencies.Add(CitiesExtension.TableName);

            return(result);
        }
Example #2
0
        /// <summary>
        /// Возвращает объект типа перелет по его ключу
        /// </summary>
        /// <param name="dc">Контекст БД</param>
        /// <param name="cityKeyFrom">Ключ города "туда"</param>
        /// <param name="cityKeyTo">Ключ города "обратно"</param>
        /// <returns></returns>
        public static IList <Charter> GetChartersByDirection(this MtSearchDbDataContext dc, int cityKeyFrom, int cityKeyTo)
        {
            List <Charter> result;
            var            hash = String.Format("{0}_{1}_{2}", MethodBase.GetCurrentMethod().Name, cityKeyFrom, cityKeyTo);

            if ((result = CacheHelper.GetCacheItem <List <Charter> >(hash)) != default(List <Charter>))
            {
                return(result);
            }

            var cacheDependencies = new List <string>
            {
                String.Format("{0}_{1}_{2}_{3}", CacheHelper.CharterHash, (int)ServiceClass.Flight, cityKeyFrom, cityKeyTo)
            };

            result = (from c in dc.GetAllCharters()
                      where c.CH_CITYKEYFROM == cityKeyFrom &&
                      c.CH_CITYKEYTO == cityKeyTo
                      select c)
                     .ToList();

            cacheDependencies.Add(TableName);

            CacheHelper.AddCacheData(hash, result, cacheDependencies, Globals.Settings.Cache.LongCacheTimeout);
            return(result);
        }
Example #3
0
        /// <summary>
        /// Возвращает объект типа перелет по его ключу
        /// </summary>
        /// <param name="dc">Контекст БД</param>
        /// <param name="charterKey">Ключ перелета</param>
        /// <returns></returns>
        public static Charter GetCharter(this MtSearchDbDataContext dc, int charterKey)
        {
            Charter result;
            var     hash = String.Format("{0}_{1}", MethodBase.GetCurrentMethod().Name, charterKey);
            var     cacheDependencies = new List <string>
            {
                String.Format("{0}_{1}_{2}", CacheHelper.CharterHash, (int)ServiceClass.Flight, charterKey)
            };

            if ((result = CacheHelper.GetCacheItem <Charter>(hash)) != default(Charter))
            {
                return(result);
            }

            result = (from c in dc.GetAllCharters()
                      where c.CH_KEY == charterKey
                      select c)
                     .SingleOrDefault();

            cacheDependencies.Add(TableName);
            CacheHelper.AddCacheData(hash, result, cacheDependencies, Globals.Settings.Cache.LongCacheTimeout);
            return(result);
        }
Example #4
0
        public static IList <Tuple <int, string> > GetCharterScheduleCountriesTo(this MtSearchDbDataContext dc, out string hash)
        {
            List <Tuple <int, string> > result;

            hash = String.Format("{0}", MethodBase.GetCurrentMethod().Name);
            if ((result = CacheHelper.GetCacheItem <List <Tuple <int, string> > >(hash)) != null)
            {
                return(result);
            }

            string hashOut;
            var    cacheDependencies = new List <string>();

            var charterKeys = dc.GetAllCharterKeys(out hashOut);

            cacheDependencies.Add(hashOut);

            var homeCountry = dc.GetHomeCountry(out hashOut);

            cacheDependencies.Add(hashOut);

            result = (from ch in dc.GetAllCharters()
                      join ct in dc.GetAllCities() on ch.CH_CITYKEYTO equals ct.CT_KEY
                      join cn in dc.GetAllCountries() on ct.CT_CNKEY equals cn.CN_KEY
                      where charterKeys.Contains(ch.CH_KEY) &&
                      cn.CN_KEY != homeCountry.CN_KEY
                      select new Tuple <int, string>(cn.CN_KEY, cn.CN_NAME))
                     .Distinct()
                     .ToList();

            cacheDependencies.Add(CharterExtension.TableName);
            cacheDependencies.Add(CountriesExtension.TableName);
            cacheDependencies.Add(CitiesExtension.TableName);

            return(result);
        }
Example #5
0
        /// <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);
        }
Example #6
0
        public static IList <CharterSchedulePlainInfo> GetCharterSchedules(this MtSearchDbDataContext dc, MtMainDbDataContext mainDc, int cityKeyFrom, int cityKeyTo, out string hash)
        {
            List <CharterSchedulePlainInfo> result;

            hash = String.Format("{0}_{1}_{2}", MethodBase.GetCurrentMethod().Name, cityKeyFrom, cityKeyTo);
            if ((result = CacheHelper.GetCacheItem <List <CharterSchedulePlainInfo> >(hash)) != null)
            {
                return(result);
            }

            result = new List <CharterSchedulePlainInfo>();

            string hashOut;
            var    cacheDependencies = new List <string>();

            var charterKeys = dc.GetAllCharterKeys(out hashOut);

            cacheDependencies.Add(hashOut);

            var chartersTo = (from a in dc.GetAllAirSeasons()
                              join ch in dc.GetAllCharters() on a.AS_CHKEY equals ch.CH_KEY
                              where charterKeys.Contains(ch.CH_KEY) &&
                              ch.CH_CITYKEYFROM == cityKeyFrom &&
                              ch.CH_CITYKEYTO == cityKeyTo &&
                              a.AS_DATEFROM.HasValue &&
                              a.AS_DATETO.HasValue &&
                              a.AS_TIMEFROM.HasValue &&
                              a.AS_TIMETO.HasValue
                              select
                              new CharterSchedulePlainInfoInternal(a.AS_ID, ch.CH_KEY, a.AS_DATEFROM.Value, a.AS_DATETO.Value, a.AS_WEEK,
                                                                   a.AS_TIMEFROM.Value, a.AS_TIMETO.Value, ch.CH_PORTCODEFROM, ch.CH_PORTCODETO, ch.CH_AIRLINECODE,
                                                                   ch.CH_FLIGHT, ch.CH_AIRCRAFT))
                             .Distinct()
                             .ToList();

            var chartersFrom = (from a in dc.GetAllAirSeasons()
                                join ch in dc.GetAllCharters() on a.AS_CHKEY equals ch.CH_KEY
                                where charterKeys.Contains(ch.CH_KEY) &&
                                ch.CH_CITYKEYFROM == cityKeyTo &&
                                ch.CH_CITYKEYTO == cityKeyFrom &&
                                a.AS_DATEFROM.HasValue &&
                                a.AS_DATETO.HasValue &&
                                a.AS_TIMEFROM.HasValue &&
                                a.AS_TIMETO.HasValue
                                select
                                new CharterSchedulePlainInfoInternal(a.AS_ID, ch.CH_KEY, a.AS_DATEFROM.Value, a.AS_DATETO.Value, a.AS_WEEK,
                                                                     a.AS_TIMEFROM.Value, a.AS_TIMETO.Value, ch.CH_PORTCODEFROM, ch.CH_PORTCODETO, ch.CH_AIRLINECODE,
                                                                     ch.CH_FLIGHT, ch.CH_AIRCRAFT))
                               .Distinct()
                               .ToList();

            cacheDependencies.Add(AirSeasonExtension.TableName);
            cacheDependencies.Add(CharterExtension.TableName);

            var seasonKeysDone = new List <int>();

            foreach (var chto in chartersTo)
            {
                var chto1   = chto;
                var chsFrom = chartersFrom.Where(c => c.AirCraft == chto1.AirCraft &&
                                                 c.AirlineCode == chto1.AirlineCode &&
                                                 Math.Abs(c.FlightNumber - chto1.FlightNumber) == 1 &&
                                                 c.PortCodeFrom == chto1.PortCodeTo &&
                                                 c.PortCodeTo == chto1.PortCodeFrom)
                              .ToList();

                var directCharterTimesFrom = chto.CharterDates.Select(d => d.Add(chto.TimeFrom.TimeOfDay)).ToList();

                foreach (var chFrom in chsFrom)
                {
                    var backCharterTimesFrom = chFrom.CharterDates.Select(d => d.Add(chFrom.TimeFrom.TimeOfDay)).ToList();

                    var fitedDates = new List <DateTime>();
                    foreach (var dt in backCharterTimesFrom)
                    {
                        // наши перелеты совершаются с разницей меньше суток, плюч у них сходятся параметры и разнятся номера на 1
                        // значит скорее всего они парные, других параметров проверить их парность у нас нет
                        fitedDates.AddRange(directCharterTimesFrom.Where(d => Math.Abs(d.Subtract(dt).TotalHours) >= 0 && Math.Abs(d.Subtract(dt).TotalHours) < 24));
                    }

                    if (fitedDates.Any())
                    {
                        result.Add(new CharterSchedulePlainInfo
                        {
                            DaysOfWeek            = fitedDates.Select(d => d.DayOfWeek).Distinct().ToList(),
                            AirlineName           = chto1.AirlineCode,
                            DateFrom              = fitedDates.Min(),
                            DateTo                = fitedDates.Max(),
                            AircraftName          = chto1.AirCraft,
                            FlightNum             = chto1.AirlineCode + " " + chto1.FlightNumber + "/" + chFrom.FlightNumber,
                            DirectCharterTime     = chto1.TimeFrom.ToString("HH:mm") + " - " + chto1.TimeTo.ToString("HH:mm"),
                            DirectAirportFromName = chto1.PortCodeFrom,
                            DirectAirportToName   = chto1.PortCodeTo,
                            BackCharterTime       = chFrom.TimeFrom.ToString("HH:mm") + " - " + chFrom.TimeTo.ToString("HH:mm"),
                            BackAirportFromName   = chFrom.PortCodeFrom,
                            BackAirportToName     = chFrom.PortCodeTo
                        });
                        if (!seasonKeysDone.Contains(chto1.AirSeasonKey))
                        {
                            seasonKeysDone.Add(chto1.AirSeasonKey);
                        }

                        if (!seasonKeysDone.Contains(chFrom.AirSeasonKey))
                        {
                            seasonKeysDone.Add(chFrom.AirSeasonKey);
                        }
                    }
                }
            }

            foreach (var chto in chartersTo.Where(c => !seasonKeysDone.Contains(c.AirSeasonKey)))
            {
                var chto1 = chto;
                result.Add(new CharterSchedulePlainInfo
                {
                    DaysOfWeek            = new List <DayOfWeek>(chto1.DaysOfWeek),
                    AirlineName           = chto1.AirlineCode,
                    DateFrom              = chto1.CharterDates.Min(),
                    DateTo                = chto1.CharterDates.Max(),
                    AircraftName          = chto1.AirCraft,
                    FlightNum             = chto1.AirlineCode + " " + chto1.FlightNumber,
                    DirectCharterTime     = chto1.TimeFrom.ToString("HH:mm") + " - " + chto1.TimeTo.ToString("HH:mm"),
                    DirectAirportFromName = chto1.PortCodeFrom,
                    DirectAirportToName   = chto1.PortCodeTo,
                    BackCharterTime       = "---",
                    BackAirportFromName   = "---",
                    BackAirportToName     = "---"
                });

                if (!seasonKeysDone.Contains(chto1.AirSeasonKey))
                {
                    seasonKeysDone.Add(chto1.AirSeasonKey);
                }
            }

            foreach (var chFrom in chartersFrom.Where(c => !seasonKeysDone.Contains(c.AirSeasonKey)))
            {
                var chFrom1 = chFrom;
                result.Add(new CharterSchedulePlainInfo
                {
                    DaysOfWeek            = new List <DayOfWeek>(chFrom1.DaysOfWeek),
                    AirlineName           = chFrom1.AirlineCode,
                    DateFrom              = chFrom1.CharterDates.Min(),
                    DateTo                = chFrom1.CharterDates.Max(),
                    AircraftName          = chFrom1.AirCraft,
                    FlightNum             = chFrom1.AirlineCode + " " + chFrom1.FlightNumber,
                    DirectCharterTime     = "---",
                    DirectAirportFromName = "---",
                    DirectAirportToName   = "---",
                    BackCharterTime       = chFrom1.TimeFrom.ToString("HH:mm") + " - " + chFrom1.TimeTo.ToString("HH:mm"),
                    BackAirportFromName   = chFrom1.PortCodeFrom,
                    BackAirportToName     = chFrom1.PortCodeTo
                });

                if (!seasonKeysDone.Contains(chFrom1.AirSeasonKey))
                {
                    seasonKeysDone.Add(chFrom1.AirSeasonKey);
                }
            }

            CacheHelper.AddCacheData(hash, result, cacheDependencies.ToList(), Globals.Settings.Cache.LongCacheTimeout);
            return(result);
        }