Web-сервисы: Сервис бронирования
Содержание
Введение
Данный модуль включает в себя два сервиса:
- Сервис формирования списка услуг
- Сервис бронирования
Сервис формирования списка услуг предназначен для получения следующей информации:
- общие данные по ключу цены, такие как тур, продолжительности в днях и ночах, описание тура и условия бронирования;
- список услуг, включенных в стоимость, по ключу цены;
- список не рассчитанных услуг по ключу цены;
- список вариантов какой-либо услуги.
Сервис бронирования предназначен для расчета стоимости совокупности услуг, с возможностью их последующего бронирования в базе данных.
Установка
Для установки Сервиса бронирования нужно создать директорию Reservation в каталоге c:/inetpub/wwwroot/ (корневом каталоге IIS) и выложить туда распакованные файлы из архива mw-ws-reservation-2007.2.XX.XXXX.zip. В управлении IIS необходимо создать виртуальный каталог для папки Reservation.
Создание виртуального каталога
По умолчанию корневым каталогом 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», а затем кнопку «ОК».
1.2 Подключение к базе данных ПК «Мастер-Тур»
В файле web.config, расположенном в папке Reservation пропишите необходимые параметры подключения (курсивом выделены значения, которые необходимо ввести).
Строка подключения к базе данных ПК «Мастер-Тур»:
<add key = "connectionString" value = "Data Source=ip-адрес сервера базы данных ПК Мастер-тур;Initial Catalog=название базы данных ПК Мастер-тур;User ID=логин пользователя ПК Мастер-тур;Password=пароль пользователя ПК Мастер-тур"/>
Настройка
После установки «Сервис бронирования» доступен по адресу:
- http: //ip- адрес сервера Мастер-Веб/Reservation/ServiceProvider.asmx (сервис формирования списка услуг)
- http: //ip- адрес сервера Мастер-Веб/Reservation/ReservationService.asmx (сервис бронирования)
Подготовка данных
Описание формата данных
CalculatedPriceInfo
/// <summary> /// Информация по рассчитанной цене /// </summary> public class CalculatedPriceInfo { /// <summary> /// Прайс-лист /// </summary> public PriceTour PriceTour { get; set; } /// <summary> /// Дата тура /// </summary> public DateTime TourDate { get; set; } /// <summary> /// Количество дней по туру /// </summary> public int TotalDays { get; set; } /// <summary> /// Количество ночей по туру /// </summary> public int Nights { get; set; } }
ReservationParams
/// <summary> /// Параметры бронирования /// </summary> public class ReservationParams { /// <summary> /// Идентификатор рекламного источника в БД /// </summary> public int AdvertiseID { get; set; } /// <summary> /// Идентификатор основания для скидки в БД /// </summary> public int CauseDiscountID { get; set; } /// <summary> /// Идентификатор страны тура /// </summary> public int CountryID { get; set; } /// <summary> /// Идентификатор пользователя, бронирующего тур /// </summary> public int DupUserID { get; set; } /// <summary> /// Имя оператора /// </summary> public string OperatorName { get; set; } /// <summary> /// Иденификатор ведущего менеджера по путевке /// </summary> public int OwnerID { get; set; } /// <summary> /// Идентификатор партнера, бронирующего тур /// </summary> public int PartnerID { get; set; } /// <summary> /// Валюта, в котрой производится бронирование /// (если не задана, то вытягивается из тура) /// </summary> public string RateCode { get; set; } /// <summary> /// Бронируемая продолжительность /// (если не задана, то высчитывается на основании услуг) /// </summary> public int ReserveDuration { get; set; } /// <summary> /// Дата тура /// </summary> public DateTime TourDate { get; set; } /// <summary> /// Идентификатор тура /// </summary> public int TourID { get; set; } /// <summary> /// Количество туристов по услугам /// </summary> public int TouristsCount { get; set; } }
ReservationResult
/// <summary> /// Класс, описывающий результат расчета стоимости и бронирования комплекса услуг /// </summary> public class ReservationResult { /// <summary> /// Стоимость к оплате /// </summary> public double Brutto { get; set; } /// <summary> /// Процент скидки /// </summary> public double DiscountPercent { get; set; } /// <summary> /// Абсолютная величина скидки /// </summary> public double DiscountSumm { get; set; } /// <summary> /// Валюта /// </summary> public string Rate { get; set; } /// <summary> /// Код сформированной путевки /// </summary> public string ReservationCode { get; set; } /// <summary> /// Сообщение об ошибке /// </summary> public string ErrorMessage { get; set; } }
Сервис формирования списка услуг (ServiceProvider.asmx)
Метод получения информации по ключу цены
Сигнатура вызова
/// <summary> /// Получение информации о цене /// </summary> /// <param name="priceKey">Ключ цены</param> /// <param name="includeTourDescriptionText">Возвращать ли описание тура</param> /// <param name="includeBookingConditionsText">Возвращать ли условия бронирования по туру</param> /// <returns></returns> [WebMethod] public CalculatedPriceInfo GetCalculatedPriceInfo(int priceKey, bool includeTourDescriptionText, bool includeBookingConditionsText)
Метод получения рассчитанных услуг
Сигнатура вызова
/// <summary> /// Возвращает список рассчитанных услуг по ключу цены /// </summary> /// <param name="priceKey">Ключ обсчитанной цены</param> /// <returns></returns> [WebMethod] public List<Service> GetCalculatedServices(int priceKey)
Метод получения нерасчитанных услуг
Сигнатура вызова
/// <summary> /// Возвращает список нерассчитанных услуг по ключу цены /// </summary> /// <param name="priceKey">Ключ обсчитанной цены</param> /// <returns></returns> [WebMethod] public List<Service> GetNotCalculatedServices(int priceKey)
Метод получения вариантов услуги
Сигнатура вызова
/// <summary> /// Получение вариантов услуги /// </summary> /// <param name="service">Базовая услуга</param> /// <param name="dtDate">Дата заезда</param> /// <param name="duration">Продолжительность тура</param> /// <param name="allowHidden">Искать ли аналоги для скрытой услуги</param> /// <param name="allowHotelCodeChange">Можно ли поменять отель</param> /// <param name="CheckFlightPacket">Проверять ли пакет услуги</param> /// <param name="checkQuotes">Нужно ли делать проверку квот и удалять варианты без мест</param> /// <param name="nMen">Количество мест для проверки (если 0, то игнорируем byRoom и userKey</param> /// <param name="byRoom">Что проверяем. Места или комнаты</param> /// <param name="userKey">Агент</param> /// <param name="includeOriginal">Включать в результат базовую услугу</param> /// <param name="excludeCharterClasses">Исключить из подбора данные классы перелетов</param> /// <returns>Список услуг</returns> [WebMethod] public List<Service> GetServiceVariants(Megatec.Travel.Entities.Service service , DateTime tourDate , int tourDuration , bool allowHidden , bool allowHotelCodeChange , bool checkFlightPacket , bool checkQuotes , short nMen , bool byRoom , int userKey , bool includeOriginal , string excludeCharterClasses)
Сервис бронирования (ReservationService.asmx)
Метод расчета стоимости услуг
Сигнатура вызова
/// <summary> /// Метод расчета стоимости услуг /// </summary> /// <param name="services">Список услуг, по которым рассчитывается стоимость</param> /// <param name="parameters">Параметры расчета</param> /// <returns>Результат расчета стоимости</returns> public Megatec.Travel.Entities.ReservationResult CalculateReservation(List<Megatec.Travel.Entities.Service> services, ReservationParams parameters)
Метод бронирования услуг
Сигнатура вызова
/// <summary> /// Метод бронирования /// </summary> /// <param name="services">Список бронируемых услуг</param> /// <param name="tourists">Список туристов по путевке</param> /// <param name="parameters">Параметры бронирования</param> /// <returns></returns> [WebMethod] public Megatec.Travel.Entities.ReservationResult CreateReservation(List<Megatec.Travel.Entities.Service> services, List<Tourist> tourists, ReservationParams parameters)
Работа в системе
Работа с сервисом ServiceProvider.asmx
Метод получения информации по ключу цены
Пример SOAP-запроса к сервису:
<?xml version="1.0" encoding="utf-8"?> <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> <GetCalculatedPriceInfo xmlns="http://megatec.ru/"> <priceKey>5038425</priceKey> <includeTourDescriptionText>true</includeTourDescriptionText> <includeBookingConditionsText>true</includeBookingConditionsText> </GetCalculatedPriceInfo> </soap:Body> </soap:Envelope>
Пример SOAP-ответа сервиса:
<?xml version="1.0" encoding="utf-8"?> <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> <GetCalculatedPriceInfoResponse xmlns="http://megatec.ru/"> <GetCalculatedPriceInfoResult> <PriceTour> <ID>667</ID> <Name>Test Tour</Name> <Description /> <Country> <ID>90</ID> <Name>Австрия</Name> </Country> <Tour> <ID>542</ID> <Name>Test Tour</Name> <Description /> <BookingConditions /> </Tour> <Attribute>0</Attribute> <IncludedServices> Авиаперелет, Трансфер, Проживание(питание: Полупансион), Виза, Страховка, Доп. услуги</IncludedServices> </PriceTour> <TourDate>2010-07-02T00:00:00</TourDate> <TotalDays>11</TotalDays> <Nights>10</Nights> </GetCalculatedPriceInfoResult> </GetCalculatedPriceInfoResponse> </soap:Body> </soap:Envelope>