Применение BPMN и Activiti для автоматизации ГЛОНАСС/GPS мониторинга транспорта

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Всем привет!
Вы работаете с системами мониторинга транспорта, отрабатываете и согласуете заявки или являетесь частью команды разработки таких продуктов? Тогда этот материал будет вам интересен.
В статье на примере продукта Monitor3S мы расскажем, как оптимальным образом организовать работу с заявками на транспорт, если компании трудно подобрать коробочное решение мониторинга с использованием GPS и ГЛОНАСС. Кому интересно – добро пожаловать под кат.

А в чем проблема?
До технического описания мы обязательно дойдем, но сначала расскажем о трудностях заказчиков, которые и побудили нас искать оптимальные решения при помощи автоматизации.

Ситуация № 1 СЭД – программа мониторинга – 1С – путевой листок


У заказчика есть собственная система электронного документооборота (СЭД), где оформляются заявки на транспорт. Далее заявки проходят цепочку согласований, по результатам которых инициатору назначается транспортное средство и водитель. Затем водитель получает путевой лист, распечатанный из программы бухгалтерского учета (1С), самостоятельно разрабатывает маршрут движения через все точки погрузки/разгрузки и в конце смены сдаёт путевой лист с информацией по горюче-смазочным материалам (ГСМ), пробегу и прочим атрибутам стандартного путевого листа.
Схема кажется понятной, однако даже при использовании системы мониторинга транспорта с использованием ГЛОНАСС/GPS, если у вас возникает необходимость соотнести состояние выполнения заявки с планом на смену (например, есть сомнения по поводу потраченных ГСМ или пришел штраф), это можно сделать, только проверив данные из нескольких информационных систем: посмотреть заявку в СЭД, посмотреть трек перемещения в системе мониторинга транспорта, а затем в 1С проверить нормы расхода и сверить всё это с путевым листом.
Если отобразить схематически, то выглядит это примерно так:
image

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

Ситуация № 2 План – факт


Если в организации много транспорта и характер его использования различен (перевозка пассажиров, перевозка грузов, спецтехника, строительная техника), то планирование и бюджетирование ее работы на большие периоды – это трудоёмкая задача. Особенно сложно она решается при наличии обширной филиальной сети и большом количестве участников процесса, в том числе подрядчиков.
В таком случае, кроме оперативного формирования необходимого количества заявок на технику, нужно отслеживать класс транспорта, сверяться с плановыми показателями производственной программы, по каждой выполненной заявке осуществлять проверку фактически оказанных услуг, а по итогам отчетного периода сводить итоговые данные и формировать отчёты для руководства. На рисунке схематически отображён процесс взаимодействия всех участников процесса:
image

Прохождение заявки на оказание транспортной услуги по какому-то одному статическому workflow с участием основных элементов рабочего процесса можно проиллюстрировать так, как представлено на схеме ниже:
image

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

Попытка №1


При первом подходе к решению описанных выше проблем мы расширили API в Monitor3S. Можно было бы доработать решение в 1С и «затащить» туда все, что ожидали пользователи, дополнить показателями из системы мониторинга транспорта, но мы пошли по пути интеграции между программами, усилив функциональность программного комплекса.
Сделав специальный интеграционный модуль внутри Monitor3S, который самостоятельно инициировал запросы к СЭД, актуализировал статус заданий внутри системы мониторинга транспорта и точки маршрута, формировал итоговый «путевой лист» с фактическими показателями (топливо, пробег, моточасы и пр.), в итоге мы получили схему работы, представленную на рисунке ниже.
image

Эта схема оказалась рабочей, однако при эксплуатации выявила ряд недостатков:
  • если обновляется версия ПО одной из систем, то иногда меняются и механизмы интеграции;
  • состав данных в разных системах меняется. Иногда это выясняется, когда уже что-то сломалось;
  • к любым изменениям автоматизированного рабочего процесса надо привлекать кроме аналитика ещё и разработчиков, штатно выпускать коробочную версию продукта с обновлениями, а это дополнительные существенные трудозатраты.


Попытка №2. BPMN + Activiti


Нам хотелось добиться большей гибкости получившегося решения и чем больше мы детализировали процессы, тем больше понимали, насколько сложной будет поддержка этих схем и возможных изменений функциональности. Даже версионность самого процесса может стать проблемой, так как часть заявок может уже быть инициирована и сопровождается по одному workflow, а новые заявки должны начинать движение по другому workflow из-за вступивших в действие обновленных правил со строго определённой даты.
Стало очевидно, что необходимо минимизировать искажения реальных рабочих процессов и предоставить аналитикам гибкий механизм для моделирования бизнес-процессов, автоматического формирования их описаний в стандартизованном формате с возможностью легкого корректирования и дальнейшей автоматизации.
Для решения всех этих задач мы начали использовать в работе BPMN, так как эта система позволяет хранить условные обозначения и их описание в XML-формате для отображения бизнес-процессов в виде диаграмм. Она ориентирована как на технических специалистов, так и на бизнес-пользователей. Для этого язык использует базовый набор интуитивно понятных элементов, которые позволяют определять сложные семантические конструкции. Кроме того, спецификация BPMN позволяет трансформировать диаграммы, описывающие бизнес-процесс, в исполняемые модули. Спецификация BPMN является исполняемой и переносимой (то есть процесс, нарисованный в одном редакторе от одного производителя, может быть исполнен на движке бизнес-процессов другого производителя при условии, если они оба поддерживают BPMN).
Немаловажным требованием являлось то, что формат описания должен быть открытым стандартом, бесплатным и не принадлежащим к области проприетарных разработок, ограничивающих выбор реализаций «движков».
После ряда исследований мы решили, что продукт Activiti, являясь одной из реализаций «движка» для выполнения BPMN-схем, вполне подходит для автоматизации самих процессов при условии декомпозиции операций до нужного уровня.
После макетирования и оценки важных для архитектуры деталей мы поняли, что это действительно хороший вариант по целому ряду причин:
  • в Activiti, помимо самого движка, также реализует REST-API для взаимодействия с внешними системами. Это позволяет взаимодействовать с Activiti системам, развернутым на различных платформах (Windows, Linux и т.д.);
  • в Activiti реализован веб-интерфейс, позволяющий управлять загрузкой BPMN-схем, запуском процессов на основе загруженных схем, и осуществлять множество других операций по управлению и контролю за процессами;
  • Реализована поддержка работы в кластере. Мы были рады увидеть такую возможность, т.к. для корпоративных заказчиков отказоустойчивость очень важна.

