Система управления рейсами и продажей билетов для судоходной компании

Защита от overbooking, отправления с открытой датой и работа в режиме offline

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

Цель проекта

Увеличить количество проданных билетов, снизить нагрузку на персонал и обеспечить непрерывные продажи в online и offline режимах. Риск овербукинга требовалось свести к минимуму, при этом надо было учесть, что кассиры на причалах могут работать при отсутствии соединения с интернетом.

Ключевая особенность

На момент обращения в Аксмор компания “Нева Тревел” уже использовала ПО индивидуальной разработки для автоматизации продаж билетов. Эксплуатируемая платформа не поддерживалась разработчиком и имела ограниченный набор функций. После консультаций с заказчиком было принято решение о разработке “с нуля”, что позволило сэкономить бюджет и обойти технические ограничения, связанные с особенностями реализации старой системы бронирования.

Решение

После тщательного изучения бизнес-процессов заказчика мы разработали удобную административную панель, которая позволяет гибко управлять расписанием рейсов, предусмотрели кабинеты партнёров и API для интеграции. Клиенты покупают билеты через модуль бронирования, доступный на сайте компании. Сам процесс бронирования максимально упрощен и занимает меньше минуты.

Компоненты системы

  1. Front-end: React, TypeScript, Ant Design
  2. Back-end: Go, Kotlin, Ent, TypeScript, gRPC, Gradle
  3. DevOps: GitLab CI, Ansible, Docker Compose
  4. Синхронизация: SymmetricDS
  5. Тестирование: Cypress, QA Touch, Jest, Grafana k6
  6. Дизайн: Figma
  7. Управление проектом: GitLab, JIRA, Confluence, Teams

Специальный функционал

Отображение информации в условиях отсутствия связи

Кассирам нужно оформлять билеты даже при отсутствии постоянного соединения с интернетом. При этом система бронирования должна обеспечить забронированные пассажирами места на рейсе. Мы реализовали механизм синхронизации данных, который позволяет поддерживать актуальность информации при временных перебоях со связью.

Проведение продажи кассиром менее чем за минуту

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

Индивидуальный интерфейс для каждой роли

Изолированные подсистемы для кассира и администратора имеют индивидуальные пользовательские интерфейсы и свой набор инструментов, основанный на анализе бизнес-процессов, в которых задействованы пользователи.

Система квотирования продаж

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

Инструменты повышения среднего чека

Помимо билетов на корабль пассажир может приобрести билеты в музеи и туристические центры, а также товары, которые можно взять с собой на водную прогулку. Также есть возможность арендовать теплоход и причал для путешествий большой компанией.

Учет билетов открытого времени

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

Стандартный функционал

Настройка расписания рейсов с возможностью внесения корректировок от кассиров, находящихся на причалах

В случае задержки прибытия / отправления судна, закрытии причала или поломки оборудования расписание может быть отредактировано администратором и оперативно перестроено.

Данные внутри системы синхронизируются в режиме реального времени

Таким образом туристы могут бронировать билеты по телефону, партнёры “Нева Тревел” могут продавать их на своих точках, а кассиры – быть уверенными в актуальности наличия свободных мест при оформлении билетов на причалах.

Для партнёров заказчика разработано API обмена информацией о наличии билетов

Партнёру доступен личный кабинет, в котором можно оформлять заказы на рейсы. С одной стороны, этот функционал позволяет увеличить оборот партнера, с другой – разгрузить кассира.

Проектные практики

Прозрачность разработки

Заказчик видит текущий статус разработки в общей Jira. Для уточнения требований общаемся с заказчиком в чате и организуем звонки.

Командировки к заказчику

Организовали командировку проектной команды в Санкт-Петербург, чтобы лучше понять проблемы кассиров и условия, в которых будет эксплуатироваться система.

Выборочное ручное тестирование и покрытие автотестами

Для экономии бюджета на тестирование мы использовали автотесты. Ручное тестирование применялось для части наиболее важного функционала. Тимлид разработки лично выбирал критичные задачи, которые проверялись QA инженерами вручную.

Документация как код

У заказчика был репозиторий в GitLab с документацией, которую мы совместно модифировали. Документация актуализируется при внесении каждого изменения в систему.
;

630055, г. Новосибирск,
ул. Гнесиных 10/1, 10 этаж