Uber like рішення для вантажоперевезення зерна
Завдання
Цей сервіс об'єднує в собі відразу кілька типів користувачів. З одного боку це власники зерна або зернотрейдери. Їхній інтерес полягає в тому, щоб доставити вантаж від елеватора, після збирання врожаю, до терміналу або порту, де цей вантаж відправиться далі за напрямком. Особливістю процесу перевезення є те, що вантаж може бути дуже об'ємний (тисячі тонн), для цього необхідно мати в наявності багато вантажних машин. Також вантаж не може лежати вічно на складі, його потрібно встигнути вчасно забрати.
До появи цього сервісу, власники вантажу, які не володіють особистим автопарком, змушені розв'язувати цю проблему самостійно, шукати підрядників, найчастіше кількох, оскільки один рідко може впоратися з великим обсягом перевезення за потрібний час.
Вигоди для власників вантажу
Власне, цей сервіс було створено з метою полегшити і систематизувати пошук перевізників і мінімізувати обсяг бюрократичних процедур для організації перевезення. Для власника вантажу сервіс виглядає як UBER-like додаток. У найпростішому варіанті достатньо вибрати, звідки везти вантаж, куди його везти, вказати дату навантаження і тип сільськогосподарської культури.
Всією іншою бізнес-логікою сервіс займеться сам: виставленням заявки на розбір; закриттям заявки, підвищенням ціни; моніторингом перевезення вантажу; проходженням заявки через усі статуси, закладені в бізнес-процесах.
Вигоди для вантажоперевізників
Зі зворотного боку процесу перевезення виступає власник автотранспорту. Це компанії або приватні особи, які володіють або величезним парком вантажних автомобілів, або ж лише кількома машинами. Рідко коли один власник транспорту в змозі повністю закрити заявку власними силами. Причини тому можуть бути найрізноманітніші: короткі терміни, великі обсяги вантажів, зайнятість автомобілів на поточний момент. Звідси і ще одна характеристика сервісу - він допомагає виконувати перевізникам невеликі вантажоперевезення в рамках однієї великої заявки одного замовника.
Власник вантажу не вибирає конкретного перевізника, оскільки його це не особливо цікавить. Він просто публікує заявку й очікує її виконання вчасно. Перевізнику достатньо мати в наявності вільну вантажівку і відгукнутися на заявку. У разі, якщо заявку розібрали повністю, всі власники транспорту приступають до її виконання.
Роль водіїв вантажівок у системі
Ще одна роль, яка є в системі - це водій. Водії закріплюються за певними машинами певних власників транспорту. У водія завдання просте, він повинен виконати заявку: зануритися на точці навантаження, перевезти вантаж до точки вивантаження, вивантажитися і на цьому його робота завершена. Для управління процесом перевезення з боку водія є мобільний застосунок, за допомогою якого водій змінює поточні етапи виконання заявки та обмінюється інформацією зі службою підтримки в разі непередбачених обставин. Крім того, для моніторингу руху транспорту на кожну вантажівку встановлюють GPS-датчик, який періодично надсилає координати на наш геоінформаційний сервіс (GIS), де ці координати обробляються й аналізуються на наявність різних ситуацій: в'їзд-виїзд із геозон, відхилення від маршруту, зникнення сигналу, простій.
У цьому бізнес-процесі також присутні представники терміналів. Це люди, які працюють у портах і хочуть отримувати інформацію про транспорт, який рухається до них на розвантаження.
Архітектура та компоненти системи
Роботи над проєктом почалися з вивчення предметної області та опису всіх бізнес-проблем у письмовому вигляді та на діаграмах. Паралельно розроблялася серверна архітектура і підбиралися необхідні технології. Оскільки ми є досвідченими програмістами на PHP-фреймворку Symfony, ми вибрали його для реалізації бізнес-логіки сервісу. Нашу систему ми розбили на кілька складових компонентів, які розроблялися окремо.
- API - серце системи, де проходять усі транзакції;
- Frontend - клієнтський веб-інтерфейс, на якому користувачі реєструються і керують заявками з особистого кабінету;
- Backend - веб-інтерфейс для адміністраторів, щоб керувати і моніторити систему;
- GIS - геоінформаційний сервіс, у його роботу входить обробка координат від транспортних засобів і передача різних бізнес-подій на API;
- Мобільний застосунок для водія - для управління процесом перевезення вантажу;
- Мобільний застосунок для власників вантажу і перевізників - повторює функціонал веб-додатку у вигляді рідного застосунку на Android і iOS. Наразі перебуває в процесі розроблення..
Зовнішні сервіси
У цій системі використовується кілька зовнішніх сервісів. Наприклад, Wialon, який спочатку розглядався виключно як зовнішній GIS. Його планувалося тісно інтегрувати з нашою системою і виконувати всі необхідні для проєкту завдання. Але для того, щоб зробити сервіс більш незалежним від зовнішніх чинників, ми своїми силами реалізували всі необхідні нам функції GIS. Це дало змогу гнучкіше контролювати внутрішньосистемні процеси. Wialon залишився тільки як ретранслятор GPS-сигналу, до якого надходять дані з датчиків автомобіля і потім ретранслюються нам через TCP-протокол. Для отримання та опрацювання низькорівневих даних був написаний дешифрувальник протоколу GPS-трекера мовою Python. Як сховище об'ємних даних про треки машин ми використовували MongoDB.
У цьому проєкті багато завдань довелося винести в асинхронні фонові процеси. Для цього ми використовували сервер черг RabbitMQ. Туди ми відправляємо такі завдання, як розсилки нотифікацій учасникам системи різними каналами, обробка подій під час руху транспорту, комунікація між сервісами API і GIS та багато іншого.
Також ми підключили до цього проєкту сервіс Firebase Cloud Messaging для надсилання пуш-нотифікацій на різні платформи і Infobip для надсилання SMS. Ще були підключені API такого сервісу, як Seldon для отримання інформації про зареєстрованих юридичних осіб, щоб спростити процес реєстрації користувачів. Для промальовування маршрутів і генерації статичних карт ми використовуємо Google Maps API.
В інтерфейсі адміністратора є можливість керувати налаштуваннями системи, наприклад:
- редагувати різні довідники: марки і моделі автотранспорту, точки навантаження і вивантаження;
- верифікувати користувачів;;
- керувати заявками;
- встановлювати тарифи на перевезення в різних регіонах;
- переглядати статистику;
- редагувати тексти листів і нотифікацій;
- керувати каналами розсилки нотифікацій під кожен тип користувача і подію.
У нашому проєкті реалізовано інтеграцію з "1С Бухгалтерією" для ведення документообігу та складання накладних. Інтеграцією займалася московська команда програмістів з боку замовника.
Загальна кількість розробників, які на різних етапах брали участь у розробці проєкту з нашого боку, перевищує два десятки осіб. З них 9 бекенд-розробників, 2 фронтенд-розробники, 3 android-розробники, 2 ios-розробники, 2 тестувальники, 2 менеджери та 1 devops. Також у процесі розробки ми багато і по ділу спілкувалися з представниками замовника: дизайнерами, технічними фахівцями та фахівцями предметної області.
Адаптація до змін бізнес-логіки
Під час розроблення проєкту кілька разів змінювалися вимоги та бізнес-логіка через те, що замовник підбирав вдалішу бізнес-модель залежно від потреб ринку. Наприклад, одним із таких пунктів був розбір заявки з боку перевізника. Оскільки в елеваторів є фізичний ліміт на кількість тонн, яку вони можуть розвантажити за день, а обсяг вантажу в заявці може значно перевищувати цей ліміт, було додано таке поняття, як лот.
Заявка ділиться на лоти рівної або нерівної величини. Один лот, по суті, являє собою один день і ту кількість тонн, яку здатен віддати елеватор. Далі перевізники вже оперують частинами лота: якщо лот розміром 300 тонн, то перевізник може взяти з нього, наприклад, тільки 20-25 тонн залежно від вантажопідйомності машини. Частина лота - це рейс, який виконує один водій під час виконання заявки. Завдяки ітеративності розробки функціоналу ми впоралися з адаптацією цих змін.
За процесом виконання рейсу може стежити як власник вантажу, чий вантаж перевозять, так і власник автотранспорту, чий водій виконує перевезення. Це відображається на карті в онлайн-режимі.
У цьому проєкті використовується достатня кількість складних елементів інтерфейсу. Щоб спростити роботу з ними, нашими фронтенд-розробниками було написано кілька компонентів на Vue.js + RxJS. Наприклад, карта для відображення руху транспорту, асинхронні поля введення і своя власна реалізація елемента Select.
Для реалізації пошуку адрес було використано бібліотеку RxJs, за допомогою якої ми можемо фільтрувати потік введення даних від користувача та оптимізувати кількість запитів до сервера. У результаті користувач отримав живий пошук, а бізнес швидке і якісне рішення, яке легко підтримувати в майбутньому.
Плани на майбутнє
За задумами замовників проєкту, після закінчення розробки цей веб-сервіс має покривати всі бізнес-процеси між різними учасниками системи. У майбутньому також планується запровадити нові ролі в системі: представник фермерського господарства (аналог представника терміналу, тільки на точках навантаження), різні типи менеджерів у рамках ролей власника транспорту і власника вантажу, особистий кабінет для фіскальних служб. Планується розширити функціонал особистих кабінетів користувачів. На даному ж етапі ми реалізували MVP, той базовий функціонал, який дав змогу сервісу вчасно запуститися, заявити про себе на ринку і почати отримувати перших користувачів, реєструвати в системі машини і водіїв, прораховувати і створювати перші заявки.
Команда проєкту:
- Володимир Сутовський
Керівник проєкту
- Руслан
Frontend розробник
- Andrey Siagrovskyi
Frontend розробник
- Андрій Л.
Frontend розробник
- Sergey Zheleznyak
Керівник Backend команди
- Артем
Керівник Backend команди
- Михайло Вільшанський
Backend розробник
- Alex L. Litvin
Backend розробник
- Yevgen Zholkevskiy
Backend розробник
- Юрій Сваток
Backend розробник
- Сергій
Backend розробник
- Max Logvinenko
Backend розробник
- Олександр
Керівник мобільної команди
- Антон
Android розробник
- Олександр К.
Android розробник
- Віктор
iOS розробник
- Євген
DevOps
- Міша
QA-менеджер
- Igor Harbuzyuk
Керівник проекту
- Світлана Болгар
Проєктний менеджер
Інші наші проєкти
Сервіс BenzinPreis24
Сервіс для ефективного пошуку заправок у Швейцарії
MeinFernbus додатки
Розробка мобільного додатку для найбільшого пасажироперевізника Німеччини
Airfarm
Мобільний додаток для фермерів, Німеччина