@@ -0,0 +1,8 @@ | |||
.idea/ | |||
out/ | |||
bin/ | |||
*.log | |||
web/WEB-INF/config/ | |||
.gradle/ | |||
ext/ | |||
build/ |
@@ -0,0 +1,857 @@ | |||
# Введение | |||
**Версия документа: 1.2** | |||
**Дата изменения: 16.09.2016** | |||
Для возможности продажи с использованием протокола AVS5RS необходимо реализовать сервис с использованием протокола HTTP. Все запросы оправляются методом POST. | |||
Методы включают в себя справочные методы и методы продажи. Продажа состоит из двух этапов резервирование и подтверждение продажи. | |||
Протокол должен быть защищен авторизацией через логин и пароль. Так же необходимо чтобы трафик передавался по защищенному каналу связи с использованием SSL или VPN. | |||
## Методы сервиса | |||
Все запросы должны передаваться по протоколу HTTP методом пост. В теле POST запроса и ответа передается XML фиксированного формата. | |||
Каждый метод имеет отдельный URL. Через HTTP заголовок Content-Type передается значение `application/xml; charset=UTF-8`. | |||
Этот заголовок указывает на тип содержимого запроса и его кодировку. Необходимо использовать только кодировку UTF-8. | |||
### Формат ответа | |||
Корневой тег XML ответа Response. У него есть обязательный атрибут success, который указывает корректно выполнился запрос или нет, значения true - корректно, false - нет. | |||
Если ответ корректный, то данные ответа содержатся во вложенном теге Body. Если ответ не корректный, тег Body будет проигнорирован, а информация об ошибке должна | |||
находиться во вложенном теге Error. Который состоит из кода ошибки и описания. Коды ошибок не регламентируются. Описание это произвольные тест, поясняющий причину ошибки. | |||
Регистр названий тегов и атрибутов должен совпадать с регистром из примеров. | |||
Все ответы должны приходить с HTTP кодом 200. Все XML ответы должны начинаться с объявления `<?xml version="1.0" encoding="UTF-8"?>` в котором указана кодировка содержимого. | |||
Формат даты `yyyy-MM-dd`, формат даты и времени `yyyy-MM-dd'T'HH:mm:ss`, пример 2016-09-07T13:10:00 (символ T латинский, обязательный) (секунды обязательны). | |||
Время указано в часовом поясе сервера который предоставляет контент. | |||
Все идентификаторы сущностей (id) это строки, произвольного формата, длинной до 36 символов. | |||
Корректный ответ: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |||
<Response success="true"> | |||
<Body> | |||
<message>Test</message> | |||
</Body> | |||
</Response> | |||
``` | |||
Не корректный ответ: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |||
<Response success="false"> | |||
<Error> | |||
<code>ERROR</code> | |||
<message>Место 5 занято</message> | |||
</Error> | |||
</Response> | |||
``` | |||
### echo | |||
Метод принимает в параметра произвольную строку и возвращает её в теле ответа. Не выполняет ни какой логики. Необходим для проверки доступен ли сервис. | |||
**URL: /sales/echo** | |||
Запрос: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<EchoRequest> | |||
<!-- Сообщение которое будет возвращено в ответ. Обязательно. --> | |||
<message>Test</message> | |||
</EchoRequest> | |||
``` | |||
Ответ: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |||
<Response success="true"> | |||
<Body> | |||
<!-- Сообщение переданное в запросе --> | |||
<message>Test</message> | |||
</Body> | |||
</Response> | |||
``` | |||
### getDispatchStations | |||
Метод получения станций отправления. | |||
Продажа происходит от станции отправления до станции назначения, поэтому метод должен вернуть хотя бы один элемент. | |||
Обычно станциями отправления являются автовокзалы или автоматизированные остановочные пункты с функцией продажи билетов. | |||
**URL: /sales/getDispatchStations** | |||
Запрос: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<GetDispatchStationsRequest> | |||
</GetDispatchStationsRequest> | |||
``` | |||
Ответ: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |||
<Response success="true"> | |||
<Body> | |||
<!-- Станция --> | |||
<Station> | |||
<!-- Идентификатор станции. Обязателен. --> | |||
<id>983</id> | |||
<!-- Наименование станции. Обязателен. Используется для отображения в интерфейсе пользователя --> | |||
<name>ВДНХ АС</name> | |||
<!-- Название региона станции. Не обязателен. Используется для отображения в интерфейсе пользователя --> | |||
<region>Москва</region> | |||
<!-- ОКАТО станции. Не обязателен. Используется для поиска одинаковых станций и отображения в интерфейсе пользователя --> | |||
<okato>45000000000</okato> | |||
</Station> | |||
<Station> | |||
<id>853</id> | |||
<name>Варшавская АС</name> | |||
<region>Москва</region> | |||
<okato>45000000000</okato> | |||
</Station> | |||
<Station> | |||
<id>6</id> | |||
<name>Красногвардейская АС</name> | |||
<region>Москва</region> | |||
<okato>45000000000</okato> | |||
</Station> | |||
</Body> | |||
</Response> | |||
``` | |||
### getArrivalStations | |||
Метод получения станций назначения от станции отправления. В параметра принимает идентификатор станции отправления. | |||
Станциями назначения могут быть любые остановочные пункты до которых есть хотя бы один рейс. | |||
Если станций назначения нет вернуть пустой список. | |||
**URL: /sales/getArrivalStations** | |||
Запрос: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<GetArrivalStationsRequest> | |||
<!-- Идентификатор станции отправления. Обязательно. --> | |||
<dispatchStationId>983</dispatchStationId> | |||
</GetArrivalStationsRequest> | |||
``` | |||
Ответ: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |||
<Response success="true"> | |||
<Body> | |||
<Station> | |||
<id>1069</id> | |||
<name>Рыбинск</name> | |||
<region>Ярославская область</region> | |||
<okato>78415000000</okato> | |||
</Station> | |||
<Station> | |||
<id>1018</id> | |||
<name>Сергиев Посад</name> | |||
<region>Московская область</region> | |||
<okato>46215501000</okato> | |||
</Station> | |||
<Station> | |||
<id>1084</id> | |||
<name>Углич</name> | |||
<region>Ярославская область</region> | |||
<okato>78420000000</okato> | |||
</Station> | |||
<Station> | |||
<id>1078</id> | |||
<name>Утена</name> | |||
<region>Литва</region> | |||
</Station> | |||
</Body> | |||
</Response> | |||
``` | |||
### searchTrips | |||
Метод возвращает список рейсов от станции отправления до станции назначения на заданную дату. | |||
В параметрах передается идентификатор станции отправления, идентификатор станции назначения и дата. | |||
**URL: /sales/searchTrips** | |||
Запрос: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<SearchTripsRequest> | |||
<!-- Идентификатор станции отправления. Обязательно.--> | |||
<dispatchStationId>983</dispatchStationId> | |||
<!-- Идентификатор станции назначения. Обязательно. --> | |||
<arrivalStationId>678</arrivalStationId> | |||
<!-- Дата на которую выполняется поиск рейса. Обязательно. --> | |||
<date>2016-07-12</date> | |||
</SearchTripsRequest> | |||
``` | |||
Ответ: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |||
<Response success="true"> | |||
<Body> | |||
<!-- Рейс--> | |||
<Trip> | |||
<!-- Идентификатор рейса. Обязательно. --> | |||
<id>570104</id> | |||
<!-- Номер маршрута. Не обязателен. --> | |||
<num>000</num> | |||
<!-- Название маршрута. Обязателен. --> | |||
<name>ВДНХ АС - Пенза</name> | |||
<!-- Дата и время отправления. Обязателен. --> | |||
<dispatchDate>2016-07-13T19:30:00</dispatchDate> | |||
<!-- Дата и время прибытия. Обязателен. --> | |||
<arrivalDate>2016-07-14T05:30:00</arrivalDate> | |||
<!-- ID станции отправления. Обязателен. --> | |||
<dispatchStationId>983</dispatchStationId> | |||
<!-- Станция отправления рейса. Обязателен. --> | |||
<dispatchStationName>ВДНХ АС</dispatchStationName> | |||
<!-- ID станции назначения. Обязателен. --> | |||
<arrivalStationId>744</arrivalStationId> | |||
<!-- Станция назначения рейса. Обязателен. --> | |||
<arrivalStationName>Пенза</arrivalStationName> | |||
<!-- Цена полного проездного билета (включая сборы). Обязателен. --> | |||
<price>1391</price> | |||
<!-- Название перевозчика. Не Обязателен. --> | |||
<carrierName>ИП Ерашова Валентина Анатольевна</carrierName> | |||
<!-- ИНН перевозчика. Обязателен. --> | |||
<carrierInn>ИНН 582700056092</carrierInn> | |||
<!-- Описание автобуса. Обязателен. --> | |||
<busInfo>49 Мест Категория ТС "М3" </busInfo> | |||
<!-- | |||
Флаг обязательности ввода дополнительных персональных данных покупателя. | |||
Основые персональные данные: Имя, Фамилия, Тип документа, Номер документа. | |||
Дополнительные персональные данные: Отчество, Пол, Дата рождения, Гражданство. | |||
Ввод дополнительных данных требуется во исполнение статьи 11 закона "О транспортной безопасности" | |||
(с изменениями на 3 февраля 2014 года). | |||
<p> | |||
См. http://docs.cntd.ru/document/902027326 | |||
Обязателен. Если система не поддерживает, возвращать всегда true. | |||
--> | |||
<extDataRequired>true</extDataRequired> | |||
<!-- | |||
тип рейса. Обязателен. | |||
Междугородный - INTERURBAN | |||
Пригородный - SUBURBAN | |||
Международный - INTERNATIONAL | |||
Внутриобластной - INTRAREGIONAL | |||
Межобластной - INTERREGIONAL | |||
Межреспубликанский - INTERREPUBLICAN | |||
Внутрирайонный - INTRADISTRICT | |||
--> | |||
<type>INTERREGIONAL</type> | |||
<!-- | |||
статус рейса. Обязателен. | |||
ON_SALE - В продаже. На рейса доступны все опрерации., | |||
SUSPENDED - Приостановка остановка продажи. Рейс не доступен для продажи. | |||
CANCELED - Рейс отменен. Рейс не доступен для продажи. | |||
UNKNOWN - Неопределенный статус. Рейс не доступен для продажи. | |||
--> | |||
<status>ON_SALE</status> | |||
<!-- Количество мест в автобусе. Обязателен. --> | |||
<seatCount>49</seatCount> | |||
<!-- Кол-во мест, доступных для продажи. Обязателен.--> | |||
<freeSeatCount>49</freeSeatCount> | |||
</Trip> | |||
<Trip> | |||
<id>570105</id> | |||
<num>000</num> | |||
<name>ВДНХ АС - Пенза</name> | |||
<dispatchDate>2016-07-13T21:30:00</dispatchDate> | |||
<arrivalDate>2016-07-14T07:30:00</arrivalDate> | |||
<dispatchStationId>983</dispatchStationId> | |||
<dispatchStationName>ВДНХ АС</dispatchStationName> | |||
<arrivalStationId>744</arrivalStationId> | |||
<arrivalStationName>Пенза</arrivalStationName> | |||
<price>1391</price> | |||
<carrierName>ИП Ерашова Валентина Анатольевна</carrierName> | |||
<carrierInn>ИНН 582700056092</carrierInn> | |||
<busInfo>49 Мест Категория ТС "М3" </busInfo> | |||
<extDataRequired>true</extDataRequired> | |||
<type>INTERREGIONAL</type> | |||
<status>ON_SALE</status> | |||
<seatCount>49</seatCount> | |||
<freeSeatCount>49</freeSeatCount> | |||
</Trip> | |||
</Body> | |||
</Response> | |||
``` | |||
### getFreeSeats | |||
Получение списка свободных мест для рейса. | |||
В параметра принимает идентификатор рейса, идентификтор станции отправления и идентификатор станции назначения. | |||
**URL: /sales/getFreeSeats** | |||
Запрос: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<GetFreeSeatsRequest> | |||
<!-- Идентификатор рейса. Обязательный. --> | |||
<tripId>570101</tripId> | |||
<!-- Идентификатор станции отправления. Обязательный. --> | |||
<dispatchStationId>983</dispatchStationId> | |||
<!-- Идентификатор станции назначения. Обязательный. --> | |||
<arrivalStationId>1080</arrivalStationId> | |||
</GetFreeSeatsRequest> | |||
``` | |||
Ответ: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |||
<Response success="true"> | |||
<Body> | |||
<!-- Место--> | |||
<Seat> | |||
<!-- Идентификатор места. Обязателен. Может совпадать с названием.--> | |||
<id>17926</id> | |||
<!-- Название места. Обязателен. Отображается в интерфейсе пользователя. --> | |||
<name>Место 1</name> | |||
<!-- Тип места. Не обязателен --> | |||
<type>Сидячее</type> | |||
</Seat> | |||
<Seat> | |||
<id>17927</id> | |||
<name>Место 2</name> | |||
<type>Сидячее</type> | |||
</Seat> | |||
<Seat> | |||
<id>17928</id> | |||
<name>Место 3</name> | |||
<type>Сидячее</type> | |||
</Seat> | |||
</Body> | |||
</Response> | |||
``` | |||
### getTicketTypes | |||
Получение списка типов билетов, доступных для продажи. | |||
В параметра принимает идентификатор рейса, идентификатор станции отправления и идентификатор станции назначения. | |||
**URL: /sales/getTicketTypes** | |||
Запрос: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<GetTicketTypesRequest> | |||
<!-- Идентификатор рейса. Обязательный. --> | |||
<tripId>570101</tripId> | |||
<!-- Идентификатор станции отправления. Обязательный. --> | |||
<dispatchStationId>983</dispatchStationId> | |||
<!-- Идентификатор станции назначения. Обязательный. --> | |||
<arrivalStationId>1080</arrivalStationId> | |||
/GetTicketTypesRequest> | |||
``` | |||
Ответ: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |||
<Response success="true"> | |||
<Body> | |||
<TicketType> | |||
<!-- Идентификатор типа билета. Обязателен. Может совпадать с названием. --> | |||
<id>1#1#0</id> | |||
<!-- Название типа билета. Обязателен. --> | |||
<name>Полный</name> | |||
<!-- Цена для заданного типа билета (со сборами). Обязателен. --> | |||
<price>1391</price> | |||
<!-- | |||
Класс билета. Обязателен. | |||
PASSENGER Пассажирский билет, с выделением места | |||
BAGGAGE Багажный билет, без выделения места | |||
--> | |||
<ticketClass>PASSENGER</ticketClass> | |||
</TicketType> | |||
<TicketType> | |||
<id>38#6#0</id> | |||
<name>Детский</name> | |||
<price>696</price> | |||
<ticketClass>PASSENGER</ticketClass> | |||
</TicketType> | |||
<TicketType> | |||
<id>0#0#0</id> | |||
<name>Багажный</name> | |||
<price>40</price> | |||
<ticketClass>BAGGAGE</ticketClass> | |||
</TicketType> | |||
</Body> | |||
</Response> | |||
``` | |||
### getDocumentTypes | |||
Получение списка типов документов, допустимых при оформлении билетов. Система должна предоставить хотя бы один тип документа. | |||
Рекомендуется использовать документы из (приказа)[http://base.garant.ru/70229008/] в Таблице 1. | |||
В параметра принимает идентификатор рейса, идентификатор станции отправления и идентификатор станции назначения. | |||
**URL: /sales/getDocumentTypes** | |||
Запрос: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<GetDocumentTypesRequest> | |||
<!-- Идентификатор рейса. Обязательный. --> | |||
<tripId>570101</tripId> | |||
<!-- Идентификатор станции отправления. Обязательный. --> | |||
<dispatchStationId>983</dispatchStationId> | |||
<!-- Идентификатор станции назначения. Обязательный. --> | |||
<arrivalStationId>1080</arrivalStationId> | |||
</GetDocumentTypesRequest> | |||
``` | |||
Ответ: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |||
<Response success="true"> | |||
<Body> | |||
<DocumentType> | |||
<!-- ID типа документа. Обязателен. Может совпадать с названием. --> | |||
<id>1</id> | |||
<!-- Название типа документа. Обязателен. --> | |||
<name>Паспорт РФ</name> | |||
</DocumentType> | |||
<DocumentType> | |||
<id>52</id> | |||
<name>Паспорт иностранного гражданина</name> | |||
</DocumentType> | |||
<DocumentType> | |||
<id>40</id> | |||
<name>Удостоверение (Казахстан)</name> | |||
</DocumentType> | |||
<DocumentType> | |||
<id>2</id> | |||
<name>Свидетельство о рождении</name> | |||
</DocumentType> | |||
<DocumentType> | |||
<id>4</id> | |||
<name>Удостоверение личности военнослужащего</name> | |||
</DocumentType> | |||
<DocumentType> | |||
<id>55</id> | |||
<name>Временное удостоверение ОВД</name> | |||
</DocumentType> | |||
</Body> | |||
</Response> | |||
``` | |||
### getTripStops | |||
Метод возвращает список остановочных пунктов для рейса. | |||
В параметра принимает идентификатор рейса. | |||
Метод информационный. | |||
**URL: /sales/getTripStops** | |||
Запрос: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<GetTripStopsRequest> | |||
<!-- Идентификатор рейса. Обязателен. --> | |||
<tripId>569839</tripId> | |||
</GetTripStopsRequest> | |||
``` | |||
Ответ: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |||
<Response success="true"> | |||
<Body> | |||
<Stop> | |||
<!-- ID остановки. Совпадает с ID станции. Обязателен. --> | |||
<id>1011</id> | |||
<!-- Название остановки. Совпадает с названием станции. Обязателен. --> | |||
<name>Скопин (трасса)</name> | |||
<!-- Район расположения остановки. Не обязателен. --> | |||
<regionName>Рязанская область</regionName> | |||
<!-- Дата-время прибытия на остановку. Обязателен. --> | |||
<arrivalDate>2016-07-14T16:20:00</arrivalDate> | |||
<!-- Дата-время отправления с остановки. Обязателен. --> | |||
<dispatchDate>2016-07-13T21:00:00</dispatchDate> | |||
<!-- Время стоянки в минутах. Не Обязателен. --> | |||
<stopTime>10</stopTime> | |||
<!-- Расстояние от пункта отправления до остановки в км. Не Обязателен. --> | |||
<distance>260</distance> | |||
<!-- Цена полного билета. Обязателен. --> | |||
<price>1177</price> | |||
</Stop> | |||
<Stop> | |||
<id>1010</id> | |||
<name>Мичуринск (трасса)</name> | |||
<regionName>Тамбовская область</regionName> | |||
<arrivalDate>2016-07-14T16:20:00</arrivalDate> | |||
<dispatchDate>2016-07-13T21:00:00</dispatchDate> | |||
<stopTime>10</stopTime> | |||
<distance>385</distance> | |||
<price>1177</price> | |||
</Stop> | |||
<Stop> | |||
<id>818</id> | |||
<name>Тамбов (трасса)</name> | |||
<regionName>Тамбовская область</regionName> | |||
<arrivalDate>2016-07-14T16:20:00</arrivalDate> | |||
<dispatchDate>2016-07-13T21:00:00</dispatchDate> | |||
<stopTime>10</stopTime> | |||
<distance>455</distance> | |||
<price>1177</price> | |||
</Stop> | |||
</Body> | |||
</Response> | |||
``` | |||
### bookOrder | |||
Бронирование заказа. Бронь сохраняется в течение ограниченного времени, от 20 до 60 минут. Если в указанный | |||
период времени не поступает подтверждение оплаты через метод confirmOrder(), то бронирование автоматически | |||
отменяется. Метод должен выполнить все возможные проверки корректности переданных данных. В случае ошибки | |||
заказ не должен быть создан. Допускается бронирование нескольких билетов в рамках одного заказа. | |||
В параметра принимает идентификатор рейса, идентификатор станции отправления, идентификатор станции назначения, | |||
информацию о бронируемых билетах, информацию об агенте совершивший эту операцию. Информации о бронируемых билетах | |||
включает в себя идентификатор типа билета, идентификатор места и информацию о пассажире. Информация об | |||
агенте включает в себя наименование и ИНН агента. | |||
**URL: /sales/bookOrder** | |||
Запрос: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<BookOrderRequest> | |||
<!-- Идентификатор рейса. Обязательный. --> | |||
<tripId>570101</tripId> | |||
<!-- Идентификатор станции отправления. Обязательный. --> | |||
<dispatchStationId>983</dispatchStationId> | |||
<!-- Идентификатор станции назначения. Обязательный. --> | |||
<arrivalStationId>1080</arrivalStationId> | |||
<!-- Информация о бронируемом билете. Для каждой брони отдельный тег Sale --> | |||
<Sale> | |||
<!-- Идентификатор места, полученный из getFreeSeats. Обязателен. --> | |||
<seatId>25862</seatId> | |||
<!-- Идентификатор типа билета, полученный из getDocumentTypes. Обязателен. --> | |||
<ticketTypeId>1#1#0</ticketTypeId> | |||
<!-- Персональные данные пассажира. Один пассажир на один билет --> | |||
<Passenger> | |||
<!-- Имя пассажира. Обязательно --> | |||
<firstName>goxUEpWCud</firstName> | |||
<!-- Фамилия пассажира. Обязательно--> | |||
<lastName>sKZXIloHFn</lastName> | |||
<!-- Отчество пассажира. Обязательно для Международных, Межобластных и Межреспубликанских рейсов--> | |||
<middleName>pCaEgXgfWO</middleName> | |||
<!-- Номер документа удостоверяющего личности. Обязателен.--> | |||
<docNum>jwcmdIrmcc</docNum> | |||
<!-- Серия документа удостоверяющего личности. Не Обязателен.--> | |||
<docSeries>iFAElsnFHn</docSeries> | |||
<!-- Идентификатор типа документа полученный при вызове getDocumentTypes. Обязателен. --> | |||
<docTypeId>1</docTypeId> | |||
<!-- Дата рождения. Обязательно для Международных, Межобластных и Межреспубликанских рейсов --> | |||
<birthday>1986-01-01</birthday> | |||
<!-- Гражданство виде ISO2. Обязательно для Международных, Межобластных и Межреспубликанских рейсов --> | |||
<citizenshipISO2>RU</citizenshipISO2> | |||
<!-- | |||
Пол. Обязательно для Международных, Межобластных и Межреспубликанских рейсов | |||
MALE - Мужской | |||
FEMALE - Женский | |||
--> | |||
<gender>MALE</gender> | |||
</Passenger> | |||
</Sale> | |||
<!-- Агент выполнивший операцию. Не Обязателен. --> | |||
<Agent> | |||
<!-- Имя агента. Не обязателен.--> | |||
<name>ИП Твои билеты</name> | |||
<!-- ИНН агента. Не обязателен.--> | |||
<inn>2225555777</inn> | |||
</Agent> | |||
</BookOrderRequest> | |||
``` | |||
Ответ: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |||
<Response success="true"> | |||
<Body> | |||
<!-- Идентификатор заказ. Обязателен. --> | |||
<orderId>9828350</orderId> | |||
<!-- Время жизни заказа. В минутах. Не обязателен. По умолчанию значение 30 --> | |||
<lifetime>30</lifetime> | |||
</Body> | |||
</Response> | |||
``` | |||
### getOrder | |||
Получение информации о заказе. В параметрах принимает идентификатор заказа, полученный в результате bookOrder. | |||
Метод должен вернуть такое же количество билетов сколько было передано при вызове bookOrder. | |||
Метод должен работать на любом этапе жизни заказа т.е. после создания, подтверждения, отмены, возврата. | |||
**URL: /sales/getOrder** | |||
Запрос: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<GetOrderRequest> | |||
<!-- Идентификатор заказа, полученный при вызове bookOrder. Обязателен.--> | |||
<orderId>9828350</orderId> | |||
</GetOrderRequest> | |||
``` | |||
Ответ: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> | |||
<Response success="true"> | |||
<Body> | |||
<!-- Идентификатор заказа. Обязателен. --> | |||
<orderId>9828350</orderId> | |||
<!-- Информация о билетах. Отдельный тег для каждого билета --> | |||
<Ticket> | |||
<!-- Идентификатор билет. Обязателен. --> | |||
<id>12435438</id> | |||
<!-- Номер билета. Обязателен после подтверждения заказа. --> | |||
<number></number> | |||
<!-- Серия билета. Не обязателен. --> | |||
<series></series> | |||
<!-- Дата и время создания билета. Обязателен. --> | |||
<created>2016-07-13T05:48:15</created> | |||
<!-- Дата и время возврата билета. Обязателен после возврата или отмены. --> | |||
<returned></returned> | |||
<!-- | |||
Статус билета | |||
RESERVED Забронирован. Данный статус билет получает после бронирования. bookOrder | |||
SOLD Продан. Данный статус билет получает после операции продажи. confirmOrder | |||
CANCELED Отмена билета. Данный статус билет получает после отмены билета. cancelTicket | |||
RETURNED Выполнен возврат билета. Данный статус билет получает после возврата билета. returnTicket | |||
--> | |||
<status>RESERVED</status> | |||
<!-- | |||
Класс билета | |||
PASSENGER Пассажирский билет, с выделением места | |||
BAGGAGE Багажный билет, без выделения места | |||
--> | |||
<ticketClass>PASSENGER</ticketClass> | |||
<!-- Идентификато типа билета. Обязателен. --> | |||
<typeId>1#1#0</typeId> | |||
<!-- Номер маршрута. Не обязателен. --> | |||
<routeNum>000</routeNum> | |||
<!-- Название маршрута. Обязателен. --> | |||
<routeName>ВДНХ АС - Рыбинск</routeName> | |||
<!-- Информация об автобусе. Обязателен --> | |||
<busInfo>19 Мест Категория ТС "М3" </busInfo> | |||
<!-- Название перевозчика. Не обязателен --> | |||
<carrierName>ООО "ВВМЛ"</carrierName> | |||
<!-- ИНН перевозчика. Обязателен. --> | |||
<carrierInn>ИНН 7610074937</carrierInn> | |||
<!-- Платформа отправления. Не обязателен. --> | |||
<platform>Перрон 11</platform> | |||
<!-- Дата и время отправления рейса. Обязателен. --> | |||
<dispatchDate>2016-07-13T12:20:00</dispatchDate> | |||
<!-- Станция посадки. Обязателен.--> | |||
<dispatchStation>ВДНХ АС</dispatchStation> | |||
<!-- Адрес станции посадки. Не обязателен --> | |||
<dispatchAddress>пл.Шарля де Голля напротив Космонавтов2А,</dispatchAddress> | |||
<!-- Дата и время прибытия. Обязателен. --> | |||
<arrivalDate>2016-07-13T16:20:00</arrivalDate> | |||
<!-- Станция назначения. Обязателен. --> | |||
<arrivalStation>Углич</arrivalStation> | |||
<!-- Название места. Обязателен. --> | |||
<seatName>Место 1</seatName> | |||
<!-- Информация о пассажире. --> | |||
<Passenger> | |||
<lastName>Ckayuukvgn</lastName> | |||
<firstName>Bgkzxffotu</firstName> | |||
<middleName>Isdikvryin</middleName> | |||
<docNum>PUPrvbqlgU</docNum> | |||
<docSeries>fRHEoBHVbG</docSeries> | |||
<docTypeId>1</docTypeId> | |||
<birthday>1985-01-01</birthday> | |||
<citizenshipISO2>RU</citizenshipISO2> | |||
<gender>MALE</gender> | |||
</Passenger> | |||
<!-- Тариф (руб). Обязателен после подтверждения. --> | |||
<fare>0</fare> | |||
<!-- Cборы (руб). Обязателен после подтверждения. Если нет то 0. --> | |||
<fees>0</fees> | |||
<!-- Удержано Тариф (руб). Обязателен в случает возврата или отмены. --> | |||
<chargeFare>0</chargeFare> | |||
<!-- Удержано Остальные сборы (руб). Обязателен в случает возврата или отмены. --> | |||
<chargeOthers>0</chargeOthers> | |||
<!-- Возврат Тариф (руб). Обязателен в случает возврата или отмены. --> | |||
<repaymentFare>0</repaymentFare> | |||
<!-- Возврат Остальные сборы (руб). Обязателен в случает возврата или отмены. --> | |||
<repaymentOthers>0</repaymentOthers> | |||
<!-- Информация о страховании. Обязательно. Необходим при печати билета. --> | |||
<insuranceInfo>СТРАХОВЩИК: ПАО "Росстрах"; 119991; г. Москва; ул. Большая Ордынка; д. 40; стр.</insuranceInfo> | |||
</Ticket> | |||
</Body> | |||
</Response> | |||
``` | |||
### confirmOrder | |||
Подтверждение оплаты заказа. Данный метод должен вызываться только после того как заказ действительно был | |||
оплачен покупателем. Метод не должен делать проверок корректности заказа. Все проверки должны делать в bookOrder | |||
или updateTicket. Вызов этого метода означает, все данные заполнены правильно и деньги от покупателя получены. | |||
В параметрах принимает идентификатор заказа, полученный в результате bookOrder и информацию об агенте который | |||
совершил операцию | |||
**URL: /sales/confirmOrder** | |||
Запрос: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<ConfirmOrderRequest> | |||
<orderId>9828585</orderId> | |||
<!-- Агент выполнивший операцию. Не Обязателен. --> | |||
<Agent> | |||
<!-- Имя агента. Не обязателен.--> | |||
<name>ИП Твои билеты</name> | |||
<!-- ИНН агента. Не обязателен.--> | |||
<inn>2225555777</inn> | |||
</Agent> | |||
</ConfirmOrderRequest> | |||
``` | |||
Ответ: | |||
Ответ аналогичен ответу на запрос getOrder | |||
### cancelTicket | |||
Отмена билета. Техническая операция, выполняет полный возврат билета без удержаний. | |||
Необходима при нештатных ситуациях например в случае сбоев ККМ или ошибки выбора рейса. | |||
В параметрах принимает идентификатор билета и информацию об агенте который совершил операцию. | |||
Можно выполнять после создания заказа и в течении 5-30 минут после подтверждения заказа. | |||
**URL: /sales/cancelTicket** | |||
Запрос: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<CancelTicketRequest> | |||
<ticketId>12435434</ticketId> | |||
<!-- Агент выполнивший операцию. Не Обязателен. --> | |||
<Agent> | |||
<!-- Имя агента. Не обязателен.--> | |||
<name>ИП Твои билеты</name> | |||
<!-- ИНН агента. Не обязателен.--> | |||
<inn>2225555777</inn> | |||
</Agent> | |||
</CancelTicketRequest> | |||
``` | |||
Ответ: | |||
Ответ аналогичен ответу на запрос getOrder | |||
### returnTicket | |||
Возврат билета. При возврате возможны удержания. В параметрах принимает идентификатор билета и информацию | |||
об агенте который совершил операцию. Билет можно вернуть только после подтверждения confirmOrder. | |||
**URL: /sales/returnTicket** | |||
Запрос: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<ReturnTicketRequest> | |||
<ticketId>12435435</ticketId> | |||
<!-- Агент выполнивший операцию. Не Обязателен. --> | |||
<Agent> | |||
<!-- Имя агента. Не обязателен.--> | |||
<name>ИП Твои билеты</name> | |||
<!-- ИНН агента. Не обязателен.--> | |||
<inn>2225555777</inn> | |||
</Agent> | |||
</ReturnTicketRequest> | |||
``` | |||
Ответ: | |||
Ответ аналогичен ответу на запрос getOrder | |||
### updateTicket | |||
Изменение персональных данных пассажира в забронированном или проданном билете. | |||
В параметрах принимает идентификатор билета, информацию о пассажире и информацию | |||
об агенте который совершил операцию. | |||
**URL: /sales/updateTicket** | |||
Запрос: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<UpdateTicketRequest> | |||
<!-- Идентификатор билета. Обязательный --> | |||
<ticketId>12435438</ticketId> | |||
<Passenger> | |||
<!-- Имя пассажира. Обязательно --> | |||
<firstName>goxUEpWCud</firstName> | |||
<!-- Фамилия пассажира. Обязательно--> | |||
<lastName>sKZXIloHFn</lastName> | |||
<!-- Отчество пассажира. Обязательно для Международных, Межобластных и Межреспубликанских рейсов--> | |||
<middleName>pCaEgXgfWO</middleName> | |||
<!-- Номер документа удостоверяющего личности. Обязателен.--> | |||
<docNum>jwcmdIrmcc</docNum> | |||
<!-- Серия документа удостоверяющего личности. Не Обязателен.--> | |||
<docSeries>iFAElsnFHn</docSeries> | |||
<!-- Идентификатор типа документа полученный при вызове getDocumentTypes. Обязателен. --> | |||
<docTypeId>1</docTypeId> | |||
<!-- Дата рождения. Обязательно для Международных, Межобластных и Межреспубликанских рейсов --> | |||
<birthday>1986-01-01</birthday> | |||
<!-- Гражданство виде ISO2. Обязательно для Международных, Межобластных и Межреспубликанских рейсов --> | |||
<citizenshipISO2>RU</citizenshipISO2> | |||
<!-- | |||
Пол. Обязательно для Международных, Межобластных и Межреспубликанских рейсов | |||
MALE - Мужской | |||
FEMALE - Женский | |||
--> | |||
<gender>FEMALE</gender> | |||
</Passenger> | |||
<!-- Агент выполнивший операцию. Не Обязателен. --> | |||
<Agent> | |||
<!-- Имя агента. Не обязателен.--> | |||
<name>ИП Твои билеты</name> | |||
<!-- ИНН агента. Не обязателен.--> | |||
<inn>2225555777</inn> | |||
</Agent> | |||
</UpdateTicketRequest> | |||
``` | |||
Ответ: | |||
```xml | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<Response success="true"> | |||
/Response> | |||
``` | |||
@@ -0,0 +1,15 @@ | |||
group 'com.artmark' | |||
version '1.0-SNAPSHOT' | |||
apply plugin: 'java' | |||
sourceCompatibility = 1.6 | |||
repositories { | |||
mavenCentral() | |||
} | |||
dependencies { | |||
compile group: 'javax.ws.rs', name: 'javax.ws.rs-api', version: '2.0.1' | |||
testCompile group: 'junit', name: 'junit', version: '4.11' | |||
} |
@@ -0,0 +1,6 @@ | |||
#Fri Sep 16 16:48:38 KRAT 2016 | |||
distributionBase=GRADLE_USER_HOME | |||
distributionPath=wrapper/dists | |||
zipStoreBase=GRADLE_USER_HOME | |||
zipStorePath=wrapper/dists | |||
distributionUrl=https\://services.gradle.org/distributions/gradle-2.9-all.zip |
@@ -0,0 +1,160 @@ | |||
#!/usr/bin/env bash | |||
############################################################################## | |||
## | |||
## Gradle start up script for UN*X | |||
## | |||
############################################################################## | |||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | |||
DEFAULT_JVM_OPTS="" | |||
APP_NAME="Gradle" | |||
APP_BASE_NAME=`basename "$0"` | |||
# Use the maximum available, or set MAX_FD != -1 to use that value. | |||
MAX_FD="maximum" | |||
warn ( ) { | |||
echo "$*" | |||
} | |||
die ( ) { | |||
echo | |||
echo "$*" | |||
echo | |||
exit 1 | |||
} | |||
# OS specific support (must be 'true' or 'false'). | |||
cygwin=false | |||
msys=false | |||
darwin=false | |||
case "`uname`" in | |||
CYGWIN* ) | |||
cygwin=true | |||
;; | |||
Darwin* ) | |||
darwin=true | |||
;; | |||
MINGW* ) | |||
msys=true | |||
;; | |||
esac | |||
# Attempt to set APP_HOME | |||
# Resolve links: $0 may be a link | |||
PRG="$0" | |||
# Need this for relative symlinks. | |||
while [ -h "$PRG" ] ; do | |||
ls=`ls -ld "$PRG"` | |||
link=`expr "$ls" : '.*-> \(.*\)$'` | |||
if expr "$link" : '/.*' > /dev/null; then | |||
PRG="$link" | |||
else | |||
PRG=`dirname "$PRG"`"/$link" | |||
fi | |||
done | |||
SAVED="`pwd`" | |||
cd "`dirname \"$PRG\"`/" >/dev/null | |||
APP_HOME="`pwd -P`" | |||
cd "$SAVED" >/dev/null | |||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar | |||
# Determine the Java command to use to start the JVM. | |||
if [ -n "$JAVA_HOME" ] ; then | |||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then | |||
# IBM's JDK on AIX uses strange locations for the executables | |||
JAVACMD="$JAVA_HOME/jre/sh/java" | |||
else | |||
JAVACMD="$JAVA_HOME/bin/java" | |||
fi | |||
if [ ! -x "$JAVACMD" ] ; then | |||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME | |||
Please set the JAVA_HOME variable in your environment to match the | |||
location of your Java installation." | |||
fi | |||
else | |||
JAVACMD="java" | |||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | |||
Please set the JAVA_HOME variable in your environment to match the | |||
location of your Java installation." | |||
fi | |||
# Increase the maximum file descriptors if we can. | |||
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then | |||
MAX_FD_LIMIT=`ulimit -H -n` | |||
if [ $? -eq 0 ] ; then | |||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then | |||
MAX_FD="$MAX_FD_LIMIT" | |||
fi | |||
ulimit -n $MAX_FD | |||
if [ $? -ne 0 ] ; then | |||
warn "Could not set maximum file descriptor limit: $MAX_FD" | |||
fi | |||
else | |||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" | |||
fi | |||
fi | |||
# For Darwin, add options to specify how the application appears in the dock | |||
if $darwin; then | |||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" | |||
fi | |||
# For Cygwin, switch paths to Windows format before running java | |||
if $cygwin ; then | |||
APP_HOME=`cygpath --path --mixed "$APP_HOME"` | |||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` | |||
JAVACMD=`cygpath --unix "$JAVACMD"` | |||
# We build the pattern for arguments to be converted via cygpath | |||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` | |||
SEP="" | |||
for dir in $ROOTDIRSRAW ; do | |||
ROOTDIRS="$ROOTDIRS$SEP$dir" | |||
SEP="|" | |||
done | |||
OURCYGPATTERN="(^($ROOTDIRS))" | |||
# Add a user-defined pattern to the cygpath arguments | |||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then | |||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" | |||
fi | |||
# Now convert the arguments - kludge to limit ourselves to /bin/sh | |||
i=0 | |||
for arg in "$@" ; do | |||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` | |||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option | |||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition | |||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` | |||
else | |||
eval `echo args$i`="\"$arg\"" | |||
fi | |||
i=$((i+1)) | |||
done | |||
case $i in | |||
(0) set -- ;; | |||
(1) set -- "$args0" ;; | |||
(2) set -- "$args0" "$args1" ;; | |||
(3) set -- "$args0" "$args1" "$args2" ;; | |||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;; | |||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; | |||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; | |||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; | |||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; | |||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; | |||
esac | |||
fi | |||
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules | |||
function splitJvmOpts() { | |||
JVM_OPTS=("$@") | |||
} | |||
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS | |||
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" | |||
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" |
@@ -0,0 +1,90 @@ | |||
@if "%DEBUG%" == "" @echo off | |||
@rem ########################################################################## | |||
@rem | |||
@rem Gradle startup script for Windows | |||
@rem | |||
@rem ########################################################################## | |||
@rem Set local scope for the variables with windows NT shell | |||
if "%OS%"=="Windows_NT" setlocal | |||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | |||
set DEFAULT_JVM_OPTS= | |||
set DIRNAME=%~dp0 | |||
if "%DIRNAME%" == "" set DIRNAME=. | |||
set APP_BASE_NAME=%~n0 | |||
set APP_HOME=%DIRNAME% | |||
@rem Find java.exe | |||
if defined JAVA_HOME goto findJavaFromJavaHome | |||
set JAVA_EXE=java.exe | |||
%JAVA_EXE% -version >NUL 2>&1 | |||
if "%ERRORLEVEL%" == "0" goto init | |||
echo. | |||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | |||
echo. | |||
echo Please set the JAVA_HOME variable in your environment to match the | |||
echo location of your Java installation. | |||
goto fail | |||
:findJavaFromJavaHome | |||
set JAVA_HOME=%JAVA_HOME:"=% | |||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe | |||
if exist "%JAVA_EXE%" goto init | |||
echo. | |||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% | |||
echo. | |||
echo Please set the JAVA_HOME variable in your environment to match the | |||
echo location of your Java installation. | |||
goto fail | |||
:init | |||
@rem Get command-line arguments, handling Windowz variants | |||
if not "%OS%" == "Windows_NT" goto win9xME_args | |||
if "%@eval[2+2]" == "4" goto 4NT_args | |||
:win9xME_args | |||
@rem Slurp the command line arguments. | |||
set CMD_LINE_ARGS= | |||
set _SKIP=2 | |||
:win9xME_args_slurp | |||
if "x%~1" == "x" goto execute | |||
set CMD_LINE_ARGS=%* | |||
goto execute | |||
:4NT_args | |||
@rem Get arguments from the 4NT Shell from JP Software | |||
set CMD_LINE_ARGS=%$ | |||
:execute | |||
@rem Setup the command line | |||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar | |||
@rem Execute Gradle | |||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% | |||
:end | |||
@rem End local scope for the variables with windows NT shell | |||
if "%ERRORLEVEL%"=="0" goto mainEnd | |||
:fail | |||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of | |||
rem the _cmd.exe /c_ return code! | |||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 | |||
exit /b 1 | |||
:mainEnd | |||
if "%OS%"=="Windows_NT" endlocal | |||
:omega |
@@ -0,0 +1,2 @@ | |||
rootProject.name = 'avs5rs' | |||
@@ -0,0 +1,144 @@ | |||
package com.artmark.avs5rs; | |||
import com.artmark.avs5rs.model.*; | |||
import javax.ws.rs.POST; | |||
import javax.ws.rs.Path; | |||
/** | |||
* Сервис продажи билетов. | |||
* @author Ushmodin N. | |||
* @since 07.07.2016 10:06 | |||
*/ | |||
@Path("/sales") | |||
public interface SaleService { | |||
/** | |||
* Метод примает в параметра произвольную строку и возвращает её в теле ответа. | |||
* Не выпольняет ни какой логики. Необходим для проверки доступен ли сервис. | |||
*/ | |||
@Path("/echo") | |||
@POST | |||
Response<EchoResponse> echo(EchoRequest request); | |||
/** | |||
* Метод получения станций отправления. | |||
* Продажа происходит от станции отправления до станции назначения, поэтому метод должен вернуть хотябы один элемент. | |||
* Обычно станциями отправления являются автовокзалы или автоматизированные остановочные пункты с фунцией продажи билетов. | |||
*/ | |||
@Path("/getDispatchStations") | |||
@POST | |||
Response<GetDispatchStationsResponse> getDispatchStations(GetDispatchStationsRequest request); | |||
/** | |||
* Метод получения станций назначения от станции отправления. В параметра принимает идентификато станции отправления. | |||
* Станциями назначения могут быть любые остановочные пункты до которых есть хотябы один рейс | |||
*/ | |||
@Path("/getArrivalStations") | |||
@POST | |||
Response<GetArrivalStationsResponse> getArrivalStations(GetArrivalStationsRequest request); | |||
/** | |||
* Метод возвращает список рейсов от станции отправления до станции назначения на заданную дату. | |||
* В параметрах передается идентификатор станции отправления, идентификатор станции назначения и дата. | |||
*/ | |||
@Path("/searchTrips") | |||
@POST | |||
Response<SearchTripsResponse> searchTrips(SearchTripsRequest request); | |||
/** | |||
* Метод возвращает список остановочных пунктов для рейса. | |||
* В параметра принимает идентификатор рейса. | |||
* Метод информационный. | |||
*/ | |||
@Path("/getTripStops") | |||
@POST | |||
Response<GetTripStopsResponse> getTripStops(GetTripStopsRequest request); | |||
/** | |||
* Получение списка свободных мест для рейса. | |||
* В параметра принимает идентификатор рейса, идентификтор станции отправления и идентификатор станции назначения. | |||
*/ | |||
@Path("/getFreeSeats") | |||
@POST | |||
Response<GetFreeSeatsResponse> getFreeSeats(GetFreeSeatsRequest request); | |||
/** | |||
* Получение списка типов билетов, доступных для продажи. | |||
* В параметра принимает идентификатор рейса, идентификтор станции отправления и идентификатор станции назначения. | |||
*/ | |||
@Path("/getTicketTypes") | |||
@POST | |||
Response<GetTicketTypesResponse> getTicketTypes(GetTicketTypesRequest request); | |||
/** | |||
* Получение списка типов документов, допустимых при оформлении билетов. Система должна предоставить хотя бы один тип документа. | |||
* Рекомендуется использовать документы из (приказа)[http://base.garant.ru/70229008/] в Таблице 1. | |||
* В параметра принимает идентификатор рейса, идентификатор станции отправления и идентификатор станции назначения. | |||
*/ | |||
@Path("/getDocumentTypes") | |||
@POST | |||
Response<GetDocumentTypesResponse> getDocumentTypes(GetDocumentTypesRequest request); | |||
/** | |||
* Бронирование заказа. Бронь сохраняется в течение ограниченного времени, от 20 до 60 минут. Если в указанный | |||
* период времени не поступает подтверждение оплаты через метод confirmOrder(), то бронирование автоматически | |||
* отменяется. Метод должен выполнить все возможные проверки корректности переданных данных. В случае ошибки | |||
* заказ не должен быть создан. | |||
* В параметра принимает идентификатор рейса, идентификтор станции отправления, идентификатор станции назначения, | |||
* информацию о бронируемых билетах, информацию об агенте совершивший эту операцию. Информаци о бронируемых билетах | |||
* включает в себя идентификатор типа билета, идентификато места и информацию о пассажире. Информация об | |||
* агенте включает в себя наименование и ИНН агента. | |||
*/ | |||
@Path("/bookOrder") | |||
@POST | |||
Response<BookOrderResponse> bookOrder(BookOrderRequest request); | |||
/** | |||
* Получение информации о заказе. В пареметрах принимает идентификатор заказа, полученный в результате bookOrder | |||
* Метод должен работать на любом этапе жизни заказа т.е. после создания, подтверждения, отмены, возврата. | |||
*/ | |||
@Path("/getOrder") | |||
@POST | |||
Response<GetOrderResponse> getOrder(GetOrderRequest request); | |||
/** | |||
* Подтверждение оплаты заказа. Данный метод должен вызываться только после того как заказ действительно был | |||
* оплачен покупателем. Метод не должен делать проверок корректности заказа. Все проверки должны делать в bookOrder | |||
* или updateTicket. Вызов этого метода означает, все данные заполнены правильно и деньги от покупателя получены. | |||
* В пареметрах принимает идентификатор заказа, полученный в результате bookOrder и информацию об агенте который | |||
* совершил операцию | |||
*/ | |||
@Path("/confirmOrder") | |||
@POST | |||
Response<ConfirmOrderResponse> confirmOrder(ConfirmOrderRequest request); | |||
/** | |||
* Возврат билета. При возврате возможны удержания. В пареметрах принимает идентификатор билета и информацию | |||
* об агенте который совершил операцию. Билет можно вернуть только после подтверждения confirmOrder. | |||
*/ | |||
@Path("/returnTicket") | |||
@POST | |||
Response<ReturnTicketResponse> returnTicket(ReturnTicketRequest request); | |||
/** | |||
* Отмена билета. Техническая операция, выполняет полный возврат билета без удержаний. | |||
* Необходима при нештатных ситуациях например в случае сбоев ККМ или ошибки выбора рейса. | |||
* В пареметрах принимает идентификатор билета и информацию об агенте который совершил операцию. | |||
* Можно выполнять после создания заказа и в течении 5-30 минут после подтвержения заказа. | |||
*/ | |||
@Path("/cancelTicket") | |||
@POST | |||
Response<CancelTicketResponse> cancelTicket(CancelTicketRequest request); | |||
/** | |||
* Изменение персональных данных пассажира в забронированном или проданном билете. | |||
* В пареметрах принимает идентификатор билета, информацию о пассажире и информацию | |||
* об агенте который совершил операцию. | |||
*/ | |||
@Path("/updateTicket") | |||
@POST | |||
Response<UpdateTicketResponse> updateTicket(UpdateTicketRequest request); | |||
} |
@@ -0,0 +1,44 @@ | |||
package com.artmark.avs5rs.model; | |||
import javax.xml.bind.annotation.XmlAccessType; | |||
import javax.xml.bind.annotation.XmlAccessorType; | |||
import javax.xml.bind.annotation.XmlType; | |||
/** | |||
* Информация об агенте | |||
* | |||
* @author V.Skorykh | |||
* @since 30.05.2016 13:42 | |||
* @since 5.2 | |||
*/ | |||
@XmlType | |||
@XmlAccessorType(XmlAccessType.FIELD) | |||
public class Agent { | |||
/** | |||
* ИНН агента | |||
*/ | |||
private String inn; | |||
/** | |||
* Имя агента (название организации) | |||
*/ | |||
private String name; | |||
public String getInn() { | |||
return inn; | |||
} | |||
public void setInn(String inn) { | |||
this.inn = inn; | |||
} | |||
public String getName() { | |||
return name; | |||
} | |||
public void setName(String name) { | |||
this.name = name; | |||
} | |||
} |
@@ -0,0 +1,64 @@ | |||
package com.artmark.avs5rs.model; | |||
import javax.xml.bind.annotation.XmlAccessType; | |||
import javax.xml.bind.annotation.XmlAccessorType; | |||
import javax.xml.bind.annotation.XmlElement; | |||
import javax.xml.bind.annotation.XmlRootElement; | |||
import java.util.List; | |||
/** | |||
* @author Ushmodin N. | |||
* @since 07.07.2016 11:04 | |||
*/ | |||
@XmlAccessorType(XmlAccessType.FIELD) | |||
@XmlRootElement(name = "BookOrderRequest") | |||
public class BookOrderRequest { | |||
private String tripId; | |||
private String dispatchStationId; | |||
private String arrivalStationId; | |||
@XmlElement(name = "Sale") | |||
private List<Sale> sales; | |||
@XmlElement(name = "Agent") | |||
private Agent agent; | |||
public String getTripId() { | |||
return tripId; | |||
} | |||
public void setTripId(String tripId) { | |||
this.tripId = tripId; | |||
} | |||
public String getDispatchStationId() { | |||
return dispatchStationId; | |||
} | |||
public void setDispatchStationId(String dispatchStationId) { | |||
this.dispatchStationId = dispatchStationId; | |||
} | |||
public String getArrivalStationId() { | |||
return arrivalStationId; | |||
} | |||
public void setArrivalStationId(String arrivalStationId) { | |||
this.arrivalStationId = arrivalStationId; | |||
} | |||
public List<Sale> getSales() { | |||
return sales; | |||
} | |||
public void setSales(List<Sale> sales) { | |||
this.sales = sales; | |||
} | |||
public Agent getAgent() { | |||
return agent; | |||
} | |||
public void setAgent(Agent agent) { | |||
this.agent = agent; | |||
} | |||
} |
@@ -0,0 +1,28 @@ | |||
package com.artmark.avs5rs.model; | |||
import javax.xml.bind.annotation.XmlAccessType; | |||
import javax.xml.bind.annotation.XmlAccessorType; | |||
import javax.xml.bind.annotation.XmlType; | |||
/** | |||
* @author Ushmodin N. | |||
* @since 07.07.2016 11:09 | |||
*/ | |||
@XmlAccessorType(XmlAccessType.FIELD) | |||
@XmlType(name = "BookOrderResponse") | |||
public class BookOrderResponse { | |||
/** | |||
* Идентификато договора | |||
*/ | |||
private String orderId; | |||
public String getOrderId() { | |||
return orderId; | |||
} | |||
public void setOrderId(String orderId) { | |||
this.orderId = orderId; | |||
} | |||
} |
@@ -0,0 +1,35 @@ | |||
package com.artmark.avs5rs.model; | |||
import javax.xml.bind.annotation.XmlAccessType; | |||
import javax.xml.bind.annotation.XmlAccessorType; | |||
import javax.xml.bind.annotation.XmlElement; | |||
import javax.xml.bind.annotation.XmlRootElement; | |||
/** | |||
* @author Ushmodin N. | |||
* @since 07.07.2016 11:23 | |||
*/ | |||
@XmlAccessorType(XmlAccessType.FIELD) | |||
@XmlRootElement(name = "CancelTicketRequest") | |||
public class CancelTicketRequest { | |||
private String ticketId; | |||
@XmlElement(name = "Agent") | |||
private Agent agent; | |||
public String getTicketId() { | |||
return ticketId; | |||
} | |||
public void setTicketId(String ticketId) { | |||
this.ticketId = ticketId; | |||
} | |||
public Agent getAgent() { | |||
return agent; | |||
} | |||
public void setAgent(Agent agent) { | |||
this.agent = agent; | |||
} | |||
} |
@@ -0,0 +1,26 @@ | |||
package com.artmark.avs5rs.model; | |||
import javax.xml.bind.annotation.XmlAccessType; | |||
import javax.xml.bind.annotation.XmlAccessorType; | |||
import javax.xml.bind.annotation.XmlElement; | |||
import javax.xml.bind.annotation.XmlType; | |||
/** | |||
* @author Ushmodin N. | |||
* @since 07.07.2016 11:23 | |||
*/ | |||
@XmlAccessorType(XmlAccessType.FIELD) | |||
@XmlType(name = "CancelTicketResponse") | |||
public class CancelTicketResponse { | |||
@XmlElement(name = "Ticket") | |||
private Ticket ticket; | |||
public Ticket getTicket() { | |||
return ticket; | |||
} | |||
public void setTicket(Ticket ticket) { | |||
this.ticket = ticket; | |||
} | |||
} |
@@ -0,0 +1,35 @@ | |||
package com.artmark.avs5rs.model; | |||
import javax.xml.bind.annotation.XmlAccessType; | |||
import javax.xml.bind.annotation.XmlAccessorType; | |||
import javax.xml.bind.annotation.XmlElement; | |||
import javax.xml.bind.annotation.XmlRootElement; | |||
/** | |||
* @author Ushmodin N. | |||
* @since 07.07.2016 11:18 | |||
*/ | |||
@XmlAccessorType(XmlAccessType.FIELD) | |||
@XmlRootElement(name = "ConfirmOrderRequest") | |||
public class ConfirmOrderRequest { | |||
private String orderId; | |||
@XmlElement(name = "Agent") | |||
private Agent agent; | |||
public String getOrderId() { | |||
return orderId; | |||
} | |||
public void setOrderId(String orderId) { | |||
this.orderId = orderId; | |||
} | |||
public Agent getAgent() { | |||
return agent; | |||
} | |||
public void setAgent(Agent agent) { | |||
this.agent = agent; | |||
} | |||
} |
@@ -0,0 +1,37 @@ | |||
package com.artmark.avs5rs.model; | |||
import javax.xml.bind.annotation.XmlAccessType; | |||
import javax.xml.bind.annotation.XmlAccessorType; | |||
import javax.xml.bind.annotation.XmlElement; | |||
import javax.xml.bind.annotation.XmlType; | |||
import java.util.List; | |||
/** | |||
* @author Ushmodin N. | |||
* @since 07.07.2016 11:18 | |||
*/ | |||
@XmlAccessorType(XmlAccessType.FIELD) | |||
@XmlType(name = "ConfirmOrderResponse") | |||
public class ConfirmOrderResponse { | |||
private String orderId; | |||
@XmlElement(name = "Ticket") | |||
private List<Ticket> tickets; | |||
public String getOrderId() { | |||
return orderId; | |||
} | |||
public void setOrderId(String orderId) { | |||
this.orderId = orderId; | |||
} | |||
public List<Ticket> getTickets() { | |||
return tickets; | |||
} | |||
public void setTickets(List<Ticket> tickets) { | |||
this.tickets = tickets; | |||
} | |||
} |
@@ -0,0 +1,28 @@ | |||
package com.artmark.avs5rs.model; | |||
import javax.xml.bind.annotation.XmlAccessType; | |||
import javax.xml.bind.annotation.XmlAccessorType; | |||
import javax.xml.bind.annotation.adapters.XmlAdapter; | |||
import java.text.SimpleDateFormat; | |||
import java.util.Date; | |||
/** | |||
* @author Ushmodin N. | |||
* @since 07.07.2016 14:34 | |||
*/ | |||
@XmlAccessorType(XmlAccessType.FIELD) | |||
public class DateAdapter extends XmlAdapter<String, Date> { | |||
private static final String FORMAT = "yyyy-MM-dd"; | |||
@Override | |||
public Date unmarshal(String s) throws Exception { | |||
return new SimpleDateFormat(FORMAT).parse(s); | |||
} | |||
@Override | |||
public String marshal(Date date) throws Exception { | |||
return new SimpleDateFormat(FORMAT).format(date); | |||
} | |||
} |
@@ -0,0 +1,38 @@ | |||
package com.artmark.avs5rs.model; | |||
import javax.xml.bind.annotation.XmlAccessType; | |||
import javax.xml.bind.annotation.XmlAccessorType; | |||
/** | |||
* @author Ushmodin N. | |||
* @since 07.07.2016 12:36 | |||
*/ | |||
@XmlAccessorType(XmlAccessType.FIELD) | |||
public class DocumentType { | |||
/** | |||
* ID типа документа. Обязателен. Может совпадать с названием. | |||
*/ | |||
protected String id; | |||
/** | |||
* Название типа документа. Обязателен. | |||
*/ | |||
protected String name; | |||
public String getId() { | |||
return id; | |||
} | |||
public void setId(String id) { | |||
this.id = id; | |||
} | |||
public String getName() { | |||
return name; | |||
} | |||
public void setName(String name) { | |||
this.name = name; | |||
} | |||
} |
@@ -0,0 +1,27 @@ | |||
package com.artmark.avs5rs.model; | |||
import javax.xml.bind.annotation.XmlAccessType; | |||
import javax.xml.bind.annotation.XmlAccessorType; | |||
import javax.xml.bind.annotation.XmlRootElement; | |||
/** | |||
* @author Ushmodin N. | |||
* @since 07.07.2016 10:25 | |||
*/ | |||
@XmlAccessorType(XmlAccessType.FIELD) | |||
@XmlRootElement(name = "EchoRequest") | |||
public class EchoRequest { | |||
/** | |||
* Сообщение которое будет возвращено в ответ | |||
*/ | |||
private String message; | |||
public String getMessage() { | |||
return message; | |||
} | |||
public void setMessage(String message) { | |||
this.message = message; | |||
} | |||
} |
@@ -0,0 +1,26 @@ | |||
package com.artmark.avs5rs.model; | |||
import javax.xml.bind.annotation.XmlAccessType; | |||
import javax.xml.bind.annotation.XmlAccessorType; | |||
import javax.xml.bind.annotation.XmlType; | |||
/** | |||
* @author Ushmodin N. | |||
* @since 07.07.2016 10:25 | |||
*/ | |||
@XmlType(name = "EchoResponse") | |||
@XmlAccessorType(XmlAccessType.FIELD) | |||
public class EchoResponse { | |||
/** | |||
* Сообщение переданное в запросе | |||
*/ | |||
private String message; | |||
public String getMessage() { | |||
return message; | |||
} | |||
public void setMessage(String message) { | |||
this.message = message; | |||
} | |||
} |
@@ -0,0 +1,10 @@ | |||
package com.artmark.avs5rs.model; | |||
/** | |||
* @author Ushmodin N. | |||
* @since 07.07.2016 12:27 | |||
*/ | |||
public enum Gender { | |||
MALE, FEMALE | |||
} |
@@ -0,0 +1,27 @@ | |||
package com.artmark.avs5rs.model; | |||
import javax.xml.bind.annotation.XmlAccessType; | |||
import javax.xml.bind.annotation.XmlAccessorType; | |||
import javax.xml.bind.annotation.XmlRootElement; | |||
/** | |||
* @author Ushmodin N. | |||
* @since 07.07.2016 10:27 | |||
*/ | |||
@XmlAccessorType(XmlAccessType.FIELD) | |||
@XmlRootElement(name = "GetArrivalStationsRequest") | |||
public class GetArrivalStationsRequest { | |||
/** | |||
* Идентификатор станции отправления. Обязательно. | |||
*/ | |||
private String dispatchStationId; | |||
public String getDispatchStationId() { | |||
return dispatchStationId; | |||
} | |||
public void setDispatchStationId(String dispatchStationId) { | |||
this.dispatchStationId = dispatchStationId; | |||
} | |||
} |
@@ -0,0 +1,27 @@ | |||
package com.artmark.avs5rs.model; | |||
import javax.xml.bind.annotation.XmlAccessType; | |||
import javax.xml.bind.annotation.XmlAccessorType; | |||
import javax.xml.bind.annotation.XmlElement; | |||
import javax.xml.bind.annotation.XmlType; | |||
import java.util.List; | |||
/** | |||
* @author Ushmodin N. | |||
* @since 07.07.2016 10:30 | |||
*/ | |||
@XmlAccessorType(XmlAccessType.FIELD) | |||
@XmlType(name = "GetArrivalStationsResponse") | |||
public class GetArrivalStationsResponse { | |||
@XmlElement(name = "Station") | |||
private List<Station> stations; | |||
public List<Station> getStations() { | |||
return stations; | |||
} | |||
public void setStations(List<Station> stations) { | |||
this.stations = stations; | |||
} | |||
} |
@@ -0,0 +1,15 @@ | |||
package com.artmark.avs5rs.model; | |||
import javax.xml.bind.annotation.XmlAccessType; | |||
import javax.xml.bind.annotation.XmlAccessorType; | |||
import javax.xml.bind.annotation.XmlRootElement; | |||
/** | |||
* @author Ushmodin N. | |||
* @since 08.07.2016 09:08 | |||
*/ | |||
@XmlAccessorType(XmlAccessType.FIELD) | |||
@XmlRootElement(name = "GetDispatchStationsRequest") | |||
public class GetDispatchStationsRequest { | |||
} |
@@ -0,0 +1,27 @@ | |||
package com.artmark.avs5rs.model; | |||
import javax.xml.bind.annotation.XmlAccessType; | |||
import javax.xml.bind.annotation.XmlAccessorType; | |||
import javax.xml.bind.annotation.XmlElement; | |||
import javax.xml.bind.annotation.XmlType; | |||
import java.util.List; | |||
/** | |||
* @author Ushmodin N. | |||
* @since 07.07.2016 10:27 | |||
*/ | |||
@XmlAccessorType(XmlAccessType.FIELD) | |||
@XmlType(name = "GetDispatchStationsResponse") | |||
public class GetDispatchStationsResponse { | |||
@XmlElement(name = "Station") | |||
private List<Station> station; | |||
public List<Station> getStation() { | |||
return station; | |||
} | |||
public void setStation(List<Station> station) { | |||
this.station = station; | |||
} | |||
} |
@@ -0,0 +1,43 @@ | |||
package com.artmark.avs5rs.model; | |||
import javax.xml.bind.annotation.XmlAccessType; | |||
import javax.xml.bind.annotation.XmlAccessorType; | |||
import javax.xml.bind.annotation.XmlRootElement; | |||
/** | |||
* @author Ushmodin N. | |||
* @since 07.07.2016 10:59 | |||
*/ | |||
@XmlAccessorType(XmlAccessType.FIELD) | |||
@XmlRootElement(name = "GetDocumentTypesRequest") | |||
public class GetDocumentTypesRequest { | |||
private String tripId; | |||
private String dispatchStationId; | |||
private String arrivalStationId; | |||
public String getTripId() { | |||
return tripId; | |||
} | |||
public void setTripId(String tripId) { | |||
this.tripId = tripId; | |||
} | |||
public String getDispatchStationId() { | |||
return dispatchStationId; | |||
} | |||
public void setDispatchStationId(String dispatchStationId) { | |||
this.dispatchStationId = dispatchStationId; | |||
} | |||
public String getArrivalStationId() { | |||
return arrivalStationId; | |||
} | |||
public void setArrivalStationId(String arrivalStationId) { | |||
this.arrivalStationId = arrivalStationId; | |||
} | |||
} |
@@ -0,0 +1,28 @@ | |||
package com.artmark.avs5rs.model; | |||
import javax.xml.bind.annotation.XmlAccessType; | |||
import javax.xml.bind.annotation.XmlAccessorType; | |||
import javax.xml.bind.annotation.XmlElement; | |||
import javax.xml.bind.annotation.XmlType; | |||
import java.util.List; | |||
/** | |||
* @author Ushmodin N. | |||
* @since 07.07.2016 10:59 | |||
*/ | |||
@XmlAccessorType(XmlAccessType.FIELD) | |||
@XmlType(name = "GetDocumentTypesResponse") | |||
public class GetDocumentTypesResponse { | |||
@XmlElement(name = "DocumentType") | |||
private List<DocumentType> documentTypes; | |||
public List<DocumentType> getDocumentTypes() { | |||
return documentTypes; | |||
} | |||
public void setDocumentTypes(List<DocumentType> documentTypes) { | |||
this.documentTypes = documentTypes; | |||
} | |||
} |
@@ -0,0 +1,52 @@ | |||
package com.artmark.avs5rs.model; | |||
import javax.xml.bind.annotation.XmlAccessType; | |||
import javax.xml.bind.annotation.XmlAccessorType; | |||
import javax.xml.bind.annotation.XmlRootElement; | |||
/** | |||
* @author Ushmodin N. | |||
* @since 07.07.2016 10:53 | |||
*/ | |||
@XmlAccessorType(XmlAccessType.FIELD) | |||
@XmlRootElement(name = "GetFreeSeatsRequest") | |||
public class GetFreeSeatsRequest { | |||
/** | |||
* Идентификатор рейса. Обязательный. | |||
*/ | |||
private String tripId; | |||
/** | |||
* Идентификатор станции отправления. Обязательный. | |||
*/ | |||
private String dispatchStationId; | |||
/** | |||
* Идентификатор станции назначения. Обязательный. | |||
*/ | |||
private String arrivalStationId; | |||
public String getTripId() { | |||
return tripId; | |||
} | |||
public void setTripId(String tripId) { | |||
this.tripId = tripId; | |||
} | |||
public String getDispatchStationId() { | |||
return dispatchStationId; | |||
} | |||
public void setDispatchStationId(String dispatchStationId) { | |||
this.dispatchStationId = dispatchStationId; | |||
} | |||
public String getArrivalStationId() { | |||
return arrivalStationId; | |||
} | |||
public void setArrivalStationId(String arrivalStationId) { | |||
this.arrivalStationId = arrivalStationId; | |||
} | |||
} |
@@ -0,0 +1,27 @@ | |||
package com.artmark.avs5rs.model; | |||
import javax.xml.bind.annotation.XmlAccessType; | |||
import javax.xml.bind.annotation.XmlAccessorType; | |||
import javax.xml.bind.annotation.XmlElement; | |||
import javax.xml.bind.annotation.XmlType; | |||
import java.util.List; | |||
/** | |||
* @author Ushmodin N. | |||
* @since 07.07.2016 10:54 | |||
*/ | |||
@XmlAccessorType(XmlAccessType.FIELD) | |||
@XmlType(name = "GetFreeSeatsResponse") | |||
public class GetFreeSeatsResponse { | |||
@XmlElement(name = "Seat") | |||
private List<Seat> seats; | |||
public List<Seat> getSeats() { | |||
return seats; | |||
} | |||
public void setSeats(List<Seat> seats) { | |||
this.seats = seats; | |||
} | |||
} |
@@ -0,0 +1,24 @@ | |||
package com.artmark.avs5rs.model; | |||
import javax.xml.bind.annotation.XmlAccessType; | |||
import javax.xml.bind.annotation.XmlAccessorType; | |||
import javax.xml.bind.annotation.XmlRootElement; | |||
/** | |||
* @author Ushmodin N. | |||
* @since 07.07.2016 11:15 | |||
*/ | |||
@XmlAccessorType(XmlAccessType.FIELD) | |||
@XmlRootElement(name = "GetOrderRequest") | |||
public class GetOrderRequest { | |||
private String orderId; | |||
public String getOrderId() { | |||
return orderId; | |||
} | |||
public void setOrderId(String orderId) { | |||
this.orderId = orderId; | |||
} | |||
} |
@@ -0,0 +1,37 @@ | |||
package com.artmark.avs5rs.model; | |||
import javax.xml.bind.annotation.XmlAccessType; | |||
import javax.xml.bind.annotation.XmlAccessorType; | |||
import javax.xml.bind.annotation.XmlElement; | |||
import javax.xml.bind.annotation.XmlType; | |||
import java.util.List; | |||
/** | |||
* @author Ushmodin N. | |||
* @since 07.07.2016 11:15 | |||
*/ | |||
@XmlAccessorType(XmlAccessType.FIELD) | |||
@XmlType(name = "GetOrderResponse") | |||
public class GetOrderResponse { | |||
private String orderId; | |||
@XmlElement(name = "Ticket") | |||
private List<Ticket> tickets; | |||
public String getOrderId() { | |||
return orderId; | |||
} | |||
public void setOrderId(String orderId) { | |||
this.orderId = orderId; | |||
} | |||
public List<Ticket> getTickets() { | |||
return tickets; | |||
} | |||
public void setTickets(List<Ticket> tickets) { | |||
this.tickets = tickets; | |||
} | |||
} |
@@ -0,0 +1,42 @@ | |||
package com.artmark.avs5rs.model; | |||
import javax.xml.bind.annotation.XmlAccessType; | |||