Общая схема компонентов Activiti и взаимодействия между ними представлена на рисунке ниже:

image
Activiti не виден конечным пользователям, но выполняет значительную роль в бэкенде и логике приложения.
image
Аналитики «прорисовывают» процессы в любом удобном инструменте с поддержкой выгрузки workflow в стандарте BPMN. Для создания BPMN-описания можно использовать разные редакторы, но мы выбрали интуитивно понятный BPMN-редактор, реализованный на базе Eclipse c помощью плагина eclipse bpmn2 modeler, который поддерживает в полном объеме стандарт BPMN 2.0 и позволяет сформировать файл с BPMN-описанием (схемой) для дальнейшей загрузки в Activiti.
image
После загрузки BPMN-схемы в Activiti приложение создает на ее основе описание процесса (process definition). Затем, используя запрос REST-API от внешней системы или Java-API (для приложений, написанных на Java) или интерфейс веб-приложения (Activiti Explorer), Activiti создаёт на базе описания процесса инстанс (поток), который начинает выполняться как по волшебству, передвигаясь шаг за шагом по элементам схемы, следуя по направлениям, указанным стрелками, тем самым реализуя логику схемы:
image
Таким образом, BPMN-схема, представляющая собой xml-файл, начинает выполняться, как будто это программа, написанная на одном из языков программирования.
Уже импортированные workflow (часть) выглядят следующим образом:
image

image
При реализации разработчики в основном использовали минимум кода для проверки граничных условий выполнения того или иного элемента схемы, а также расширяли возможности в самом Activiti, реализуя “custom extension” или добавляя кастомную логику в BPMN-процесс, например, реализуя т.н. “service task” или “event listener” и расширяя api-приложения Monitor3S.
Внутри Activiti “custom extension” и “custom logic” реализуется на Java или Groovy, но разность стеков между Monitor3S и Activiti здесь не имеет значения, так как системы взаимодействуют через REST-API по https.
В итоге в разрезе состава оборудования типовой комплекс Monitor3S можно представить так:
image

Что касается отказоустойчивости, то, конечно, и она, и высокая доступность служебной БД самого Activiti реализуется отдельными средствами БД (у нас для этого есть специальные утилиты в СУБД Jatoba), но в итоге несколько инстансов Activiti могут корректно работать с единой базой данных.
Таким образом, внедрение в бэкенде Activiti позволило гибко и быстро подстраивать под разные потребности рабочие процессы, связанные с движением заявок на автотранспорт в Monitor3S, оптимизировав целый ряд функций:
  • Оперативное управление транспортом.
  • Автоматическое формирование справки для сверки фактических показателей уровня топлива в баках и пробега, чтобы оперативно проверить заполнение водителем путевого листа.
  • Оперативное информирование о занятости транспорта.
  • Улучшение системы отчетности, так как сводные отчеты по план/факту пробегов и ГСМ формируются с учетом классов транспорта, водителей и филиалов.

В настоящее время у Activiti уже есть вполне зрелые форки, и нам было бы интересно узнать о вашем опыте их использования. Напишите в комментариях об опыте работы BPMN и движков автоматизации бизнес-процессов.
Материал подготовил коллектив авторов: Горячев Алексей, Карпенко Андрей, Рожков Денис.
Источник: https://habr.com/ru/company/gaz-is/blog/554882/


Интересные статьи

Интересные статьи

Можно ли разрабатывать коммерческие продукты на отечественных DSP? Приведите готовую структурную схему! А какие там вообще могут быть сложности в радарах? Ч...
В ноябре 2019 года люди услышали о первых случаях неизвестной смертельно опасной болезни в Китае. Теперь все знают о том, что эта болезнь называется COVID-19. Видимо, эпидемия навсегд...
Исследование о подготовке систем гражданской ответственности Беспилотные автомобили должны сделать транспорт более безопасным и доступным. Хакеры, однако, могут помешать этому – они могут ...
Уже завтра стартует V SOC-Форум — крупнейшее мероприятие по практикам выявления и анализа инцидентов в России. Уверен, что многие читатели этого хаба окажутся там и услышат немало профессиональны...
Приветствую вас (лично вас, а не всех кто это читает)! Сегодня мы: Создадим приложение (навык) Алисы с использованием нового (октябрь 2019) сервиса Yandex Cloud Functions. Настроим н...