Connected Operational Intelligence
Проект представляет собой облачную платформу, предоставляющую пользователю полноценный рабочий стол, с которого он может контролировать и управлять большой строительной площадкой.
СТЕК ТЕХНОЛОГИЙ
  • Kotlin, Spring Boot, Gradle, PostgreSQL,
    Redis, AWS DynamoDB
  • AWS, Terraform
  • JWT, JSON-RPC
  • React.js, Redux.js
  • Mapbox.js, D3.js
  • Storybook
  • TestNG, WebdriverIO
Задачи
  • Создание микросервисной архитектуры backend

  • Создание модульной архитектуры frontend

  • Визуализация архивных данных и данных в реальном времени с использованием Mapbox и D3.js

  • Хранение больших данных в NoSQL базах данных
  • Обработка данных в режиме реального времени с IoT устройств

  • Работа с визуальной временной шкалой, предоставляющей архивные данные

  • Создание инфраструктуры проекта с использованием сервисов AWS

  • Написание модульных и интеграционных тестов
О проекте
Визуализация строительных данных
Приложение создано для упрощения управления строительством: просмотра архивных данных, текущего состояния, прогнозов, а также планирования процесса строительства.

Примером использования является управление постройкой туннеля. С помощью приложения оператор может просматривать архивные данные, текущее состояние и прогнозы на основе известных данных. Ряд сервисов предоставляет различную информацию и может использоваться как в качестве автономных источников, так и в комбинациях.
Обычно все данные отображаются на карте, а подробная информация находится в перетаскиваемых окнах, которые открываются поверх карты.
Сервисы
и навигация
Проект является набором отдельных компонентов, которые обеспечивают функциональность. Каждый компонент обеспечивает
абстрактную функциональность, которую конфигурация предоставляет одному или нескольким экземплярам, специфичным для участка.

Мы имеем возможность создавать приложения с различным набором сервисов для удовлетворения потребностей и требований разных клиентов и не загружать браузер дополнительным кодом в сборке проекта.
Все доступные услуги отображаются в навигации, которая также настраивается в соответствии с личностью клиента.
Есть два возможных отображения:
  • Навигация в боковой панели: навигация с той же структурой, но отображается как обычная боковая панель.
  • Ручка управления: круговой навигационный инструмент с тремя уровнями. Этот инструмент можно перетаскивать, и его можно свернуть.
Модуль для бурения туннелей
Модуль бурения туннелей (TBM) отвечает за отображение процесса бурения.

На карте пользователь может видеть линию туннеля, планируемое и фактическое положение бурильных станков на выбранную дату, а также прогнозируемое положение, если выбран день будущего.
Отображаемые данные основаны на отчетах о сменах, где оператор может ввести все соответствующие данные:
  1. количество пробуренных метров,
  2. количество и информация об установленных кольцах,
  3. подробные данные о работах, которые были выполнены за выбранную смену.
Модуль фабрик
Есть фабрики, которые производят кольца для туннеля. И оператор также может просматривать их статус и ключевые показатели эффективности.
Модуль SCADA
Во время процесса строительства рабочим необходимо отслеживать показатели, чтобы планировать работу и предотвращать инциденты.

Модуль SCADA предоставляет информацию обо всех датчиках, установленных внутри и снаружи туннеля: их положение на карте, их данные в реальном времени и архивные данные. Кроме того, в режиме реального времени на экране появляются предупреждения, если некоторые датчики достигли пороговых значений.

Данные в режиме реального времени принимаются веб-сокетами и немедленно обновляются в пользовательском интерфейсе.
Модуль CCTV
В модуле видеонаблюдения (CCTV) оператор может просматривать видео с камер, установленных в туннеле и на прилегающей территории. Можно фильтровать камеры, прикреплять/отсоединять всплывающее окно камеры к ее местоположению на карте, просматривать полноэкранное видео и делать скриншоты.
Модуль производительности
В модуле производительности оператор может планировать работы и ресурсы (группы работников) для них
Все запланированные и завершенные работы отображаются в виде линий на карте и в виде графиков в окне
В рамках этого модуля оператор также может управлять грузовиками и их поездками внутри туннелей (на основе информации, полученной от маяков). Эти данные также отображаются на карте (текущее местоположение грузовика) и во всплывающем окне сводки.
Модуль логистики
Этот модуль используется для управления людьми и транспортными средствами внутри туннелей. Также существует несколько подмодулей, которые можно использовать по отдельности или вместе.

В туннелях и прилегающих районах установлены маяки для детекции людей и транспортных средств (все они имеют уникальные метки, поэтому обнаружение является персонализированным).
Тепловая карта
Этот модуль показывает тепловую карту обнаружения на основе данных, полученных от маяков.

В уменьшенном состоянии отображается обычная тепловая карта, но когда карта увеличена, зона покрытия маяка окрашивается.
Оповещения
Этот модуль получает и отображает оповещения в режиме реального времени. Существует возможность увеличить масштаб до места с чрезвычайной ситуацией, нажав на оповещение.
Типы оповещений:
  • количество людей в туннеле превысило пороговое
  • рабочий находится в опасной зоне
  • произошел какой-то инцидент
  • какой-то человек вышел из своей рабочей зоны
  • превышение скорости
