Example #1
0
        public static List <AirSeason> GetAllAirSeasonsByCharterKeys(this MtSearchDbDataContext dc, List <int> charterKeys, out string hash)
        {
            List <AirSeason> result;

            hash = String.Format("{0}_{1}_{2}", MethodBase.GetCurrentMethod().Name, (int)ServiceClass.Flight, String.Join(",", charterKeys));
            if ((result = CacheHelper.GetCacheItem <List <AirSeason> >(hash)) != default(List <AirSeason>))
            {
                return(result);
            }

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

            result = dc.GetAllAirSeasons().Where(a => charterKeys.Contains(a.AS_CHKEY)).ToList();

            CacheHelper.AddCacheData(hash, result, cacheDependencies, Globals.Settings.Cache.LongCacheTimeout);
            return(result);
        }
Example #2
0
        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);
        }
Example #3
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);
        }