Web-сервисы: Сервис бронирования

Материал из Megatec
Перейти к: навигация, поиск

Введение

Данный модуль включает в себя два сервиса:

  • Сервис формирования списка услуг
  • Сервис бронирования

Сервис формирования списка услуг предназначен для получения следующей информации:

  • общие данные по ключу цены, такие как тур, продолжительности в днях и ночах, описание тура и условия бронирования;
  • список услуг, включенных в стоимость, по ключу цены;
  • список не рассчитанных услуг по ключу цены;
  • список вариантов какой-либо услуги.

Сервис бронирования предназначен для расчета стоимости совокупности услуг, с возможностью их последующего бронирования в базе данных.

Установка

Для установки Сервиса бронирования нужно создать директорию Reservation в каталоге c:/inetpub/wwwroot/ (корневом каталоге IIS) и выложить туда распакованные файлы из архива mw-ws-reservation-2007.2.XX.XXXX.zip. В управлении IIS необходимо создать виртуальный каталог для папки Reservation.

Создание виртуального каталога

По умолчанию корневым каталогом IIS является C:/Inetpub/wwwroot. Для создания виртуального каталога для приложения находящегося в этом каталоге нужно выполнить следующие действия:

  • 1. Зайти в Пуск (Start) – Настройки (Settings) – Панель управления (Control Panel).


843.PNG

  • 2. В открывшемся окне выбрать Администрирование (Administrative Tools).


844.PNG

  • 3. Запустить Internet Information Services (IIS) Manager.


845.PNG

  • 4. В открывшемся дереве каталогов выбрать Web Sites – Default Web Site. В открывшемся списке найти папку, для которой нужно создать виртуальный каталог, кликнуть по ней правой кнопкой мыши и зайти в Свойства (Properties).


846.PNG

  • 5. В открывшемся окне, в закладке Directory нужно нажать кнопку «Create», а затем кнопку «ОК».


847.PNG
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>