Разработка мобильного приложения для курьерской службы (диспетчер)
Диспетчер курьерской службы работает с потоком заказов и парком курьеров одновременно. На планшете или телефоне — карта с десятками точек, очередь необработанных заказов и статусы активных доставок. Требования к UI плотнее, чем в клиентском приложении, а требования к надёжности — выше, чем в курьерском.
Карта диспетчера: курьеры и заказы одновременно
Два типа маркеров на одной карте: зелёные точки — доступные курьеры, красные — активные доставки. При масштабировании нужна кластеризация чтобы карта не превращалась в кашу из иконок. MarkerClusterManager (Google Maps Android) или GMUClusterManager (iOS) с кастомным ClusterRenderer — цвет кластера показывает тип объектов внутри.
Tap по маркеру курьера — всплывающая карточка: имя, текущий статус, заказов в работе, ETA до следующей точки. Из карточки сразу — назначить новый заказ или позвонить.
Tap по маркеру заказа — детали заказа, статус, назначенный курьер (если есть), кнопка переназначить.
Фильтрация и зоны
Курьерская служба может работать по зонам города. Диспетчер должен фильтровать карту по зоне, видеть только своих курьеров. Polygon overlay через GMSPolygon / MKPolygon с полупрозрачной заливкой для отображения зон. Переключение зон — таб или dropdown сверху.
Распределение заказов
Ручное назначение: диспетчер видит новый заказ, смотрит на карте ближайших свободных курьеров (подсвечены), выбирает из списка. Список сортируется по расстоянию от точки отправки (серверный расчёт через PostGIS ST_Distance).
Автоматическое распределение — кнопка «авто» включает серверный алгоритм. Диспетчер может вмешаться и переназначить.
При переназначении заказа — предыдущий курьер получает push-уведомление «заказ снят». Без этого курьер может приехать на адрес и узнать что заказ уже доставил другой.
Очередь необработанных заказов
Список новых заказов в реальном времени через WebSocket. DiffUtil (Android) / SwiftUI AnimatedList для анимации добавления/удаления строк. Приоритет — срочные заказы выделяются цветом, сортировка по умолчанию — по времени оформления.
Счётчик непринятых заказов — badge на иконке таба. Если диспетчер не обрабатывает очередь больше N минут — звуковой сигнал.
Аналитика смены
Простой дашборд: заказов принято / в работе / завершено / отменено. Средний интервал доставки. Курьеры по статусам. Обновляется в реальном времени из WebSocket-потока. Не нужен отдельный экран аналитики — достаточно плашки поверх карты или боковой панели на планшете.
Коммуникация с курьерами
Встроенный чат — не обязательно реализовывать самостоятельно. Если команда небольшая, достаточно deep link в Telegram или WhatsApp с номером курьера. Для корпоративного решения — Firebase Realtime Database или Supabase Realtime как backend для чата, простой RecyclerView / LazyColumn на клиенте.
Голосовые сообщения — приоритет на мобильном диспетчере. Записать и отправить быстрее, чем печатать.
Стек: Flutter (планшет + телефон, один код), Google Maps SDK, WebSocket через web_socket_channel, state management — Riverpod или BLoC.
Срок: от 8 до 14 недель с учётом интеграции. Стоимость рассчитывается индивидуально.







