Платформа управления автопарком с помощью AI

Задача

Разработать клиентское и водительское приложение на Android и iOS. Внедрить функционал обнаружения неполадок в машине с помощью мобильного клиента и машинного обучения.

  • Мобильное приложение
  • Логистика
  • AI
  • Backend development

О проекте

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

Результаты

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

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

Технологии

  • RxJava

    RxJava

  • Koin

    Koin

  • Live Data

    Live Data

  • Single Activity

    Single Activity

  • Combine

    Combine

  • Kotlin

    Kotlin

  • Swift

    Swift

  • Retrofit

    Retrofit

Интеграции

  • 2GIS

    2GIS

Водительское приложение

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

Студия разработала системы авторизации, смены статуса в приложении и распределения заявок (на такси и доставку груза). Выстроила процесс использования такси, работу встроенной камеры и AI.

Безопасность данных

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

Автоматическая смена статуса водителя

После первого входа в приложение на главном экране появляется кнопка «Выйти на линию». Когда пользователь нажимает на нее, сервер отправляет запрос на автомобиль. Затем водитель принимает машину, и его статус меняется на «Онлайн» — это значит, что можно принимать заказы. Когда смена закончилась и водитель не получает заказы, статус меняется на «Офлайн».

Продуманная навигация

Водитель принимает заявку, и карта переключается в режим навигатора. Благодаря NavigationControl в интерфейсе появляется информация об ограничении скорости, прогресс маршрута и оповещения о поворотах.

Когда водитель на месте, появляется кнопка «Завершить поездку», затем статус поездки меняется и проходит оплата.

Связкой RxJava+Retrofit создали сетевой слой приложения. RxJava используется для многопоточности — запросы отправляются в отдельном потоке и не блокируют UI основного приложения. При этом Retrofit генерирует запросы к серверу.

Актуальный часовой пояс

Иногда водителю приходится ездить в другие часовые пояса. Если приложение будет брать информацию о поясе с устройства, могут возникнуть ошибки. Чтобы исключить проблемы, задействовали библиотеку TimeZoneMap. С ней сервис получает актуальный часовой пояс через местоположение.

Защита от плохого соединения

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

Ускоренная загрузка заявок

Использовали пагинацию (paging library 3), чтобы сократить время на получение заявок для водителя. За счет этого загрузка верхних элементов списка ускорилась в 10 раз. Давние заявки можно посмотреть, пролистывая список.

Техосмотр с помощью фотографий

Чтобы сделать предрейсовый техосмотр удобным, добавили встроенную камеру на основе библиотеки CameraX. Водитель сможет фотографировать показатели приборов перед поездкой и отправлять их на обработку, не переключаясь на сторонние приложения.

Экономия ресурсов за счет AI

В приложении есть функции искусственного интеллекта для обработки фотографий. Это позволяет экономить ресурсы и систематизировать поток данных. Когда пользователь загружает фото, отправляется запрос на backend с помощью библиотеки Alamofire. Затем сервер присылает ответ от AI.

Клиентское приложение

Здесь можно заказать такси и доставку груза, забронировать парковочное место, создать заявку на ремонт, а также записаться на мойку и шиномонтаж.

Присвоение ролей

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

Полезный функционал
для бронирования парковки

На главном экране есть карта 2ГИС с выезжающей панелью, где находится UICollectionView. Здесь можно добавить свой автомобиль, а также забронировать краткосрочную и долговременную парковку благодаря запросам, которые выполняются с помощью библиотеки Alamofire.

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

Удобная отправка машины в сервис

Чтобы отправить машину в автосервис, пользователь заходит в раздел «Ремонт», выбирает услугу и тип повреждений.

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

Онлайн-запись на шиномонтаж и автомойку

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

Похожие кейсы