public void SuppData_FillSuppDataInfo(SuppData_SearchResponse SuppDataSearchResponse)
        {
            const int count = 1000;

            var totalCount = SuppDataSearchResponse.SuppDataAvaibilities?.Count;

            if (totalCount == null || totalCount == 0)
            {
                SuppDataSearchResponse.AddMessageErrorInternal("SuppDataAvaibilities null! Отелей не вернулось от поставщиков.");
                return;
            }

            var totalPages = totalCount / count;

            var SuppDataIdPages = new List <int[]>();

            for (var pageCount = 0; pageCount <= totalPages; pageCount++)
            {
                var item = SuppDataSearchResponse.SuppDataAvaibilities?.Select(z => z.SuppData.Id).Skip(pageCount * count).Take(count).ToArray();
                SuppDataIdPages.Add(item);
            }

            var concurrentBag = new ConcurrentBag <SuppData_ShortInfo[]>();

            Parallel.ForEach(SuppDataIdPages, currentPage =>
            {
                var result = _dictionarySuppData.GetSuppDatas(currentPage);
                if (result != null)
                {
                    concurrentBag.Add(result);
                }
            });

            var plainList = concurrentBag.SelectMany(s => s).ToArray();

            foreach (var SuppData in SuppDataSearchResponse.SuppDataAvaibilities)
            {
                if (SuppData?.SuppData != null)
                {
                    var currentId   = SuppData.SuppData.Id;
                    var currentInfo = plainList.FirstOrDefault(f => f.Id == currentId);
                    if (currentInfo != null)
                    {
                        SuppData.SuppData = currentInfo;
                    }
                    else
                    {
                        _logger.Error($"Cannot get SuppDataInfo by SuppDataid {currentId}");
                    }

                    //Заполним также SuppData в minPrices. Необходимо для BG-2960
                    foreach (var minPrice in SuppData.MinPrices)
                    {
                        minPrice.SuppDataId = SuppData.SuppData.Id;
                    }
                }
            }
        }
        /// <summary>
        /// Объединение результатов от нескольких поставщиков.
        /// </summary>
        /// <param name="responses">Ответы</param>
        /// <returns>Объединенный результат</returns>
        public SuppData_SearchResponse SuppData_ComposeSuppDataSearchResults(List <SuppData_SearchResponse> responses)
        {
            if (responses == null || responses.Count == 0)
            {
                return(new SuppData_SearchResponse().AddMessageErrorInternal("1|Резутатов не вернулось"));
            }

            if (responses.Count == 1)
            {
                var frsp = responses.First();
                if (frsp.SuppDataAvaibilities != null && frsp.SuppDataAvaibilities.Any())
                {
                    foreach (var SuppDataAvaibility in frsp.SuppDataAvaibilities)
                    {
                        SuppDataAvaibility.UpdateSupplierList();
                    }
                }
                return(frsp);
            }

            var ret = new SuppData_SearchResponse();

            #region *** Обьединение сообщений об ошибках ***
            var errorResponses = responses.Where(n => !string.IsNullOrEmpty(n.ErrorMessage)).ToList();
            if (errorResponses.Count > 0)
            {
                foreach (var errorResponse in errorResponses)
                {
                    ret.ErrorMessage = string.IsNullOrEmpty(ret.ErrorMessage) ? errorResponse.ErrorMessage : ret.ErrorMessage + "\r\n" + errorResponse.ErrorMessage;
                }
            }
            ret.Success = responses.Any(n => n.Success);
            #endregion

            //Пока просто объединим ответы
            ret.SuppDataAvaibilities = new List <SuppData_SearchAvaibility>();
            foreach (SuppData_SearchResponse response in responses.Where(r => r.SuppDataAvaibilities != null))
            {
                ret.SuppDataAvaibilities.AddRange(response.SuppDataAvaibilities.Where(n => n != null));

                ret.SuppDataAvaibilities.ForEach(n =>
                {
                    n.SuppData.DescriptionEn = null;
                    n.SuppData.DescriptionRu = null;
                });
            }

            //группировка по гостиницам.
            var groups             = ret.SuppDataAvaibilities.GroupBy(n => n.SuppData.Id);
            var lstDeleteSuppDatas = new List <SuppData_SearchAvaibility>();
            foreach (var group in groups)
            {
                var hh = group.First();
                hh.MinPrices = group.Where(z => z.MinPrices != null).SelectMany(z => z.MinPrices).ToList();
                hh.Rooms     = group.Where(z => z.Rooms != null).SelectMany(z => z.Rooms).Where(z => z != null).OrderBy(z => z.TotalPrice?.Amount ?? 0).ToList();
                hh.Rooms.ForEach(r => r.Name = r.Name.StripTags());
                hh.UpdateSupplierList();

                //и остальные к ней.
                lstDeleteSuppDatas.AddRange(@group.Skip(1));
            }

            //Удалим то что объединили.
            foreach (var SuppData in lstDeleteSuppDatas)
            {
                ret.SuppDataAvaibilities.Remove(SuppData);
            }

            return(ret);
        }