Усилили команду платформы по автоматизации транспортной логистики
Evrone предоставил middle и senior-разработчиков для TRUCKER — IT-платформы, которая предлагает комплексные решения для управления транспортной логистикой, ЖД перевозками, двором и окнами погрузки. Мы помогли клиенту в разработке новых фич и обслуживании системы.
Клиент
TRUCKER предоставляет решения для Грузовладельцев и Грузоперевозчиков. Флагманский продукт компании - Transportation Management System (TMS), предназначенный для управления транспортной логистикой. TMS позволяет создавать и автоматически распределять заказы между перевозчиками, выставлять их на торги, напрямую направлять заказы на партнеров; настраивать индивидуальные правила распределения и проведения торгов; управлять временными окнами через модуль цифровой очереди; отслеживать маршруты и контролировать выполнение заказов в режиме реального времени через мобильное приложение; вести сквозной документооборот с использованием электронного обмена данными (ЭДО) и реестра счетов; анализировать данные и формировать отчеты с помощью встроенного модуля. Система поддерживает мультимодальные перевозки (авто, ЖД, море, авиа) и интеграцию с ERP-системами клиентов, обеспечивая прозрачность процессов и сокращая трудозатраты.
Продукт
Это монолитное Rails-приложение, которое следует принципам Domain-Driven Design (DDD), подхода, ориентированного на моделирование бизнес-доменов. При построении системы командой TRUCKER были заложены такие архитектурные принципы как Event-Driven и CQRS. Реализованы данные подходы в том числе за счет использования библиотеки Rails Event Store и библиотек семейства dry-rb.
Разработка ведется в функциональном стиле. С одной стороны, это делает код более надежным и логически непротиворечивым, с другой — повышает требования к разработчикам. Бизнес часто выбирает императивное программирование на Ruby, что ускоряет разработку и сокращает текущие издержки. Функциональное же программирование дает положительный эффект на длинной дистанции — система получается более устойчивой и готовой к масштабированию без опасных изменений.
Сотрудники Evrone работали в большинстве внутренних команд под руководством клиента, помогая развивать и поддерживать продукт, а также разрабатывая новые фичи. Требования к квалификации сотрудников высоки, от нас на проекте работают Ruby-разработчики middle и senior уровня. Ниже расскажем, к каким задачам подключались разработчики из Evrone.
Биллинг
Биллинг в TMS построен на основе Open Source инструмента Lago. Он предлагает собственный GraphQL API, веб хуки и интерфейс для администрирования. Однако, из коробки Lago не соответствовал всем требованиям продукта TMS, команде пришлось адаптировать его к российским нормативам и построить интеграцию с отечественной 1С.
SDK для интеграций
Реализация клиентских проектов в TMS от TRUCKER построена на комплексном подходе и персонализации, поскольку бизнес-процессы в логистике, внешне схожие, в деталях могут значительно различаться. В архитектуре TMS изначально заложены 3 слоя, которые позволяют продукту быть максимально гибким в данных условиях::
- функциональность ядра (Core)
- клиентская кастомизация (Customer Configuration)
- набор инструментов для общения клиентской кастомизации с ядром и наоборот (SDK).
При участии Evrone происходит разработка SDK для интеграций с клиентскими учетными системами. Необходимо решить 2 задачи:
- реализовать переиспользуемые протоколы получения и отправки сообщений в SDK.
- реализовать механизмы обработки входящих и исходящих сообщений в Customers Configurations.
Нестабильные тесты
Более 17 000 автоматических тестов для backend-части приложения помогают удерживать высокий стандарт качества. Публикация любых изменений требует сначала автоматической проверки, затем верификации от двух коллег, и снова автоматической проверки перед публикацией в продакшн.
На проекте существовала проблема Flaky-тестов. Это нестабильные тесты, которые при одинаковых условиях показывали разный результат. Каждая автоматическая проверка длится до получаса, в случае падения хотя бы одного теста публикация изменений могла задерживаться, ожидая перезапуска и успешной проверки.
Один из наших разработчиков предложил эффективное решение. Код перезапускает все тесты, выбирает те, которые упали, и перезапускает их еще несколько раз. Если ошибка повторяется — проблема в коде самого приложения. Если результат разный — проблема в коде теста и разработчик получит уведомление в мессенджере, что тест нестабилен. Так проблема обнаруживается и исправляется гораздо быстрее.
Техподдержка
Для пользователей TMS на связи две линии технической поддержки. Первая линия оперативно отвечает на вопросы и помогает решать возникающие задачи. Более сложные запросы передаются на вторую линию, где работают инженеры, включая специалистов Evrone, обеспечивающие экспертное решение проблем. Каждое обращение внимательно анализируется, в том числе, чтобы собирать идеи для улучшений и дальнейшего развития системы, поддержания качества предоставляемых сервисов и улучшения пользовательского опыта.
Фича-флаги
В TRUCKER используется современный подход Continuous Delivery, при котором обновления доставляются в продакшн маленькими группами (до нескольких десятков раз в неделю). При этом, все изменения закрывают фича-флагами. Это механизм, который включает и выключает части приложения при определенных условиях. Поведение приложения меняется без перезапуска. Такой подход позволяет протестировать изменения на отдельных пользователях и группах, а затем открывать их всем.
Цифровая очередь
Цифровая очередь — это инструмент для управления процессами погрузки и разгрузки на площадках. Система позволяет грузоотправителям и перевозчикам получать информацию о транспортных средствах, заказах и их статусах в реальном времени. Она помогает не только планировать, но и резервировать слоты для конкретных партнеров. Например, можно выделить десять слотов для компании, которая потом сама распределяет их между своими водителями. Это упрощает организацию процесса, помогает избежать простоя и делает взаимодействие между участниками логистической цепочки более удобным и эффективным.
Фронтенд
Одним из основных рабочих инструментов для конечного пользователя в TMS являются таблицы с большим числом строк и колонок. При этом мощность компьютеров на рабочих местах может быть ограничена. При слабых характеристиках компьютера и значительном объеме данных таблица начинала работать медленно.
Команда TRUCKER выделила одного нашего сеньор фронтенд инженера на фултайм для исследования и решения данной задачи.
Было проведено сравнение существующих решений и в итоге было принято решение реализовывать собственный компонент таблицы. Вот лишь некоторые требования: плавный горизонтальный и вертикальный скролл, возможность фиксации некоторых столбцов, динамическая ширина столбцов, раскрывающиеся строки. Теперь система учитывает разную ширину, и прокрутка происходит мягко.
Также был обнаружен и исправлен неоптимальный рендеринг переводов (локализации) в случаях динамически вычисляемого перевода в зависимости от формы множественного числа (плюрализации). Использование встроенного механизма плюрализации библиотеки позволило ускорить рендеринг таких элементов в 2,5 раза.
Результат
Наши сотрудники продолжают работу над логистической платформой. Вместе с командой клиента мы продолжаем делать обновления, рефакторить код и развивать систему управления перевозками. Вот, в чем мы поучаствовали за последний год:
- Интеграция биллинговой системы.
- Переработка функциональности цифровой очереди.
- Оптимизация работы таблиц.
- Разработка функциональности групповых заказов.
- Решение проблемы нестабильных тестов.
- Автоматическое назначение логистов перевозчика по заданным правилам.
- Добавление новых модальностей (море и авиа).
Групповые заказы станут доступны пользователям в начале 2025 года, разработка SDK тоже еще продолжается.
В команде Evrone специалисты с широким опытом работы на крупных проектах, которые готовы поделиться своей экспертизой. Заполните форму, чтобы уже через неделю мы присоединились к разработке вашего продукта.