Роботизация через Puppeteer c интерфейсом управления на UI QT

Контроллер робота для автоматизации назначения прав в АСУТД

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

Назначение ролей в АСУТД-2 связано с большим количеством однотипных операций. Для каждого пользователя нужно выбрать роль, вид документа, подразделение или УРМ, а иногда ещё учесть особую логику выбора подразделения. При ручной работе это занимает много времени и легко приводит к ошибкам: можно выбрать не тот вид документа, не то подразделение, забыть назначение или продублировать доступ.

Что реализовано ? 

Создан UI интерфейс управления на QT ,так как основная работа идет на linux astra, о С++.

Ниже на скриншоте изображен интерфейс :
==================ИЗОБРАЖЕНИЯ ВРЕМЕННО ОТСУТСТВУЮТ :(==================

Основная архитектура

Проект построен по простой и прозрачной схеме:
Qt-интерфейс отвечает за ввод и редактирование данных.
JSON-файлы выступают как промежуточная модель. В них сохраняются сотрудники, группы, авторизация, используемые роли, виды документов и индивидуальные назначения пользователей.
Puppeteer-скрипт читает подготовленные JSON-файлы и выполняет действия в веб-интерфейсе АСУТД-2.
Такой подход удобен тем, что интерфейс и робот разделены. Qt-приложение не зависит напрямую от логики веб-автоматизации, а Puppeteer не требует ручного ввода данных — он просто получает готовый план работы.

JSON-модель

В проекте используются несколько JSON-файлов.
users.json хранит список пользователей.
groups.json связывает пользователей с подразделениями.
auth.json хранит параметры авторизации.
form_roleType.json и form_documentTypes.json используются как справочники для формы. Из них загружаются все доступные роли и виды документов.
roleType.json и documentTypes.json содержат только те роли и виды документов, которые реально были выбраны оператором для текущей задачи.
Главный рабочий файл — userAccess.json. В нём описывается, какие роли, виды документов и подразделения нужно назначить каждому пользователю.
Пример логики userAccess.json:
{
  "users": {
    "Иванов Иван Иванович": {
      "assignments": [
        {
          "role": "Ответственный за работу с документами",
          "documentTypes": [
            "Мероприятие",
            "Уведомление о выполнении Решения"
          ],
          "subdivision": "ЦА",
          "scope": {
            "useAlgorithm": true,
            "includeSelected": false,
            "extraSubdivisions": []
          }
        }
      ]
    }
  }
}

Что делает Puppeteer-робот

После нажатия кнопки запуска Qt-приложение сохраняет актуальные JSON-файлы и запускает Node.js/Puppeteer-скрипт.
Робот открывает веб-интерфейс АСУТД-2, авторизуется, переходит в справочник сотрудников, находит нужного пользователя, открывает его карточку и начинает назначать роли.
Для каждого пользователя робот берёт индивидуальный план из userAccess.json. Если для пользователя назначено несколько ролей или видов документов, они обрабатываются последовательно.
Робот умеет:
  • выбирать роль;
  • выбирать подразделение вручную;
  • выбирать подразделение через алгоритм;
  • выбирать вид документа;
  • нажимать добавление назначения;
  • сохранять карточку пользователя;
  • пропускать некорректные или неполные назначения;
  • вести лог по пользователям, для которых не удалось найти подразделение.

Почему это удобно

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

Что уже получилось

На текущем этапе реализован рабочий контур:
  • Qt-интерфейс для подготовки данных;
  • загрузка ролей и видов документов из справочников;
  • сохранение сотрудников, групп и назначений;
  • восстановление данных при повторном запуске;
  • индивидуальные права по пользователям;
  • поддержка нескольких назначений на одного пользователя;
  • флаг алгоритмического выбора подразделения;
  • дополнительные подразделения;
  • защита от дублей;
  • запуск Puppeteer-робота из контроллера.
Фактически проект вырос из простого скрипта в полноценный инструмент управления автоматизацией.
Если кто то дочитает это полотно до конца - отдаю достижение "внимательный и усердный читатель" :) 

Если у вас появится желание заказать подобное решение для вашей системы пишите на: 

Комментарии

Кузница
Портал проектов группы разработчиков "anvilstation.com"