Открыть меню
Связаться с нами
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.
Ядро
Фронтенд взаимодействует со службами, используя JSON-RPC по протоколу HTTP или WebSocket (за редкими исключениями). Один и тот же протокол может использоваться для взаимодействия служб друг с другом.

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

Как правило, каждый новый компонент состоит из нескольких сервисов, каждый из которых содержит некоторые аспекты новой функциональности.
Переисполь-зование
Сервисы представляют собой широко используемые разделяемые библиотеки (это отдельные проекты Gradle, но работающие в одной и той же кодовой базе).

Службы могут вызывать друг друга, поэтому некоторые конкретные данные или функциональные возможности могут быть доступны (микро)службе.
Базы данных
Мы используем:

  1. PostgreSQL для хранения бизнес-объектов. Мы используем базу данных JSONB, поэтому мы можем хранить любой набор полей для любого объекта. Доступ к сущностям обобщается с помощью библиотеки "Entity Manager". Этот подход очень многоразовый и независимый.
  2. In-memory базу данных Redis для обнаружения служб и для кэширования определенных данных. Данные обнаружения службы являются общими внутренними компонентами любого развертывания.
  3. AWS DynamoDB для хранения архивных данных.
Облачная
платформа
Сервисы развернуты в AWS Elastic Container Service и Fargate. Когда система простаивает, большинство служб отключаются для экономии денег, и они просыпаются, когда приходит первый пользователь.
Backend
QA
(Обеспечение качества)
Изначально у нас были исходные требования и техническая документация от заказчика. QA-специалист изучил все документы и описал критерии разработки.
Не все макеты были готовы, поэтому он совместно с разработчиками работал над прототипами и согласовывал их с заказчиками.

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

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

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

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


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