Разработка новых логических блоков для конструктора автоматизаций
Логика работы
Система разделена на следующие блоки:
-
Блок управления правилами для процессов, сюда входят
bgcrm.automation.process.listener,…model,…repository,…service. Эти пакеты отвечают за подписку/логику/хранение и выполнение настроенных правил. -
Модель для работы с "абстрактными" правилами в виде дескрипторов, которая будет использоваться на фронте. Сюда входят все классы
bgcrm.automation.descriptor….
Дескрипторы представляют собой абстракцию для описания правил, каждый дескриптор является некой логической сущностью, являющейся составным блоком для создаваемого правила.
Данные описываются вложенными в дескриптор property, при чем вложенность одного property в другое говорит о зависимости вложенных элементов от родительских
(например, для того что бы указать значение параметра нужно знать о том, что это за параметр, что говорит об их зависимости). Всего типов данных property 4: list - одно значение из списка значений; multilist - множество значений из списка значений; text - текстовое значение; boolean - логическое значение.
В данный момент реализация такова, что вложенные параметры зависят только от типа list. То есть изменение родительского property такого типа в интерфейсе сбрасывает значения всех вложенных в него property.
Следуя ранее описанному примеру с указанием значения параметра процесса, при изменении самого параметра будут удалены уже выбранные значения и обновленный список доступных значений будет запрошен заново.
-
Блок для маппинга настроенных правил для процессов в дескрипторы для фронта. Сюда входит весь пакет
bgcrm.automation.process.descriptor:-
подпакет
…factoryотвечает за создание дескрипторов, которые должны описывать соответствующие правила; -
подпакет
…mapperотвечает за наполнение этих дескрипторов требуемыми данными (в частности, тайтлами, которые в самих правилах не хранятся); -
…serviceотвечает за работу с этими дескрипторами, всего сервиса три:ProcessRuleDescriptorService- сервис получения самих правил;ProcessScopeDescriptorService- сервис получения составных блоков(или условий) - для этих правил;ProcessPropertyService- сервис получения данных для этих условий.
-
-
Сам редактор правил на Vue
Как добавить новую логику
Всё действие происходит в ru.bgcrm.automation.process
Добавляем класс с логикой в модель:
-
Создаем класс с желаемой логикой, наследуемся от интерфейса ProcessAction/ProcessCondition/ProcessEvent
-
Вносим новый класс в аннотацию базового интерфейса для возможности сериализации
Описываем этот блок в терминах дескрипторов. Не забываем про зависимость вложенных property:
-
Заводим id для этого дескриптора в
ProcessDescriptorConstants -
Описываем этот дескриптор в соответствующем
factoryЕсли для описания правила не хватает уже существующих property, нужно их добавить:
-
Также заводим id в
ProcessDescriptorConstants -
Реализуем логику получения property в
ProcessPropertyService
-
-
Создаем маппер правило←→дескриптор в пакете
mapper