Разработка новых логических блоков для конструктора автоматизаций

Логика работы

Система разделена на следующие блоки:

  1. Блок управления правилами для процессов, сюда входят bgcrm.automation.process.listener, …​model, …​repository, …​service. Эти пакеты отвечают за подписку/логику/хранение и выполнение настроенных правил.

  2. Модель для работы с "абстрактными" правилами в виде дескрипторов, которая будет использоваться на фронте. Сюда входят все классы bgcrm.automation.descriptor…​.

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

Данные описываются вложенными в дескриптор property, при чем вложенность одного property в другое говорит о зависимости вложенных элементов от родительских (например, для того что бы указать значение параметра нужно знать о том, что это за параметр, что говорит об их зависимости). Всего типов данных property 4: list - одно значение из списка значений; multilist - множество значений из списка значений; text - текстовое значение; boolean - логическое значение.

В данный момент реализация такова, что вложенные параметры зависят только от типа list. То есть изменение родительского property такого типа в интерфейсе сбрасывает значения всех вложенных в него property. Следуя ранее описанному примеру с указанием значения параметра процесса, при изменении самого параметра будут удалены уже выбранные значения и обновленный список доступных значений будет запрошен заново.

  1. Блок для маппинга настроенных правил для процессов в дескрипторы для фронта. Сюда входит весь пакет bgcrm.automation.process.descriptor:

    • подпакет …​factory отвечает за создание дескрипторов, которые должны описывать соответствующие правила;

    • подпакет …​mapper отвечает за наполнение этих дескрипторов требуемыми данными (в частности, тайтлами, которые в самих правилах не хранятся);

    • …​service отвечает за работу с этими дескрипторами, всего сервиса три: ProcessRuleDescriptorService - сервис получения самих правил; ProcessScopeDescriptorService - сервис получения составных блоков(или условий) - для этих правил; ProcessPropertyService - сервис получения данных для этих условий.

  2. Сам редактор правил на Vue

Как добавить новую логику

Всё действие происходит в ru.bgcrm.automation.process

Добавляем класс с логикой в модель:

  1. Создаем класс с желаемой логикой, наследуемся от интерфейса ProcessAction/ProcessCondition/ProcessEvent

  2. Вносим новый класс в аннотацию базового интерфейса для возможности сериализации

Описываем этот блок в терминах дескрипторов. Не забываем про зависимость вложенных property:

  1. Заводим id для этого дескриптора в ProcessDescriptorConstants

  2. Описываем этот дескриптор в соответствующем factory

    Если для описания правила не хватает уже существующих property, нужно их добавить:

    1. Также заводим id в ProcessDescriptorConstants

    2. Реализуем логику получения property в ProcessPropertyService

  3. Создаем маппер правило←→дескриптор в пакете mapper