Пример #1
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);
        }
Пример #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);
        }