Приложение для мобильных бригад: «толстый клиент» и полмиллиона строк кода
Привет, меня зовут Александр, я начальник отдела мобильной разработки в СИГМЕ. Хочу рассказать, как мы делали приложение для мобильных бригад. Тех самых ребят, которые выезжают на место аварий на объектах энергетики и делают так, чтобы свет и энергия в наших домах не отключались. За 18 лет СИГМА накопила уникальную экспертизу в разработке ИТ-решений для энергетики. Наша суперсила — создавать приложения для автоматизации бизнес-процессов, связанных с обслуживанием оборудования и безопасностью персонала. Поэтому погнали за подробностями.
Как все начиналось
В 2018 году у нас стартовал проект по разработке Автоматизированной системы управления мобильными бригадами (АСУ МБ). Это решение для цифровизации деятельности автономных команд, занимающихся диагностикой и ремонтом оборудования на линиях электропередач, электростанциях и других промышленных объектах. Система большая и одна из её ключевых составляющих — мобильное приложение. Бригады оснащаются мобильными устройствами и всю свою работу координируют через предустановленное приложение.
Проект по его разработке отдали на подряд, но партнеры не справились. Тогда за работу взялась наша команда. Пришлось все переделывать: мы выбрали новый архитектурный стек и написали заново клиентскую часть. Приложение решили строить на чистой архитектуре — с Moxy и Java. Спустя год усердной работы команда из 10 Android-разработчиков успешно выпустила первый релиз. Оказавшись в конце годового отрезка с горящими сроками, выдохнули — «Мы справились». Но тут возникла задача по адаптации кода/технологического стека под новые реалии: рынок мобильной разработки уже успел кардинально измениться. Java уже не в моде, все пишут на Kotlin, а вместо Moxy пора использовать MVVM.
Мы не стали исключением и начали плавно переходить на эти технологии. Перспективы дальнейшего развития проекта и маячащие на горизонте проекты с похожими бизнес-процессами подтолкнули нас к использованию многомодульной архитектуры. Мы выделили «ядро» проекта с целью его дальнейшего переиспользования. В течение следующего года, параллельно выпуская новые релизы, успешно переехали на новый стек. А сейчас уже активно используем Kotlin Multiplatform, Compose и думаем о переезде на MVI.
«Толстый клиент» и полноценный офлайн-режим
Наш проект — достаточно нестандартное решение на рынке мобильной разработки. Это так называемый «толстый клиент» с поддержкой автономного режима и реализацией бизнес-процессов в самом приложении. На рынке чаще можно встретить решения с «тонким клиентом»: на любое действие пользователя происходит обращение к серверу, который уже возвращает результат с описанием, что нужно сделать или отобразить. В нашем мобильном приложении всё иначе: здесь происходит периодическая синхронизация с сервером, то есть журналирование всех изменений в приложении и отправка их на сервер для последующего сохранения в общей базе данных и отображения изменений в других клиентских приложениях.
Так выглядит личный кабинет пользователя
Толстый клиент — главная фича приложения и в то же время самая сложная его часть. У него множество преимуществ:
высокая производительность и скорость обработки данных
широкая функциональность
независимость от удаленных серверов
возможность работы без интернет-соединения
Автономный режим — важная функция для пользователей. Специалисты мобильных бригад часто находятся в «глухих» местах без Интернета, но благодаря офлайн-режиму могут работать в приложении без ограничений. В то же время реализация «толстого клиента» — достаточно сложное и дорогостоящее дело.
Приложение большое и объемное, я был назвал его таким супераппом в мире энергетики и цифрового сотрудника. Толстый клиент — толстая база данных: в БД порядка 200 таблиц, а в перспективе их станет на сотню больше. Соответственно, мы пишем много SQL-запросов, нередко пишем сложные SQL-запросы и особенно «не любим» миграции, т.к. поддерживаем версионирование схемы БД. Но толстой является не только БД, но и кодовая база — около полумиллиона строчек кода в ~150 Gradle-модулей.
Как ранее было сказано, в процессе разработки мы (Android команда), а также другие смежные команды (бэкенд, веб-фронт) выполняли унификацию и перенос общих бизнес-процессов в отдельные компоненты (модули, библиотеки, сервисы). Синергия всех компонентов — наша цифровая платформа СИГМА.Алькор. Благодаря слаженной и усердной работе мы получили продукт, с помощью которого можем, как из «кирпичиков», собирать целые решения для бизнеса электроэнергетики. На данный момент компонентная база решения все больше и больше обогащается новыми модулями, отвечая актуальным вызовам.
Как это работает
АСУ МБ — решение для сотрудников, работающих в полях: электриков, монтажников, обходчиков и не только. С помощью мобильного приложения в начале смены менеджеры просматривают задачи из ERP-системы, формируют, а затем распределяют их по бригадам и направляют на планшеты.
Особый предмет для гордости — первое в отечественной энергетике внедрение электронной цифровой подписи. За счет ЭЦП сотрудник может подписывать документы, даже если находится в офлайн-режиме на труднодоступном участке. Как это происходит на практике? Допустим, где-нибудь в Подмосковье сломался трансформатор. Электрики перед проведением работ должны пройти инструктаж по технике безопасности и подтвердить, что ознакомились с правилами. Делают они это в нашем приложении с помощью ЭЦП. Там же сотрудники могут фиксировать начало и окончание работ, оставлять примечания, списывать потраченные материалы.
Еще в приложении формируются листы осмотра оборудования. В каждом городе есть тысячи технических мест — трансформаторные будки, столбы ЛЭП, фонари и т. д. Все эти объекты периодически проверяют специалисты мобильных бригад. Обнаруженные дефекты фиксируются в приложении и направляются на веб-портал, где администратор уже решает, устранять их или нет, создавать ли задание на ремонт одной из бригад.
На самом деле бизнес-функций в приложении очень много. Описанный пример — это лишь малая часть реализованных бизнес-процессов. Сейчас мы активно ведем работу над новым модулем — «Автоматизированное рабочее место водителя».
От джунов к мидлам и сеньорам
Проект мощно прокачал нас в плане новых знаний и навыков: использования многомодульной архитектуры, создания повторно-используемых библиотек, работы с системами геолокации, электронным документооборотом и ЭЦП. Над приложением работала большая команда, многие разработчики пришли на проект младшими специалистами и выросли до уровня ведущих. Я сам пришел именно на этот проект как разработчик и впоследствии уже стал руководителем отдела. Проект тоже развивается (и не только этот), поэтому мы всегда рады пополнению в команде. Ищем талантливых и целеустремленных специалистов, готовых работать с новыми мобильными технологиями в рамках больших проектов. Присоединяйтесь — вакансии СИГМЫ можно посмотреть здесь, а на вопросы о решении и проекте я готов ответить в комментариях. Спасибо за внимание!
Автор: Александр Гурьянов