示例#1
0
        public HotelSearchResponse GetSearchResult(SearchData searchData)
        {
            try
            {
                var tasks        = new List <Task>();
                var tokenSource1 = new CancellationTokenSource();
                var tokenSource2 = new CancellationTokenSource();
                List <HotelSearchResult> searchResults  = new List <HotelSearchResult>();
                HotelSearchResponse      searchResponse = new HotelSearchResponse();
                SessionManager           sessionManager = new SessionManager();

                // add validation
                if (!ValidateSearchData(searchData))
                {
                    searchResponse.Status = 1; // invalid data
                    return(searchResponse);
                }

                // sure if session vaild ********
                if (sessionManager.ValidSession(searchData))
                {
                    // get hotel data From DB
                    SessionRepo sessionRepo = new SessionRepo();
                    var         HotelSRes   = sessionRepo.GetDataBySession(searchData);
                    if (HotelSRes != null)
                    {
                        return(HotelSRes);
                    }
                    return(null);
                }

                //MG data not found in db new SID
                searchData = PrepareSearchData(searchData);
                if (searchData != null)
                {
                    using (ProviderManager pm = new ProviderManager())
                    {
                        pm.searchData = searchData;
                        pm.GetHotelSearchResultForAllProviders();
                        //  searchResults = pm.HotelSearchResults;
                        //  searchResults = GetLowestPrice(searchResults);
                        searchResponse = pm.searchResponse;
                        //searchResults = GetLowestPrice(searchResponse.HotelResult);
                        searchResults = searchResponse.HotelResult;

                        searchResponse.HotelResult = searchResults;
                        searchResponse.Locations   = searchResponse.HotelResult.GroupBy(x => x.Location).Select(x => x.FirstOrDefault()).Select(a => a.Location).ToList();

                        tasks.Add(Task.Factory.StartNew(() =>
                        {
                            if (searchResults.Count > 0)
                            {
                                SaveSearchResult(searchResults, searchData.sID);/////////////////
                            }
                        }, tokenSource1.Token));
                        Task.WaitAll(tasks.ToArray());
                    }
                }
                return(searchResponse);
            }
            catch (HotelSearchInputException EX)
            {
                return(new HotelSearchResponse()
                {
                    Status = 1,  //"Invalid"
                    ResultException = new ResultException()
                    {
                        Code = EX.Code,
                        ExceptionMessage = EX.Message
                    }
                });
            }
            catch (Exception ex)
            {
                LoggingHelper.WriteToFile("SearchController/Errors/", "SearchController" + "INServOrch" + searchData.sID, ex.InnerException?.Message, ex.Message + ex.StackTrace);
                return(new HotelSearchResponse());
            }
        }