Web-сервисы: Сервис поиска — различия между версиями
[досмотренная версия] | [досмотренная версия] |
Porunova (обсуждение | вклад) (→Описание класса SearchParams) |
|||
(не показано 36 промежуточных версий 7 участников) | |||
Строка 1: | Строка 1: | ||
==Введение== | ==Введение== | ||
Данный модуль предназначен для осуществления поиска и подбора туров из внешних приложений. | Данный модуль предназначен для осуществления поиска и подбора туров из внешних приложений. | ||
+ | |||
+ | ===Ссылка на тестовый сервис=== | ||
+ | С работой тестового [http://demo.megatec.ru/DS_Search/Search.asmx сервиса поиска] вы можете ознакомиться на нашем демо-сервере. | ||
+ | |||
==Установка== | ==Установка== | ||
− | Для установки Поискового сервиса нужно создать директорию WebServices в каталоге c:/inetpub/wwwroot/ | + | Для установки Поискового сервиса нужно создать директорию WebServices в каталоге c:/inetpub/wwwroot/ и выложить туда распакованные файлы из архива mw-megatecwebservices-2007.2.XX.XXXX.zip. |
В управлении IIS необходимо создать виртуальный каталог для папки WebServices. | В управлении IIS необходимо создать виртуальный каталог для папки WebServices. | ||
===Создание виртуального каталога=== | ===Создание виртуального каталога=== | ||
Строка 21: | Строка 25: | ||
<BR> | <BR> | ||
[[Файл:803.PNG]]<BR> | [[Файл:803.PNG]]<BR> | ||
− | |||
===Подключение к базе данных ПК «Мастер-Тур»=== | ===Подключение к базе данных ПК «Мастер-Тур»=== | ||
В файле web.config, расположенном в папке WebServices пропишите необходимые параметры подключения (курсивом выделены значения, которые необходимо ввести). | В файле web.config, расположенном в папке WebServices пропишите необходимые параметры подключения (курсивом выделены значения, которые необходимо ввести). | ||
Строка подключения к базе данных ПК «Мастер-Тур»: | Строка подключения к базе данных ПК «Мастер-Тур»: | ||
− | *1. <add key = "connectionString" value = "Data Source=ip-адрес сервера базы данных ПК Мастер-тур;Initial Catalog=название базы данных ПК Мастер-тур;User ID=логин пользователя ПК Мастер-тур;Password=пароль пользователя ПК Мастер-тур"/> | + | *1. <add key = "connectionString" value = "Data Source=''ip-адрес сервера базы данных ПК Мастер-тур'';Initial Catalog=''название базы данных ПК Мастер-тур'';User ID=''логин пользователя ПК Мастер-тур'';Password=''пароль пользователя ПК Мастер-тур''"/> |
− | *2. <add key = "connectionStringShort" value = "Data Source= ip-адрес сервера базы данных ПК Мастер-Тур;Initial Catalog= название базы данных ПК Мастер-Тур | + | *2. <add key = "connectionStringShort" value = "Data Source=''ip-адрес сервера базы данных ПК Мастер-Тур'';Initial Catalog=''название базы данных ПК Мастер-Тур''"/> |
+ | <br>При использовании репликации в строке подключения необходимо указать подключение к поисковой базе. Настройка '''searchConnectionString''' веб-сервисом не поддерживается. | ||
+ | |||
==Настройка== | ==Настройка== | ||
− | После установки «Поисковый сервис» доступен по адресу http://ip- адрес сервера Мастер-Веб/WebServices/Search.asmx. | + | После установки «Поисковый сервис» доступен по адресу <code><nowiki>http://ip-адрес сервера Мастер-Веб/WebServices/Search.asmx</nowiki></code>. |
+ | |||
+ | ===Настройки web.config «Поискового сервиса»=== | ||
+ | Дополнительные настройки, задаваемые в секции <code><appSettings></code> файла web.config, находящемся в папке WebServices, позволяют задать дополнительные условия для отображения и проверки данных по турам от удаленных источников. | ||
+ | {| border="1" cellpadding="8" style="background-color:#F9F9F9; border:#AAAAAA; border-collapse:collapse" | ||
+ | |||
+ | |- style="background-color:#F2F2F2" | ||
+ | |||
+ | ! width="2%" | № | ||
+ | ! width="28%" | Описание | ||
+ | ! width="35%" | Значение | ||
+ | ! width="35%" | Настройка | ||
+ | |||
+ | |- style="vertical-align:text-top" | ||
+ | | 1 | ||
+ | | Отображение наличия мест в экранах, '''если релиз-период = 0''' | ||
+ | | | ||
+ | *'''true''' – отображается “запрос”, даже если в квоте еще есть свободные места; | ||
+ | *'''false''' или '''отсутствие настройки''' – отображается статус в соответствии с обычными правилами | ||
+ | | <syntaxhighlight lang="xml" enclose="div"> | ||
+ | <add key="setRequestIfReleaseIsZero" value="true" /> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |- style="vertical-align:text-top" | ||
+ | | 2 | ||
+ | | Проверка агентской квоты | ||
+ | | | ||
+ | *'''true''' или '''отсутствие настройки''' – квоты разделяются на агентские/общие; | ||
+ | *'''false''' – агентские квоты игнорируются, и проверяется только общая квота | ||
+ | | <syntaxhighlight lang="xml" enclose="div"> | ||
+ | <add key="checkAgentQuotesEnabled" value="true" /> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |- style="vertical-align:text-top" | ||
+ | | 3 | ||
+ | | Проверка общей квоты, если закончились места в агентской | ||
+ | | | ||
+ | *'''true''' или '''отсутствие настройки''' – если агентская квота закончилась, то проверяется общая квота; | ||
+ | *'''false''' – если агентская квота закончилась, общая не проверяется | ||
+ | | <syntaxhighlight lang="xml" enclose="div"> | ||
+ | <add key="checkAgentAndCommonQuote" value="true" /> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |- style="vertical-align:text-top" | ||
+ | | 4 | ||
+ | | Проверка квот без продолжительности после того, как заканчиваются квоты на продолжительность | ||
+ | | | ||
+ | *'''true''' или '''отсутствие настройки''' – проверять квоты без продолжительности после того, как закончатся квоты на продолжительность; | ||
+ | *'''false''' – не проверять квоты без продолжительности | ||
+ | | <syntaxhighlight lang="xml" enclose="div"> | ||
+ | <add key="checkNoLongQuota" value="true" /> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |- style="vertical-align:text-top" | ||
+ | | 5 | ||
+ | | Наличие мест, отображаемое при наступлении релиз-периода | ||
+ | | | ||
+ | *'''request''' – запрос; | ||
+ | *'''no''' – нет | ||
+ | | <syntaxhighlight lang="xml" enclose="div"> | ||
+ | <add key="expiredReleaseQuoteResult" value="request" /> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |- style="vertical-align:text-top" | ||
+ | |} | ||
+ | |||
===Настройки web.config приложения ПК Мастер-Web=== | ===Настройки web.config приложения ПК Мастер-Web=== | ||
− | + | ====Добавление секций==== | |
+ | *1. В секции <ConfigSections> необходимо добавить подсекцию: | ||
+ | <TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="100%"><TR><TD> | ||
+ | <syntaxhighlight lang="xml"> | ||
+ | <sectionGroup name="Megatec.Web.Services"> | ||
+ | <section name="servicesAccessibility" type="Megatec.Configuration.WebServicesSection, Megatec.Configuration"/> | ||
+ | </sectionGroup> | ||
+ | </syntaxhighlight> | ||
+ | </TD></TR></TABLE> | ||
+ | |||
+ | *2. На одном уровне с секцией <ConfigSections> необходимо добавить секцию: | ||
+ | <span style="color:#808080">В данной секции необходимо указать адрес поискового веб-сервиса.</span> | ||
+ | <TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="100%"><TR><TD> | ||
+ | <syntaxhighlight lang="xml"> | ||
+ | <Megatec.Web.Services> | ||
+ | <servicesAccessibility Enabled="true"> | ||
+ | <Services> | ||
+ | <add name="DoSearch" enabled="true" url="http://somesite/Webservices/Search.asmx"/> | ||
+ | </Services> | ||
+ | </servicesAccessibility> | ||
+ | </Megatec.Web.Services> | ||
+ | </syntaxhighlight> | ||
+ | </TD></TR></TABLE> | ||
+ | |||
+ | ==Подготовка данных== | ||
+ | ===Описание класса SearchFilter=== | ||
+ | |||
+ | [[Файл: mb_030.png|left|Предупреждение]] <BR> | ||
+ | Параметр '''PageSize''' является ''обязательным'' и его значение должно быть менее 1000. | ||
+ | <BR><BR><BR><BR><BR> | ||
+ | Возможные значения '''HotelQuotaMask''': | ||
+ | *'''None''' - Ничего не выбрано | ||
+ | *'''Yes''' - Есть гарантированные места | ||
+ | *'''Request''' - Места под запрос | ||
+ | *'''NoFlight''' - Гарантированные места + места под запрос | ||
+ | *'''All''' - Гарантированные места + места под запрос + мест нет | ||
+ | <br> | ||
+ | Возможные значения '''AviaQuotaMask''': | ||
+ | *'''None''' - Ничего не выбрано | ||
+ | *'''Yes''' - Есть гарантированные места | ||
+ | *'''Request''' - Места под запрос | ||
+ | *'''NoFlight''' - Гарантированные места + места под запрос | ||
+ | *'''All''' - Гарантированные места + места под запрос + мест нет | ||
+ | <br> | ||
+ | <nowiki>/// <summary> | ||
+ | /// Поисковый фильтр | ||
+ | /// </summary> | ||
+ | public class SearchFilter | ||
+ | { | ||
+ | public enum SearchSource : short | ||
+ | { | ||
+ | PriceTables = 0, | ||
+ | BindingTables = 1, | ||
+ | } | ||
+ | |||
+ | public enum KindOfTours : int | ||
+ | { | ||
+ | All = 0, | ||
+ | PacketTours = 1, | ||
+ | LandTours = 2 | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Вид тура | ||
+ | /// </summary> | ||
+ | public KindOfTours KindOfToursMask | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this.kindOfTours; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this.kindOfTours = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Маска аттрибутов тура | ||
+ | /// </summary> | ||
+ | public int TurListAttributeMask | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this.turlistAttributeMask; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this.turlistAttributeMask = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Партнер по отелю | ||
+ | /// </summary> | ||
+ | public int HotelPartnerKey | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this.hotelPartnerKey; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this.hotelPartnerKey = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | [XmlAttribute] | ||
+ | public int MaxChildAge | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this.maxChildAge; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this.maxChildAge = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Интервал дат | ||
+ | /// </summary> | ||
+ | public DateInterval TurDateRange | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._turDateRange; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._turDateRange = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Интервал продолжительностей | ||
+ | /// </summary> | ||
+ | public DurationInterval DurationRange | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._durationRange; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._durationRange = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ страны | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int CountryKey | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | if (this._countryKeys.Count == 0) | ||
+ | return -1; | ||
+ | |||
+ | return (int)this._countryKeys[0]; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._countryKeys.Clear(); | ||
+ | if (value > 0) | ||
+ | this._countryKeys.Add(value); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Массив ключей стран | ||
+ | /// </summary> | ||
+ | public ArrayList CountryKeys | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._countryKeys; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | /// <summary> | ||
+ | /// Поставлен ли флажок все авиакомпании (данный параметр еще не реализован) | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public bool IsAllAirlines | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._isAllAirlines; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._isAllAirlines = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Поставлен ли флажок все страны | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public bool IsAllCountries | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._isAllCountries; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._isAllCountries = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Поиск на все продолжительности | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public bool IsAllDurations | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._isAllDurations; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._isAllDurations = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Массив продолжительностей | ||
+ | /// </summary> | ||
+ | public ArrayList Durations | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return durations; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | [XmlAttribute] | ||
+ | public bool ExcludeNoPlaces | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return excludeNoPlaces; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | excludeNoPlaces = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Массив продолжительностей в днях | ||
+ | /// </summary> | ||
+ | public ArrayList Days | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return days; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Массив продолжительностей в ночах | ||
+ | /// </summary> | ||
+ | public ArrayList Nights | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return nights; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Проверять ли квоты | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public bool CheckQuotes | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return checkQuotes; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | checkQuotes = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ города отправления | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int DepartFromKey | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | if (this._departFromKeys.Count == 0) | ||
+ | return -1; | ||
+ | |||
+ | return (int)this._departFromKeys[0]; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._departFromKeys.Clear(); | ||
+ | if (value >= 0) | ||
+ | this._departFromKeys.Add(value); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ города прибытия (данный параметр еще не реализован) | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int DepartToKey | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | if (this._departToKeys.Count == 0) | ||
+ | return -1; | ||
+ | |||
+ | return (int)this._departToKeys[0]; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._departToKeys.Clear(); | ||
+ | if (value > 0) | ||
+ | this._departToKeys.Add(value); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Массив ключей городов вылета | ||
+ | /// </summary> | ||
+ | public ArrayList DepartFromKeys | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._departFromKeys; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | /// <summary> | ||
+ | /// Поставлен ли флажок все города вылетов | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public bool IsAllDepartsFrom | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._isAllDepartsFrom; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._isAllDepartsFrom = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Массив ключей городов прибытия | ||
+ | /// </summary> | ||
+ | public ArrayList DepartToKeys | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._departToKeys; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | /// <summary> | ||
+ | /// Поставлен ли флажок все города вылетов | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public bool IsAllDepartsTo | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._isAllDepartsTo; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._isAllDepartsTo = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | /// <summary> | ||
+ | /// Массив ключей аэропортов вылета | ||
+ | /// </summary> | ||
+ | public ArrayList AirportFromKeys | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._airportFromKeys; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | /// <summary> | ||
+ | /// Поставлен ли флажок все города вылетов | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public bool IsAllAirportsFrom | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._isAllAirportsFrom; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._isAllAirportsFrom = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Массив ключей аэропортов прибытия | ||
+ | /// </summary> | ||
+ | public ArrayList AirportToKeys | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._airportToKeys; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | /// <summary> | ||
+ | /// Поставлен ли флажок все города вылетов | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public bool IsAllAirportsTo | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._isAllAirportsTo; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._isAllAirportsTo = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ отеля | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int HotelKey | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | if (this._hotelKeys.Count == 0) | ||
+ | return -1; | ||
+ | |||
+ | return (int)this._hotelKeys[0]; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._hotelKeys.Clear(); | ||
+ | if (value > 0) | ||
+ | this._hotelKeys.Add(value); | ||
+ | } | ||
+ | } | ||
+ | /// <summary> | ||
+ | /// Ключ тура | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int TourKey | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._tourKey; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._tourKey = value; | ||
+ | } | ||
+ | } | ||
+ | /// <summary> | ||
+ | /// Ограничение цены | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public double PriceLimit | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._priceLimit; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._priceLimit = value; | ||
+ | } | ||
+ | } | ||
+ | /// <summary> | ||
+ | /// Список ключей курортов | ||
+ | /// </summary> | ||
+ | public ArrayList ResortKeys | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._resortKeys; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Поставлен ли флажок все курорты | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public bool IsAllResort | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._isAllResort; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._isAllResort = value; | ||
+ | } | ||
+ | } | ||
+ | /// <summary> | ||
+ | /// Список ключей городов | ||
+ | /// </summary> | ||
+ | public ArrayList CityKeys | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._cityKeys; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Установлен ли в фильтре флаг все города | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public bool IsAllCity | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._isAllCity; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._isAllCity = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Список ключей городов | ||
+ | /// </summary> | ||
+ | public ArrayList HotelKeys | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._hotelKeys; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Список ключей сервисов в отеле | ||
+ | /// </summary> | ||
+ | public ArrayList HotelOptionsKeys | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._hotelOptionsKeys; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Установлен ли в фильтре флаг все отели | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public bool IsAllHotels | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._isAllHotels; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._isAllHotels = value; | ||
+ | } | ||
+ | } | ||
+ | /// <summary> | ||
+ | /// Список ключей типов туров | ||
+ | /// </summary> | ||
+ | public ArrayList TourTypeKeys | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._tourTypeKeys; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Установлен ли флаг все типы тура | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public bool IsAllTourType | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._isAllTourType; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._isAllTourType = value; | ||
+ | } | ||
+ | } | ||
+ | /// <summary> | ||
+ | /// Список ключей типов туров | ||
+ | /// </summary> | ||
+ | public ArrayList TourTypeDetailKeys | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._tourTypeDetailKeys; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Установлен ли флаг все типы тура | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public bool IsAllTourTypeDetails | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._isAllTourTypeDetails; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._isAllTourTypeDetails = value; | ||
+ | } | ||
+ | } | ||
+ | /// <summary> | ||
+ | /// Список звездностей отелей | ||
+ | /// </summary> | ||
+ | public ArrayList HotelStars | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._hotelStars; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Поиск по всем звездностям | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public bool IsAllHotelStars | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._isAllHotelStars; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._isAllHotelStars = value; | ||
+ | } | ||
+ | } | ||
+ | /// <summary> | ||
+ | /// Список ключей питаний | ||
+ | /// </summary> | ||
+ | public ArrayList PansionKeys | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._pansionKeys; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Поиск по всем питаниях | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public bool IsAllPansion | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._isAllPansion; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._isAllPansion = value; | ||
+ | } | ||
+ | } | ||
+ | /// <summary> | ||
+ | /// Список кодов авиакомпаний | ||
+ | /// </summary> | ||
+ | public ArrayList AirlineCodes | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._airlineCodes; | ||
+ | } | ||
+ | } | ||
+ | /// <summary> | ||
+ | /// Список ключей типов номеров | ||
+ | /// </summary> | ||
+ | public ArrayList RoomKeys | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this.roomKeys; | ||
+ | } | ||
+ | } | ||
+ | /// <summary> | ||
+ | /// Список ключей категорий проживания | ||
+ | /// </summary> | ||
+ | public ArrayList RoomCategoryKeys | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this.roomCategoryKeys; | ||
+ | } | ||
+ | } | ||
+ | /// <summary> | ||
+ | /// Список ключей типов размещения | ||
+ | /// </summary> | ||
+ | public ArrayList AccomodationKeys | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this.accomodationKeys; | ||
+ | } | ||
+ | } | ||
+ | /// <summary> | ||
+ | /// Список ключей дополнительных услуг в отеле | ||
+ | /// </summary> | ||
+ | public ArrayList AddHotelServiceKeys | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._addHotelServiceKeys; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Поиск по все услугам в отеле | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public bool IsAllAddHotelService | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._isAllAddHotelService; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._isAllAddHotelService = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Искать только основные типы размещения | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public bool MainOnly | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return mainOnly; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | mainOnly = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Искать только туры для групп агентов, в которые входит данное агентство | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public bool GroupOnly | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return groupOnly; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | groupOnly = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Количество взрослых | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int Adults | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return adults; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | adults = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Количество детей | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int Childs | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return childs; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | childs = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Возраст первого ребенка | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int FirstChildAge | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return firstChildAge; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | firstChildAge = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Возраст второго ребенка | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int SecondChildAge | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return secondChildAge; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | secondChildAge = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Маска квот на проживание | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public QuotaResult.Status HotelQuotaMask | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return hotelQuotaMask; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | hotelQuotaMask = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Маска квот на перелет | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public QuotaResult.Status AviaQuotaMask | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return aviaQuotaMask; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | aviaQuotaMask = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Количество строк на странице | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int PageSize | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this.pageSize; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this.pageSize = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ограничение цены снизу | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public double PriceMinimum | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this._priceMinimum; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this._priceMinimum = value; | ||
+ | this.isNullPriceMinimum = false; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ограничена ли цена снизу | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public bool IsNullPriceMinimum | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return this.isNullPriceMinimum; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | this.isNullPriceMinimum = value; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /// <summary> | ||
+ | /// Дополнительный фильтр | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string AddFilter | ||
+ | { | ||
+ | get | ||
+ | { | ||
+ | return addFilter; | ||
+ | } | ||
+ | set | ||
+ | { | ||
+ | addFilter = value; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | }</nowiki> | ||
+ | |||
+ | ===Описание класса SearchParams=== | ||
+ | <nowiki>/// <summary> | ||
+ | /// Класс, описывающий параметры подбора тура | ||
+ | /// </summary> | ||
+ | public class SearchParams | ||
+ | { | ||
+ | /// <summary> | ||
+ | /// Идентификатор агенства, от имени которого производится поиск | ||
+ | /// </summary> | ||
+ | [XmlAttribute("Agent")] | ||
+ | public int AgentKey = 0; | ||
+ | |||
+ | /// <summary> | ||
+ | /// Разделять квоты на агентские/неагентские или игнорировать агентские квоты. | ||
+ | /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "checkAgentQuotesEnabled". | ||
+ | /// Значение по умолчанию: true. | ||
+ | /// </summary> | ||
+ | [XmlAttribute("CheckAQ")] | ||
+ | public bool CheckAgentQuota = true; | ||
+ | |||
+ | /// <summary> | ||
+ | /// Проверять общую квоту, если агентская закончилась. | ||
+ | /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "checkAgentAndCommonQuote". | ||
+ | /// Значение по умолчанию: true. | ||
+ | /// </summary> | ||
+ | [XmlAttribute("CheckCQ")] | ||
+ | public bool CheckCommonQuota = true; | ||
+ | |||
+ | /// <summary> | ||
+ | /// При подборе перелета поиск производится в том же пакете цен, что и перелет в обсчитанном туре, | ||
+ | /// иначе цены в расчет на принимается, а используется только расписание перелетов. | ||
+ | /// Используется только, если FindFlight = true. | ||
+ | /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "checkFlightPacket". | ||
+ | /// Значение по умолчанию: true. | ||
+ | /// </summary> | ||
+ | [XmlAttribute("CheckFP")] | ||
+ | public bool CheckFlightPacket = true; | ||
+ | |||
+ | /// <summary> | ||
+ | /// Проверять квоты без продолжительности после того, как закончатся квоты на продолжительность. | ||
+ | /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "checkNoLongQuota". | ||
+ | /// Значение по умолчанию: true | ||
+ | /// </summary> | ||
+ | [XmlAttribute("CheckNLQ")] | ||
+ | public bool CheckNoLongQuota = true; | ||
+ | |||
+ | /// <summary> | ||
+ | /// Проверять квоты от всех различных партнеров. | ||
+ | /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "checkAllPartnersQuota". | ||
+ | /// Значение по умолчанию: false | ||
+ | /// </summary> | ||
+ | [XmlAttribute("CheckAPQ")] | ||
+ | public bool CheckAllPartnersQuota = true; | ||
+ | |||
+ | /// <summary> | ||
+ | /// Результат возвращаемый, если у квоты истек релиз-период. | ||
+ | /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "expiredReleaseQuoteResult". | ||
+ | /// Значение по умолчанию: QuotaResult.Status.Request. | ||
+ | /// </summary> | ||
+ | [XmlAttribute("ExpRelRes")] | ||
+ | public QuotaResult.Status ExpiredReleaseResult = QuotaResult.Status.Request; | ||
+ | |||
+ | /// <summary> | ||
+ | /// Подбирать авиаперелет по туру, на который есть свободные места. | ||
+ | /// </summary> | ||
+ | [XmlAttribute("FindFlight")] | ||
+ | public bool FindFlight = true; | ||
+ | |||
+ | /// <summary> | ||
+ | /// Список классов перелета (ключи бизнес- и эконом-класса) | ||
+ | /// </summary> | ||
+ | [XmlAttribute("FlightGroups")] | ||
+ | public string FlightGroups = String.Empty; | ||
+ | |||
+ | /// <summary> | ||
+ | /// Использовать таблицу TP_Tours как источник данных, иначе - таблицу tbl_TurList | ||
+ | /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "quotedDynamicPriceTour". | ||
+ | /// Значение по умолчанию: true. | ||
+ | /// </summary> | ||
+ | [XmlAttribute("IsPT")] | ||
+ | public bool IsPriceTour = true; | ||
+ | |||
+ | /// <summary> | ||
+ | /// Результат возвращаемый при наличии квоты, но отсутствии свободных мест. | ||
+ | /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "noPlacesQuoteResult". | ||
+ | /// Значение по умолчанию: QuotaResult.Status.No. | ||
+ | /// </summary> | ||
+ | [XmlAttribute("NPResult")] | ||
+ | public QuotaResult.Status NoPlacesResult = QuotaResult.Status.No; | ||
+ | |||
+ | /// <summary> | ||
+ | /// Тип отбора | ||
+ | /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "PagingType". | ||
+ | /// </summary> | ||
+ | [XmlAttribute("PagingType")] | ||
+ | public short PagingType = Megatec.Search.PagingType.Simple; | ||
+ | |||
+ | /// <summary> | ||
+ | /// Возвращает поле, содержащее список ключей классов услуг по туру | ||
+ | /// </summary> | ||
+ | [XmlAttribute("Services")] | ||
+ | public bool Services = false; | ||
+ | |||
+ | /// <summary> | ||
+ | /// Отображать статус "Запрос", если релиз-период = 0, независимо от количества свободных мест. | ||
+ | /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "setRequestIfReleaseIsZero". | ||
+ | /// Значение по умолчанию: false. | ||
+ | /// </summary> | ||
+ | [XmlAttribute("SetRequestOnRelease")] | ||
+ | public bool SetRequestOnRelease = false; | ||
+ | |||
+ | /// <summary> | ||
+ | /// Параметры сортировки (выражение ORDER BY) | ||
+ | /// </summary> | ||
+ | [XmlAttribute("Sort")] | ||
+ | public string Sort = string.Empty; | ||
+ | |||
+ | /// <summary> | ||
+ | /// Производить сортировку на сервере БД или на клиенте | ||
+ | /// </summary> | ||
+ | [XmlAttribute("SortInDB")] | ||
+ | public bool SortInDB = true; | ||
+ | |||
+ | }</nowiki> | ||
+ | |||
+ | ===Описание класса SearchResult=== | ||
+ | <nowiki>[XmlInclude(typeof(SearchResultItem))] | ||
+ | public class SearchResult | ||
+ | { | ||
+ | /// <summary> | ||
+ | /// Общее количество найденных записей | ||
+ | /// </summary> | ||
+ | [XmlAttribute("Total")] | ||
+ | public int TotalCount | ||
+ | |||
+ | /// <summary> | ||
+ | /// Количество отобранных записей | ||
+ | /// </summary> | ||
+ | [XmlAttribute("Parsed")] | ||
+ | public int ParsedCount | ||
+ | |||
+ | /// <summary> | ||
+ | /// Не используется | ||
+ | /// </summary> | ||
+ | [XmlAttribute("Step")] | ||
+ | public double DynamicPriceStepValue | ||
+ | |||
+ | /// <summary> | ||
+ | /// Коллекция найденных результатов | ||
+ | /// </summary> | ||
+ | [XmlElement("SearchResultItem")] | ||
+ | public List<SearchResultItem> Items | ||
+ | }</nowiki> | ||
+ | ===Описание класса SearchResultItem=== | ||
+ | <nowiki>public class SearchResultItem: IRoomDescription | ||
+ | { | ||
+ | /// <summary> | ||
+ | /// Количество основных мест | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int MainPlaces | ||
+ | |||
+ | /// <summary> | ||
+ | /// Количество неосновных мест | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int AddPlaces | ||
+ | |||
+ | /// <summary> | ||
+ | /// Основное или неосновное размещение | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public bool IsMain | ||
+ | |||
+ | /// <summary> | ||
+ | /// Дата, до которой актуален тур | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public DateTime TourValid | ||
+ | |||
+ | /// <summary> | ||
+ | /// Дата создания тура | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public DateTime TourCreated | ||
+ | |||
+ | /// <summary> | ||
+ | /// Дата заезда | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public DateTime TourDate | ||
+ | |||
+ | /// <summary> | ||
+ | /// Продолжительность тура в днях | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int Days | ||
+ | |||
+ | /// <summary> | ||
+ | /// Количество ночей проживания в туре | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int Nights | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ страны | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int CountryKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ города отправления | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int CityFromKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ города прилета | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int CityToKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ аэропорта вылета | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int AirportFromKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ аэропорта прилета | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int AirportToKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ расчитанного тура (TP_Tours) | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int TourKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ типа тура (TipTur) | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int TourTypeKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ тура из конструктора туров (turList) | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int TurListKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ расчитанного варианта (TP_Lists) | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int PriceListKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ цены (TP_Prices) | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int PriceKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Цена | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public decimal Price | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ главного отеля | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int HotelKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ партнера для главного отеля | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int HotelPartnerKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ курорта главного отеля | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int ResortKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ города главного отеля | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int CityKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Звездность главного отеля | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string HotelCategory | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ питания главного отеля | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int PansionKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ номера в главном отеле | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int HotelRoomKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ типа номера в главном отеле | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int RoomKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ категории номера в главном отеле | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int RoomCategoryKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ размещения в главном отеле | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int AccomodationKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Минимальный возраст первого ребенка | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int ChildAgeFrom | ||
+ | |||
+ | /// <summary> | ||
+ | /// Максимальный возраст первого ребенка | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int ChildAgeTo | ||
+ | |||
+ | /// <summary> | ||
+ | /// Минимальный возраст второго ребенка | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int ChildAgeFrom2 | ||
+ | |||
+ | /// <summary> | ||
+ | /// Максимальный возраст второго ребенка | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int ChildAgeTo2 | ||
+ | |||
+ | /// <summary> | ||
+ | /// Название отеля | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string HotelName | ||
+ | |||
+ | /// <summary> | ||
+ | /// Название тура | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string TourName | ||
+ | |||
+ | /// <summary> | ||
+ | /// Название питания | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string PansionName | ||
+ | |||
+ | /// <summary> | ||
+ | /// Код питания | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string PansionCode | ||
+ | |||
+ | /// <summary> | ||
+ | /// Название типа номера | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string RoomName | ||
+ | |||
+ | /// <summary> | ||
+ | /// Код типа номера | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string RoomCode | ||
+ | |||
+ | /// <summary> | ||
+ | /// Название категории номера | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string RoomCategoryName | ||
+ | |||
+ | /// <summary> | ||
+ | /// Код категории номера | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string RoomCategoryCode | ||
+ | |||
+ | /// <summary> | ||
+ | /// Название размещения | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string AccomodationName | ||
+ | |||
+ | /// <summary> | ||
+ | /// Код размещения | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string AccomodationCode | ||
+ | |||
+ | /// <summary> | ||
+ | /// Название курорта | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string ResortName | ||
+ | |||
+ | /// <summary> | ||
+ | /// Название города | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string CityName | ||
+ | |||
+ | /// <summary> | ||
+ | /// Порядок сортировки типа номера | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int RoomOrder | ||
+ | |||
+ | /// <summary> | ||
+ | /// Порядок сортировки категории номера | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int RoomCategoryOrder | ||
+ | |||
+ | /// <summary> | ||
+ | /// Порядок сортировки размещения | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int AccomodationOrder | ||
+ | |||
+ | /// <summary> | ||
+ | /// Валюта | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string Currency | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключи услуг, входящих в тур (через запятую) | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string Services | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ прямого перелета (Charter) | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int CharterKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Ключ обратного перелета (Charter) | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int CharterBackKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// День предоставления проживания | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int HotelDay | ||
+ | |||
+ | /// <summary> | ||
+ | /// Количество ночей проживания в отеле | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int HotelNights | ||
+ | |||
+ | /// <summary> | ||
+ | /// День прямого перелета | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int CharterDay | ||
+ | |||
+ | /// <summary> | ||
+ | /// День обратного перелета | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int CharterBackDay | ||
+ | |||
+ | /// <summary> | ||
+ | /// Пакет прямого перелета | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int CharterPacketKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Партнер прямого перелета | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int CharterPartnerKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Пакет обратного перелета | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int CharterBackPacketKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Партнер обратного перелета | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int CharterBackPartnerKey | ||
+ | |||
+ | /// <summary> | ||
+ | /// Наличие мест в отеле: больше нуля - места есть (количество мест в квоте), 0 - мест нет, меньше 0 - места по запросу + через двоеточие общее кол-во мест. Пример | ||
+ | /// 10:100 | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string HotelQuota | ||
+ | |||
+ | /// <summary> | ||
+ | /// Наличие мест на прямом перелете: больше нуля - места есть (количество мест в квоте), 0 - мест нет, меньше 0 - места по запросу + через двоеточие общее кол-во мест, по каждому классу. Пример: | ||
+ | /// 10:100|0:100|10:100 | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string CharterThereQuota | ||
+ | |||
+ | /// <summary> | ||
+ | /// Наличие мест на обратном перелете: больше нуля - места есть (количество мест в квоте), 0 - мест нет, меньше 0 - места по запросу | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string CharterBackQuota | ||
+ | |||
+ | /// <summary> | ||
+ | /// Номер строки | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int Id | ||
+ | |||
+ | /// <summary> | ||
+ | /// Номер строки | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int Key | ||
+ | |||
+ | /// <summary> | ||
+ | /// URL с описанием отеля | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string HotelURL | ||
+ | /// <summary> | ||
+ | /// URL с описанием тура | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string TourURL | ||
+ | |||
+ | /// <summary> | ||
+ | /// Текстовая строка с информацией о прямом перелете (авиакомпания, рейс, время, аэропорт вылета/прилета) | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string CharterInfo | ||
+ | |||
+ | /// <summary> | ||
+ | /// Текстовая строка с информацией об обратном перелете (авиакомпания, рейс, время, аэропорт вылета/прилета) | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string CharterBackInfo | ||
+ | |||
+ | /// <summary> | ||
+ | /// Текстовая строка, содержащая ключи всех отелей в пакете услуг (через запятую) | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string AllHotelKeys | ||
+ | |||
+ | /// <summary> | ||
+ | /// Текстовая строка, содержащая ключи всех номеров в пакете услуг (через запятую) | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string AllHotelRoomKeys | ||
+ | |||
+ | /// <summary> | ||
+ | /// Текстовая строка, содержащая все продолжительности проживаний в пакете услуг (через запятую) | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string AllHotelNights | ||
+ | |||
+ | /// <summary> | ||
+ | /// Текстовая строка, содержащая все категории проживаний в пакете услуг (через запятую) | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string AllHotelStars | ||
+ | |||
+ | /// <summary> | ||
+ | /// Текстовая строка, содержащая ключи всех питаний в пакете услуг (через запятую) | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public string AllPansionKeys | ||
+ | |||
+ | /// <summary> | ||
+ | /// Текущий индекс динамического изменения цены для отеля (текущая цена = базовая цена + значение шага изменения цены * текущий индекс динамического изменения цены) | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public int DynamicHotelPriceStepIndex | ||
+ | |||
+ | /// <summary> | ||
+ | /// Корректировка базовой цены для отеля (пока в шагах) | ||
+ | /// </summary> | ||
+ | [XmlAttribute] | ||
+ | public double DynamicHotelPriceCorrection | ||
+ | }</nowiki> | ||
+ | ==Работа в системе== | ||
+ | ===Использование сервиса подборов тура=== | ||
+ | |||
+ | Для использования сервиса подборов тура необходимо вызвать метод DoSearch у сервиса Search.asmx со следующими параметрами: | ||
+ | |||
+ | *SearchFilter filter – объект класса, описывающего критерии подбора тура | ||
+ | *int pageNumber – порядковый номер запрашиваемой страницы (нумерация начинается с 0) | ||
+ | *SearchParams searchParams – объект класса, описывающего параметры подбора тура | ||
+ | |||
+ | Сервис возвращает объект класса SearchResult, содержащий коллекцию объектов класса SearchResultItem. | ||
+ | |||
+ | ===Примеры запросов к сервису=== | ||
+ | |||
+ | {| border="1" cellpadding="8" style="background-color:#F9F9F9; border:#AAAAAA; border-collapse:collapse" | ||
+ | |||
+ | |- style="background-color:#F2F2F2" | ||
+ | |- style="vertical-align:text-top" | ||
+ | |||
+ | | <syntaxhighlight lang="xml"> | ||
+ | <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
+ | xmlns:xsd="http://www.w3.org/2001/XMLSchema"> | ||
+ | <soap:Body> | ||
+ | <DoSearch xmlns="http://megatec.ru/"> | ||
+ | <filter CountryKey="90" ExcludeNoPlaces="true" DepartFromKey="1" IsAllHotels="true" IsAllTourType="false" | ||
+ | IsAllTourTypeDetails="false" Adults="2" Childs="0" PageSize="15" IsNullPriceMinimum="true" IsAllPansion="false"> | ||
+ | <ExcludeTourType>false</ExcludeTourType> | ||
+ | <KindOfToursMask>All</KindOfToursMask> | ||
+ | <TurListAttributeMask>0</TurListAttributeMask> | ||
+ | <CruiseCountryKey>0</CruiseCountryKey> | ||
+ | <HotelPartnerKey>0</HotelPartnerKey> | ||
+ | <CruisePortKey>0</CruisePortKey> | ||
+ | <TurDateRange DateFrom="2016-09-12" DateTo="2016-09-20" /> | ||
+ | <PansionKeys>1</PansionKeys> | ||
+ | </filter> | ||
+ | <pageNumber>0</pageNumber> | ||
+ | <searchParams Sort="PT_Price"> | ||
+ | <CalculateVisaDeadline>false</CalculateVisaDeadline> | ||
+ | <NotDefaultSort>false</NotDefaultSort> | ||
+ | <IsShowCOName>false</IsShowCOName> | ||
+ | </searchParams> | ||
+ | </DoSearch> | ||
+ | </soap:Body> | ||
+ | </soap:Envelope> | ||
+ | </syntaxhighlight> | ||
+ | |} | ||
+ | <br /> | ||
+ | |||
+ | {| border="1" cellpadding="8" style="background-color:#F9F9F9; border:#AAAAAA; border-collapse:collapse" | ||
+ | |||
+ | |- style="background-color:#F2F2F2" | ||
+ | |- style="vertical-align:text-top" | ||
+ | |||
+ | | <syntaxhighlight lang="xml"> | ||
+ | <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
+ | xmlns:xsd="http://www.w3.org/2001/XMLSchema"> | ||
+ | <soap:Body> | ||
+ | <DoSearch xmlns="http://megatec.ru/"> | ||
+ | <filter CountryKey="90" ExcludeNoPlaces="false" DepartFromKey="1" IsAllHotels="true" | ||
+ | IsAllTourType="false" IsAllTourTypeDetails="false" Adults="2" Childs="0" PageSize="15" | ||
+ | IsNullPriceMinimum="true" IsAllPansion="false"> | ||
+ | <DurationRange DurationFrom="0" DurationTo="0" /> | ||
+ | <PansionKeys> | ||
+ | <anyType xsi:type="xsd:int">1</anyType> | ||
+ | <anyType xsi:type="xsd:int">2</anyType> | ||
+ | </PansionKeys> | ||
+ | <HotelStars> | ||
+ | <anyType xsi:type="xsd:string">1*</anyType> | ||
+ | <anyType xsi:type="xsd:string">2*</anyType> | ||
+ | </HotelStars> | ||
+ | <HotelKeys> | ||
+ | <anyType xsi:type="xsd:int">1</anyType> | ||
+ | <anyType xsi:type="xsd:int">2</anyType> | ||
+ | </HotelKeys> | ||
+ | <CityKeys> | ||
+ | <anyType xsi:type="xsd:int">2</anyType> | ||
+ | <anyType xsi:type="xsd:int">3</anyType> | ||
+ | </CityKeys> | ||
+ | <ResortKeys> | ||
+ | <anyType xsi:type="xsd:int">4</anyType> | ||
+ | <anyType xsi:type="xsd:int">5</anyType> | ||
+ | </ResortKeys> | ||
+ | <ExcludeTourType>false</ExcludeTourType> | ||
+ | <KindOfToursMask>All</KindOfToursMask> | ||
+ | <TurListAttributeMask>0</TurListAttributeMask> | ||
+ | <CruiseCountryKey>0</CruiseCountryKey> | ||
+ | <HotelPartnerKey>0</HotelPartnerKey> | ||
+ | <CruisePortKey>0</CruisePortKey> | ||
+ | <TurDateRange DateFrom="2017-05-12" DateTo="2017-05-12" /> | ||
+ | <PansionKeys>1</PansionKeys> | ||
+ | </filter> | ||
+ | <pageNumber>0</pageNumber> | ||
+ | <searchParams Sort="PT_Price, pt_hdstars desc, pt_tourdate" CheckCQ="false" CheckNLQ="false"> | ||
+ | <CalculateVisaDeadline>false</CalculateVisaDeadline> | ||
+ | <NotDefaultSort>false</NotDefaultSort> | ||
+ | <IsShowCOName>false</IsShowCOName> | ||
+ | </searchParams> | ||
+ | </DoSearch> | ||
+ | </soap:Body> | ||
+ | </soap:Envelope> | ||
+ | </syntaxhighlight> | ||
+ | |} | ||
+ | <br /> | ||
+ | |||
+ | [[Category:Web-сервисы]] |
Текущая версия на 09:36, 14 июня 2017
Введение
Данный модуль предназначен для осуществления поиска и подбора туров из внешних приложений.
Ссылка на тестовый сервис
С работой тестового сервиса поиска вы можете ознакомиться на нашем демо-сервере.
Установка
Для установки Поискового сервиса нужно создать директорию WebServices в каталоге c:/inetpub/wwwroot/ и выложить туда распакованные файлы из архива mw-megatecwebservices-2007.2.XX.XXXX.zip. В управлении IIS необходимо создать виртуальный каталог для папки WebServices.
Создание виртуального каталога
По умолчанию корневым каталогом IIS является C:/Inetpub/wwwroot. Для создания виртуального каталога для приложения находящегося в этом каталоге нужно выполнить следующие действия:
- 1. Зайти в Пуск (Start) – Настройки (Settings) – Панель управления (Control Panel)
- 2. В открывшемся окне выбрать Администрирование (Administrative Tools).
- 3. Запустить Internet Information Services (IIS) Manager.
- 4. В открывшемся дереве каталогов выбрать Web Sites – Default Web Site. В открывшемся списке найти папку, для которой нужно создать виртуальный каталог, кликнуть по ней правой кнопкой мыши и зайти в Свойства (Properties).
- 5. В открывшемся окне, в закладке Directory нужно нажать кнопку «Create», а затем кнопку «ОК».
Подключение к базе данных ПК «Мастер-Тур»
В файле web.config, расположенном в папке WebServices пропишите необходимые параметры подключения (курсивом выделены значения, которые необходимо ввести). Строка подключения к базе данных ПК «Мастер-Тур»:
- 1. <add key = "connectionString" value = "Data Source=ip-адрес сервера базы данных ПК Мастер-тур;Initial Catalog=название базы данных ПК Мастер-тур;User ID=логин пользователя ПК Мастер-тур;Password=пароль пользователя ПК Мастер-тур"/>
- 2. <add key = "connectionStringShort" value = "Data Source=ip-адрес сервера базы данных ПК Мастер-Тур;Initial Catalog=название базы данных ПК Мастер-Тур"/>
При использовании репликации в строке подключения необходимо указать подключение к поисковой базе. Настройка searchConnectionString веб-сервисом не поддерживается.
Настройка
После установки «Поисковый сервис» доступен по адресу http://ip-адрес сервера Мастер-Веб/WebServices/Search.asmx
.
Настройки web.config «Поискового сервиса»
Дополнительные настройки, задаваемые в секции <appSettings>
файла web.config, находящемся в папке WebServices, позволяют задать дополнительные условия для отображения и проверки данных по турам от удаленных источников.
№ | Описание | Значение | Настройка |
---|---|---|---|
1 | Отображение наличия мест в экранах, если релиз-период = 0 |
|
<add key="setRequestIfReleaseIsZero" value="true" />
|
2 | Проверка агентской квоты |
|
<add key="checkAgentQuotesEnabled" value="true" />
|
3 | Проверка общей квоты, если закончились места в агентской |
|
<add key="checkAgentAndCommonQuote" value="true" />
|
4 | Проверка квот без продолжительности после того, как заканчиваются квоты на продолжительность |
|
<add key="checkNoLongQuota" value="true" />
|
5 | Наличие мест, отображаемое при наступлении релиз-периода |
|
<add key="expiredReleaseQuoteResult" value="request" />
|
Настройки web.config приложения ПК Мастер-Web
Добавление секций
- 1. В секции <ConfigSections> необходимо добавить подсекцию:
<sectionGroup name="Megatec.Web.Services">
<section name="servicesAccessibility" type="Megatec.Configuration.WebServicesSection, Megatec.Configuration"/>
</sectionGroup>
|
- 2. На одном уровне с секцией <ConfigSections> необходимо добавить секцию:
В данной секции необходимо указать адрес поискового веб-сервиса.
<Megatec.Web.Services>
<servicesAccessibility Enabled="true">
<Services>
<add name="DoSearch" enabled="true" url="http://somesite/Webservices/Search.asmx"/>
</Services>
</servicesAccessibility>
</Megatec.Web.Services>
|
Подготовка данных
Описание класса SearchFilter
Параметр PageSize является обязательным и его значение должно быть менее 1000.
Возможные значения HotelQuotaMask:
- None - Ничего не выбрано
- Yes - Есть гарантированные места
- Request - Места под запрос
- NoFlight - Гарантированные места + места под запрос
- All - Гарантированные места + места под запрос + мест нет
Возможные значения AviaQuotaMask:
- None - Ничего не выбрано
- Yes - Есть гарантированные места
- Request - Места под запрос
- NoFlight - Гарантированные места + места под запрос
- All - Гарантированные места + места под запрос + мест нет
/// <summary> /// Поисковый фильтр /// </summary> public class SearchFilter { public enum SearchSource : short { PriceTables = 0, BindingTables = 1, } public enum KindOfTours : int { All = 0, PacketTours = 1, LandTours = 2 } /// <summary> /// Вид тура /// </summary> public KindOfTours KindOfToursMask { get { return this.kindOfTours; } set { this.kindOfTours = value; } } /// <summary> /// Маска аттрибутов тура /// </summary> public int TurListAttributeMask { get { return this.turlistAttributeMask; } set { this.turlistAttributeMask = value; } } /// <summary> /// Партнер по отелю /// </summary> public int HotelPartnerKey { get { return this.hotelPartnerKey; } set { this.hotelPartnerKey = value; } } [XmlAttribute] public int MaxChildAge { get { return this.maxChildAge; } set { this.maxChildAge = value; } } /// <summary> /// Интервал дат /// </summary> public DateInterval TurDateRange { get { return this._turDateRange; } set { this._turDateRange = value; } } /// <summary> /// Интервал продолжительностей /// </summary> public DurationInterval DurationRange { get { return this._durationRange; } set { this._durationRange = value; } } /// <summary> /// Ключ страны /// </summary> [XmlAttribute] public int CountryKey { get { if (this._countryKeys.Count == 0) return -1; return (int)this._countryKeys[0]; } set { this._countryKeys.Clear(); if (value > 0) this._countryKeys.Add(value); } } /// <summary> /// Массив ключей стран /// </summary> public ArrayList CountryKeys { get { return this._countryKeys; } } /// <summary> /// Поставлен ли флажок все авиакомпании (данный параметр еще не реализован) /// </summary> [XmlAttribute] public bool IsAllAirlines { get { return this._isAllAirlines; } set { this._isAllAirlines = value; } } /// <summary> /// Поставлен ли флажок все страны /// </summary> [XmlAttribute] public bool IsAllCountries { get { return this._isAllCountries; } set { this._isAllCountries = value; } } /// <summary> /// Поиск на все продолжительности /// </summary> [XmlAttribute] public bool IsAllDurations { get { return this._isAllDurations; } set { this._isAllDurations = value; } } /// <summary> /// Массив продолжительностей /// </summary> public ArrayList Durations { get { return durations; } } [XmlAttribute] public bool ExcludeNoPlaces { get { return excludeNoPlaces; } set { excludeNoPlaces = value; } } /// <summary> /// Массив продолжительностей в днях /// </summary> public ArrayList Days { get { return days; } } /// <summary> /// Массив продолжительностей в ночах /// </summary> public ArrayList Nights { get { return nights; } } /// <summary> /// Проверять ли квоты /// </summary> [XmlAttribute] public bool CheckQuotes { get { return checkQuotes; } set { checkQuotes = value; } } /// <summary> /// Ключ города отправления /// </summary> [XmlAttribute] public int DepartFromKey { get { if (this._departFromKeys.Count == 0) return -1; return (int)this._departFromKeys[0]; } set { this._departFromKeys.Clear(); if (value >= 0) this._departFromKeys.Add(value); } } /// <summary> /// Ключ города прибытия (данный параметр еще не реализован) /// </summary> [XmlAttribute] public int DepartToKey { get { if (this._departToKeys.Count == 0) return -1; return (int)this._departToKeys[0]; } set { this._departToKeys.Clear(); if (value > 0) this._departToKeys.Add(value); } } /// <summary> /// Массив ключей городов вылета /// </summary> public ArrayList DepartFromKeys { get { return this._departFromKeys; } } /// <summary> /// Поставлен ли флажок все города вылетов /// </summary> [XmlAttribute] public bool IsAllDepartsFrom { get { return this._isAllDepartsFrom; } set { this._isAllDepartsFrom = value; } } /// <summary> /// Массив ключей городов прибытия /// </summary> public ArrayList DepartToKeys { get { return this._departToKeys; } } /// <summary> /// Поставлен ли флажок все города вылетов /// </summary> [XmlAttribute] public bool IsAllDepartsTo { get { return this._isAllDepartsTo; } set { this._isAllDepartsTo = value; } } /// <summary> /// Массив ключей аэропортов вылета /// </summary> public ArrayList AirportFromKeys { get { return this._airportFromKeys; } } /// <summary> /// Поставлен ли флажок все города вылетов /// </summary> [XmlAttribute] public bool IsAllAirportsFrom { get { return this._isAllAirportsFrom; } set { this._isAllAirportsFrom = value; } } /// <summary> /// Массив ключей аэропортов прибытия /// </summary> public ArrayList AirportToKeys { get { return this._airportToKeys; } } /// <summary> /// Поставлен ли флажок все города вылетов /// </summary> [XmlAttribute] public bool IsAllAirportsTo { get { return this._isAllAirportsTo; } set { this._isAllAirportsTo = value; } } /// <summary> /// Ключ отеля /// </summary> [XmlAttribute] public int HotelKey { get { if (this._hotelKeys.Count == 0) return -1; return (int)this._hotelKeys[0]; } set { this._hotelKeys.Clear(); if (value > 0) this._hotelKeys.Add(value); } } /// <summary> /// Ключ тура /// </summary> [XmlAttribute] public int TourKey { get { return this._tourKey; } set { this._tourKey = value; } } /// <summary> /// Ограничение цены /// </summary> [XmlAttribute] public double PriceLimit { get { return this._priceLimit; } set { this._priceLimit = value; } } /// <summary> /// Список ключей курортов /// </summary> public ArrayList ResortKeys { get { return this._resortKeys; } } /// <summary> /// Поставлен ли флажок все курорты /// </summary> [XmlAttribute] public bool IsAllResort { get { return this._isAllResort; } set { this._isAllResort = value; } } /// <summary> /// Список ключей городов /// </summary> public ArrayList CityKeys { get { return this._cityKeys; } } /// <summary> /// Установлен ли в фильтре флаг все города /// </summary> [XmlAttribute] public bool IsAllCity { get { return this._isAllCity; } set { this._isAllCity = value; } } /// <summary> /// Список ключей городов /// </summary> public ArrayList HotelKeys { get { return this._hotelKeys; } } /// <summary> /// Список ключей сервисов в отеле /// </summary> public ArrayList HotelOptionsKeys { get { return this._hotelOptionsKeys; } } /// <summary> /// Установлен ли в фильтре флаг все отели /// </summary> [XmlAttribute] public bool IsAllHotels { get { return this._isAllHotels; } set { this._isAllHotels = value; } } /// <summary> /// Список ключей типов туров /// </summary> public ArrayList TourTypeKeys { get { return this._tourTypeKeys; } } /// <summary> /// Установлен ли флаг все типы тура /// </summary> [XmlAttribute] public bool IsAllTourType { get { return this._isAllTourType; } set { this._isAllTourType = value; } } /// <summary> /// Список ключей типов туров /// </summary> public ArrayList TourTypeDetailKeys { get { return this._tourTypeDetailKeys; } } /// <summary> /// Установлен ли флаг все типы тура /// </summary> [XmlAttribute] public bool IsAllTourTypeDetails { get { return this._isAllTourTypeDetails; } set { this._isAllTourTypeDetails = value; } } /// <summary> /// Список звездностей отелей /// </summary> public ArrayList HotelStars { get { return this._hotelStars; } } /// <summary> /// Поиск по всем звездностям /// </summary> [XmlAttribute] public bool IsAllHotelStars { get { return this._isAllHotelStars; } set { this._isAllHotelStars = value; } } /// <summary> /// Список ключей питаний /// </summary> public ArrayList PansionKeys { get { return this._pansionKeys; } } /// <summary> /// Поиск по всем питаниях /// </summary> [XmlAttribute] public bool IsAllPansion { get { return this._isAllPansion; } set { this._isAllPansion = value; } } /// <summary> /// Список кодов авиакомпаний /// </summary> public ArrayList AirlineCodes { get { return this._airlineCodes; } } /// <summary> /// Список ключей типов номеров /// </summary> public ArrayList RoomKeys { get { return this.roomKeys; } } /// <summary> /// Список ключей категорий проживания /// </summary> public ArrayList RoomCategoryKeys { get { return this.roomCategoryKeys; } } /// <summary> /// Список ключей типов размещения /// </summary> public ArrayList AccomodationKeys { get { return this.accomodationKeys; } } /// <summary> /// Список ключей дополнительных услуг в отеле /// </summary> public ArrayList AddHotelServiceKeys { get { return this._addHotelServiceKeys; } } /// <summary> /// Поиск по все услугам в отеле /// </summary> [XmlAttribute] public bool IsAllAddHotelService { get { return this._isAllAddHotelService; } set { this._isAllAddHotelService = value; } } /// <summary> /// Искать только основные типы размещения /// </summary> [XmlAttribute] public bool MainOnly { get { return mainOnly; } set { mainOnly = value; } } /// <summary> /// Искать только туры для групп агентов, в которые входит данное агентство /// </summary> [XmlAttribute] public bool GroupOnly { get { return groupOnly; } set { groupOnly = value; } } /// <summary> /// Количество взрослых /// </summary> [XmlAttribute] public int Adults { get { return adults; } set { adults = value; } } /// <summary> /// Количество детей /// </summary> [XmlAttribute] public int Childs { get { return childs; } set { childs = value; } } /// <summary> /// Возраст первого ребенка /// </summary> [XmlAttribute] public int FirstChildAge { get { return firstChildAge; } set { firstChildAge = value; } } /// <summary> /// Возраст второго ребенка /// </summary> [XmlAttribute] public int SecondChildAge { get { return secondChildAge; } set { secondChildAge = value; } } /// <summary> /// Маска квот на проживание /// </summary> [XmlAttribute] public QuotaResult.Status HotelQuotaMask { get { return hotelQuotaMask; } set { hotelQuotaMask = value; } } /// <summary> /// Маска квот на перелет /// </summary> [XmlAttribute] public QuotaResult.Status AviaQuotaMask { get { return aviaQuotaMask; } set { aviaQuotaMask = value; } } /// <summary> /// Количество строк на странице /// </summary> [XmlAttribute] public int PageSize { get { return this.pageSize; } set { this.pageSize = value; } } /// <summary> /// Ограничение цены снизу /// </summary> [XmlAttribute] public double PriceMinimum { get { return this._priceMinimum; } set { this._priceMinimum = value; this.isNullPriceMinimum = false; } } /// <summary> /// Ограничена ли цена снизу /// </summary> [XmlAttribute] public bool IsNullPriceMinimum { get { return this.isNullPriceMinimum; } set { this.isNullPriceMinimum = value; } } /// <summary> /// Дополнительный фильтр /// </summary> [XmlAttribute] public string AddFilter { get { return addFilter; } set { addFilter = value; } } } }
Описание класса SearchParams
/// <summary> /// Класс, описывающий параметры подбора тура /// </summary> public class SearchParams { /// <summary> /// Идентификатор агенства, от имени которого производится поиск /// </summary> [XmlAttribute("Agent")] public int AgentKey = 0; /// <summary> /// Разделять квоты на агентские/неагентские или игнорировать агентские квоты. /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "checkAgentQuotesEnabled". /// Значение по умолчанию: true. /// </summary> [XmlAttribute("CheckAQ")] public bool CheckAgentQuota = true; /// <summary> /// Проверять общую квоту, если агентская закончилась. /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "checkAgentAndCommonQuote". /// Значение по умолчанию: true. /// </summary> [XmlAttribute("CheckCQ")] public bool CheckCommonQuota = true; /// <summary> /// При подборе перелета поиск производится в том же пакете цен, что и перелет в обсчитанном туре, /// иначе цены в расчет на принимается, а используется только расписание перелетов. /// Используется только, если FindFlight = true. /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "checkFlightPacket". /// Значение по умолчанию: true. /// </summary> [XmlAttribute("CheckFP")] public bool CheckFlightPacket = true; /// <summary> /// Проверять квоты без продолжительности после того, как закончатся квоты на продолжительность. /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "checkNoLongQuota". /// Значение по умолчанию: true /// </summary> [XmlAttribute("CheckNLQ")] public bool CheckNoLongQuota = true; /// <summary> /// Проверять квоты от всех различных партнеров. /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "checkAllPartnersQuota". /// Значение по умолчанию: false /// </summary> [XmlAttribute("CheckAPQ")] public bool CheckAllPartnersQuota = true; /// <summary> /// Результат возвращаемый, если у квоты истек релиз-период. /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "expiredReleaseQuoteResult". /// Значение по умолчанию: QuotaResult.Status.Request. /// </summary> [XmlAttribute("ExpRelRes")] public QuotaResult.Status ExpiredReleaseResult = QuotaResult.Status.Request; /// <summary> /// Подбирать авиаперелет по туру, на который есть свободные места. /// </summary> [XmlAttribute("FindFlight")] public bool FindFlight = true; /// <summary> /// Список классов перелета (ключи бизнес- и эконом-класса) /// </summary> [XmlAttribute("FlightGroups")] public string FlightGroups = String.Empty; /// <summary> /// Использовать таблицу TP_Tours как источник данных, иначе - таблицу tbl_TurList /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "quotedDynamicPriceTour". /// Значение по умолчанию: true. /// </summary> [XmlAttribute("IsPT")] public bool IsPriceTour = true; /// <summary> /// Результат возвращаемый при наличии квоты, но отсутствии свободных мест. /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "noPlacesQuoteResult". /// Значение по умолчанию: QuotaResult.Status.No. /// </summary> [XmlAttribute("NPResult")] public QuotaResult.Status NoPlacesResult = QuotaResult.Status.No; /// <summary> /// Тип отбора /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "PagingType". /// </summary> [XmlAttribute("PagingType")] public short PagingType = Megatec.Search.PagingType.Simple; /// <summary> /// Возвращает поле, содержащее список ключей классов услуг по туру /// </summary> [XmlAttribute("Services")] public bool Services = false; /// <summary> /// Отображать статус "Запрос", если релиз-период = 0, независимо от количества свободных мест. /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "setRequestIfReleaseIsZero". /// Значение по умолчанию: false. /// </summary> [XmlAttribute("SetRequestOnRelease")] public bool SetRequestOnRelease = false; /// <summary> /// Параметры сортировки (выражение ORDER BY) /// </summary> [XmlAttribute("Sort")] public string Sort = string.Empty; /// <summary> /// Производить сортировку на сервере БД или на клиенте /// </summary> [XmlAttribute("SortInDB")] public bool SortInDB = true; }
Описание класса SearchResult
[XmlInclude(typeof(SearchResultItem))] public class SearchResult { /// <summary> /// Общее количество найденных записей /// </summary> [XmlAttribute("Total")] public int TotalCount /// <summary> /// Количество отобранных записей /// </summary> [XmlAttribute("Parsed")] public int ParsedCount /// <summary> /// Не используется /// </summary> [XmlAttribute("Step")] public double DynamicPriceStepValue /// <summary> /// Коллекция найденных результатов /// </summary> [XmlElement("SearchResultItem")] public List<SearchResultItem> Items }
Описание класса SearchResultItem
public class SearchResultItem: IRoomDescription { /// <summary> /// Количество основных мест /// </summary> [XmlAttribute] public int MainPlaces /// <summary> /// Количество неосновных мест /// </summary> [XmlAttribute] public int AddPlaces /// <summary> /// Основное или неосновное размещение /// </summary> [XmlAttribute] public bool IsMain /// <summary> /// Дата, до которой актуален тур /// </summary> [XmlAttribute] public DateTime TourValid /// <summary> /// Дата создания тура /// </summary> [XmlAttribute] public DateTime TourCreated /// <summary> /// Дата заезда /// </summary> [XmlAttribute] public DateTime TourDate /// <summary> /// Продолжительность тура в днях /// </summary> [XmlAttribute] public int Days /// <summary> /// Количество ночей проживания в туре /// </summary> [XmlAttribute] public int Nights /// <summary> /// Ключ страны /// </summary> [XmlAttribute] public int CountryKey /// <summary> /// Ключ города отправления /// </summary> [XmlAttribute] public int CityFromKey /// <summary> /// Ключ города прилета /// </summary> [XmlAttribute] public int CityToKey /// <summary> /// Ключ аэропорта вылета /// </summary> [XmlAttribute] public int AirportFromKey /// <summary> /// Ключ аэропорта прилета /// </summary> [XmlAttribute] public int AirportToKey /// <summary> /// Ключ расчитанного тура (TP_Tours) /// </summary> [XmlAttribute] public int TourKey /// <summary> /// Ключ типа тура (TipTur) /// </summary> [XmlAttribute] public int TourTypeKey /// <summary> /// Ключ тура из конструктора туров (turList) /// </summary> [XmlAttribute] public int TurListKey /// <summary> /// Ключ расчитанного варианта (TP_Lists) /// </summary> [XmlAttribute] public int PriceListKey /// <summary> /// Ключ цены (TP_Prices) /// </summary> [XmlAttribute] public int PriceKey /// <summary> /// Цена /// </summary> [XmlAttribute] public decimal Price /// <summary> /// Ключ главного отеля /// </summary> [XmlAttribute] public int HotelKey /// <summary> /// Ключ партнера для главного отеля /// </summary> [XmlAttribute] public int HotelPartnerKey /// <summary> /// Ключ курорта главного отеля /// </summary> [XmlAttribute] public int ResortKey /// <summary> /// Ключ города главного отеля /// </summary> [XmlAttribute] public int CityKey /// <summary> /// Звездность главного отеля /// </summary> [XmlAttribute] public string HotelCategory /// <summary> /// Ключ питания главного отеля /// </summary> [XmlAttribute] public int PansionKey /// <summary> /// Ключ номера в главном отеле /// </summary> [XmlAttribute] public int HotelRoomKey /// <summary> /// Ключ типа номера в главном отеле /// </summary> [XmlAttribute] public int RoomKey /// <summary> /// Ключ категории номера в главном отеле /// </summary> [XmlAttribute] public int RoomCategoryKey /// <summary> /// Ключ размещения в главном отеле /// </summary> [XmlAttribute] public int AccomodationKey /// <summary> /// Минимальный возраст первого ребенка /// </summary> [XmlAttribute] public int ChildAgeFrom /// <summary> /// Максимальный возраст первого ребенка /// </summary> [XmlAttribute] public int ChildAgeTo /// <summary> /// Минимальный возраст второго ребенка /// </summary> [XmlAttribute] public int ChildAgeFrom2 /// <summary> /// Максимальный возраст второго ребенка /// </summary> [XmlAttribute] public int ChildAgeTo2 /// <summary> /// Название отеля /// </summary> [XmlAttribute] public string HotelName /// <summary> /// Название тура /// </summary> [XmlAttribute] public string TourName /// <summary> /// Название питания /// </summary> [XmlAttribute] public string PansionName /// <summary> /// Код питания /// </summary> [XmlAttribute] public string PansionCode /// <summary> /// Название типа номера /// </summary> [XmlAttribute] public string RoomName /// <summary> /// Код типа номера /// </summary> [XmlAttribute] public string RoomCode /// <summary> /// Название категории номера /// </summary> [XmlAttribute] public string RoomCategoryName /// <summary> /// Код категории номера /// </summary> [XmlAttribute] public string RoomCategoryCode /// <summary> /// Название размещения /// </summary> [XmlAttribute] public string AccomodationName /// <summary> /// Код размещения /// </summary> [XmlAttribute] public string AccomodationCode /// <summary> /// Название курорта /// </summary> [XmlAttribute] public string ResortName /// <summary> /// Название города /// </summary> [XmlAttribute] public string CityName /// <summary> /// Порядок сортировки типа номера /// </summary> [XmlAttribute] public int RoomOrder /// <summary> /// Порядок сортировки категории номера /// </summary> [XmlAttribute] public int RoomCategoryOrder /// <summary> /// Порядок сортировки размещения /// </summary> [XmlAttribute] public int AccomodationOrder /// <summary> /// Валюта /// </summary> [XmlAttribute] public string Currency /// <summary> /// Ключи услуг, входящих в тур (через запятую) /// </summary> [XmlAttribute] public string Services /// <summary> /// Ключ прямого перелета (Charter) /// </summary> [XmlAttribute] public int CharterKey /// <summary> /// Ключ обратного перелета (Charter) /// </summary> [XmlAttribute] public int CharterBackKey /// <summary> /// День предоставления проживания /// </summary> [XmlAttribute] public int HotelDay /// <summary> /// Количество ночей проживания в отеле /// </summary> [XmlAttribute] public int HotelNights /// <summary> /// День прямого перелета /// </summary> [XmlAttribute] public int CharterDay /// <summary> /// День обратного перелета /// </summary> [XmlAttribute] public int CharterBackDay /// <summary> /// Пакет прямого перелета /// </summary> [XmlAttribute] public int CharterPacketKey /// <summary> /// Партнер прямого перелета /// </summary> [XmlAttribute] public int CharterPartnerKey /// <summary> /// Пакет обратного перелета /// </summary> [XmlAttribute] public int CharterBackPacketKey /// <summary> /// Партнер обратного перелета /// </summary> [XmlAttribute] public int CharterBackPartnerKey /// <summary> /// Наличие мест в отеле: больше нуля - места есть (количество мест в квоте), 0 - мест нет, меньше 0 - места по запросу + через двоеточие общее кол-во мест. Пример /// 10:100 /// </summary> [XmlAttribute] public string HotelQuota /// <summary> /// Наличие мест на прямом перелете: больше нуля - места есть (количество мест в квоте), 0 - мест нет, меньше 0 - места по запросу + через двоеточие общее кол-во мест, по каждому классу. Пример: /// 10:100|0:100|10:100 /// </summary> [XmlAttribute] public string CharterThereQuota /// <summary> /// Наличие мест на обратном перелете: больше нуля - места есть (количество мест в квоте), 0 - мест нет, меньше 0 - места по запросу /// </summary> [XmlAttribute] public string CharterBackQuota /// <summary> /// Номер строки /// </summary> [XmlAttribute] public int Id /// <summary> /// Номер строки /// </summary> [XmlAttribute] public int Key /// <summary> /// URL с описанием отеля /// </summary> [XmlAttribute] public string HotelURL /// <summary> /// URL с описанием тура /// </summary> [XmlAttribute] public string TourURL /// <summary> /// Текстовая строка с информацией о прямом перелете (авиакомпания, рейс, время, аэропорт вылета/прилета) /// </summary> [XmlAttribute] public string CharterInfo /// <summary> /// Текстовая строка с информацией об обратном перелете (авиакомпания, рейс, время, аэропорт вылета/прилета) /// </summary> [XmlAttribute] public string CharterBackInfo /// <summary> /// Текстовая строка, содержащая ключи всех отелей в пакете услуг (через запятую) /// </summary> [XmlAttribute] public string AllHotelKeys /// <summary> /// Текстовая строка, содержащая ключи всех номеров в пакете услуг (через запятую) /// </summary> [XmlAttribute] public string AllHotelRoomKeys /// <summary> /// Текстовая строка, содержащая все продолжительности проживаний в пакете услуг (через запятую) /// </summary> [XmlAttribute] public string AllHotelNights /// <summary> /// Текстовая строка, содержащая все категории проживаний в пакете услуг (через запятую) /// </summary> [XmlAttribute] public string AllHotelStars /// <summary> /// Текстовая строка, содержащая ключи всех питаний в пакете услуг (через запятую) /// </summary> [XmlAttribute] public string AllPansionKeys /// <summary> /// Текущий индекс динамического изменения цены для отеля (текущая цена = базовая цена + значение шага изменения цены * текущий индекс динамического изменения цены) /// </summary> [XmlAttribute] public int DynamicHotelPriceStepIndex /// <summary> /// Корректировка базовой цены для отеля (пока в шагах) /// </summary> [XmlAttribute] public double DynamicHotelPriceCorrection }
Работа в системе
Использование сервиса подборов тура
Для использования сервиса подборов тура необходимо вызвать метод DoSearch у сервиса Search.asmx со следующими параметрами:
- SearchFilter filter – объект класса, описывающего критерии подбора тура
- int pageNumber – порядковый номер запрашиваемой страницы (нумерация начинается с 0)
- SearchParams searchParams – объект класса, описывающего параметры подбора тура
Сервис возвращает объект класса SearchResult, содержащий коллекцию объектов класса SearchResultItem.
Примеры запросов к сервису
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<DoSearch xmlns="http://megatec.ru/">
<filter CountryKey="90" ExcludeNoPlaces="true" DepartFromKey="1" IsAllHotels="true" IsAllTourType="false"
IsAllTourTypeDetails="false" Adults="2" Childs="0" PageSize="15" IsNullPriceMinimum="true" IsAllPansion="false">
<ExcludeTourType>false</ExcludeTourType>
<KindOfToursMask>All</KindOfToursMask>
<TurListAttributeMask>0</TurListAttributeMask>
<CruiseCountryKey>0</CruiseCountryKey>
<HotelPartnerKey>0</HotelPartnerKey>
<CruisePortKey>0</CruisePortKey>
<TurDateRange DateFrom="2016-09-12" DateTo="2016-09-20" />
<PansionKeys>1</PansionKeys>
</filter>
<pageNumber>0</pageNumber>
<searchParams Sort="PT_Price">
<CalculateVisaDeadline>false</CalculateVisaDeadline>
<NotDefaultSort>false</NotDefaultSort>
<IsShowCOName>false</IsShowCOName>
</searchParams>
</DoSearch>
</soap:Body>
</soap:Envelope>
|
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<DoSearch xmlns="http://megatec.ru/">
<filter CountryKey="90" ExcludeNoPlaces="false" DepartFromKey="1" IsAllHotels="true"
IsAllTourType="false" IsAllTourTypeDetails="false" Adults="2" Childs="0" PageSize="15"
IsNullPriceMinimum="true" IsAllPansion="false">
<DurationRange DurationFrom="0" DurationTo="0" />
<PansionKeys>
<anyType xsi:type="xsd:int">1</anyType>
<anyType xsi:type="xsd:int">2</anyType>
</PansionKeys>
<HotelStars>
<anyType xsi:type="xsd:string">1*</anyType>
<anyType xsi:type="xsd:string">2*</anyType>
</HotelStars>
<HotelKeys>
<anyType xsi:type="xsd:int">1</anyType>
<anyType xsi:type="xsd:int">2</anyType>
</HotelKeys>
<CityKeys>
<anyType xsi:type="xsd:int">2</anyType>
<anyType xsi:type="xsd:int">3</anyType>
</CityKeys>
<ResortKeys>
<anyType xsi:type="xsd:int">4</anyType>
<anyType xsi:type="xsd:int">5</anyType>
</ResortKeys>
<ExcludeTourType>false</ExcludeTourType>
<KindOfToursMask>All</KindOfToursMask>
<TurListAttributeMask>0</TurListAttributeMask>
<CruiseCountryKey>0</CruiseCountryKey>
<HotelPartnerKey>0</HotelPartnerKey>
<CruisePortKey>0</CruisePortKey>
<TurDateRange DateFrom="2017-05-12" DateTo="2017-05-12" />
<PansionKeys>1</PansionKeys>
</filter>
<pageNumber>0</pageNumber>
<searchParams Sort="PT_Price, pt_hdstars desc, pt_tourdate" CheckCQ="false" CheckNLQ="false">
<CalculateVisaDeadline>false</CalculateVisaDeadline>
<NotDefaultSort>false</NotDefaultSort>
<IsShowCOName>false</IsShowCOName>
</searchParams>
</DoSearch>
</soap:Body>
</soap:Envelope>
|