Статический планировщик
Модуль для планирования статических ограничений в туннеле: некоторые работы, которые могут проводиться в туннеле, или большое транспортное средство, которое будет работать внутри туннеля.
Динамический планировщик
Модуль для проверки доступности
туннеля за определенный интервал времени.

На карте есть отображение, и пользователь может проверить с помощью "Планировщика движения транспортного средства", свободен ли туннель — выберите транспортное средство, начальную позицию и конечную позицию.
Инциденты
Модуль для управления инцидентами в туннелях — сотрудник может немедленно создать инцидент.
Аварии
Модуль для просмотра активных аварийных событий на карте. Есть возможность загрузить отчет о чрезвычайной ситуации.
Пользователи и разрешения
Доступ ко всем модулям и их функциональности управляется разрешениями. Существует три уровня: владелец, редактор, читатель. Если у пользователя нет каких-либо установленных разрешений, у него нет сервиса в навигации.

Существуют также группы пользователей, и для этой группы можно установить разрешения.
Frontend
Клиентская часть создана с помощью React. Она модульная и состоит из компонентов. Существует 3 основных типа компонентов:
  • Сервисы — общий набор компонентов, все сервисы полностью независимы
  • Комплексные компоненты — компоненты с логикой обработки данных
  • Простые компоненты — компоненты без логики обработки данных

Хотя он встроен в монолитный набор файлов HTML, CSS и JS, легко добавить новый модуль и создать конкретный пользовательский интерфейс, используя только определенные модули для конкретного развертывания.

Для отображения картографических даннных был выбран Mapbox. Фронтенд способен отображать как данные в реальном времени, так и архивные данные с хорошей производительностью. Для получения данных и уведомлений в режиме реального времени мы используем протокол WebSocket.
Облачная
платформа
Сервисы развернуты в AWS Elastic Container Service и Fargate. Когда система простаивает, большинство служб отключаются для экономии денег, и они просыпаются, когда приходит первый пользователь.
Базы данных
Мы используем:

  1. PostgreSQL для хранения бизнес-объектов. Мы используем базу данных JSONB, поэтому мы можем хранить любой набор полей для любого объекта. Доступ к сущностям обобщается с помощью библиотеки "Entity Manager". Этот подход очень многоразовый и независимый.
  2. In-memory базу данных Redis для обнаружения служб и для кэширования определенных данных. Данные обнаружения службы являются общими внутренними компонентами любого развертывания.
  3. AWS DynamoDB для хранения архивных данных.
Переисполь-зование
Сервисы представляют собой широко используемые разделяемые библиотеки (это отдельные проекты Gradle, но работающие в одной и той же кодовой базе).

Службы могут вызывать друг друга, поэтому некоторые конкретные данные или функциональные возможности могут быть доступны (микро)службе.
Переиспользование
Возможность расширения
Новые функциональные возможности добавляются за счет использования новых сервисов. Они включены в услугу «Обнаружение» и становятся доступными для вызовов. API дополнен новой конечной точкой (новый URL-адрес в том же домене API) с новыми методами.

Как правило, каждый новый компонент состоит из нескольких сервисов, каждый из которых содержит некоторые аспекты новой функциональности.
Ядро
Фронтенд взаимодействует со службами, используя JSON-RPC по протоколу HTTP или WebSocket (за редкими исключениями). Один и тот же протокол может использоваться для взаимодействия служб друг с другом.

Аутентификация выполняется с использованием JWT токенов, и любая служба может проверить токен с помощью известного открытого ключа RSA. Токен используется как для авторизации внешнего интерфейса к службам, так и для авторизации между службами. Службы используют общую базу данных Redis для регистрации и обнаружения друг друга.
Backend
QA
(Обеспечение качества)
Изначально у нас были исходные требования и техническая документация от заказчика. QA-специалист изучил все документы и описал критерии разработки.
Не все макеты были готовы, поэтому он совместно с разработчиками работал над прототипами и согласовывал их с заказчиками.

Серверная и клиентская части сервисов покрыты автотестами.
Для всех тестов мы использовали Java в качестве основного языка. Мы также использовали инструмент автоматизации сборки Maven. Для автоматизации API мы использовали Java-библиотеку REST-assured и тестовый фреймворк JUnit.

Чтобы упростить работу с JSON, мы перенесли примеры тела запроса в папку «ресурсы» и использовали их в качестве шаблонов — мы заменяем только необходимые параметры для определенных тестов. Были написаны как положительные, так и отрицательные тесты, для этого мы использовали параметризованные аннотации JUnit.

В тестах пользовательского интерфейса используется паттерн PageObject для описания элементной базы страниц и их взаимодействий. Классы, представляющие страницы, описывают методы комплексного взаимодействия с элементной базой. Для более сложного взаимодействия с элементами мы используем Selenium Actions и JavascriptExecutor.

Плагин Maven Surefire Report в сочетании с Allure Framework используется для создания отчетов.


Посмотрите на другие наши проекты