Example #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);
        }