Classification: сервис классификации объектов сущностей
Сервис позволяет классифицировать объекты различных сущностей по полям этих объектов.
Команды могут приходить как по HTTP, так и через Kafka в топик classification_commands.
В сервисе реализованы следующие команды:
- Получение иерархии классов
- Получение ветви иерархии классов до определенного узла
- Статистика количества классов у сущности
- Получение класса
- Классификация типа
- Список полей объекта для классифицированного типа
- Создание нового класса
- Редактирование класса
- Удаление класса
- Обновления атрибутов EntityObject с учетом классификации
- Классы категоризированные по правилу генерации атрибутов
- Обновление правил генерации в классах
Optimistic Lock
У нескольких команд реализован механизм оптимистичных блокировок. Для этого в данных присутствует поле version.
Задача оптимистичных блокировок - предотвратить одновременное редактирование объекта из двух открытых форм.
Сначала фронтэнд запрашивает данные объекта и получает в ответе версию данных - поле version.
Он прикладывает эту версию в ответе. Если на бэкэнде она совпадает с исходной (не было других модификаций),
тогда данные сохраняются, а версия поднимается. Иначе сохранения не происходит, данные не перетираются.
Сервис разбит на несколько модулей, в виде sbt проектов:
domain, в котором содержатся все доменные модели и их различные представления.commands, в котором содержатся все? что связано с командами, их описанием и обработчиками.infrastructure, в котором содержится описание взаимодействия с другими сервисами.storage, содержит сервисы для сохранения и чтения их разных хранилищ доменных моделей.service, содержит сервисы бизнес логики, которые определяют правила взаимодействия компонентов между собой.utils, в котором содержатся разные хелперы.boot, содержит зависимости и описание для сборки и запуска сервиса.
Информация по добавлению команд можно прочитать в описании шаблона
Конфигурирование Classification
Требования к запуску Classification
Запуск сервиса осуществляется локально через sbt, на стенде в docker на jvm.
Для корректной минимальной работы сервиса требуется обязательное подключение к PostgreSQL, Kafka, Consul. Для настройки подключения к ним нужно заполнить обязательные переменные окружения из раздела ниже.
Для нормальной работы сервису дополнительно требуется окружение Verdi: CommandStatus, ApiGateway. В этом случае нужно уделить внимание настройкам, связанным с ServiceDiscovery и CommandDiscovery.
Запуск Classification из консоли с помощью SBT
CLASSIFICATION_DB_HOST=localhost CLASSIFICATION_DB_PORT=5432 CLASSIFICATION_DB_NAME=classification_db CLASSIFICATION_DB_USER=postgres CLASSIFICATION_DB_PASSWORD=12345 sbt boot/run
Список переменных окружения Classification
Все доступные переменные окружения для настройки сервиса.
| Переменная | Тип | Обязательная | Значение по умолчанию | Описание |
|---|---|---|---|---|
| CLASSIFICATION_HTTP_HOST | string | нет | "0.0.0.0" | Хост, на котором слушает HTTP-сервер |
| CLASSIFICATION_HTTP_PORT | int | нет | 8192 | Порт, на котором слушает HTTP-сервер |
| CLASSIFICATION_KAFKA_SERVERS | string | да | "localhost:9092" | Адрес Kafka |
| CLASSIFICATION_KAFKA_TOPIC | string | нет | "classification_commands" | Название кафка-топика для получения команд. Сервис получает кафка-команды по нему, но и также сам публикует это название в CommandDiscovery. |
| CLASSIFICATION_KAFKA_CONSUMER_GROUP | string | нет | "classification_consumer_group" | Имя consumer-группы для чтения из кафка-топика команд. Не должна меняться и не должна быть пустой, иначе сервис перечитает свои команды при перезапуске. |
| CLASSIFICATION_KAFKA_PARTITIONS | int | нет | 10 | Число читаемых партиций из кафка-топика команд. |
| CLASSIFICATION_KAFKA_CONSUMER_RESTART_MIN_BACKOFF | duration string | нет | 1 second | Изначальная задержка до рестарта консьюмера после падения (увеличивается в 2 раза после каждого рестарта) |
| CLASSIFICATION_KAFKA_CONSUMER_RESTART_MAX_BACKOFF | duration string | нет | 30 seconds | Максимальное задержка до рестарта консьюмера после падения |
| CLASSIFICATION_KAFKA_CONSUMER_RESTART_RANDOM_FACTOR | double | нет | 0.2 | Рандомный фактор для вычисления задержки перед следующим рестратом консьюмера (При значении 0.2 задержка может быть до 20% больше, чем при 0) |
| CLASSIFICATION_KAFKA_CONSUMER_RESTART_MAX_RESTARTS | int | нет | 5 | Максимальное число рестартов консьюмера после падения (в пределах CLASSIFICATION_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN) |
| CLASSIFICATION_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN | duration string | нет | 5 minutes | Временной отрезок, в который CLASSIFICATION_KAFKA_CONSUMER_RESTART_MAX_RESTARTS ограничивает число рестартов |
| CLASSIFICATION_KAFKA_COMMANDEVENT_TOPIC | string | да | "commandevents" | Название кафка-топика для отправки сообщений со статусами выполняемых команд. ОБЯЗАТЕЛЬНО должно соответствовать названию этого топика в сервисе статуса команд. |
| CLASSIFICATION_KAFKA_AUTH_USER | string | нет | "" | Название учетной записи Kafka. Если название не указано, то настройки авторизации не будут применены. |
| CLASSIFICATION_KAFKA_AUTH_PASSWORD | string | нет | "" | Пароль учетной записи Kafka. |
| CLASSIFICATION_KAFKA_AUTH_PRINCIPAL | string | нет | "" | Principal учетной записи Kafka в Kerberos(в случае соединения с kafka через Kerberos). |
| CLASSIFICATION_KAFKA_AUTH_KEYTAB_PATH | string | нет | "" | Путь до keytab-файла(в случае соединения с kafka через Kerberos). |
| CLASSIFICATION_KAFKA_AUTH_TRUSTSTORE_LOCATION | string | нет | "" | Путь до хранилища сертификатов (Java key store). Если путь не указан, то сертификат применяться не будет. |
| CLASSIFICATION_KAFKA_AUTH_TRUSTSTORE_PASSWORD | string | нет | "" | Пароль к хранилищу сертификатов. |
| CLASSIFICATION_KAFKA_AUTH_MODE | string | нет | "static" | Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса |
| CLASSIFICATION_KAFKA_AUTH_CONFIG | string | нет | "" | Настройки для аутентификации: если AuthMode = mapping, то необходим JSON с List[KafkaAuthConfig]. Переменная соответствует полю authConfig из KafkaAuthSettings. |
| CLASSIFICATION_KAFKA_AUTH_CACHE_SIZE | int | нет | Максимальный размер кеша для Kafka producer (количество активных соединений). | |
| CLASSIFICATION_KAFKA_AUTH_CACHE_TTL | duration string | нет | Время жизни Kafka producer в кеше. | |
| CLASSIFICATION_CONSUL_ADDR | url string | нет | "http://localhost:8500" | Адрес Сonsul. |
| CLASSIFICATION_CONSUL_AUTH_USER | string | нет | "" | Название учетной записи Сonsul. Если название не указано, то настройки авторизации не будут применены. |
| CLASSIFICATION_CONSUL_AUTH_PASSWORD | string | нет | "" | Пароль учетной записи Сonsul. |
| CLASSIFICATION_TRACE_DURATION | boolean | нет | false | Признак необходимости трассировки выполнения команд |
| CLASSIFICATION_DISCOVERABLE_ID | string | нет | "another_CLASSIFICATION_service_instance" | ID сервиса в ServiceDiscovery |
| CLASSIFICATION_DISCOVERABLE_NAME | string | нет | "classification" | Имя сервиса в ServiceDiscovery |
| CLASSIFICATION_DISCOVERABLE_HOST | string | да | "localhost" | Хост, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. Указанный адрес должен быть виден другим сервисам. Пример: имя kubernetes/docker_swarm service |
| CLASSIFICATION_DISCOVERABLE_PORT | int | нет | Порт, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. По умолчанию указывается порт, который слушает HTTP-сервер. | |
| CLASSIFICATION_DISCOVERABLE_LIVETIME | duration string | нет | 2 minutes | Период после последней отправки health check, в течение которого ServiceDiscovery считает данный сервис живым. |
| CLASSIFICATION_DISCOVERABLE_HEALTHPASS | string | нет | 1 minute | Периодичность отправки health check в ServiceDiscovery |
| CLASSIFICATION_SERVICE_TITLE | string | нет | "Classification" | Название сервиса для отображения |
| CLASSIFICATION_SERVICE_DESCRIPTION | string | нет | "Сервис аналитики" | Описание сервиса для отображения |
| CLASSIFICATION_AKKA_HTTP_CLIENT_MAXCON | int | нет | 512 | Максимальное число одновременных исходящих HTTP-соединений |
| CLASSIFICATION_AKKA_HTTP_CLIENT_MAXREQ | int | нет | 1024 | Максимальное число одновременных исходящих HTTP-запросов |
| CLASSIFICATION_AKKA_HTTP_SERVER_MAXCON | int | нет | 1024 | Максимальное число одновременных входящих HTTP-соединений |
| CLASSIFICATION_INTERNALCMD_ALLOW | bool | нет | false | Можно ли сервису отправлять внутрисистемные команды |
| CLASSIFICATION_SENDERLIB_COMMANDS_CACHE_UPDATEPERIOD | duration string | нет | 10 minutes | Время кэширования данных по командам из CommandDiscovery |
| CLASSIFICATION_SENDERLIB_SERVICES_CACHE_UPDATEPERIOD | duration string | нет | 30 seconds | Время кэширования данных по сервисам из ServiceDiscovery |
| CLASSIFICATION_DB_HOST | string | да | Хост БД | |
| CLASSIFICATION_DB_PORT | int | да | Порт БД | |
| CLASSIFICATION_DB_NAME | string | да | Имя базы в БД | |
| CLASSIFICATION_DB_URL | jdbc url string | нет | JDBC-url для соединения с БД. По умолчанию собирается из других обязательных переменных. Можно указать только его, если не хочется отдельно указывать хост/порт/имя базы. | |
| CLASSIFICATION_DB_USER | string | да | Пользователь БД | |
| CLASSIFICATION_DB_PASSWORD | string | да | Пароль пользователя БД | |
| CLASSIFICATION_DB_THREADS | int | нет | 10 | Количество потоков в пуле потоков для соединения с БД |
| CLASSIFICATION_DB_QUEUE_SIZE | int | нет | 300 | Размер очереди для действий базы данных, которые не могут быть выполнены немедленно, когда все потоки заняты. За пределами этого значения новые действия немедленно завершаются неудачей |
| CLASSIFICATION_DB_CONN_MAX | int | нет | 10 | Максимальное количество одновременных подключений к БД |
| CLASSIFICATION_DB_CONN_TIMEOUT | duration string | нет | 20 second | Максимальное время ожидания ответа для соединения к БД. Если это время превышено, а соединение не становится доступным, будет брошено исключение SQLException. 1000 мс — минимальное значение. |
| CLASSIFICATION_DB_ISOLATION | string | нет | "READ_COMMITTED" | Уровень изоляции транзакций для новых подключений. Допустимые значения: NONE, READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, SERIALIZABLE. |
| CLASSIFICATION_DB_READONLY | boolean | нет | false | Read-only SQL транзакция может изменять только временные таблицы. Этот параметр управляет статусом «только для чтения» по умолчанию для каждой новой транзакции. |
| CLASSIFICATION_DB_CONN_MIN | int | нет | = DB_THREADS | Минимальное количество одновременных подключений к БД |
| CLASSIFICATION_DB_VALIDATION_TIMEOUT | duration string | нет | 1 seconds | Максимальное время, в течение которого соединение будет проверяться на работоспособность. 1000 мс — минимальное значение. |
| CLASSIFICATION_DB_IDLE_TIMEOUT | duration string | нет | 10 minutes | Максимальное время, в течение которого соединению разрешено простаивать в пуле. Значение 0 означает, что простаивающие соединения никогда не удаляются из пула. |
| CLASSIFICATION_DB_MAX_LIFETIME | duration string | нет | 30 minutes | Максимальное время жизни соединения в пуле. Когда простаивающее соединение достигает этого времени ожидания, даже если оно недавно использовалось, оно будет удалено из пула. Значение 0 указывает на отсутствие максимального срока службы. |
| CLASSIFICATION_DB_INITIALIZATION_FAIL_FAST | string | нет | false | Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Если соединения не могут быть созданы во время запуска пула, будет выдано исключение RuntimeException. Это свойство не имеет никакого эффекта, если minConnections равно 0. |
| CLASSIFICATION_DB_LEAK_DETECTION_THRESHOLD | int | нет | 0 | Время, в течение которого соединение может находиться вне пула, прежде чем будет зарегистрировано сообщение, указывающее на возможную утечку соединения. Значение 0 означает, что обнаружение утечек отключено. Наименьшее приемлемое значение для включения обнаружения утечек составляет 10 с. |
| CLASSIFICATION_DB_CONNECTION_TEST_QUERY | string | нет | "SELECT 1" | Выражение, которое будет выполнено непосредственно перед получением соединения из пула для проверки того, что соединение с базой данных все еще активно. Оно зависит от базы данных и должно представлять собой запрос, требующий минимальной обработки базой данных (например, «VALUES 1»). Если этот параметр не установлен, вместо него используется метод JDBC4 Connection.isValid(). |
| CLASSIFICATION_DB_REGISTER_MBEANS | boolean | нет | false | Зарегистрированы ли JMX Management Beans («MBeans») |
| CLASSIFICATION_FS_URI | string | да | http://localhost:9000/ | Адрес файлового хранилища |
| CLASSIFICATION_FS_ACCESS_KEY_ID | string | да | minioadmin | Имя пользователя файлового хранилища |
| CLASSIFICATION_FS_SECRET_ACCESS_KEY | string | да | minioadmin | Пароль пользователя файлового хранилища |
| CLASSIFICATION_FS_UPLOAD_PARALLELISM | int | нет | 4 | Параллелизм для загрузки файлов |
| CLASSIFICATION_FS_AUTH_MODE | string | нет | static | Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса |
| CLASSIFICATION_FS_AUTH_CONFIG | string | нет | "" | Настройки для аутентификации: если AuthMode = mapping, то необходим JSON с List[FSBucketConfig] соответствует полю authConfig FSConfigRep |
| CLASSIFICATION_FS_CACHE_SIZE | int | нет | 1 | Максимальный размер кеша клиентов для хранилища файлов (количество активных соединений). |
| CLASSIFICATION_FS_CACHE_TTL | duration string | нет | Время жизни клиента в кеше | |
| CLASSIFICATION_AUTHZFORCE_ADDR | string | нет | "http://localhost:8080/authzforce-ce" | Адрес AuthZforce server |
| CLASSIFICATION_AUTHZFORCE_DOMAIN | string | нет | "" | Доступный DomainID в AuthZforce server |
| CLASSIFICATION_AUTHZFORCE_CONNECT_TIMEOUT | string | нет | 10 seconds | Таймаут на подключение к AuthZforce server |
| CLASSIFICATION_EXTERNAL_MIGRATIONS_RETRY_DELAY | duration string | нет | 15 seconds | Задержка между повторными попытками запуска внешних миграций |
| CLASSIFICATION_EXTERNAL_MIGRATIONS_RETRY_ATTEMPTS | int | нет | 5 | Максимальное количество попыток запуска внешних миграций |
| CLASSIFICATION_DM_SCHEMA_CACHE_SIZE | int | нет | 128 | Максимальный размер кэша для json schema |
| CLASSIFICATION_DM_SCHEMA_CACHE_TTL | duration string | нет | 5 minute | Время жизни элементов в кэше для json schema |
| CLASSIFICATION_LAMP_FILE_CACHE_SIZE | int | нет | 64 | Максимальный размер кэша для файлов из lamp |
| CLASSIFICATION_LAMP_FILE_CACHE_TTL | duration string | нет | 30 minute | Время жизни элементов в кэше для файлов из lamp |
| CLASSIFICATION_FTS_MAPPING_CACHE_SIZE | int | нет | 64 | Максимальный размер кэша для маппингов в полнотекстовом поиске |
| CLASSIFICATION_FTS_MAPPING_CACHE_TTL | duration string | нет | 5 minute | Время жизни элементов в кэше для маппингов в полнотекстовом поиске |
| CLASSIFICATION_DM_OBJECT_PAGE_SIZE | int | нет | 100 | Размер страницы при выборке объектов из data-model |
| CLASSIFICATION_AUTHORIZER_KIND | string | нет | "authzforce" | Вид авторизатора, который используется в сервисе. Допустимые значения: "authzforce", "oberto". При указании неизвестного значения будет использовано значение по-умолчанию. |
| CLASSIFICATION_SENDERLIB_COMMANDS_HTTP_RETRY_ATTEMPTS | int | нет | 5 | Поле attempts из RetrySettings |
| CLASSIFICATION_SENDERLIB_COMMANDS_HTTP_RETRY_DELAY | duration string | нет | "5 seconds" | Поле delay из RetrySettings |
| CLASSIFICATION_SENDERLIB_COMMANDS_HTTP_RETRY_KIND | string | нет | "OnSomeExceptions(ConnectException)" | CommandResultRetryConditionKind |
Список команд сервиса Classification
Список реализованных в сервисе команд, моделей EntityType и действий Actions, которые можно использовать при настройке авторизации.
| Название команды | EntityType | Actions |
|---|---|---|
| classification_ListEntityClassHierarchy | EntityClass | ListEntityClassHierarchy |
| classification_ListEntityClassParents | EntityClass | GetEntityClass |
| classification_EntityTypeClassCount | EntityClass | GetEntityClass |
| classification_GetEntityClass | EntityClass | GetEntityClass |
| classification_ClassifyObject | EntityClass | ClassifyObject |
| classification_CalculateManagedFields | EntityClass | CalculateManagedFields |
| classification_CreateEntityClass | EntityClass | CreateEntityClass |
| classification_UpdateEntityClass | EntityClass | UpdateEntityClass |
| classification_DeleteEntityClass | EntityClass | DeleteEntityClass |
| classification_updateObjectWithReclassification | Произвольный EntityType из ObjectStorage | DataModel_UpdateObject |
| classification_EntityClassesByValueGenerationRules | EntityClass | ClassifyObject |
| classification_UpdateValueGenerationRuleEntityClasses | EntityClass | UpdateEntityClass |
В описании команд используется путь/route для отправки команды в сам сервис, а не в ApiGateway. В качестве Input-а для команд, сервис всегда ожидает CommandRequest (как и любой другой сервис, принимающий команды), так что в описании команды указано лишь описание поля payload для CommandRequest.
ListEntityClassHierarchy (classification)
Payload для команды
"Tag"
Результат выполнения команды
[
{
"entityClass": {
"id": "0becc650-2909-4769-869d-2521c3e452e1",
"parentId": null,
"entityType": "Tag",
"title": "Арматура",
"controlFieldCode": "tagType",
"controlFieldValue": "763a967d-625f-44be-ad7c-d8ccd9e3af19",
"managedFields": [
{
"fieldCode": "istochnik_dannyх",
"isMandatory": false
},
{
"fieldCode": "klapan",
"isMandatory": true
},
{
"fieldCode": "diametr",
"isMandatory": false
}
],
"valueGenerationRuleIds": ["5f80e530-1ccc-41e3-a088-03d719ba3f23"],
"created": 1719594386281,
"createdBy": "a21002d0-bd59-4b4d-8b6f-6707a2e1cc21",
"modified": 1722498718415,
"modifiedBy": "00000000-0000-0000-0000-000000000000",
"version": 9
},
"subclasses": []
}
]
Возвращает дерево сущностей классов
- На входе: EntityTypeId (String)
- На выходе: EntityClassHierarchyDTO[]
| Команда | Путь |
|---|---|
| classification_ListEntityClassHierarchy | HTTP POST "v1/entityClass/listHierarchy" |
ListEntityClassParents (classification)
Payload для команды
{
"entityType": "mechanism",
"entityId": "23792ab1-0f47-4dd6-b186-9502931c67fb"
}
Результат выполнения команды
[
{
"id": "dd82aa1e-24a7-4d90-b49a-b53dbeb3f4ec",
"parentId": null,
"entityType": "mechanism",
"title": "Очень длинное наименование класса Очень длинное наименование класса Очень длинное наименование класса",
"controlFieldCode": "mechanism_catalog",
"controlFieldValue": "cdb6eb0f-7316-4f45-863b-74b08e70e759",
"managedFields": [
{
"fieldCode": "optional_field",
"isMandatory": true
}
],
"valueGenerationRuleIds": ["5f80e530-1ccc-41e3-a088-03d719ba3f23"],
"created": 1718887945200,
"createdBy": "a21002d0-bd59-4b4d-8b6f-6707a2e1cc21",
"modified": 1719380902380,
"modifiedBy": "a21002d0-bd59-4b4d-8b6f-6707a2e1cc21",
"version": 6
}
]
Возвращает всех родителей сущности класса, в порядке от ближайшего до самого дальнего
- На входе: ListEntityClassParentsDTO
- На выходе: EntityClass[]
| Команда | Путь |
|---|---|
| classification_ListEntityClassHierarchy | HTTP POST "v1/entityClass/listEntityClassParents" |
EntityTypeClassCount (classification)
Payload для команды
["Tag", "Document", "AnotherEntity"]
Результат выполнения команды
{
"Tag": 110,
"Document": 6,
"AnotherEntity": 25
}
Считает количество классов с указанными сущностями
| Команда | Путь |
|---|---|
| classification_EntityTypeClassCount | HTTP POST "v1/entityClass/entityTypeClassCount" |
GetEntityClass (classification)
Payload для команды
"23792ab1-0f47-4dd6-b186-9502931c67fb"
Результат выполнения команды
{
"id": "23792ab1-0f47-4dd6-b186-9502931c67fb",
"parentId": "dd82aa1e-24a7-4d90-b49a-b53dbeb3f4ec",
"entityType": "mechanism",
"title": "Заводной механизм",
"controlFieldCode": "mechanism_catalog",
"controlFieldValue": "adf7af2f-e5e3-4a08-bf1c-4ea792358bab",
"managedFields": [],
"valueGenerationRuleIds": [],
"created": 1719379649875,
"createdBy": "a21002d0-bd59-4b4d-8b6f-6707a2e1cc21",
"modified": 1719379649875,
"modifiedBy": "a21002d0-bd59-4b4d-8b6f-6707a2e1cc21",
"version": 1
}
Получить сущность класса по её идентификатору
- На входе: EntityClassId (UUID)
- На выходе: EntityClass
| Команда | Путь |
|---|---|
| classification_GetEntityClass | HTTP POST "v1/entityClass/getEntityClass" |
ClassifyObject (classification)
Payload для команды
{
"entityType": "Tag",
"attributes": {
"complex": "5f80e530-1ccc-41e3-a088-03d719ba3f23",
"<другие поля производные от объектов иерархии>": "...",
"tagType": "763a967d-625f-44be-ad7c-d8ccd9e3af19"
}
}
Результат выполнения команды
[
{
"entityClass": {
"id": "d6bfc896-2dcb-45ca-94be-1654f10ae79d",
"parentId": null,
"entityType": "Tag",
"title": "Арматура 30мм",
"controlFieldCode": "parentTag",
"controlFieldValue": "5639bae9-e313-44b4-a3b7-8fd06c8ef7ad",
"managedFields": [
{
"fieldCode": "code",
"isMandatory": true
},
{
"fieldCode": "diametr",
"isMandatory": true
}
],
"valueGenerationRuleIds": ["5f80e530-1ccc-41e3-a088-03d719ba3f23"],
"created": 1718885396389,
"createdBy": "a21002d0-bd59-4b4d-8b6f-6707a2e1cc21",
"modified": 1718885396389,
"modifiedBy": "a21002d0-bd59-4b4d-8b6f-6707a2e1cc21",
"version": 1
},
"subclasses": [
{
"entityClass": {
"id": "e5bfc896-2dcb-45ca-94be-1654f10ae431",
"parentId": "d6bfc896-2dcb-45ca-94be-1654f10ae79d",
"<другие поля EntityClass модели>": "..."
}
}
]
}
]
Классификация типа сущности.
- На входе: ClassifyObjectDto
- На выходе: EntityClassHierarchyDTO[]
| Команда | Путь |
|---|---|
| classification_ClassifyObject | HTTP POST "v1/entityClass/classifyObject" |
CalculateManagedFields (classification)
Payload для команды
{
"entityType": "Tag",
"attributes": {
"complex": "5f80e530-1ccc-41e3-a088-03d719ba3f23",
"<другие поля производные от объектов иерархии>": "...",
"tagType": "763a967d-625f-44be-ad7c-d8ccd9e3af19"
}
}
Результат выполнения команды
[
{
"fieldCode": "code",
"isMandatory": true
},
{
"fieldCode": "diametr",
"isMandatory": true
}
]
Получить список полей объекта для классифицированного типа.
- На входе: ClassifyObjectDto
- На выходе: ManagedField[]
| Команда | Путь |
|---|---|
| classification_CalculateManagedFields | HTTP POST "v1/entityClass/calculateManagedFields" |
CreateEntityClass (classification)
Payload для команды
{
"parentId": null,
"entityType": "Tag",
"title": "Арматура 30мм",
"controlFieldCode": "parentTag",
"controlFieldValue": "5639bae9-e313-44b4-a3b7-8fd06c8ef7ad",
"managedFields": [
{
"fieldCode": "code",
"isMandatory": true
},
{
"fieldCode": "diametr",
"isMandatory": true
}
],
"valueGenerationRuleIds": ["5f80e530-1ccc-41e3-a088-03d719ba3f23"]
}
Результат выполнения команды
"00001111-2222-3333-4444-555566667777"
Добавление нового класса сущности.
- На входе: CreateEntityClassDTO
- На выходе: ID нового класса (UUID)
| Команда | Путь |
|---|---|
| classification_CreateEntityClass | Kafka Topic "classification_commands" |
UpdateEntityClass (classification)
Результат выполнения команды
{
"id": "d6bfc896-2dcb-45ca-94be-1654f10ae79d",
"title": "Арматура 30мм",
"controlFieldCode": "parentTag",
"controlFieldValue": "5639bae9-e313-44b4-a3b7-8fd06c8ef7ad",
"managedFields": [
{
"fieldCode": "code",
"isMandatory": true
},
{
"fieldCode": "diametr",
"isMandatory": true
}
],
"valueGenerationRuleIds": ["5f80e530-1ccc-41e3-a088-03d719ba3f23"],
"version": 1
}
Результат выполнения команды
true
Обновление класса сущности.
- На входе: UpdateEntityClassDTO
- На выходе: Boolean
| Команда | Путь |
|---|---|
| classification_UpdateEntityClass | Kafka Topic "classification_commands" |
DeleteEntityClass (classification)
Payload для команды
"00001111-2222-3333-4444-555566667777"
Результат выполнения команды
true
Удаление класса сущности.
- На входе: ID класса сущности (UUID)
- На выходе: Boolean
| Команда | Путь |
|---|---|
| classification_DeleteEntityClass | Kafka Topic "classification_commands" |
updateObjectWithReclassification
Payload для команды
{
"entityType": "Order",
"objectId": "18b1011b-9db3-4186-a53c-971016030068",
"version": 2,
"attributes": {
"date": 1577869200,
"number": 514
}
}
Результат выполнения команды
true
Или ошибка, если объект не существует
{
"businessError": null,
"message": "ERROR: Entity object not found",
"stackTrace": null,
"data": null
}
Или ошибка, если объект был обновлен из другого места
{
"businessError": null,
"message": "ERROR: object version is not actual (Optimistic Lock)",
"stackTrace": null,
"data": null
}
Изменение объекта сущности. Использует оптимистичную блокировку. Если изменяемый объект
был изменен параллельно (например, из другой формы другим пользователем),
тогда вернется ошибка ERROR: object version is not actual (Optimistic Lock), показывающая,
что не произошло обновления из-за некорректной версии.
Поддерживается асинхронный и синхронный вызов. Результат выполнения команды журналируется.
- На входе: UpdateEntityObject
- На выходе: boolean, true - обновление успешно, false - неуспешно.
| Команда | Путь |
|---|---|
| classification_updateObjectWithReclassification | Kafka Topic "classification_commands" |
EntityClassesByValueGenerationRules
Payload для команды
{
"valueGenerationRuleIds": ["5f80e530-1ccc-41e3-a088-03d719ba3f23"]
}
Результат выполнения команды
[
{
"valueGenerationRuleId": "5f80e530-1ccc-41e3-a088-03d719ba3f23",
"entityClasses": [
{
"id": "e718335f-8ea9-45c3-ab66-164965e2bbb9",
"parentId": null,
"entityType": "testEntity3",
"title": "Новый тестовый 123",
"controlFieldCode": "testEntity",
"controlFieldValue": "9af6310c-dbf4-4907-9cda-8f8657e98d8d",
"managedFields": [],
"valueGenerationRuleIds": [
"4f80e530-1ccc-41e3-a088-03d719ba3f23",
"5f80e530-1ccc-41e3-a088-03d719ba3f23"
],
"created": 1718799645926,
"createdBy": "2cf81fee-3fe9-45e9-9580-8aabf7d5f357",
"modified": 1718799645926,
"modifiedBy": "2cf81fee-3fe9-45e9-9580-8aabf7d5f357",
"version": 1
},
{
"id": "814f6890-e030-4b3e-a652-5e2986466aab",
"parentId": null,
"entityType": "construction",
"title": "Деревянные конструкции",
"controlFieldCode": "construction_type",
"controlFieldValue": "eb299170-0f60-42e6-8756-ee793b885e69",
"managedFields": [
{
"fieldCode": "construction_foreign",
"isMandatory": true
},
{
"fieldCode": "construction_type",
"isMandatory": false
}
],
"valueGenerationRuleIds": [
"5f80e530-1ccc-41e3-a088-03d719ba3f23"
],
"created": 1718716494252,
"createdBy": "a21002d0-bd59-4b4d-8b6f-6707a2e1cc21",
"modified": 1718716494252,
"modifiedBy": "a21002d0-bd59-4b4d-8b6f-6707a2e1cc21",
"version": 1
}
]
}
]
Получить список классов содержащих переданные идентификаторы правила, и сгруппированные по ним. Классы могут дублироваться в категориях
Поддерживается только синхронный вызов. Результат выполнения команды не журналируется.
- На входе: EntityClassesByValueGenerationRulesInput
- На выходе: EntityClassesByValueGenerationRulesOutput
| Команда | Путь |
|---|---|
| classification_EntityClassesByValueGenerationRules | Kafka Topic "classification_commands" |
UpdateValueGenerationRuleEntityClasses
Payload для команды
{
"valueGenerationRuleId": "5f80e530-1ccc-41e3-a088-03d719ba3f23",
"entityClassIds": ["41bc3c4c-44fa-43cc-8e07-3d2207cf033c"],
"clearOtherClasses": true
}
Результат выполнения команды
[
{
"id": "41bc3c4c-44fa-43cc-8e07-3d2207cf033c",
"parentId": null,
"entityType": "testEntity3",
"title": "подкласс",
"controlFieldCode": "testEntity",
"controlFieldValue": "be231b97-6d37-4821-b78b-4c2ce8c1dea0",
"managedFields": [],
"valueGenerationRuleIds": [
"5f80e530-1ccc-41e3-a088-03d719ba3f23",
"3f80e530-1ccc-41e3-a088-03d719ba3f23"
],
"created": 1718804181037,
"createdBy": "2cf81fee-3fe9-45e9-9580-8aabf7d5f357",
"modified": 1718804181037,
"modifiedBy": "2cf81fee-3fe9-45e9-9580-8aabf7d5f357",
"version": 2
}
]
Добавить новое правило генерации значений к классам. С возможностью исключения правила из классов, идентификаторы которых не указаны
Поддерживается асинхронный и синхронный вызов. Результат выполнения команды не журналируется.
- На входе: UpdateValueGenerationRuleEntityClassesInput
- На выходе: EntityClass[]
| Команда | Путь |
|---|---|
| classification_UpdateValueGenerationRuleEntityClasses | Kafka Topic "classification_commands" |
Объекты сервиса classification
ClassifyObjectDto
Входные данные классификации
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| entityType | String | да | Код типа |
| attributes | JSON Object | да | Атрибуты объекта, поля указывающее на связи с родителями и их идентификаторы (строка:строка или строка:массив) |
ListEntityClassParentsDTO
Входные данные классификации
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| entityType | EntityTypeId (String) | да | Код типа |
| entityId | EntityClassId (UUID) | да | Json c атрибутами объекта, поля указывающее на связи с родителями и их идентификаторы (строка:строка или строка:массив) |
EntityClassHierarchyDTO
Дерево сущностей класса
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| entityClass | EntityClass | да | Сущность класса |
| subclasses | EntityClassHierarchyDTO[] | да | Дочерние сущности класса |
EntityClass
Сущность класса
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | EntityClassId (UUID) | да | Идентификатор сущности класса |
| entityType | EntityTypeId (String) | да | Код типа |
| parentId | EntityClassId (UUID) | нет | Идентификатор родительской сущности класса |
| title | String | да | Наименование сущности класса |
| controlFieldCode | String | да | Название поля указывающее на принадлежность родителю согласно системы справочников |
| controlFieldValue | JSON String / JSON Array | да | Внешний/-ие идентификатор/-ы родителя из системы справочников |
| managedFields | ManagedField[] | да | Отображаемые поля для этой сущности класса |
| valueGenerationRuleIds | UUID[] | да | Идентификаторы правил генерации значения |
| created | TimeStamp | да | Дата создания |
| createdBy | UUID | да | Идентификатор пользователя который создал сущность |
| modified | TimeStamp | да | Дата изменения |
| modifiedBy | UUID | да | Идентификатор пользователя который изменил сущность |
| version | Int | да | Версия (optimistic lock) |
CreateEntityClassDTO
Объект создания сущности класса
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| entityType | EntityTypeId (String) | да | Код типа |
| parentId | EntityClassId (UUID) | нет | Идентификатор родительской сущности класса |
| title | String | да | Наименование сущности класса |
| controlFieldCode | String | да | Название поля указывающее на принадлежность родителю согласно системы справочников |
| controlFieldValue | JSON String / JSON Array | да | Внешний/-ие идентификатор/-ы родителя из системы справочников |
| managedFields | ManagedField[] | да | Отображаемые поля для этой сущности класса |
| valueGenerationRuleIds | UUID[] | да | Идентификаторы правил генерации значения |
UpdateEntityClassDTO
Объект обновления сущности класса
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | EntityClassId (UUID) | да | Идентификатор сущности класса |
| title | String | да | Наименование сущности класса |
| controlFieldCode | String | да | Название поля указывающее на принадлежность родителю согласно системы справочников |
| controlFieldValue | JSON String / JSON Array | да | Внешний/-ие идентификатор/-ы родителя из системы справочников |
| managedFields | ManagedField[] | да | Отображаемые поля для этой сущности класса |
| valueGenerationRuleIds | UUID[] | да | Идентификаторы правил генерации значения |
| version | Int | да | Версия (optimistic lock) |
ManagedField
Управляемое поле
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| fieldCode | String | да | Название поля |
| isMandatory | Boolean | да | Является ли обязательным |
UpdateEntityObject
Изменение объекта сущности
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| entityType | EntityTypeId (String) | да | Строковый код типа сущности |
| objectId | UUID | да | ID объекта |
| version | Int | да | Версия объекта. Нужна для оптимистичных блокировок |
| attributes | JSON Object | да | Json с полями объекта. Должен содержать все поля объекта. |
EntityClassesByValueGenerationRulesInput
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| valueGenerationRuleIds | UUID[] | да | Идентификаторы правил генерации значения |
EntityClassesByValueGenerationRulesOutput
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| valueGenerationRuleId | UUID | да | Идентификатор правила генерации значения |
| entityClasses | EntityClass[] | да | Сущности класса содержащие это правило |
UpdateValueGenerationRuleEntityClassesInput
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| valueGenerationRuleId | UUID | да | Идентификатор правила генерации значения |
| entityClassIds | EntityClassId[] | да | Идентификаторы классов для обновления |
| clearOtherClasses | Boolean | нет | Очищать ли текущие правила генерации значения, у классов не вошедших в выборку |
Exporter: сервис для экспорта данных
Сервис принимает команды для работы с игроками и командами. Состояние хранится в PostgreSQL.
Команды могут приходить как по HTTP, так и через Kafka в топик exporter_commands.
Сервис разбит на несколько модулей, в виде sbt проектов:
domain, в котором содержатся все доменные модели и их различные представления.commands, в котором содержатся все? что связано с командами, их описанием и обработчиками.infrastructure, в котором содержится описание взаимодействия с другими сервисами.storage, содержит сервисы для сохранения и чтения их разных хранилищ доменных моделей.service, содержит сервисы бизнес логики, которые определяют правила взаимодействия компонентов между собой.boot, содержит зависимости и описание для сборки и запуска сервиса.
Информация по добавлению команд можно прочитать в описании шаблона
Локальный запуск
При запуске сервиса ожидается, что уже развернута необходимая инфраструктура:
- PostgreSQL база по адресу
localhost:5432/exporter_db - Kafka по адресу
localhost:9092 - Consul по адресу
localhost:8500 - Адрес Kafka будет указан в
application.conf - Добавлены необходимые переменные окружения:
- EXPORTER_DB_HOST
- EXPORTER_DB_PORT
- EXPORTER_DB_NAME
- EXPORTER_DB_USER
- EXPORTER_DB_PASSWORD
Запуск из консоли с помощью SBT
EXPORTER_DB_HOST=localhost EXPORTER_DB_PORT=5432 EXPORTER_DB_NAME=exporter_db EXPORTER_DB_USER=postgres EXPORTER_DB_PASSWORD=12345 sbt boot/run
Список переменных окружения сервиса Exporter
Все доступные переменные окружения для настройки сервиса.
| Переменная | Тип | Обязательная | Значение по умолчанию | Описание |
|---|---|---|---|---|
EXPORTER_HTTP_HOST |
string | нет | 0.0.0.0 |
Хост, на котором слушает HTTP-сервер |
EXPORTER_HTTP_PORT |
int | нет | 8192 |
Порт, на котором слушает HTTP-сервер |
EXPORTER_KAFKA_SERVERS |
string | да | localhost:9092 |
Адрес Kafka |
EXPORTER_KAFKA_TOPIC |
string | нет | exporter_commands |
Название кафка-топика для получения команд. Сервис получает кафка-команды по нему, но и также сам публикует это название в CommandDiscovery. |
EXPORTER_KAFKA_CONSUMER_GROUP |
string | нет | exporter_consumer_group |
Имя consumer-группы для чтения из кафка-топика команд. Не должна меняться и не должна быть пустой, иначе сервис перечитает свои команды при перезапуске. |
EXPORTER_KAFKA_PARTITIONS |
int | нет | 10 |
Число читаемых партиций из кафка-топика команд. |
EXPORTER_KAFKA_CONSUMER_RESTART_MIN_BACKOFF |
duration string | нет | 1 second |
Изначальная задержка до рестарта консьюмера после падения (увеличивается в 2 раза после каждого рестарта) |
EXPORTER_KAFKA_CONSUMER_RESTART_MAX_BACKOFF |
duration string | нет | 30 seconds |
Максимальное задержка до рестарта консьюмера после падения |
EXPORTER_KAFKA_CONSUMER_RESTART_RANDOM_FACTOR |
double | нет | 0.2 |
Рандомный фактор для вычисления задержки перед следующим рестратом консьюмера (При значении 0.2 задержка может быть до 20% больше, чем при 0) |
EXPORTER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS |
int | нет | 5 |
Максимальное число рестартов консьюмера после падения (в пределах EXPORTER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN) |
EXPORTER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN |
duration string | нет | 5 minutes |
Временной отрезок, в который EXPORTER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS ограничивает число рестартов |
EXPORTER_KAFKA_COMMANDEVENT_TOPIC |
string | да | commandevents |
Название кафка-топика для отправки сообщений со статусами выполняемых команд. ОБЯЗАТЕЛЬНО должно соответствовать названию этого топика в сервисе статуса команд. |
EXPORTER_KAFKA_AUTH_USER |
string | нет | Название учетной записи Kafka. Если название не указано, то настройки авторизации не будут применены. | |
EXPORTER_KAFKA_AUTH_PASSWORD |
string | нет | Пароль учетной записи Kafka. | |
EXPORTER_KAFKA_AUTH_TRUSTSTORE_LOCATION |
string | нет | Путь до хранилища сертификатов (Java key store). Если путь не указан, то сертификат применятся не будет. | |
EXPORTER_KAFKA_AUTH_TRUSTSTORE_PASSWORD |
string | нет | Пароль к харнилищу сертификатов. | |
EXPORTER_CONSUL_ADDR |
url string | нет | http://localhost:8500 |
Адрес Сonsul. |
EXPORTER_CONSUL_AUTH_USER |
string | нет | Название учетной записи Сonsul. Если название не указано, то настройки авторизации не будут применены. | |
EXPORTER_CONSUL_AUTH_PASSWORD |
string | нет | Пароль учетной записи Сonsul. | |
EXPORTER_TRACE_DURATION |
boolean | нет | false |
Признак необходимости трассировки выполнения команд |
EXPORTER_DISCOVERABLE_ID |
string | нет | another_EXPORTER_service_instance |
ID сервиса в ServiceDiscovery |
EXPORTER_DISCOVERABLE_NAME |
string | нет | exporter |
Имя сервиса в ServiceDiscovery |
EXPORTER_DISCOVERABLE_HOST |
string | да | localhost |
Хост, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. Указанный адрес должен быть виден другим сервисам. Пример: имя kubernetes/docker_swarm service |
EXPORTER_DISCOVERABLE_PORT |
int | нет | Порт, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. По умолчанию указывается порт, который слушает HTTP-сервер. | |
EXPORTER_DISCOVERABLE_LIVETIME |
duration string | нет | 2 minutes |
Период после последней отправки health check, в течение которого ServiceDiscovery считает данный сервис живым. |
EXPORTER_DISCOVERABLE_HEALTHPASS |
string | нет | 1 minute |
Периодичность отправки health check в ServiceDiscovery |
EXPORTER_SERVICE_TITLE |
string | нет | Exporter |
Название сервиса для отображения |
EXPORTER_SERVICE_DESCRIPTION |
string | нет | Service EXPORTER |
Описание сервиса для отображения |
EXPORTER_AKKA_HTTP_CLIENT_MAXCON |
int | нет | 512 |
Максимальное число одновременных исходящих HTTP-соединений |
EXPORTER_AKKA_HTTP_CLIENT_MAXREQ |
int | нет | 1024 |
Максимальное число одновременных исходящих HTTP-запросов |
EXPORTER_AKKA_HTTP_SERVER_MAXCON |
int | нет | 1024 |
Максимальное число одновременных входящих HTTP-соединений |
EXPORTER_INTERNALCMD_ALLOW |
bool | нет | false |
Можно ли сервису отправлять внутрисистемные команды |
EXPORTER_SENDERLIB_COMMANDS_CACHE_UPDATEPERIOD |
duration string | нет | 10 minutes |
Время кэширования данных по командам из CommandDiscovery |
EXPORTER_SENDERLIB_SERVICES_CACHE_UPDATEPERIOD |
duration string | нет | 30 seconds |
Время кэширования данных по сервисам из ServiceDiscovery |
EXPORTER_DB_HOST |
string | да | Хост БД | |
EXPORTER_DB_PORT |
int | да | Порт БД | |
EXPORTER_DB_NAME |
string | да | Имя базы в БД | |
EXPORTER_DB_URL |
jdbc url string | нет | JDBC-url для соединения с БД. По умолчанию собирается из других обязательных переменных. Можно указать только его, если не хочется отдельно указывать хост/порт/имя базы. | |
EXPORTER_DB_USER |
string | да | Пользователь БД | |
EXPORTER_DB_PASSWORD |
string | да | Пароль пользователя БД | |
EXPORTER_DB_THREADS |
int | нет | 10 |
Количество потоков в пуле потоков для соединения с БД |
EXPORTER_DB_QUEUE_SIZE |
int | нет | 300 |
Размер очереди для действий базы данных, которые не могут быть выполнены немедленно, когда все потоки заняты. За пределами этого значения новые действия немедленно завершаются неудачей |
EXPORTER_DB_CONN_MAX |
int | нет | 10 |
Максимальное количество одновременных подключений к БД |
EXPORTER_DB_CONN_TIMEOUT |
duration string | нет | 20 second |
Максимальное время ожидания ответа для соединения к БД. Если это время превышено, а соединение не становится доступным, будет брошено исключение SQLException. 1000 мс — минимальное значение. |
EXPORTER_DB_ISOLATION |
string | нет | READ_COMMITTED |
Уровень изоляции транзакций для новых подключений. Допустимые значения: NONE, READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, SERIALIZABLE. |
EXPORTER_DB_READONLY |
boolean | нет | false |
Read-only SQL транзакция может изменять только временные таблицы. Этот параметр управляет статусом «только для чтения» по умолчанию для каждой новой транзакции. |
EXPORTER_DB_CONN_MIN |
int | нет | = DB_THREADS | Минимальное количество одновременных подключений к БД |
EXPORTER_DB_VALIDATION_TIMEOUT |
duration string | нет | 1 seconds |
Максимальное время, в течение которого соединение будет проверяться на работоспособность. 1000 мс — минимальное значение. |
EXPORTER_DB_IDLE_TIMEOUT |
duration string | нет | 10 minutes |
Максимальное время, в течение которого соединению разрешено простаивать в пуле. Значение 0 означает, что простаивающие соединения никогда не удаляются из пула. |
EXPORTER_DB_MAX_LIFETIME |
duration string | нет | 30 minutes |
Максимальное время жизни соединения в пуле. Когда простаивающее соединение достигает этого времени ожидания, даже если оно недавно использовалось, оно будет удалено из пула. Значение 0 указывает на отсутствие максимального срока службы. |
EXPORTER_DB_INITIALIZATION_FAIL_FAST |
string | нет | false |
Deprecated, начиная с версии Slick 3.3.0. Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Если соединения не могут быть созданы во время запуска пула, будет выдано исключение RuntimeException. Это свойство не имеет никакого эффекта, если minConnections равно 0. |
EXPORTER_DB_LEAK_DETECTION_THRESHOLD |
int | нет | 0 |
Время, в течение которого соединение может находиться вне пула, прежде чем будет зарегистрировано сообщение, указывающее на возможную утечку соединения. Значение 0 означает, что обнаружение утечек отключено. Наименьшее приемлемое значение для включения обнаружения утечек составляет 10 с. |
EXPORTER_DB_CONNECTION_TEST_QUERY |
string | нет | SELECT 1 |
Выражение, которое будет выполнено непосредственно перед получением соединения из пула для проверки того, что соединение с базой данных все еще активно. Оно зависит от базы данных и должно представлять собой запрос, требующий минимальной обработки базой данных (например, «VALUES 1»). Если этот параметр не установлен, вместо него используется метод JDBC4 Connection.isValid(). |
EXPORTER_DB_REGISTER_MBEANS |
boolean | нет | false |
Зарегистрированы ли JMX Management Beans («MBeans») |
EXPORTER_DB_AUTO_COMMIT |
boolean | нет | true |
Это свойство определяет то, как будут вести себя по умолчанию возвращаемые соединения относительно autocommit-а. |
EXPORTER_DB_SCHEMA |
string | нет | public |
Устанавливает schema по умолчанию |
EXPORTER_DB_ISOLATE_INTERNAL_QUERIES |
boolean | нет | false |
Определяет то, изолируются ли с помощью транзакций внутренние запросы пула(например запрос connection alive test). Свойство применяется только если autoCommit выключен. |
EXPORTER_DB_INITIALIZATION_FAIL_TIMEOUT |
int | нет | 1 |
Работает, начиная с версии Slick 3.3.0. Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Любое положительное число считается числом миллисекунд для попытки получить начальное соединение;поток приложения будет заблокирован в течение этого периода. Если соединение не может быть получено до истечения этого времени,будет брошено исключение. Данный таймаут применяется после периода connectionTimeout. Если значение равно нулю (0),HikariCP попытается получить и проверить подключение. Если соединение получено,но проверка не пройдена, будет брошено исключение, и пул не будет запущен. Однако,если соединение не может быть получено, пул запустится,но последующие попытки получить соединение могут потерпеть неудачу.Значение меньше нуля пройдет любую первоначальную попытку подключения, и пул немедленно запустится,пытаясь получить соединения в фоновом режиме.Следовательно, последующие попытки получить соединение могут потерпеть неудачу. |
EXPORTER_AUTHZFORCE_ADDR |
string | нет | http://localhost:8080/authzforce-ce |
Адрес AuthZforce server |
EXPORTER_AUTHZFORCE_DOMAIN |
string | нет | Доступный DomainID в AuthZforce server | |
EXPORTER_LOG_LEVEL |
string | нет | INFO |
Общий уровень логирования в сервисе |
EXPORTER_LOG_LEVEL_AKKA |
string | нет | INFO |
Уровень логирования для akka |
EXPORTER_LOG_LEVEL_LIQUIBASE |
string | нет | INFO |
Уровень логирования для liquibase (миграции) |
EXPORTER_LOG_LEVEL_APPLICATION |
string | нет | DEBUG |
Уровень логирования для application |
EXPORTER_LOG_LEVEL_SLICK_STATEMENT |
string | нет | DEBUG |
Уровень логирования запросов, отправляемых slick в БД |
EXPORTER_LOG_LEVEL_SLICK_BENCHMARK |
string | нет | OFF |
Уровень логирование бенчмарков выполнения запросов slick |
EXPORTER_LOG_LEVEL_KAFKA_PRODUCER |
string | нет | WARN |
Уровень логирования конфига kafka-producer |
EXPORTER_LOG_LEVEL_KAFKA_CONSUMER |
string | нет | WARN |
Уровень логирования конфига kafka-consumer |
EXPORTER_LOG_LEVEL_AKKAHTTPSENDER |
string | нет | TRACE |
Уровень логирования для отправки команд через HTTP. На уровне INFO логируется трассировка, если она включена |
EXPORTER_LOG_LEVEL_KAFKASENDER |
string | нет | TRACE |
Уровень логирования для отправки команд через Kafka. На уровне INFO логируется трассировка, если она включена |
EXPORTER_LOG_LEVEL_COMMANDSTATUSCLI |
string | нет | TRACE |
Уровень логирования для проверки состояний команд в сервисе статусов |
EXPORTER_LOG_LEVEL_TEAM_ROUTES |
string | нет | TRACE |
Уровень логирования для роутов /team |
EXPORTER_REPORT_BUCKET |
string | да | exporter |
Название ведра для отчётов экспорта в S3-подобном файлом хранилище |
EXPORTER_REPORT_PATH |
string | да | report |
Префикс для названия отчётов экспорта в S3-подобном файлом хранилище (выступает в роли поддиректории в ведре S3) |
EXPORTER_EXPORT_BUCKET |
string | да | exporter |
Название ведра для пользовательских файлов экспорта в S3-подобном файлом хранилище |
EXPORTER_EXPORT_PATH |
string | да | export |
Префикс для названия пользовательских файлов экспорта в S3-подобном файлом хранилище (выступает в роли поддиректории в ведре S3) |
EXPORTER_FILL_WARNINGS |
boolean | да | false |
Флаг для включения возможности добавлять предупреждения при получении данных для экспорта в модель данных |
Список команд сервиса Exporter
Список реализованных в сервисе команд, моделей EntityType и действий Actions, которые можно использовать при настройке авторизации.
| Название команды | EntityType | Actions |
|---|---|---|
| Список всех заданий экспорта | ExportProcess |
ListExportProcess |
| Получить задание экспорта по ID | ExportProcess |
GetExportProcess |
| Создать задание экспорта | ExportProcess |
CreateExportProcess |
| Отредактировать задание экспорта | ExportProcess |
UpdateExportProcess |
| Удалить задание экспорта | ExportProcess |
DeleteExportProcess |
| Запуск процесса экспорта данных | ExportProcess |
ExecuteExportProcess |
| Остановка процесса экспорта данных | ExportProcess |
ExecuteExportProcess |
| Получить прогресс процесса экспорта данных | ExportProcess |
GetExportProgress |
| Создание и запуск процесса экспорта данных | ExportProcess |
CreateExportProcess, ExecuteExportProcess |
| Список всех шаблонов заданий экспорта | ExportTemplate |
ListExportTemplate |
| Получить щаблон задания экспорта по ID | ExportTemplate |
GetExportTemplate |
| Создать шаблон задания экспорта | ExportTemplate |
CreateExportTemplate |
| Отредактировать шаблон задания экспорта | ExportTemplate |
UpdateExportTemplate |
| Удалить шаблон задания экспорта | ExportTemplate |
DeleteExportTemplate |
В описании команд используется путь/route для отправки команды в сам сервис, а не в ApiGateway. В качестве Input-а для команд, сервис всегда ожидает CommandRequest (как и любой другой сервис, принимающий команды), так что в описании команды указано лишь описание поля payload для CommandRequest.
ListExportProcess
Payload для команды
{
"query": "",
"context": {},
"sorting": {
"fieldName": "entityType",
"order": "desc"
},
"paging": {
"page": 1,
"count": 10
}
}
Результат выполнения команды
{
"items": [
{
"id": "b251c2e5-e12c-4792-b6f4-6578bfd4d6cd",
"entityType": "abc",
"status": "DRAFT",
"exportConfig": {
"title": "Sample Project Title"
},
"exportFile": "some file",
"resultFile": null,
"info": {},
"created": 1723809067603,
"createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"modified": 1723809067603,
"modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"executed": null,
"executedBy": null,
"version": 1
}
],
"total": 1
}
Возвращает список всех задач экспорта.
Поддерживается только синхронный вызов.
- На входе: Option[Search]
- На выходе: Page[ExportProcess]
| Команда | Путь |
|---|---|
exporter_ListExportProcess |
HTTP POST "/v1/exportProcess/list" |
Доступные поля для фильтрации и виды фильтров по ним:
| Поле | Виды фильтров |
|---|---|
id |
InSetQuery |
entityType |
InSetQuery, LikeQuery, TsQuery |
status |
InSetQuery |
created |
RangeQuery |
createdBy |
InSetQuery |
modified |
RangeQuery |
modifiedBy |
InSetQuery |
executed |
RangeQuery |
executedBy |
InSetQuery |
Доступные поля для сортировки:
| Поле |
|---|
entityType |
status |
created |
modified |
executed |
GetExportProcess
Payload для команды
"f283aac5-88e0-43b5-8dab-56c22d91acc7"
Результат выполнения команды
{
"id": "b251c2e5-e12c-4792-b6f4-6578bfd4d6cd",
"entityType": "abc",
"status": "DRAFT",
"exportConfig": {
"title": "Sample Project Title"
},
"exportFile": "some file",
"resultFile": null,
"info": {},
"created": 1723809067603,
"createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"modified": 1723809067603,
"modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"executed": null,
"executedBy": null,
"version": 1
}
Поиск задачи экспорта с заданным идентификатором.
Поддерживается только синхронный вызов.
- На входе: ExportProcessId (UUID)
- На выходе: ExportProcess
| Команда | Путь |
|---|---|
exporter_GetExportProcess |
HTTP POST "/v1/exportProcess/get" |
CreateExportProcess
Payload для команды
{
"entityType": "abc",
"exportConfig": {
"title": "Sample Project Title"
},
"exportFile": "some file"
}
Результат выполнения команды
"f283aac5-88e0-43b5-8dab-56c22d91acc7"
Добавляет новую задачу экспорта с заданными параметрами. Отправляет событие о создании задачи экспорта.
Поддерживается асинхронный и синхронный вызов.
- На входе: ExportProcessCreateDto
- На выходе: ExportProcessId (UUID)
| Команда | Путь |
|---|---|
exporter_CreateExportProcess |
- |
UpdateExportProcess
Payload для команды
{
"id": "f283aac5-88e0-43b5-8dab-56c22d91acc7",
"entityType": "abc",
"exportConfig": {
"startRow": 3,
"columnMapping": [
{
"property": "title",
"columnLabel": "A"
}
]
},
"exportFile": "bucket/file_id",
"version": 1
}
Результат выполнения команды
true
Обновляет данные задачи экспорта. Отправляет событие об обновлении задачи экспорта.
Поддерживается асинхронный и синхронный вызов.
- На входе: ExportProcessUpdateDto
- На выходе: Boolean
| Команда | Путь |
|---|---|
exporter_UpdateExportProcess |
- |
DeleteExportProcess
Payload для команды
"f283aac5-88e0-43b5-8dab-56c22d91acc7"
Результат выполнения команды
true
Удаляет задачу экспорта с заданным идентификатором. Отправляет событие об удалении задачи экспорта.
Поддерживается асинхронный и синхронный вызов.
- На входе: ExportProcessId (UUID)
- На выходе: Boolean
| Команда | Путь |
|---|---|
exporter_DeleteExportProcess |
- |
ExecuteExportProcess
Payload для команды
"f283aac5-88e0-43b5-8dab-56c22d91acc7"
Результат выполнения команды
true
Запускает задачу экспорта с заданным идентификатором. Отправляет событие о результатах выполнения задачи экспорта.
Поддерживается асинхронный и синхронный вызов.
- На входе: ExportProcessId (UUID)
- На выходе: Boolean
| Команда | Путь |
|---|---|
exporter_ExecuteExportProcess |
- |
CancelExportProcess
Payload для команды
"f283aac5-88e0-43b5-8dab-56c22d91acc7"
Результат выполнения команды
true
Останавливает запущенную задачу экспорта с заданным идентификатором.
Поддерживается асинхронный и синхронный вызов.
- На входе: ExportProcessId (UUID)
- На выходе: Boolean
| Команда | Путь |
|---|---|
exporter_CancelExportProcess |
- |
GetExportProgress
Payload для команды
{
"id": "b251c2e5-e12c-4792-b6f4-6578bfd4d6cd"
}
Результат выполнения команды
{
"b251c2e5-e12c-4792-b6f4-6578bfd4d6cd": {
"estimateTime": "PT12H54M5.02S",
"percent": 0.3368487274760384,
"stats": [
{
"name": "?",
"processed": {
"succeed": 0,
"skipped": 1723,
"total": 1723
},
"errors": 0
}
]
}
}
Прогресс задач экспорта. Можно отфильтровать по идентификатору конкретной задачи. Поддерживается только синхронный вызов.
- На входе: GetExportProgressDto
- На выходе: Map[ExportProcessId, [EstimateProgressStats]]
| Команда | Путь |
|---|---|
| exporter_GetExportProgress | - |
CreateAndExecuteExportProcess
Payload для команды
{
"entityType": "Tag",
"exportConfig": {
"columnMapping": [
{
"columnLabel": "C",
"columnHeader": "Заголовок",
"attributePath": [
{
"fieldCode": "title",
"fieldType": "string"
}
]
},
{
"columnLabel": "A",
"columnHeader": "Код",
"attributePath": [
{
"fieldCode": "code",
"fieldType": "string"
}
]
},
{
"columnLabel": "D",
"columnHeader": "Диаметр",
"attributePath": [
{
"fieldCode": "diametr",
"fieldType": "number"
}
]
},
{
"columnLabel": "E",
"columnHeader": "subType",
"attributePath": [
{
"fieldCode": "subType",
"fieldType": "catalogItem",
"catalogCode": "TagSubType"
},
{
"fieldCode": "tagTypeTitle",
"fieldType": "string"
}
]
},
{
"columnLabel": "F",
"columnHeader": "complex code",
"attributePath": [
{
"fieldCode": "complex",
"fieldType": "entityObject",
"entityType": "complex"
},
{
"fieldCode": "code",
"fieldType": "string"
}
]
},
{
"columnLabel": "G",
"columnHeader": "complex title",
"attributePath": [
{
"fieldCode": "complex",
"fieldType": "entityObject",
"entityType": "complex"
},
{
"fieldCode": "title",
"fieldType": "string"
}
]
}
]
},
"search": {
"query": "",
"context": {
}
},
"hierarchy": []
}
Результат выполнения команды
"f283aac5-88e0-43b5-8dab-56c22d91acc7"
Последовательное выполнение команд CreateExportProcess и ExecuteExportProcess.
Добавляет новую задачу экспорта с заданными параметрами, а затем ее запускает.
Поддерживается асинхронный и синхронный вызов.
- На входе: ExportProcessCreateDto
- На выходе: ExportProcessId (UUID)
| Команда | Путь |
|---|---|
exporter_CreateAndExecuteExportProcess |
- |
ListExportTemplate
Payload для команды
{
"query": "",
"context": {},
"sorting": {
"fieldName": "entityType",
"order": "desc"
},
"paging": {
"page": 1,
"count": 10
}
}
Результат выполнения команды
{
"items": [
{
"id": "b251c2e5-e12c-4792-b6f4-6578bfd4d6cd",
"entityType": "abc",
"title": "Наименование шаблона",
"description": "Описание которое на которое никто не смотрит",
"exportConfig": {
"title": "Sample Project Title"
},
"created": 1723809067603,
"createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"modified": 1723809067603,
"modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"version": 1
}
],
"total": 1
}
Возвращает список всех шаблонов экспорта.
Поддерживается только синхронный вызов.
- На входе: Option[Search]
- На выходе: Page[ExportTemplate]
| Команда | Путь |
|---|---|
exporter_ListExportTemplate |
HTTP POST "/v1/exportTemplate/list" |
Доступные поля для фильтрации и виды фильтров по ним:
| Поле | Виды фильтров |
|---|---|
id |
InSetQuery |
entityType |
InSetQuery, LikeQuery, TsQuery |
createdBy |
InSetQuery |
title |
LikeQuery |
description |
LikeQuery |
Доступные поля для сортировки:
| Поле |
|---|
entityType |
created |
modified |
GetExportTemplate
Payload для команды
"b251c2e5-e12c-4792-b6f4-6578bfd4d6cd"
Результат выполнения команды
{
"id": "b251c2e5-e12c-4792-b6f4-6578bfd4d6cd",
"entityType": "abc",
"title": "Наименование шаблона",
"description": "Описание которое на которое никто не смотрит",
"exportConfig": {
"title": "Sample Project Title"
},
"created": 1723809067603,
"createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"modified": 1723809067603,
"modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"version": 1
}
Поиск задачи экспорта с заданным идентификатором.
Поддерживается только синхронный вызов.
- На входе: ExportTemplateId (UUID)
- На выходе: ExportTemplate
| Команда | Путь |
|---|---|
exporter_GetExportTemplate |
HTTP POST "/v1/exportTemplate/get" |
CreateExportTemplate
Payload для команды
{
"entityType": "abc",
"title": "Шаблон всего",
"description": "Описание шаблона на которое никто не смотрит",
"exportConfig": {
"title": "Sample Project Title"
}
}
Результат выполнения команды
"f283aac5-88e0-43b5-8dab-56c22d91acc7"
Добавляет новый шаблон экспорта с заданными параметрами. Отправляет событие о создании шаблона экспорта.
Поддерживается асинхронный и синхронный вызов.
- На входе: ExportTemplateCreateDto
- На выходе: ExportTemplateId (UUID)
| Команда | Путь |
|---|---|
exporter_CreateExportTemplate |
- |
UpdateExportTemplate
Payload для команды
{
"id": "f283aac5-88e0-43b5-8dab-56c22d91acc7",
"entityType": "abc",
"title": "Шаблон всего",
"description": "Описание шаблона на которое никто не смотрит",
"exportConfig": {
"startRow": 3,
"columnMapping": [
{
"property": "title",
"columnLabel": "A"
}
]
},
"version": 1
}
Результат выполнения команды
true
Обновляет данные шаблона экспорта. Отправляет событие об обновлении шаблона экспорта.
Поддерживается асинхронный и синхронный вызов.
- На входе: ExportTemplateUpdateDto
- На выходе: Boolean
| Команда | Путь |
|---|---|
exporter_UpdateExportTemplate |
- |
DeleteExportTemplate
Payload для команды
"f283aac5-88e0-43b5-8dab-56c22d91acc7"
Результат выполнения команды
true
Удаляет шаблон экспорта с заданным идентификатором. Отправляет событие об удалении шаблона экспорта.
Поддерживается асинхронный и синхронный вызов.
- На входе: ExportTemplateId (UUID)
- На выходе: Boolean
| Команда | Путь |
|---|---|
exporter_DeleteExportTemplate |
- |
Модели сервиса Exporter
ExportProcessCreateDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
entityType |
EntityTypeId (String) | Да | Тип экспортируемой сущности |
exportTemplateId |
ExportTemplateId (UUID) | Нет | Уникальный идентификатор шаблона |
exportConfig |
ExportConfig | Нет | Конфигурация экспорта |
search |
Search | Нет | Параметры поиска для выбора элементов |
hierarchyId |
HierarchyId (UUID) | Нет | Уникальный идентификатор иерархии |
hierarchy |
Json (Object) | Нет | Параметры иерархической структуры выгрузки файлов |
processFileFields |
Boolean | Да | Флаг при снятии которого процесс выгрузки не должен выгружать связанные файлы, даже если в конфиге указано поле с файлом |
processHierarchy |
Boolean | Да | Флаг при снятии которого процесс выгрузки не должен выгружать файлы в иерархическом порядке, даже если прокинута иерархия |
preserveEmptyFolders |
Boolean | Да | Флаг, указывающий на то надо ли добавлять в иерархию пустые папки (без выгружаемых файлов) |
ExportProcessUpdateDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
id |
ExportProcessId (UUID) | Да | Уникальный идентификатор задачи |
entityType |
EntityTypeId (String) | Да | Тип экспортируемой сущности |
exportConfig |
ExportConfig | Да | Конфигурация экспорта |
search |
Search | Нет | Параметры поиска для выбора элементов |
hierarchy |
Json (Object) | Нет | Параметры иерархической структуры выгрузки файлов |
version |
Int | Да | Индекс оптимистической блокировки |
ExportProcess
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
id |
ExportProcessId (UUID) | Да | Уникальный идентификатор задачи |
entityType |
EntityTypeId (String) | Да | Тип экспортируемой сущности |
status |
ExportProcessStatus (String) | Да | Состояние задачи (DRAFT, IN PROGRESS, IN PROGRESS ARCHIVE, SUCCESS, ERROR, CANCELED) |
exportConfig |
ExportConfig | Да | Конфигурация экспорта |
exportFile |
ExportFileInformation[] | Да | URI и имя файла |
info |
ExportInfo | Да | Статистика по экспорту (summary) |
search |
Search | Нет | Параметры поиска для выбора элементов |
hierarchy |
Json (Object) | Нет | Параметры иерархической структуры выгрузки файлов |
processFileFields |
Boolean | Да | Флаг при снятии которого процесс выгрузки не должен выгружать связанные файлы, даже если в конфиге указано поле с файлом |
processHierarchy |
Boolean | Да | Флаг при снятии которого процесс выгрузки не должен выгружать файлы в иерархическом порядке, даже если прокинута иерархия |
preserveEmptyFolders |
Boolean | Да | Флаг, указывающий на то надо ли добавлять в иерархию пустые папки (без выгружаемых файлов) |
created |
Timestamp (Long) | Да | Дата создания записи |
createdBy |
UserId (UUID) | Да | ID пользователя создавшего запись |
modified |
Timestamp (Long) | Да | Дата изменения записи |
modifiedBy |
UserId (UUID) | Да | ID пользователя изменившего запись |
executed |
Timestamp (Long) | Нет | Дата запуска экспорта |
executedBy |
UserId (UUID) | Нет | ID пользователя запустившего экспорт |
version |
Int | Да | Индекс оптимистической блокировки |
ExportTemplateCreateDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
entityType |
EntityTypeId (String) | Да | Тип экспортируемой сущности |
title |
Title (String) | Да | Наименование шаблона |
description |
String | Нет | Описание шаблона |
exportConfig |
ExportConfig | Да | Конфигурация экспорта |
ExportTemplateUpdateDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
id |
ExportTemplateId (UUID) | Да | Уникальный идентификатор шаблона |
entityType |
EntityTypeId (String) | Да | Тип экспортируемой сущности |
title |
Title (String) | Да | Наименование шаблона |
description |
String | Нет | Описание шаблона |
exportConfig |
ExportConfig | Да | Конфигурация экспорта |
version |
Int | Да | Индекс оптимистической блокировки |
ExportTemplate
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
id |
ExportTemplateId (UUID) | Да | Уникальный идентификатор шаблона |
entityType |
EntityTypeId (String) | Да | Тип экспортируемой сущности |
title |
Title (String) | Да | Наименование шаблона |
description |
String | Нет | Описание шаблона |
exportConfig |
ExportConfig | Да | Конфигурация экспорта |
created |
Timestamp (Long) | Да | Дата создания записи |
createdBy |
UserId (UUID) | Да | ID пользователя создавшего запись |
modified |
Timestamp (Long) | Да | Дата изменения записи |
modifiedBy |
UserId (UUID) | Да | ID пользователя изменившего запись |
version |
Int | Да | Индекс оптимистической блокировки |
ExportConfig
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
columnMapping |
ColumnMapping[] | Да | Информация о сопоставлении столбцов из файла и данных сущности |
ColumnMapping
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
columnLabel |
String | Да | Наименование колонки для экспорта данных |
columnHeader |
String | Да | Название колонки |
attributePath |
FieldAttribute[] | Да | Описание пути для получения данных поля |
FieldAttribute
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
fieldType |
String | Да | Тип ожидаемых данных (допустимые значения: string, number, entityObject, catalogItem, file) |
fieldCode |
String | Да | Поле из которого берутся данные |
entityType |
String | Нет | Тип сущности по которое происходит переход для типа данных entityObject |
catalogCode |
String | Нет | Каталог по которому происходит переход для типа данных catalogItem |
ExportFileInformation
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
fileName |
String | Да | Имя файла загруженного для экспорта |
url |
String | Да | URI файла экспорта (стандартная FS загрузка) |
ExportInfo
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
progress |
ProgressInfo | Да | Статистика процесса обработки |
error |
String | Нет | Ошибка, если был неуспешный запуск |
warnings |
List[(Int, String)] | Нет | Предупреждения загрузки данных |
ProgressInfo
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
percent |
Double | Да | Процент выполненного прогресса загрузки (от 0.0 до 100.0) |
progress |
Int | Нет | Кол-во выполненных шагов |
total |
Int | Нет | Общее кол-во шагов |
GetExportProgressDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | ExportProcessId (UUID) | Нет | Получить статистику только для указанной задачи |
EstimateProgressStats
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| estimateTime | Duration ISO8601 | Да | Время до конца в таком формате PT12H54M5.02S |
| percent | Double | Да | Процент выполнения (уже рассчитанные цифры из stats) |
| stats | SheetExportTotalStatistic[] | Да | Числа статистики по листам |
SheetExportTotalStatistic
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| name | String | Да | Название листа |
| processed | StatFraction | Да | Количество обработанных строк |
| errors | Int | Да | Количество ошибок |
StatFraction
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| succeed | Int | Да | Успешно обработано |
| skipped | Int | Нет | Пропущено |
| total | Int | Да | Всего операций |
Importer: сервис для примера
Сервис принимает команды для работы с игроками и командами. Состояние хранится в PostgreSQL.
Команды могут приходить как по HTTP, так и через Kafka в топик importer_commands.
Сервис разбит на несколько модулей, в виде sbt проектов:
domain, в котором содержатся все доменные модели и их различные представления.commands, в котором содержатся все? что связано с командами, их описанием и обработчиками.infrastructure, в котором содержится описание взаимодействия с другими сервисами.storage, содержит сервисы для сохранения и чтения их разных хранилищ доменных моделей.service, содержит сервисы бизнес логики, которые определяют правила взаимодействия компонентов между собой.boot, содержит зависимости и описание для сборки и запуска сервиса.
Информация по добавлению команд можно прочитать в описании шаблона
Локальный запуск
При запуске сервиса ожидается, что уже развернута необходимая инфраструктура:
- PostgreSQL база по адресу
localhost:5432/importer_db - Kafka по адресу
localhost:9092 - Consul по адресу
localhost:8500 - Адрес Kafka будет указан в
application.conf - Добавлены необходимые переменные окружения:
- IMPORTER_DB_HOST
- IMPORTER_DB_PORT
- IMPORTER_DB_NAME
- IMPORTER_DB_USER
- IMPORTER_DB_PASSWORD
Запуск из консоли с помощью SBT
IMPORTER_DB_HOST=localhost IMPORTER_DB_PORT=5432 IMPORTER_DB_NAME=importer_db IMPORTER_DB_USER=postgres IMPORTER_DB_PASSWORD=12345 sbt boot/run
Список переменных окружения сервиса Importer
Все доступные переменные окружения для настройки сервиса.
| Переменная | Тип | Обязательная | Значение по умолчанию | Описание |
|---|---|---|---|---|
| IMPORTER_HTTP_HOST | string | нет | "0.0.0.0" | Хост, на котором слушает HTTP-сервер |
| IMPORTER_HTTP_PORT | int | нет | 8192 | Порт, на котором слушает HTTP-сервер |
| IMPORTER_KAFKA_SERVERS | string | да | "localhost:9092" | Адрес Kafka |
| IMPORTER_KAFKA_TOPIC | string | нет | "importer_commands" | Название кафка-топика для получения команд. Сервис получает кафка-команды по нему, но и также сам публикует это название в CommandDiscovery. |
| IMPORTER_KAFKA_CONSUMER_GROUP | string | нет | "importer_consumer_group" | Имя consumer-группы для чтения из кафка-топика команд. Не должна меняться и не должна быть пустой, иначе сервис перечитает свои команды при перезапуске. |
| IMPORTER_KAFKA_PARTITIONS | int | нет | 10 | Число читаемых партиций из кафка-топика команд. |
| IMPORTER_KAFKA_CONSUMER_RESTART_MIN_BACKOFF | duration string | нет | 1 second | Изначальная задержка до рестарта консьюмера после падения (увеличивается в 2 раза после каждого рестарта) |
| IMPORTER_KAFKA_CONSUMER_RESTART_MAX_BACKOFF | duration string | нет | 30 seconds | Максимальное задержка до рестарта консьюмера после падения |
| IMPORTER_KAFKA_CONSUMER_RESTART_RANDOM_FACTOR | double | нет | 0.2 | Рандомный фактор для вычисления задержки перед следующим рестратом консьюмера (При значении 0.2 задержка может быть до 20% больше, чем при 0) |
| IMPORTER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS | int | нет | 5 | Максимальное число рестартов консьюмера после падения (в пределах IMPORTER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN) |
| IMPORTER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN | duration string | нет | 5 minutes | Временной отрезок, в который IMPORTER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS ограничивает число рестартов |
| IMPORTER_KAFKA_COMMANDEVENT_TOPIC | string | да | "commandevents" | Название кафка-топика для отправки сообщений со статусами выполняемых команд. ОБЯЗАТЕЛЬНО должно соответствовать названию этого топика в сервисе статуса команд. |
| IMPORTER_KAFKA_AUTH_USER | string | нет | "" | Название учетной записи Kafka. Если название не указано, то настройки авторизации не будут применены. |
| IMPORTER_KAFKA_AUTH_PASSWORD | string | нет | "" | Пароль учетной записи Kafka. |
| IMPORTER_KAFKA_AUTH_TRUSTSTORE_LOCATION | string | нет | "" | Путь до хранилища сертификатов (Java key store). Если путь не указан, то сертификат применятся не будет. |
| IMPORTER_KAFKA_AUTH_TRUSTSTORE_PASSWORD | string | нет | "" | Пароль к харнилищу сертификатов. |
| IMPORTER_CONSUL_ADDR | url string | нет | "http://localhost:8500" | Адрес Сonsul. |
| IMPORTER_CONSUL_AUTH_USER | string | нет | "" | Название учетной записи Сonsul. Если название не указано, то настройки авторизации не будут применены. |
| IMPORTER_CONSUL_AUTH_PASSWORD | string | нет | "" | Пароль учетной записи Сonsul. |
| IMPORTER_TRACE_DURATION | boolean | нет | false | Признак необходимости трассировки выполнения команд |
| IMPORTER_DISCOVERABLE_ID | string | нет | "another_IMPORTER_service_instance" | ID сервиса в ServiceDiscovery |
| IMPORTER_DISCOVERABLE_NAME | string | нет | "importer" | Имя сервиса в ServiceDiscovery |
| IMPORTER_DISCOVERABLE_HOST | string | да | "localhost" | Хост, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. Указанный адрес должен быть виден другим сервисам. Пример: имя kubernetes/docker_swarm service |
| IMPORTER_DISCOVERABLE_PORT | int | нет | Порт, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. По умолчанию указывается порт, который слушает HTTP-сервер. | |
| IMPORTER_DISCOVERABLE_LIVETIME | duration string | нет | 2 minutes | Период после последней отправки health check, в течение которого ServiceDiscovery считает данный сервис живым. |
| IMPORTER_DISCOVERABLE_HEALTHPASS | string | нет | 1 minute | Периодичность отправки health check в ServiceDiscovery |
| IMPORTER_SERVICE_TITLE | string | нет | "Importer" | Название сервиса для отображения |
| IMPORTER_SERVICE_DESCRIPTION | string | нет | "Service IMPORTER" | Описание сервиса для отображения |
| IMPORTER_AKKA_HTTP_CLIENT_MAXCON | int | нет | 512 | Максимальное число одновременных исходящих HTTP-соединений |
| IMPORTER_AKKA_HTTP_CLIENT_MAXREQ | int | нет | 1024 | Максимальное число одновременных исходящих HTTP-запросов |
| IMPORTER_AKKA_HTTP_SERVER_MAXCON | int | нет | 1024 | Максимальное число одновременных входящих HTTP-соединений |
| IMPORTER_INTERNALCMD_ALLOW | bool | нет | false | Можно ли сервису отправлять внутрисистемные команды |
| IMPORTER_SENDERLIB_COMMANDS_CACHE_UPDATEPERIOD | duration string | нет | 10 minutes | Время кэширования данных по командам из CommandDiscovery |
| IMPORTER_SENDERLIB_SERVICES_CACHE_UPDATEPERIOD | duration string | нет | 30 seconds | Время кэширования данных по сервисам из ServiceDiscovery |
| IMPORTER_DB_HOST | string | да | Хост БД | |
| IMPORTER_DB_PORT | int | да | Порт БД | |
| IMPORTER_DB_NAME | string | да | Имя базы в БД | |
| IMPORTER_DB_URL | jdbc url string | нет | JDBC-url для соединения с БД. По умолчанию собирается из других обязательных переменных. Можно указать только его, если не хочется отдельно указывать хост/порт/имя базы. | |
| IMPORTER_DB_USER | string | да | Пользователь БД | |
| IMPORTER_DB_PASSWORD | string | да | Пароль пользователя БД | |
| IMPORTER_DB_THREADS | int | нет | 10 | Количество потоков в пуле потоков для соединения с БД |
| IMPORTER_DB_QUEUE_SIZE | int | нет | 300 | Размер очереди для действий базы данных, которые не могут быть выполнены немедленно, когда все потоки заняты. За пределами этого значения новые действия немедленно завершаются неудачей |
| IMPORTER_DB_CONN_MAX | int | нет | 10 | Максимальное количество одновременных подключений к БД |
| IMPORTER_DB_CONN_TIMEOUT | duration string | нет | 20 second | Максимальное время ожидания ответа для соединения к БД. Если это время превышено, а соединение не становится доступным, будет брошено исключение SQLException. 1000 мс — минимальное значение. |
| IMPORTER_DB_ISOLATION | string | нет | "READ_COMMITTED" | Уровень изоляции транзакций для новых подключений. Допустимые значения: NONE, READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, SERIALIZABLE. |
| IMPORTER_DB_READONLY | boolean | нет | false | Read-only SQL транзакция может изменять только временные таблицы. Этот параметр управляет статусом «только для чтения» по умолчанию для каждой новой транзакции. |
| IMPORTER_DB_CONN_MIN | int | нет | = DB_THREADS | Минимальное количество одновременных подключений к БД |
| IMPORTER_DB_VALIDATION_TIMEOUT | duration string | нет | 1 seconds | Максимальное время, в течение которого соединение будет проверяться на работоспособность. 1000 мс — минимальное значение. |
| IMPORTER_DB_IDLE_TIMEOUT | duration string | нет | 10 minutes | Максимальное время, в течение которого соединению разрешено простаивать в пуле. Значение 0 означает, что простаивающие соединения никогда не удаляются из пула. |
| IMPORTER_DB_MAX_LIFETIME | duration string | нет | 30 minutes | Максимальное время жизни соединения в пуле. Когда простаивающее соединение достигает этого времени ожидания, даже если оно недавно использовалось, оно будет удалено из пула. Значение 0 указывает на отсутствие максимального срока службы. |
| IMPORTER_DB_INITIALIZATION_FAIL_FAST | string | нет | false | Deprecated, начиная с версии Slick 3.3.0. Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Если соединения не могут быть созданы во время запуска пула, будет выдано исключение RuntimeException. Это свойство не имеет никакого эффекта, если minConnections равно 0. |
| IMPORTER_DB_LEAK_DETECTION_THRESHOLD | int | нет | 0 | Время, в течение которого соединение может находиться вне пула, прежде чем будет зарегистрировано сообщение, указывающее на возможную утечку соединения. Значение 0 означает, что обнаружение утечек отключено. Наименьшее приемлемое значение для включения обнаружения утечек составляет 10 с. |
| IMPORTER_DB_CONNECTION_TEST_QUERY | string | нет | "SELECT 1" | Выражение, которое будет выполнено непосредственно перед получением соединения из пула для проверки того, что соединение с базой данных все еще активно. Оно зависит от базы данных и должно представлять собой запрос, требующий минимальной обработки базой данных (например, «VALUES 1»). Если этот параметр не установлен, вместо него используется метод JDBC4 Connection.isValid(). |
| IMPORTER_DB_REGISTER_MBEANS | boolean | нет | false | Зарегистрированы ли JMX Management Beans («MBeans») |
| IMPORTER_DB_AUTO_COMMIT | boolean | нет | true | Это свойство определяет то, как будут вести себя по умолчанию возвращаемые соединения относительно autocommit-а. |
| IMPORTER_DB_SCHEMA | string | нет | "public" | Устанавливает schema по умолчанию |
| IMPORTER_DB_ISOLATE_INTERNAL_QUERIES | boolean | нет | false | Определяет то, изолируются ли с помощью транзакций внутренние запросы пула(например запрос connection alive test). Свойство применяется только если autoCommit выключен. |
| IMPORTER_DB_INITIALIZATION_FAIL_TIMEOUT | int | нет | 1 | Работает, начиная с версии Slick 3.3.0. Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Любое положительное число считается числом миллисекунд для попытки получить начальное соединение;поток приложения будет заблокирован в течение этого периода. Если соединение не может быть получено до истечения этого времени,будет брошено исключение. Данный таймаут применяется после периода connectionTimeout. Если значение равно нулю (0),HikariCP попытается получить и проверить подключение. Если соединение получено,но проверка не пройдена, будет брошено исключение, и пул не будет запущен. Однако,если соединение не может быть получено, пул запустится,но последующие попытки получить соединение могут потерпеть неудачу.Значение меньше нуля пройдет любую первоначальную попытку подключения, и пул немедленно запустится,пытаясь получить соединения в фоновом режиме.Следовательно, последующие попытки получить соединение могут потерпеть неудачу. |
| IMPORTER_AUTHZFORCE_ADDR | string | нет | "http://localhost:8080/authzforce-ce" | Адрес AuthZforce server |
| IMPORTER_AUTHZFORCE_DOMAIN | string | нет | "" | Доступный DomainID в AuthZforce server |
| IMPORTER_LOG_LEVEL | string | нет | INFO | Общий уровень логирования в сервисе |
| IMPORTER_LOG_LEVEL_AKKA | string | нет | INFO | Уровень логирования для akka |
| IMPORTER_LOG_LEVEL_LIQUIBASE | string | нет | INFO | Уровень логирования для liquibase (миграции) |
| IMPORTER_LOG_LEVEL_APPLICATION | string | нет | DEBUG | Уровень логирования для application |
| IMPORTER_LOG_LEVEL_SLICK_STATEMENT | string | нет | DEBUG | Уровень логирования запросов, отправляемых slick в БД |
| IMPORTER_LOG_LEVEL_SLICK_BENCHMARK | string | нет | OFF | Уровень логирование бенчмарков выполнения запросов slick |
| IMPORTER_LOG_LEVEL_KAFKA_PRODUCER | string | нет | WARN | Уровень логирования конфига kafka-producer |
| IMPORTER_LOG_LEVEL_KAFKA_CONSUMER | string | нет | WARN | Уровень логирования конфига kafka-consumer |
| IMPORTER_LOG_LEVEL_AKKAHTTPSENDER | string | нет | TRACE | Уровень логирования для отправки команд через HTTP. На уровне INFO логируется трассировка, если она включена |
| IMPORTER_LOG_LEVEL_KAFKASENDER | string | нет | TRACE | Уровень логирования для отправки команд через Kafka. На уровне INFO логируется трассировка, если она включена |
| IMPORTER_LOG_LEVEL_COMMANDSTATUSCLI | string | нет | TRACE | Уровень логирования для проверки состояний команд в сервисе статусов |
| IMPORTER_LOG_LEVEL_TEAM_ROUTES | string | нет | TRACE | Уровень логирования для роутов /team |
| IMPORTER_REPORT_BUCKET | string | да | importer | Название ведра для отчётов импорта в S3-подобном файлом хранилище |
| IMPORTER_REPORT_PATH | string | да | report | Префикс для названия отчётов импорта в S3-подобном файлом хранилище (выступает в роли поддиректории в ведре S3) |
| IMPORTER_IMPORT_BUCKET | string | да | importer | Название ведра для пользовательских файлов импорта в S3-подобном файлом хранилище |
| IMPORTER_IMPORT_PATH | string | да | import | Префикс для названия пользовательских файлов импорта в S3-подобном файлом хранилище (выступает в роли поддиректории в ведре S3) |
Список команд сервиса Importer
Список реализованных в сервисе команд, моделей EntityType и действий Actions, которые можно использовать при настройке авторизации.
| Название команды | EntityType | Actions |
|---|---|---|
| Список всех заданий импорта | ImportProcess | ListImportProcess |
| Получить задание импорта по ID | ImportProcess | GetImportProcess |
| Создать задание импорта | ImportProcess | CreateImportProcess |
| Отредактировать задание импорта | ImportProcess | UpdateImportProcess |
| Удалить задание импорта | ImportProcess | DeleteImportProcess |
| Запуск задания импорта по ID | ImportProcess | ExecuteImportProcess |
| Отмена задания импорта по ID | ImportProcess | ExecuteImportProcess |
| Получить прогресс задачи импорта | ImportProcess | ListImportProcess |
В описании команд используется путь/route для отправки команды в сам сервис, а не в ApiGateway. В качестве Input-а для команд, сервис всегда ожидает CommandRequest (как и любой другой сервис, принимающий команды), так что в описании команды указано лишь описание поля payload для CommandRequest.
ListImportProcess
Payload для команды
{
"query": "",
"context": {},
"sorting": {
"fieldName": "entityType",
"order": "desc"
},
"paging": {
"page": 1,
"count": 10
}
}
Результат выполнения команды
{
"items": [
{
"id": "b251c2e5-e12c-4792-b6f4-6578bfd4d6cd",
"entityType": "abc",
"status": "DRAFT",
"importConfig": {
"title": "Sample Project Title"
},
"importFile": "some file",
"resultFile": null,
"info": {},
"created": 1723809067603,
"createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"modified": 1723809067603,
"modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"executed": null,
"executedBy": null,
"version": 1
}
],
"total": 1
}
Возвращает список всех задач импорта. Поддерживается только синхронный вызов.
- На входе: Option[Search]
- На выходе: Page[ImportProcess]
| Команда | Путь |
|---|---|
| importer_ListImportProcess | HTTP POST "/v1/importProcess/list" |
Доступные поля для фильтрации и виды фильтров по ним:
| Поле | Виды фильтров |
|---|---|
| id | InSetQuery |
| entityType | InSetQuery, LikeQuery, TsQuery |
| status | InSetQuery |
Доступные поля для сортировки:
| Поле |
|---|
| entityType |
| status |
| created |
| modified |
| executed |
GetImportProcess
Payload для команды
"f283aac5-88e0-43b5-8dab-56c22d91acc7"
Результат выполнения команды
{
"id": "b251c2e5-e12c-4792-b6f4-6578bfd4d6cd",
"entityType": "abc",
"status": "DRAFT",
"importConfig": {
"title": "Sample Project Title"
},
"importFile": "some file",
"resultFile": null,
"info": {},
"created": 1723809067603,
"createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"modified": 1723809067603,
"modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"executed": null,
"executedBy": null,
"version": 1
}
Поиск задачи импорта с заданным идентификатором. Поддерживается только синхронный вызов.
- На входе: ImportProcessId (UUID)
- На выходе: ImportProcess
| Команда | Путь |
|---|---|
| importer_GetImportProcess | HTTP POST "/v1/importProcess/get" |
CreateImportProcess
Payload для команды
{
"entityType": "abc",
"importConfig": {
"title": "Sample Project Title"
},
"importFile": "some file"
}
Результат выполнения команды
"f283aac5-88e0-43b5-8dab-56c22d91acc7"
Добавляет новую задачу импорта с заданными параметрами. Отправляет событие о создании задачи импорта.
- На входе: ImportProcessCreateDto
- На выходе: ImportProcessId (UUID)
| Команда | Путь |
|---|---|
| importer_CreateImportProcess | - |
UpdateImportProcess
Payload для команды
{
"id": "f283aac5-88e0-43b5-8dab-56c22d91acc7",
"entityType": "abc",
"importConfig": {
"startRow": 3,
"columnMapping": [
{
"property": "title",
"columnLabel": "A"
}
]
},
"importFile": "bucket/file_id",
"version": 1
}
Результат выполнения команды
true
Обновляет данные задачи импорта. Отправляет событие об обновлении задачи импорта.
- На входе: ImportProcessUpdateDto
- На выходе: Boolean
| Команда | Путь |
|---|---|
| importer_UpdateImportProcess | - |
DeleteImportProcess
Payload для команды
"f283aac5-88e0-43b5-8dab-56c22d91acc7"
Результат выполнения команды
true
Удаляет задачу импорта с заданным идентификатором. Отправляет событие об удалении задачи импорта.
- На входе: ImportProcessId (UUID)
- На выходе: Boolean
| Команда | Путь |
|---|---|
| importer_DeleteImportProcess | - |
ExecuteImportProcess
Payload для команды
"b251c2e5-e12c-4792-b6f4-6578bfd4d6cd"
Результат выполнения команды
true
Запускает задачу импорта с заданным идентификатором. Отправляет событие о результатах выполнения задачи импорта.
- На входе: ImportProcessId (UUID)
- На выходе: Boolean
| Команда | Путь |
|---|---|
| importer_ExecuteImportProcess | - |
CancelImportProcess
Payload для команды
"b251c2e5-e12c-4792-b6f4-6578bfd4d6cd"
Результат выполнения команды
true
Остановка задачи импорта с заданным идентификатором. Поддерживается только синхронный вызов.
- На входе: ImportProcessId (UUID)
- На выходе: Boolean
| Команда | Путь |
|---|---|
| importer_CancelImportProcess | - |
GetImportProgress
Payload для команды
{
"id": "b251c2e5-e12c-4792-b6f4-6578bfd4d6cd"
}
Результат выполнения команды
{
"b251c2e5-e12c-4792-b6f4-6578bfd4d6cd": {
"estimateTime": "PT12H54M5.02S",
"percent": 0.3368487274760384,
"stats": [
{
"name": "Лист1",
"updates": {
"succeed": 0,
"skipped": 1723,
"total": 1723
},
"creates": {
"succeed": 569,
"skipped": null,
"total": 3277
},
"deleteRelations": {
"succeed": 0,
"skipped": null,
"total": 0
},
"createRelations": {
"succeed": 1139,
"skipped": null,
"total": 6555
},
"errors": 2
}
]
}
}
Прогресс задач импорта. Можно отфильтровать по идентификатору конкретной задачи. Поддерживается только синхронный вызов.
- На входе: GetImportProgressDto
- На выходе: Map[ImportProcessId, [EstimateProgressStats]]
| Команда | Путь |
|---|---|
| importer_GetImportProgress | - |
Модели сервиса Importer
ImportProcessCreateDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| entityType | EntityTypeId (String) | Да | Тип импортируемой сущности |
| importConfig | JSON (Object) | Да | Конфигурация импорта |
| importFile | String | Да | URI файла (стандартная FS загрузка) |
ImportProcessUpdateDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | ImportProcessId (UUID) | Да | Уникальный идентификатор задачи |
| entityType | EntityTypeId (String) | Да | Тип импортируемой сущности |
| importConfig | JSON (Object) | Да | Конфигурация импорта |
| importFile | String | Да | URI файла (стандартная FS загрузка) |
| version | Int | Да | Индекс оптимистической блокировки |
ImportProcess
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | ImportProcessId (UUID) | Да | Уникальный идентификатор задачи |
| entityType | EntityTypeId (String) | Да | Тип импортируемой сущности |
| status | ImportProcessStatus (String) | Да | Состояние задачи (DRAFT, IN PROGRESS, SUCCESS, ERROR) |
| importConfig | ImportConfig | Да | Конфигурация импорта |
| importFile | ImportFileInformation[] | Да | URI и имя файла |
| resultFile | ReportInformation[] | Нет | URI файла отчёта, кем и когда запущен, индекс файла импорта |
| info | ImportInfo | Да | Статистика по импорту (summary) |
| created | Long | Да | Дата создания записи |
| modified | Long | Да | Дата изменения записи |
| executed | Long | Нет | Дата изменения записи |
| createdBy | UserId (UUID) | Да | ID пользователя создавшего запись |
| modifiedBy | UserId (UUID) | Да | ID пользователя изменившего запись |
| executedBy | UserId (UUID) | Нет | ID пользователя изменившего запись |
| version | Int | Да | Индекс оптимистической блокировки |
GetImportProgressDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | ImportProcessId (UUID) | Нет | Получить статистику только для указанной задачи |
EstimateProgressStats
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| estimateTime | Duration ISO8601 | Да | Время до конца в таком формате PT12H54M5.02S |
| percent | Double | Да | Процент выполнения (уже рассчитанные цифры из stats) |
| stats | SheetImportTotalStatistic[] | Да | Числа статистики по листам |
SheetImportTotalStatistic
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| name | String | Да | Название листа |
| updates | StatFraction | Да | Количество обновлений |
| inserts | StatFraction | Да | Количество созданий |
| deleteRelations | StatFraction | Да | Количество удаленных связей |
| createRelations | StatFraction | Да | Количество созданных связей |
| errors | Int | Да | Количество ошибок |
StatFraction
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| succeed | Int | Да | Успешно обработано |
| skipped | Int | Нет | Пропущено |
| total | Int | Да | Всего операций |
ImportConfig
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| startRow | Int | Нет | С какой строки начать импорт |
| columnMapping | ColumnMapping[] | Да | Информация о сопоставлении столбцов из файла и данных сущности |
| allowDeleteRelations | Boolean | Нет | Разрешить удалять связи (в том числе при пустых ячейках исходя из конфигурации) |
| multipleValueSeparator | Boolean | Нет | Разделитель при перечислении у множественных полей |
ColumnMapping
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| columnLabel | String | Да | Название колонки файла, содержащей данные |
| property | String | Да | Атрибут сущности, в который загружаются данные из колонки |
| propertyPKField | String | Нет | Опциональное значение, указывающее атрибут связанного объекта или каталога,по которому будет осуществляться поиск соответствующего объекта |
| isPKProperty | Boolean | Нет | Использовать для загрузки это поле в качестве первичного ключа |
| isExternalId | Boolean | Нет | Использовать для загрузки это поле в качестве внешнего ID |
ImportFileInformation
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| fileName | String | Да | Имя файла загруженного для импорта |
| importUrl | String | Да | URI файла импорта (стандартная FS загрузка) |
ReportInformation
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| importFileIdx | Int | Да | Индекс файла из поля importFile (ImportFileInformation[]) |
| reportUrl | String | Да | URI файла отчёта (стандартная FS загрузка) |
| executedBy | UserId (UUID) | Да | Кем запущен |
| executed | TimeStamp (Long) | Да | Время завершения импорта (формируется ближе к концу процесса) |
ImportInfo
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| error | String | Нет | Ошибка, если был неуспешный запуск |
| stats | Int | SheetImportTotalStatistic | Статистика для первого листа |
VNP-control: сервис спец команд проекта DYG
Сервис подготавливает данные для построения деревьев ВНП
Команды могут приходить как по HTTP, так и через Kafka в топик vnpcontrol_commands.
В сервисе реализованы следующие команды:
Optimistic Lock
У нескольких команд реализован механизм оптимистичных блокировок. Для этого в данных присутствует поле version.
Задача оптимистичных блокировок - предотвратить одновременное редактирование объекта из двух открытых форм.
Сначала фронтэнд запрашивает данные объекта и получает в ответе версию данных - поле version.
Он прикладывает эту версию в ответе. Если на бэкэнде она совпадает с исходной (не было других модификаций),
тогда данные сохраняются, а версия поднимается. Иначе сохранения не происходит, данные не перетираются.
Сервис разбит на несколько модулей, в виде sbt проектов:
domain, в котором содержатся все доменные модели и их различные представления.commands, в котором содержатся все? что связано с командами, их описанием и обработчиками.infrastructure, в котором содержится описание взаимодействия с другими сервисами.storage, содержит сервисы для сохранения и чтения их разных хранилищ доменных моделей.service, содержит сервисы бизнес логики, которые определяют правила взаимодействия компонентов между собой.utils, в котором содержатся разные хелперы.boot, содержит зависимости и описание для сборки и запуска сервиса.
Информация по добавлению команд можно прочитать в описании шаблона
Конфигурирование
Требования к запуску
Запуск сервиса осуществляется локально через sbt, на стенде в docker на jvm.
Для корректной минимальной работы сервиса требуется обязательное подключение к PostgreSQL, Kafka, Consul. Для настройки подключения к ним нужно заполнить обязательные переменные окружения из раздела ниже.
Для нормальной работы сервису дополнительно требуется окружение Verdi: CommandStatus, ApiGateway. В этом случае нужно уделить внимание настройкам, связанным с ServiceDiscovery и CommandDiscovery.
Во время работы, сервис общается с другими сервисами, т.е. они нужны только в момент выполнения команд. Список сервисов приведен в таблице ниже.
| Команда | Внешние сервисы |
|---|
Запуск из консоли с помощью SBT
VNPCONTROL_DB_HOST=localhost VNPCONTROL_DB_PORT=5432 VNPCONTROL_DB_NAME=vnpcontrol_db VNPCONTROL_DB_USER=postgres VNPCONTROL_DB_PASSWORD=12345 sbt boot/run
Список переменных окружения
Все доступные переменные окружения для настройки сервиса.
Настройки логеров описаны в общей документации.
| Переменная | Тип | Обязательная | Значение по умолчанию | Описание |
|---|---|---|---|---|
| VNPCONTROL_HTTP_HOST | string | нет | "0.0.0.0" | Хост, на котором слушает HTTP-сервер |
| VNPCONTROL_HTTP_PORT | int | нет | 8192 | Порт, на котором слушает HTTP-сервер |
| VNPCONTROL_KAFKA_SERVERS | string | да | "localhost:9092" | Адрес Kafka |
| VNPCONTROL_KAFKA_TOPIC | string | нет | "vnpcontrol_commands" | Название кафка-топика для получения команд. Сервис получает кафка-команды по нему, но и также сам публикует это название в CommandDiscovery. |
| VNPCONTROL_KAFKA_CONSUMER_GROUP | string | нет | "vnpcontrol_consumer_group" | Имя consumer-группы для чтения из кафка-топика команд. Не должна меняться и не должна быть пустой, иначе сервис перечитает свои команды при перезапуске. |
| VNPCONTROL_KAFKA_PARTITIONS | int | нет | 10 | Число читаемых партиций из кафка-топика команд. |
| VNPCONTROL_KAFKA_CONSUMER_RESTART_MIN_BACKOFF | duration string | нет | 1 second | Изначальная задержка до рестарта консьюмера после падения (увеличивается в 2 раза после каждого рестарта) |
| VNPCONTROL_KAFKA_CONSUMER_RESTART_MAX_BACKOFF | duration string | нет | 30 seconds | Максимальное задержка до рестарта консьюмера после падения |
| VNPCONTROL_KAFKA_CONSUMER_RESTART_RANDOM_FACTOR | double | нет | 0.2 | Рандомный фактор для вычисления задержки перед следующим рестратом консьюмера (При значении 0.2 задержка может быть до 20% больше, чем при 0) |
| VNPCONTROL_KAFKA_CONSUMER_RESTART_MAX_RESTARTS | int | нет | 5 | Максимальное число рестартов консьюмера после падения (в пределах VNPCONTROL_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN) |
| VNPCONTROL_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN | duration string | нет | 5 minutes | Временной отрезок, в который VNPCONTROL_KAFKA_CONSUMER_RESTART_MAX_RESTARTS ограничивает число рестартов |
| VNPCONTROL_KAFKA_COMMANDEVENT_TOPIC | string | да | "commandevents" | Название кафка-топика для отправки сообщений со статусами выполняемых команд. ОБЯЗАТЕЛЬНО должно соответствовать названию этого топика в сервисе статуса команд. |
| VNPCONTROL_KAFKA_PROJECTCONFIGEVENT_TOPIC | string | да | "projectConfigEvents" | Название кафка-топика для отправки сообщений о событиях изменения конфигураций проекта. |
| VNPCONTROL_KAFKA_GENERATIONRULESET_TOPIC | string | да | "generationRuleSetEvents" | Название кафка-топика для отправки сообщений о событиях изменения правил генерации документа. |
| VNPCONTROL_KAFKA_NUMERATIONRULE_TOPIC | string | да | "numerationRuleEvents" | Название кафка-топика для отправки сообщений о событиях изменения правил нумерации сущности. |
| VNPCONTROL_KAFKA_VALUEGENERATIONRULE_TOPIC | string | да | "valueGenerationRuleEvents" | Название кафка-топика для отправки сообщений о событиях изменения правил заполнения полей сущностей. |
| VNPCONTROL_KAFKA_AUTH_USER | string | нет | "" | Название учетной записи Kafka. Если название не указано, то настройки авторизации не будут применены. |
| VNPCONTROL_KAFKA_AUTH_PASSWORD | string | нет | "" | Пароль учетной записи Kafka. |
| VNPCONTROL_KAFKA_AUTH_PRINCIPAL | string | нет | "" | Principal учетной записи Kafka в Kerberos(в случае соединения с kafka через Kerberos). |
| VNPCONTROL_KAFKA_AUTH_KEYTAB_PATH | string | нет | "" | Путь до keytab-файла(в случае соединения с kafka через Kerberos). |
| VNPCONTROL_KAFKA_AUTH_TRUSTSTORE_LOCATION | string | нет | "" | Путь до хранилища сертификатов (Java key store). Если путь не указан, то сертификат применяться не будет. |
| VNPCONTROL_KAFKA_AUTH_TRUSTSTORE_PASSWORD | string | нет | "" | Пароль к хранилищу сертификатов. |
| VNPCONTROL_KAFKA_AUTH_MODE | string | нет | "static" | Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса |
| VNPCONTROL_KAFKA_AUTH_CONFIG | string | нет | "" | Настройки для аутентификации: если AuthMode = mapping, то необходим JSON с List[KafkaAuthConfig]. Переменная соответствует полю authConfig из KafkaAuthSettings. |
| VNPCONTROL_KAFKA_AUTH_CACHE_SIZE | int | нет | Максимальный размер кеша для Kafka producer (количество активных соединений). | |
| VNPCONTROL_KAFKA_AUTH_CACHE_TTL | duration string | нет | Время жизни Kafka producer в кеше. | |
| VNPCONTROL_CONSUL_ADDR | url string | нет | "http://localhost:8500" | Адрес Сonsul. |
| VNPCONTROL_CONSUL_AUTH_USER | string | нет | "" | Название учетной записи Сonsul. Если название не указано, то настройки авторизации не будут применены. |
| VNPCONTROL_CONSUL_AUTH_PASSWORD | string | нет | "" | Пароль учетной записи Сonsul. |
| VNPCONTROL_TRACE_DURATION | boolean | нет | false | Признак необходимости трассировки выполнения команд |
| VNPCONTROL_DISCOVERABLE_ID | string | нет | "another_VNPCONTROL_service_instance" | ID сервиса в ServiceDiscovery |
| VNPCONTROL_DISCOVERABLE_NAME | string | нет | "vnpcontrol" | Имя сервиса в ServiceDiscovery |
| VNPCONTROL_DISCOVERABLE_HOST | string | да | "localhost" | Хост, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. Указанный адрес должен быть виден другим сервисам. Пример: имя kubernetes/docker_swarm service |
| VNPCONTROL_DISCOVERABLE_PORT | int | нет | Порт, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. По умолчанию указывается порт, который слушает HTTP-сервер. | |
| VNPCONTROL_DISCOVERABLE_LIVETIME | duration string | нет | 2 minutes | Период после последней отправки health check, в течение которого ServiceDiscovery считает данный сервис живым. |
| VNPCONTROL_DISCOVERABLE_HEALTHPASS | string | нет | 1 minute | Периодичность отправки health check в ServiceDiscovery |
| VNPCONTROL_SERVICE_TITLE | string | нет | "Vnpcontrol" | Название сервиса для отображения |
| VNPCONTROL_SERVICE_DESCRIPTION | string | нет | "Сервис аналитики" | Описание сервиса для отображения |
| VNPCONTROL_AKKA_HTTP_CLIENT_MAXCON | int | нет | 512 | Максимальное число одновременных исходящих HTTP-соединений |
| VNPCONTROL_AKKA_HTTP_CLIENT_MAXREQ | int | нет | 1024 | Максимальное число одновременных исходящих HTTP-запросов |
| VNPCONTROL_AKKA_HTTP_SERVER_MAXCON | int | нет | 1024 | Максимальное число одновременных входящих HTTP-соединений |
| VNPCONTROL_INTERNALCMD_ALLOW | bool | нет | false | Можно ли сервису отправлять внутрисистемные команды |
| VNPCONTROL_SENDERLIB_COMMANDS_CACHE_UPDATEPERIOD | duration string | нет | 10 minutes | Время кэширования данных по командам из CommandDiscovery |
| VNPCONTROL_SENDERLIB_SERVICES_CACHE_UPDATEPERIOD | duration string | нет | 30 seconds | Время кэширования данных по сервисам из ServiceDiscovery |
| VNPCONTROL_DB_HOST | string | да | Хост БД | |
| VNPCONTROL_DB_PORT | int | да | Порт БД | |
| VNPCONTROL_DB_NAME | string | да | Имя базы в БД | |
| VNPCONTROL_DB_URL | jdbc url string | нет | JDBC-url для соединения с БД. По умолчанию собирается из других обязательных переменных. Можно указать только его, если не хочется отдельно указывать хост/порт/имя базы. | |
| VNPCONTROL_DB_USER | string | да | Пользователь БД | |
| VNPCONTROL_DB_PASSWORD | string | да | Пароль пользователя БД | |
| VNPCONTROL_DB_THREADS | int | нет | 10 | Количество потоков в пуле потоков для соединения с БД |
| VNPCONTROL_DB_QUEUE_SIZE | int | нет | 300 | Размер очереди для действий базы данных, которые не могут быть выполнены немедленно, когда все потоки заняты. За пределами этого значения новые действия немедленно завершаются неудачей |
| VNPCONTROL_DB_CONN_MAX | int | нет | 10 | Максимальное количество одновременных подключений к БД |
| VNPCONTROL_DB_CONN_TIMEOUT | duration string | нет | 20 second | Максимальное время ожидания ответа для соединения к БД. Если это время превышено, а соединение не становится доступным, будет брошено исключение SQLException. 1000 мс — минимальное значение. |
| VNPCONTROL_DB_ISOLATION | string | нет | "READ_COMMITTED" | Уровень изоляции транзакций для новых подключений. Допустимые значения: NONE, READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, SERIALIZABLE. |
| VNPCONTROL_DB_READONLY | boolean | нет | false | Read-only SQL транзакция может изменять только временные таблицы. Этот параметр управляет статусом «только для чтения» по умолчанию для каждой новой транзакции. |
| VNPCONTROL_DB_CONN_MIN | int | нет | = DB_THREADS | Минимальное количество одновременных подключений к БД |
| VNPCONTROL_DB_VALIDATION_TIMEOUT | duration string | нет | 1 seconds | Максимальное время, в течение которого соединение будет проверяться на работоспособность. 1000 мс — минимальное значение. |
| VNPCONTROL_DB_IDLE_TIMEOUT | duration string | нет | 10 minutes | Максимальное время, в течение которого соединению разрешено простаивать в пуле. Значение 0 означает, что простаивающие соединения никогда не удаляются из пула. |
| VNPCONTROL_DB_MAX_LIFETIME | duration string | нет | 30 minutes | Максимальное время жизни соединения в пуле. Когда простаивающее соединение достигает этого времени ожидания, даже если оно недавно использовалось, оно будет удалено из пула. Значение 0 указывает на отсутствие максимального срока службы. |
| VNPCONTROL_DB_INITIALIZATION_FAIL_FAST | string | нет | false | Определяет, будет ли пул «быстро выходить из строя», если пул не может быть успешно заполнен начальными соединениями. Если соединения не могут быть созданы во время запуска пула, будет выдано исключение RuntimeException. Это свойство не имеет никакого эффекта, если minConnections равно 0. |
| VNPCONTROL_DB_LEAK_DETECTION_THRESHOLD | int | нет | 0 | Время, в течение которого соединение может находиться вне пула, прежде чем будет зарегистрировано сообщение, указывающее на возможную утечку соединения. Значение 0 означает, что обнаружение утечек отключено. Наименьшее приемлемое значение для включения обнаружения утечек составляет 10 с. |
| VNPCONTROL_DB_CONNECTION_TEST_QUERY | string | нет | "SELECT 1" | Выражение, которое будет выполнено непосредственно перед получением соединения из пула для проверки того, что соединение с базой данных все еще активно. Оно зависит от базы данных и должно представлять собой запрос, требующий минимальной обработки базой данных (например, «VALUES 1»). Если этот параметр не установлен, вместо него используется метод JDBC4 Connection.isValid(). |
| VNPCONTROL_DB_REGISTER_MBEANS | boolean | нет | false | Зарегистрированы ли JMX Management Beans («MBeans») |
| VNPCONTROL_FS_URI | string | да | http://localhost:9000/ | Адрес файлового хранилища |
| VNPCONTROL_FS_ACCESS_KEY_ID | string | да | minioadmin | Имя пользователя файлового хранилища |
| VNPCONTROL_FS_SECRET_ACCESS_KEY | string | да | minioadmin | Пароль пользователя файлового хранилища |
| VNPCONTROL_FS_UPLOAD_PARALLELISM | int | нет | 4 | Параллелизм для загрузки файлов |
| VNPCONTROL_FS_AUTH_MODE | string | нет | static | Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса |
| VNPCONTROL_FS_AUTH_CONFIG | string | нет | "" | Настройки для аутентификации: если AuthMode = mapping, то необходим JSON с List[FSBucketConfig] соответствует полю authConfig FSConfigRep |
| VNPCONTROL_FS_CACHE_SIZE | int | нет | 1 | Максимальный размер кеша клиентов для хранилища файлов (количество активных соединений). |
| VNPCONTROL_FS_CACHE_TTL | duration string | нет | Время жизни клиента в кеше | |
| VNPCONTROL_EXTERNAL_MIGRATIONS_RETRY_DELAY | duration string | нет | 15 seconds | Задержка между повторными попытками запуска внешних миграций |
| VNPCONTROL_EXTERNAL_MIGRATIONS_RETRY_ATTEMPTS | int | нет | 5 | Максимальное количество попыток запуска внешних миграций |
| VNPCONTROL_DM_SCHEMA_CACHE_SIZE | int | нет | 128 | Максимальный размер кэша для json schema |
| VNPCONTROL_DM_SCHEMA_CACHE_TTL | duration string | нет | 5 minute | Время жизни элементов в кэше для json schema |
| VNPCONTROL_FTS_MAPPING_CACHE_SIZE | int | нет | 64 | Максимальный размер кэша для маппингов в полнотекстовом поиске |
| VNPCONTROL_FTS_MAPPING_CACHE_TTL | duration string | нет | 5 minute | Время жизни элементов в кэше для маппингов в полнотекстовом поиске |
| VNPCONTROL_DM_OBJECT_PAGE_SIZE | int | нет | 100 | Размер страницы при выборке объектов из data-model |
| VNPCONTROL_AUTHORIZER_KIND | string | нет | "authzforce" | Вид авторизатора, который используется в сервисе. Допустимые значения: "authzforce", "oberto". При указании неизвестного значения будет использовано значение по-умолчанию. |
| VNPCONTROL_SENDERLIB_COMMANDS_HTTP_RETRY_ATTEMPTS | int | нет | 5 | Поле attempts из RetrySettings |
| VNPCONTROL_SENDERLIB_COMMANDS_HTTP_RETRY_DELAY | duration string | нет | "5 seconds" | Поле delay из RetrySettings |
| VNPCONTROL_SENDERLIB_COMMANDS_HTTP_RETRY_KIND | string | нет | "OnSomeExceptions(ConnectException)" | CommandResultRetryConditionKind |
Список команд сервиса VNP-control
Список реализованных в сервисе команд, моделей EntityType и действий Actions, которые можно использовать при настройке авторизации.
В описании команд используется путь/route для отправки команды в сам сервис, а не в ApiGateway. В качестве Input-а для команд, сервис всегда ожидает CommandRequest (как и любой другой сервис, принимающий команды), так что в описании команды указано лишь описание поля payload для CommandRequest.
ListVnpHierarchyV2
Payload для команды
{
"hierarchyCode": "TagTree",
"hierarchySearch": {
"search": {
"query": "",
"context": {},
"sorting": {
"fieldName": "title",
"order": "desc"
},
"paging": {
"page": 1,
"count": 10
}
},
"expandTree": true
}
}
Результат выполнения команды
{
"tree": {
"items": [
{
"entityObject": {
"id": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
"hierarchyEntityId": "HierarchyEntityId",
"parentId": null,
"data": {
"code": "10",
"title": "Блок кондуктор",
"nodeType": "entityObject",
"entityObject": {
"objectId": "9acdb6e7-18d2-42bd-bbd2-af5d4f98662a",
"entityType": "Object"
}
},
"externalType": "entityObject",
"externalEntityType": "Object",
"externalId": "9acdb6e7-18d2-42bd-bbd2-af5d4f98662a",
"created": 1664292962695,
"createdBy": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
"modified": 1664292962695,
"modifiedBy": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
"removed": false,
"version": 2
},
"isMatched": true,
"childrenCount": 10,
"children": [
{
"entityObject": "{ other child entity object }",
"isMatched": true,
"other ExtendedDto fields...": "...also with children"
},
"next children..."
]
}
],
"total": 1
},
"statistic": [
{
"nodeType": "entityObject",
"entityCodeType": "Object",
"count": 1
},
{
"nodeType": "entityObject",
"entityCodeType": "complex",
"count": 19
},
{
"nodeType": "entityObject",
"entityCodeType": "system",
"count": 78
},
{
"nodeType": "entityObject",
"entityCodeType": "TagTypes",
"count": 9
},
{
"nodeType": "tag",
"entityCodeType": "Tag",
"count": 1
}
]
}
Команда отображения полного дерева ВНП. Без предварительной генерации строить дерево по
данным [hierarchyEntity -> data]*2.
Не все настройки генерации передаются со входными данными, часть так же указана в поле иерархии
data -> HierarchyData.Settings.
- Опциональные параметры baseEntityFilterField*. Для фильтрации базовой сущности можно применить атрибут её модели данных и предполагаемое значение. Правила заполнения аналогичны работе с Search, но только по одному атрибуту.
- На входе: ListVnpHierarchyDto
- На выходе: TreeWithStatistic
| Команда | Путь |
|---|---|
| vnpcontrol_ListVnpHierarchyV2 | v1/hierarchy/listVnpHierarchyV2 |
ListHierarchyEntity
Payload для команды
{
"query": "",
"context": {},
"sorting": {
"fieldName": "title",
"order": "desc"
},
"paging": {
"page": 1,
"count": 5
}
}
Результат выполнения команды
{
"items": [
{
"id": "HierarchyEntityId",
"title": "title",
"description": "description1",
"data": {
"someInfo": {
"info": "info",
"numberInfo": 10
}
},
"created": 1736862738971,
"createdBy": "837068a9-1e9c-4326-a449-5c830c0115fd",
"modified": 1736930690417,
"modifiedBy": "837068a9-1e9c-4326-a449-5c830c0115fd",
"version": 8
}
],
"total": 1
}
Получение списка иерархичных сущностей с поиском, сортировкой и пагинацией.
- Input: Search
- Output: Page[HierarchyEntity]
| Команда | Путь |
|---|---|
| vnpcontrol_listHierarchyEntities | HTTP POST "/v1/hierarchyEntity/list" |
GetHierarchyEntity
Payload для команды
"HierarchyEntityId"
Результат выполнения команды
{
"id": "HierarchyEntityId",
"title": "title",
"description": "description",
"data": {
"someInfo": "info"
},
"created": 1664292962695,
"createdBy": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
"modified": 1664292962695,
"modifiedBy": "ccdeecc5-ff63-4c98-80d6-bab044cc5f1e",
"version": 2
}
Получение иерархичной сущности.
- Input: UUID задачи
- Output: HierarchyEntity
| Команда | Путь |
|---|---|
| vnpcontrol_getHierarchyEntity | HTTP POST "/v1/hierarchyEntity/get" |
CreateHierarchyEntity
Payload для команды
{
"id": "HierarchyEntityId",
"title": "title",
"description": "description",
"data": {
"someInfo": "info"
},
"externalType": "catalogItem",
"externalEntityType": "CatalogCode1",
"externalId": "6d873b43-0913-4fde-827c-968f13ebf778"
}
Результат выполнения команды
"HierarchyEntityId"
Добавление новой иерархичной сущности.
- Input: HierarchyEntityCreateDto
- Output: Id созданной задачи
| Команда | Путь |
|---|---|
| vnpcontrol_createHierarchyEntity | - |
UpdateHierarchyEntity
Payload для команды
{
"id": "HierarchyEntityId",
"title": "title",
"description": "description",
"data": {
"someInfo": "info"
},
"version": 1
}
Результат выполнения команды
true
Обновление иерархичной сущности.
- Input: HierarchyEntityUpdateDto
- Output: Boolean
| Команда | Путь |
|---|---|
| vnpcontrol_updateHierarchyEntity | - |
DeleteHierarchyEntity
Payload для команды
"hierarchyEntityId"
Результат выполнения команды
true
Удаление иерархичной сущности.
- Input: ID иерархичной сущности
- Output: Boolean
| Команда | Путь |
|---|---|
| vnpcontrol_deleteHierarchyEntity | - |
ListProjectConfig
Payload для команды
{
"query": "",
"context": {},
"sorting": {
"fieldName": "title",
"order": "desc"
},
"paging": {
"page": 1,
"count": 10
}
}
Результат выполнения команды
{
"items": [
{
"id": "some-id",
"title": "Sample Project Title 1",
"tag": "sample-tag 1",
"documentSettings": [
{
"entityType": "document-content 1",
"documentFilter": {
"field": "stadia",
"sections": [
"09dc7d4c-acc5-466c-9c58-96fd21080600",
"aeb4fe43-3af1-45bc-99e6-cb3aca812b85",
"7a959af2-6e9a-4d5d-8a63-f611adf4bfd0"
],
"isRelation": false
}
}
],
"created": 1723553566671,
"createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"modified": 1723553569099,
"modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"registry": [
"a"
],
"additionalData": {
"b": "c"
},
"version": 2
}
],
"total": 1
}
Возвращает список всех конфигураций проекта. Поддерживается только синхронный вызов.
- На входе: Option[Search]
- На выходе: Page[ProjectConfig]
| Команда | Путь |
|---|---|
| vnpcontrol_ListProjectConfig | HTTP POST "/v1/projectConfig/list" |
Доступные поля для фильтрации и виды фильтров по ним:
| Поле | Виды фильтров |
|---|---|
| id | InSetQuery, LikeQuery |
| title | InSetQuery, LikeQuery, TsQuery |
| tag | InSetQuery, LikeQuery, TsQuery |
| document | InSetQuery, LikeQuery, TsQuery |
Доступные поля для сортировки:
| Поле |
|---|
| title |
| tag |
| created |
| modified |
GetProjectConfig
Payload для команды
"some-id"
Результат выполнения команды
{
"id": "some-id",
"title": "Sample Project Title 1",
"tag": "sample-tag 1",
"documentSettings": [
{
"entityType": "document-content 1",
"documentFilter": {
"field": "stadia",
"sections": [
"09dc7d4c-acc5-466c-9c58-96fd21080600",
"aeb4fe43-3af1-45bc-99e6-cb3aca812b85",
"7a959af2-6e9a-4d5d-8a63-f611adf4bfd0"
],
"isRelation": false
}
}
],
"created": 1723553566671,
"createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"modified": 1723553569099,
"modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"registry": [
"a"
],
"additionalData": {
"b": "c"
},
"version": 2
}
Поиск конфигурации проекта с заданным идентификатором. Поддерживается только синхронный вызов.
- На входе: ProjectConfigId (String)
- На выходе: ProjectConfig
| Команда | Путь |
|---|---|
| vnpcontrol_GetProjectConfig | HTTP POST "/v1/projectConfig/get" |
CreateProjectConfig
Payload для команды
{
"id": "some-id",
"title": "Sample Project Title",
"tag": "sample-tag",
"documentSettings": [
{
"entityType": "document-content 1",
"documentFilter": {
"field": "stadia",
"sections": [
"09dc7d4c-acc5-466c-9c58-96fd21080600",
"aeb4fe43-3af1-45bc-99e6-cb3aca812b85",
"7a959af2-6e9a-4d5d-8a63-f611adf4bfd0"
],
"isRelation": false
}
}
],
"registry": [],
"additionalData": {}
}
Результат выполнения команды
"some-id"
Добавляет новую конфигурацию проекта с заданными параметрами. Отправляет событие о создании конфигурации проекта.
- На входе: CreateProjectConfig
- На выходе: ProjectConfigId (String)
| Команда | Путь |
|---|---|
| vnpcontrol_CreateProjectConfig | - |
UpdateProjectConfig
Payload для команды
{
"id": "some-id",
"title": "Sample Project Title 1",
"tag": "sample-tag 1",
"documentSettings": [
{
"entityType": "document-content 1",
"documentFilter": {
"field": "stadia",
"sections": [
"09dc7d4c-acc5-466c-9c58-96fd21080600",
"aeb4fe43-3af1-45bc-99e6-cb3aca812b85",
"7a959af2-6e9a-4d5d-8a63-f611adf4bfd0"
],
"isRelation": false
}
}
],
"registry": [
"a"
],
"additionalData": {
"b": "c"
},
"version": 1
}
Результат выполнения команды
true
Обновляет данные о конфигурации проекта. Отправляет событие об обновлении конфигурации проекта.
- На входе: UpdateProjectConfig
- На выходе: Boolean
| Команда | Путь |
|---|---|
| vnpcontrol_UpdateProjectConfig | - |
DeleteProjectConfig
Payload для команды
"some-id"
Результат выполнения команды
true
Удаляет конфигурацию проекта с заданным идентификатором. Отправляет событие об удалении проекта конфигурации.
- На входе: ProjectConfigId (String)
- На выходе: Boolean
| Команда | Путь |
|---|---|
| vnpcontrol_DeleteProjectConfig | - |
ListGenerationRuleSet
Payload для команды
{
"query": "",
"context": {},
"sorting": {
"fieldName": "title",
"order": "desc"
},
"paging": {
"page": 1,
"count": 10
}
}
Результат выполнения команды
{
"items": [
{
"id": "some-id",
"title": "Sample GenerationRule Title 2",
"description": "some description 2",
"buttonTitle": "trueTitle",
"action": "action2",
"rules": [
"rule2"
],
"created": 1726211900106,
"createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"modified": 1726211947374,
"modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"version": 2
}
],
"total": 1
}
Возвращает список всех конфигураций проекта. Поддерживается только синхронный вызов.
- На входе: Option[Search]
- На выходе: Page[GenerationRuleSet]
| Команда | Путь |
|---|---|
| vnpcontrol_ListGenerationRuleSet | HTTP POST "/v1/generationRuleSet/list" |
Доступные поля для фильтрации и виды фильтров по ним:
| Поле | Виды фильтров |
|---|---|
| id | InSetQuery, LikeQuery |
| title | InSetQuery, LikeQuery, TsQuery |
| description | InSetQuery, LikeQuery, TsQuery |
Доступные поля для сортировки:
| Поле |
|---|
| title |
| description |
| created |
| modified |
GetGenerationRuleSet
Payload для команды
"some-id"
Результат выполнения команды
{
"id": "some-id",
"title": "Sample GenerationRule Title 2",
"description": "some description 2",
"buttonTitle": "trueTitle",
"action": "action2",
"rules": [
"rule2"
],
"created": 1726211900106,
"createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"modified": 1726211947374,
"modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"version": 2
}
Получение набора правил генерации сущностей с заданным идентификатором. Поддерживается только синхронный вызов.
- На входе: GenerationRuleSetId (String)
- На выходе: GenerationRuleSet
| Команда | Путь |
|---|---|
| vnpcontrol_GetGenerationRuleSet | HTTP POST "/v1/generationRuleSet/get" |
CreateGenerationRuleSet
Payload для команды
{
"id": "some-id",
"title": "Sample GenerationRule Title",
"description": "some description",
"buttonTitle": "document-content",
"action": "action",
"rules": [
"rule1"
]
}
Результат выполнения команды
"some-id"
Добавляет новый набор правил генерации сущностей с заданными параметрами. Отправляет событие о создании набора правил генерации сущностей.
- На входе: CreateGenerationRuleSet
- На выходе: GenerationRuleSetId (String)
| Команда | Путь |
|---|---|
| vnpcontrol_CreateGenerationRuleSet | - |
UpdateGenerationRuleSet
Payload для команды
{
"id": "some-id",
"title": "Sample GenerationRule Title 2",
"description": "some description 2",
"buttonTitle": "trueTitle",
"action": "action2",
"rules": [
"rule2"
],
"version": 1
}
Результат выполнения команды
true
Обновляет данные о наборе правил генерации сущностей. Отправляет событие об обновлении набора правил генерации сущностей.
- На входе: UpdateGenerationRuleSet
- На выходе: Boolean
| Команда | Путь |
|---|---|
| vnpcontrol_UpdateGenerationRuleSet | - |
DeleteGenerationRuleSet
Payload для команды
"some-id"
Результат выполнения команды
true
Удаляет набор правил генерации сущностей с заданным идентификатором. Отправляет событие об удалении набора правил генерации сущностей.
- На входе: GenerationRuleSetId (String)
- На выходе: Boolean
| Команда | Путь |
|---|---|
| vnpcontrol_DeleteGenerationRuleSet | - |
GenerateEntities
Payload для команды
{
"generationRuleSetId": "some-gen-rule-id-3",
"numerationRuleId": "19b027c6-50b7-4bae-a8f0-72746d2a25b4",
"generateValues": "true",
"entityType": "Object",
"search": {
"query": "",
"context": {},
"sorting": {
"fieldName": "title",
"order": "desc"
}
}
}
Результат выполнения команды
"69b027c6-50b7-4bae-a8f0-72746d2a25bd"
Генерирует и создаёт объекты в сервисе DataModel. Возвращает ID записи журнала генерации, он же ID задачи на генерацию (для отмены задачи) и реестра сгенерированных сущностей (пока не поддерживается)
- На входе: GenerateEntitiesInput
- На выходе: GenerationJournalId (UUID)
| Команда | Путь |
|---|---|
| vnpcontrol_GenerateEntities | - |
ListNumerationRule
Payload для команды
{
"query": "",
"context": {},
"sorting": {
"fieldName": "title",
"order": "desc"
},
"paging": {
"page": 1,
"count": 10
}
}
Результат выполнения команды
{
"items": [
{
"id": "some-id",
"entityType": "Some EntityTypeId",
"fieldCode": "some fieldCode",
"title": "Sample NumerationRule Title 2",
"description": "some description 2",
"config": {
"rule2": "attr56"
},
"created": 1726211900106,
"createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"modified": 1726211947374,
"modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"version": 2
}
],
"total": 1
}
Возвращает список всех правил нумерации сущностей. Поддерживается только синхронный вызов.
- На входе: Option[Search]
- На выходе: Page[NumerationRule]
| Команда | Путь |
|---|---|
| vnpcontrol_ListNumerationRule | HTTP POST "/v1/numerationRule/list" |
Доступные поля для фильтрации и виды фильтров по ним:
| Поле | Виды фильтров |
|---|---|
| id | InSetQuery, LikeQuery |
| entityType | InSetQuery |
| fieldCode | InSetQuery |
| title | InSetQuery, LikeQuery, TsQuery |
| description | InSetQuery, LikeQuery, TsQuery |
Доступные поля для сортировки:
| Поле |
|---|
| title |
| description |
| created |
| modified |
GetNumerationRule
Payload для команды
"some-id"
Результат выполнения команды
{
"id": "some-id",
"entityType": "Some EntityTypeId",
"fieldCode": "some fieldCode",
"title": "Sample NumerationRule Title 2",
"description": "some description 2",
"config": {
"rule2": "attr56"
},
"created": 1726211900106,
"createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"modified": 1726211947374,
"modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"version": 2
}
Получение правила нумерации сущностей с заданным идентификатором. Поддерживается только синхронный вызов.
- На входе: NumerationRuleId (String)
- На выходе: NumerationRule
| Команда | Путь |
|---|---|
| vnpcontrol_GetNumerationRule | HTTP POST "/v1/numerationRule/get" |
CreateNumerationRule
Payload для команды
{
"entityType": "Some EntityTypeId",
"fieldCode": "some fieldCode",
"title": "Sample NumerationRule Title 2",
"description": "some description 2",
"config": {
"rule2": "attr56"
}
}
Результат выполнения команды
"some-id"
Добавляет новое правило нумерации сущностей с заданными параметрами. Отправляет событие о создании правила нумерации сущностей.
- На входе: CreateNumerationRule
- На выходе: NumerationRuleId (String)
| Команда | Путь |
|---|---|
| vnpcontrol_CreateNumerationRule | - |
UpdateNumerationRule
Payload для команды
{
"id": "some-id",
"entityType": "Some EntityTypeId",
"fieldCode": "some fieldCode",
"title": "Sample NumerationRule Title 2",
"description": "some description 2",
"config": {
"rule2": "attr56"
},
"version": 1
}
Результат выполнения команды
true
Обновляет данные о правиле нумерации сущностей. Отправляет событие об обновлении правила нумерации сущностей.
- На входе: UpdateNumerationRule
- На выходе: Boolean
| Команда | Путь |
|---|---|
| vnpcontrol_UpdateNumerationRule | - |
DeleteNumerationRule
Payload для команды
"some-id"
Результат выполнения команды
true
Удаляет правило нумерации сущностей с заданным идентификатором. Отправляет событие об удалении правила нумерации сущностей.
- На входе: NumerationRuleId (String)
- На выходе: Boolean
| Команда | Путь |
|---|---|
| vnpcontrol_DeleteNumerationRule | - |
ExecuteNumeration
Payload для команды
{
"numerationRuleId": "19b027c6-50b7-4bae-a8f0-72746d2a25b4",
"entityType": "SomeEntity",
"ids": [
"27c623b0-a253a-4bae-a8f0-72746d250b7",
"237c623b-a253a-4bae-a8f0-72746d250b4"
]
}
Результат выполнения команды
"3b97ba40-e44b-46ce-8644-30dd5958c855"
Запускает процесс нумерации сущностей в сервисе DataModel. Возвращает ID записи журнала генерации, он же ID задачи на генерацию (для отмены задачи)
- На входе: ExecuteNumerationInput
- На выходе: GenerationJournalId (UUID)
| Команда | Путь |
|---|---|
| vnpcontrol_ExecuteNumeration | - |
ListValueGenerationRule
Возвращает список всех правил формирования значения атрибута сущностей. Поддерживается только синхронный вызов.
- На входе: Option[Search]
- На выходе: Page[ValueGenerationRule]
| Команда | Путь |
|---|---|
| vnpcontrol_ListValueGenerationRule | HTTP POST "/v1/valueGenerationRule/list" |
Доступные поля для фильтрации и виды фильтров по ним:
| Поле | Виды фильтров |
|---|---|
| id | InSetQuery, LikeQuery |
| ruleType | InSetQuery |
| entityType | InSetQuery |
| fieldCode | InSetQuery |
| title | InSetQuery, LikeQuery, TsQuery |
| description | InSetQuery, LikeQuery, TsQuery |
Доступные поля для сортировки:
| Поле |
|---|
| title |
| description |
| created |
| modified |
Payload для команды
{
"query": "",
"context": {},
"sorting": {
"fieldName": "title",
"order": "desc"
},
"paging": {
"page": 1,
"count": 10
}
}
Результат выполнения команды
{
"items": [
{
"id": "some-id",
"entityType": "Some EntityTypeId",
"fieldCode": "some fieldCode",
"title": "Sample ValueGenerationRule Title 2",
"description": "some description 2",
"config": {
"rule2": "attr56"
},
"created": 1726211900106,
"createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"modified": 1726211947374,
"modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"version": 2
}
],
"total": 1
}
Возвращает список всех правил формирования значения атрибута сущностей. Поддерживается только синхронный вызов.
- На входе: Option[Search]
- На выходе: Page[ValueGenerationRule]
| Команда | Путь |
|---|---|
| vnpcontrol_ListValueGenerationRule | HTTP POST "/v1/valueGenerationRule/list" |
Доступные поля для фильтрации и виды фильтров по ним:
| Поле | Виды фильтров |
|---|---|
| id | InSetQuery, LikeQuery |
| entityType | InSetQuery |
| fieldCode | InSetQuery |
| title | InSetQuery, LikeQuery, TsQuery |
| description | InSetQuery, LikeQuery, TsQuery |
Доступные поля для сортировки:
| Поле |
|---|
| title |
| description |
| created |
| modified |
GetValueGenerationRule
Payload для команды
"some-id"
Результат выполнения команды
{
"id": "some-id",
"entityType": "Some EntityTypeId",
"fieldCode": "some fieldCode",
"title": "Sample ValueGenerationRule Title 2",
"description": "some description 2",
"config": {
"rule2": "attr56"
},
"created": 1726211900106,
"createdBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"modified": 1726211947374,
"modifiedBy": "7099494d-0a5f-47ff-bc52-9cfb74ffe282",
"version": 2
}
Получение правила формирования значения атрибута сущностей с заданным идентификатором. Поддерживается только синхронный вызов.
- На входе: ValueGenerationRuleId (String)
- На выходе: ValueGenerationRule
| Команда | Путь |
|---|---|
| vnpcontrol_GetValueGenerationRule | HTTP POST "/v1/valueGenerationRule/get" |
CreateValueGenerationRule
Payload для команды
{
"entityType": "Some EntityTypeId",
"fieldCode": "some fieldCode",
"title": "Sample ValueGenerationRule Title 2",
"description": "some description 2",
"config": {
"rule2": "attr56"
}
}
Результат выполнения команды
"some-id"
Добавляет новое правило формирования значения атрибута сущностей с заданными параметрами. Отправляет событие о создании правила формирования значения атрибута сущностей.
- На входе: CreateValueGenerationRule
- На выходе: ValueGenerationRuleId (String)
| Команда | Путь |
|---|---|
| vnpcontrol_CreateValueGenerationRule | - |
UpdateValueGenerationRule
Payload для команды
{
"id": "some-id",
"entityType": "Some EntityTypeId",
"fieldCode": "some fieldCode",
"title": "Sample ValueGenerationRule Title 2",
"description": "some description 2",
"config": {
"rule2": "attr56"
},
"version": 1
}
Результат выполнения команды
true
Обновляет данные о правиле формирования значения атрибута сущностей. Отправляет событие об обновлении правила формирования значения атрибута сущностей.
- На входе: UpdateValueGenerationRule
- На выходе: Boolean
| Команда | Путь |
|---|---|
| vnpcontrol_UpdateValueGenerationRule | - |
DeleteValueGenerationRule
Payload для команды
"some-id"
Результат выполнения команды
true
Удаляет правило формирования значения атрибута сущностей с заданным идентификатором. Отправляет событие об удалении правила формирования значения атрибута сущностей.
- На входе: ValueGenerationRuleId (String)
- На выходе: Boolean
| Команда | Путь |
|---|---|
| vnpcontrol_DeleteValueGenerationRule | - |
GenerateValueByAttributes
Payload для команды
{
"valueGenerationRuleId": "49b027c6-50b7-3219-a8f0-72746d2a25b7",
"attributes": {
"field1": "value1",
"field2": "value2",
"field3": "value3"
}
}
Результат выполнения команды
"value1-value2.value3"
Генерирует строку на основание правила и переданных атрибутов объекта.
- На входе: GenerateValueByAttributesInput
- На выходе: String
| Команда | Путь |
|---|---|
| vnpcontrol_GenerateValueByAttributes | - |
GenerateValueForEntities
Payload для команды
{
"entityType": "Object",
"ruleType": "cipher",
"search": {
"query": "id",
"context": {
"id": "11112222-3333-4444-5555-666677778888"
}
},
"valueGenerationRuleId": "1f2f3b8e-d722-489a-9297-316b0afbc04a"
}
Результат выполнения команды
"3b97ba40-e44b-46ce-8644-30dd5958c855"
Поле valueGenerationRuleId опционально, если передано, используется правило с таким ID, если нет, происходит вычисление правил.
Генерирует атрибуты для объектов Data Model по условию поиска. Учитывая их класс в сервисе Classification, который хранит идентификаторы правил генерации. Возвращает ID записи журнала генерации, он же ID задачи на генерацию (для отмены задачи)
- На входе: GenerateValueForEntitiesInput
- На выходе: GenerationJournalId (UUID)
| Команда | Путь |
|---|---|
| vnpcontrol_GenerateValueForEntities | - |
CheckValueGenerationForEntities
Payload для команды
{
"entityType": "Object",
"ruleType": "cipher",
"search": {
"query": "id",
"context": {
"id": "11112222-3333-4444-5555-666677778888"
}
}
}
Результат выполнения команды
{
"successEntities": [
"3b97ba40-e44b-46ce-8644-30dd5958c855"
],
"failureEntities": []
}
Проверяет атрибуты Data Model по условиям поиска.
Обновляет список предупреждений объекта, список доступных кодов предупреждений: checkValueGenerationTooManyRules,
checkValueGenerationSectionCount, checkValueGenerationSectionLength, checkValueGenerationAttributeMismatch,
checkValueGenerationAttributeNotExists.
- На входе: GenerateValueForEntitiesInput
- На выходе: GenerateValueForEntitiesOutput
| Команда | Путь |
|---|---|
vnpcontrol_CheckValueGenerationForEntities |
- |
ChangeWarningStatus
Payload для команды
{
"objectId": "784eee29-e1a6-4f57-8e45-b4fd469d6658",
"entityType": "Tag",
"fieldCode": "complex",
"warningType": "autofillCurrentValueNotValid",
"status": "Inactive"
}
Результат выполнения команды
true
Смена состояния Warning-ов в метаданных сущности.
Поддерживается только синхронный вызов.
- На входе:
ChangeWarningStatusDto - На выходе:
Boolean
| Команда | Путь |
|---|---|
vnpcontrol_ChangeWarningStatus |
HTTP POST v1/valueGenerationRule/changeWarningStatus |
ListGenerationJournal
Payload для команды
{
"query": "",
"context": {},
"sorting": {
"fieldName": "title",
"order": "desc"
},
"paging": {
"page": 1,
"count": 10
}
}
Результат выполнения команды
{
"items": [
{
"id": "f7445e44-deb5-4605-ba0b-cff45c8b9e5b",
"title": "gen ent title",
"generationType": "GenerateEntities",
"generationStatus": "Created",
"input": {
"key": "value"
},
"report": {
"key": "value"
},
"created": 0,
"createdBy": "119061e6-542d-4ef1-b503-224efc6b6d6a",
"modified": 0,
"modifiedBy": "7f782541-3fff-4ca0-8363-690dd4ae1755",
"version": 1
},
{
"id": "df11dede-fb96-4569-a667-7f35c73794aa",
"title": "gen ent title",
"generationType": "GenerateEntities",
"generationStatus": "Created",
"input": {
"key": "value"
},
"report": {
"key": "value"
},
"created": 0,
"createdBy": "deba1fe5-5848-41e0-b971-90ffb1d9fd5d",
"modified": 0,
"modifiedBy": "5c452843-4926-4578-821a-d0c2554f11f5",
"version": 1
}
],
"total": 2
}
Возвращает список генераций. Поддерживается только синхронный вызов.
- На входе: Option[Search]
- На выходе: Page[GenerationJournal]
| Команда | Путь |
|---|---|
| vnpcontrol_ListGenerationJournal | HTTP POST "/v1/journal/list" |
Доступные поля для фильтрации и виды фильтров по ним:
| Поле | Виды фильтров |
|---|---|
| id | InSetQuery |
| generationType | InSetQuery |
| generationStatus | InSetQuery |
| createdBy | InSetQuery |
| created | RangeQuery |
Доступные поля для сортировки:
| Поле |
|---|
| id |
| generationType |
| generationStatus |
| createdBy |
| created |
GetGenerationJournal
Payload для команды
"f7445e44-deb5-4605-ba0b-cff45c8b9e5b"
Результат выполнения команды
{
"id": "f7445e44-deb5-4605-ba0b-cff45c8b9e5b",
"title": "gen ent title",
"generationType": "GenerateEntities",
"generationStatus": "Created",
"input": {
"key": "value"
},
"report": {
"key": "value"
},
"created": 0,
"createdBy": "119061e6-542d-4ef1-b503-224efc6b6d6a",
"modified": 0,
"modifiedBy": "7f782541-3fff-4ca0-8363-690dd4ae1755",
"version": 1
}
Получение карточки генерации. Поддерживается только синхронный вызов.
- На входе: GenerationJournalId (UUID)
- На выходе: GenerationJournal
| Команда | Путь |
|---|---|
| vnpcontrol_GetGenerationJournal | HTTP POST "/v1/journal/get" |
GenerationProgress
Payload для команды
{
"id": "d40a62c9-2fd6-470a-a595-1535a0cc262c"
}
Результат выполнения команды
{
"d40a62c9-2fd6-470a-a595-1535a0cc262c": {
"estimateTime": "PT30M3.903S",
"percent": 0.8333333333333334,
"stats": {
"contextCreated": {
"succeed": 1,
"skipped": null,
"total": 1
},
"generated": {
"succeed": 1,
"skipped": null,
"total": 1
},
"numerated": {
"succeed": 1,
"skipped": null,
"total": 1
},
"attributesAdded": {
"succeed": 1,
"skipped": null,
"total": 1
},
"submitted": {
"succeed": 1,
"skipped": null,
"total": 1
},
"reported": {
"succeed": 0,
"skipped": null,
"total": 1
},
"errors": 0
}
}
}
Прогресс задач генерации. Можно отфильтровать по идентификатору конкретной задачи. Указанный здесь GenerateEntitiesItemId это все ещё ID задачи, а так же ID записи журнала с отчётом.
estimateTime - на данный момент показывает оставшееся время некорректно.
percent скорее всего никогда не будет равен 1 (100%). По окончанию работы статистика пропадает и нужно смотреть статус
у записи журнала генерации.
Поддерживается только синхронный вызов.
- На входе: GetGenerationProgressDto
- На выходе: Map[GenerateEntitiesItemId (UUID), EstimateProgressStats]
| Команда | Путь |
|---|---|
| vnpcontrol_GenerationProgress | - |
Модели сервиса VNP-control
ListVnpHierarchyDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| hierarchySearch | HierarchySearch | да | Параметры запроса для дерева иерархий |
| hierarchyCode | String | да | Идентификатор сущности иерархии |
TreeWithStatistic
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| tree | Page[HierarchyEntityObjectExtendedDto] | да | Обновлённое дерево с добавленными объектами на основе тегов |
| statistic | TreeStatisticItem[] | да | Информация о количестве пар nodeType + entityType |
TreeStatisticItem
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| nodeType | String | да | Тип узла |
| entityCodeType | String | да | Идентификатор сущности справочника |
| count | Int | да | Количество узлов с таким типом и идентификатором |
HierarchyEntity
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | string | да | ID |
| title | string | да | имя сущности |
| description | string | да | описание сущности |
| data | json | да | доп. данные |
| created | TimeStamp | да | дата и время создания |
| createdBy | UUID | да | ID создавшего запись пользователя |
| modified | TimeStamp | да | дата и время изменения |
| modifiedBy | UUID | да | ID изменившего запись пользователя |
| version | Integer | да | версия для оптимистичной блокировки |
HierarchyEntityCreateDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | string | да | ID |
| title | string | да | имя сущности |
| description | string | да | описание сущности |
| data | json | нет | доп. данные |
HierarchyEntityUpdateDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | string | да | ID |
| title | string | да | имя сущности |
| description | string | да | описание сущности |
| data | json | нет | доп. данные |
| version | Integer | да | версия для оптимистичной блокировки |
ProjectConfigCreateDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | ProjectConfigId (String) | Да | Уникальный идентификатор проекта - строковый код |
| title | String | Да | Наименование проекта (отображение в списках, отчетах и т.п.) |
| tag | String | Да | строка - код сущности которая в проекте является "тегом" |
| document | String | Да | строка - код сущности которая в проекте является "документом" |
| registry | JSON (Array) | Да | Массив строк - кодов сущностей которые |
| additionalData | JSON (Object) | Да | Дополнительные данные |
ProjectConfigUpdateDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | ProjectConfigId (String) | Да | Уникальный идентификатор проекта - строковый код |
| title | String | Да | Наименование проекта (отображение в списках, отчетах и т.п.) |
| tag | String | Да | строка - код сущности которая в проекте является "тегом" |
| document | String | Да | строка - код сущности которая в проекте является "документом" |
| registry | JSON (Array) | Да | Массив строк - кодов сущностей которые |
| additionalData | JSON (Object) | Да | Дополнительные данные |
| version | Int | Да | Индекс оптимистической блокировки |
ProjectConfig
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | ProjectConfigId (String) | Да | Уникальный идентификатор проекта - строковый код |
| title | String | Да | Наименование проекта (отображение в списках, отчетах и т.п.) |
| tag | String | Да | Код сущности, которая в проекте является "тегом" |
| documentSettings | DocumentSetting[] | Да | Настройки сущности, которая является документом |
| registry | JSON (Array) | Да | Массив строк - кодов сущностей которые |
| additionalData | JSON (Object) | Да | Дополнительные данные |
| version | Int | Да | Индекс оптимистической блокировки |
| created | Long | Да | Дата создания записи |
| modified | Long | Да | Дата изменения записи |
| createdBy | UserId (UUID) | Да | ID пользователя создавшего запись |
| modifiedBy | UserId (UUID) | Да | ID пользователя изменившего запись |
DocumentSetting
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| entityType | String | Да | Тип объекта сервиса Data Model |
| documentFilter | DocumentFilter | Нет | Описание настроек формирования срезов документов |
DocumentFilter
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| field | String | Да | Название поля по которому формируется срез |
| isRelation | Boolean | Да | Является ли поле связью или собственным атрибутом объекта |
| sections | String[] | Да | Конкретные значения для разбиения |
GenerationRuleSetCreateDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | GenerationRuleSetId (String) | Да | Уникальный строковый идентификатор записи - он же код |
| title | String | Да | Заголовок набора правил - краткое описание для реестра |
| description | String | Нет | Подробное описание того что должно происходить при генерации документов по этому набору правил |
| buttonTitle | String | Да | Что будет написано в кнопке на генерацию по этому набору |
| action | String | Нет | Action для проверки права доступа к кнопке этого набора правил |
| rules | JSON (Array)*1 | Да | Упорядоченный массив объектов - правил генерации документов. |
GenerationRuleSetUpdateDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | GenerationRuleSetId (String) | Да | Уникальный строковый идентификатор записи - он же код |
| title | String | Да | Заголовок набора правил - краткое описание для реестра |
| description | String | Нет | Подробное описание того что должно происходить при генерации документов по этому набору правил |
| buttonTitle | String | Да | Что будет написано в кнопке на генерацию по этому набору |
| action | String | Нет | Action для проверки права доступа к кнопке этого набора правил |
| rules | JSON (Array)*1 | Да | Упорядоченный массив объектов - правил генерации документов. |
| version | Int | Да | Индекс оптимистической блокировки |
GenerationRuleSet
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | GenerationRuleSetId (String) | Да | Уникальный строковый идентификатор записи - он же код |
| title | String | Да | Заголовок набора правил - краткое описание для реестра |
| description | String | Нет | Подробное описание того что должно происходить при генерации документов по этому набору правил |
| buttonTitle | String | Да | Что будет написано в кнопке на генерацию по этому набору |
| action | String | Нет | Action для проверки права доступа к кнопке этого набора правил |
| rules | JSON (Array)*1 | Да | Упорядоченный массив объектов - правил генерации документов. |
| created | Long | Да | Дата создания записи |
| modified | Long | Да | Дата изменения записи |
| createdBy | UserId (UUID) | Да | ID пользователя создавшего запись |
| modifiedBy | UserId (UUID) | Да | ID пользователя изменившего запись |
| version | Int | Да | Индекс оптимистической блокировки |
GenerateEntitiesInput
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| generationRuleSetId | GenerationRuleSetId (String) | Да | Уникальный строковый идентификатор записи - он же код |
| numerationRuleId | NumerationRuleId (String) | Нет | Идентификатор дополнительного правила генерации номера |
| generateValues | Boolean | Нет | Запускать ли генерацию дополнительных полей для получившихся объектов |
| entityType | EntityTypeId (String) | Да | Тип объекта сервиса Data Model |
| search | Search | Да | Фильтры для подбора начальных объектов для создания сущностей |
GenerateValueForEntitiesInput
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| entityType | EntityTypeId (String) | Да | Тип объекта сервиса Data Model |
| search | Search | Да | Фильтры для подбора начальных объектов для создания сущностей |
| ruleType | ValueGenerationRuleType (String) | Да | Тип правила для генерации (дополнительно фильтрует выбранные правила) |
| valueGenerationRuleId | UUID | Нет | Идентификатор правила генерации для обхода процесса вычисления правил |
GenerateValueForEntitiesOutput
HierarchyData_Settings
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| baseEntityFilterFieldCode | String | Нет | Название поля для фильтрации базовой сущности |
| baseEntityFilterFieldValue | Json | Нет | Значение поля для фильтрации базовой сущности |
NumerationRuleCreateDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| entityType | String | Да | Для какой сущности написано правило |
| fieldCode | String | Да | Для какого поля сущности написано правило |
| title | String | Да | Заголовок правила - краткое описание для реестра |
| description | String | Нет | Подробное описание правила |
| config | JSON | Да | Описание правила нумерации сущности. |
NumerationRuleUpdateDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | NumerationRuleId (UUID) | Да | Уникальный идентификатор записи |
| entityType | String | Да | Для какой сущности написано правило |
| fieldCode | String | Да | Для какого поля сущности написано правило |
| title | String | Да | Заголовок правила - краткое описание для реестра |
| description | String | Нет | Подробное описание правила |
| config | JSON | Да | Описание правила нумерации сущности. |
| version | Int | Да | Индекс оптимистической блокировки |
NumerationRule
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | NumerationRuleId (UUID) | Да | Уникальный идентификатор записи |
| entityType | String | Да | Для какой сущности написано правило |
| fieldCode | String | Да | Для какого поля сущности написано правило |
| title | String | Да | Заголовок правила - краткое описание для реестра |
| description | String | Нет | Подробное описание правила |
| config | JSON | Да | Описание правила нумерации сущности. |
| created | Long | Да | Дата создания записи |
| modified | Long | Да | Дата изменения записи |
| createdBy | UserId (UUID) | Да | ID пользователя создавшего запись |
| modifiedBy | UserId (UUID) | Да | ID пользователя изменившего запись |
| version | Int | Да | Индекс оптимистической блокировки |
ExecuteNumerationInput
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| numerationRuleId | NumerationRuleId (String) | Нет | Идентификатор дополнительного правила генерации номера |
| entityType | EntityTypeId (String) | Да | Тип объекта сервиса Data Model |
| search | Search | Да | Фильтры для подбора начальных объектов для создания сущностей |
ValueGenerationRuleCreateDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| ruleType | String | Да | Тип правила: title - формирование наименования, cipher - формирование шифра |
| entityType | String | Да | Для какой сущности написано правило |
| fieldCode | String | Да | Для какого поля сущности написано правило |
| title | String | Да | Заголовок правила - краткое описание для реестра |
| description | String | Нет | Подробное описание правила |
| delimiter | String | Нет | Разделитель добавляемый между секциями |
| config | JSON | Да | Описание правила формирования значения поля сущности. |
ValueGenerationRuleUpdateDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | ValueGenerationRuleId (UUID) | Да | Уникальный идентификатор записи |
| ruleType | String | Да | Тип правила: title - формирование наименования, cipher - формирование шифра |
| entityType | String | Да | Для какой сущности написано правило |
| fieldCode | String | Да | Для какого поля сущности написано правило |
| title | String | Да | Заголовок правила - краткое описание для реестра |
| description | String | Нет | Подробное описание правила |
| delimiter | String | Нет | Разделитель добавляемый между секциями |
| config | JSON | Да | Описание правила формирования значения поля сущности. |
| version | Int | Да | Индекс оптимистической блокировки |
ValueGenerationRule
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | ValueGenerationRuleId (UUID) | Да | Уникальный идентификатор записи |
| ruleType | String | Да | Тип правила: title - формирование наименования, cipher - формирование шифра |
| entityType | String | Да | Для какой сущности написано правило |
| fieldCode | String | Да | Для какого поля сущности написано правило |
| title | String | Да | Заголовок правила - краткое описание для реестра |
| description | String | Нет | Подробное описание правила |
| delimiter | String | Нет | Разделитель добавляемый между секциями |
| config | JSON | Да | Описание правила формирования значения поля сущности. |
| created | Long | Да | Дата создания записи |
| modified | Long | Да | Дата изменения записи |
| createdBy | UserId (UUID) | Да | ID пользователя создавшего запись |
| modifiedBy | UserId (UUID) | Да | ID пользователя изменившего запись |
| version | Int | Да | Индекс оптимистической блокировки |
GenerationJournal
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | GenerationRuleSetId (String) | Да | Уникальный строковый идентификатор записи - он же код |
| title | String | Да | Наименование генерации |
| generationType | GenerationType (String) | Да | Тип генерации (сущностей, атрибутов, нумерация) |
| generationStatus | GenerationStatus (String) | Да | Статус процесса (стадии) |
| input | GenerateEntitiesInput | Да | Входные данные (payload запроса генерации) |
| report | GenerateEntitiesReport | Да | Отчёт о генерации: получившиеся данные, контекст и/или ошибки |
| created | Long | Да | Дата создания записи |
| modified | Long | Да | Дата изменения записи |
| createdBy | UserId (UUID) | Да | ID пользователя создавшего запись |
| modifiedBy | UserId (UUID) | Да | ID пользователя изменившего запись |
| version | Int | Да | Индекс оптимистической блокировки |
GenerateEntitiesReport
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| reportUrl | StoredFile (String) | Нет | URI файла отчёта (стандартная FS загрузка). Формат для генерации сущностей, Формат для нумерации, Формат для генерации шифров и наименований |
| errors | String[] | Нет | Глобальные ошибки генерации |
DetailedReason
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| fieldCode | FieldName (String) | Нет | Поле промежуточного объекта, которое было указано в цепочке получения целевых данных |
| entityType/catalogCode | EntityTypeId/CatalogCode (String) | Нет | Тип объекта Data Model или код справочника Alexandrina |
| objectId/catalogItemId | ObjectId/CatalogItemId (String) | Нет | ID объекта Data Model или ID справочника Alexandrina |
| sectionIdx | Int | Да | Номер секции шифра в которой возникла проблема |
Warning
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| message | String | Да | Сообщение об ошибке |
| fieldCode | FieldName (String) | Да | Поле к которому относиться предупреждение |
| warningType | WarningType (String) | Да | Тип предупреждения |
| detailedReason | DetailedReason | Нет | Дополнительные данные для диагностики в случае работы с шифрами |
| valueGenerationRuleId | UUID | Нет | Правило при применении которого возникла проблема |
| severity | WarningSeverity (String) | Да | Уровень серьезности предупреждения (низкий, критический) |
| status | WarningStatus (String) | Да | Статус предупреждения (активно, неактивно) |
| statusChangeDate | TimeStamp (Long) | Нет | Дата смены статуса |
| statusChangeUserId | UserId (UUID) | Нет | Пользователь сменивший статус |
EntityGenerationReport
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| position | RulePosition | Да | Информация об источнике сущности относительно, правила и генератора |
| context | ContextItemSimple | Нет | Информация о контексте (объектах на основании которых мы генерируем новую сущность) |
| generatingEntity | CreateObject | Нет | Результат генерации (DTO для создания объекта в Data Model) |
| rules | GenerationRuleInfo | Да | Перечень задействованных правил генерации (нумерация, атрибуты, шифры) |
| errors | String[] | Да | Список ошибок помешавших созданию объекта |
| warnings | Warning[] | Да | Список предупреждений не препятствующих созданию объекта (также сохраняется в метаинформацию объекта) |
RulePosition
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| ruleSetId | GenerationRuleSetId (String) | Да | Уникальный строковый идентификатор записи - он же код |
| ruleIdx | Int | Нет | Порядковый номер правила в наборе правил генерации документа |
| generatorIdx | Int[] | Нет | Порядковый номер генератора в наборе правил генерации документа. Массив так как у генераторов есть вложенность |
ContextItemSimple
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | UUID | Да | Уникальный идентификатор объекта: сущности или справочника |
| entityType | EntityTypeId (String) | Одно из двух (1) | Тип сущности Data Model |
| catalogCode | CatalogCode (String) | Одно из двух (1) | Код справочника Alexandrina |
| code | String | Нет | Код объекта |
| title | String | Нет | Заголовок объекта |
CreateObject
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | UUID | Да | Уникальный идентификатор объекта Data Model |
| entityType | UUID | Да | Тип сущности Data Model |
| dataAttributes | UUID | Да | Данные объекта |
| metadataAttributes | UUID | Да | Мета информация (предупреждения возникшие во время генерации, etc...) |
| objectSource | UUID | Да | Источник (название этого сервис) |
| relations | UUID | Да | Связи с другими объектами Data Model |
| priorityFields | UUID | Да | Поля которые были сгенерированы (имеют приоритет при генерации шифров и дополнительных атрибутов и не замещаются полями полученными из классификации) |
EntityNumerationReport
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| category | NumerationCategoryPart | Да | Список полей по котором осуществлялась группировка для нумерации |
| entity | ReportingEntity | Да | Упрощенная модель данных объекта |
| dataAttributesBefore | JSON Object | Да | Атрибуты до генерации (указано только поле нумерации) |
| rules | GenerationRuleInfo | Да | Перечень задействованных правил генерации (нумерация, атрибуты, шифры) |
| errors | String[] | Да | Список ошибок помешавших обновлению объекта |
| warnings | Warning | Да | Список предупреждений не препятствующих обновлению объекта |
NumerationCategoryPart
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| fieldCode | FieldName (String) | Да | Код поля категории |
| fieldValue | JSON (Any) | Да | Значение поля категории |
AttributeGenerationReport
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| entity | ReportingEntity | Да | Упрощенная модель данных объекта |
| dataAttributesBefore | JSON Object | Да | Атрибуты до генерации (указано только поле нумерации или только поля шифра/заголовка) |
| rules | GenerationRuleInfo | Да | Перечень задействованных правил генерации (нумерация, атрибуты, шифры) |
| errors | String[] | Да | Список ошибок помешавших обновлению объекта |
| warnings | Warning | Да | Список предупреждений не препятствующих обновлению объекта |
ReportingEntity
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | ObjectId (UUID) | Да | Уникальный идентификатор объекта Data Model |
| entityType | ValueGenerationRuleType (String) | Нет | Тип сущности Data Model |
| dataAttributes | ValueGenerationRuleType (String) | Нет | Данные объекта (только поле из нумерации или только поля шифра/заголовка) |
GenerationRuleInfo
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | UUID | Да | Уникальный идентификатор правила (если ruleType не указан, значит это правило нумерации) |
| ruleType | ValueGenerationRuleType (String) | Нет | Тип правила генерации (только для шифров и атрибутов) |
| fieldCode | String | Да | Код поля для которого написано правило |
| title | String | Да | Название правила |
GetGenerationProgressDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | GenerateEntitiesItemId (UUID) | Нет | Получить статистику только для указанной задачи |
ChangeWarningStatusDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
objectId |
UUID (ObjectId) |
Да | UUID объекта |
entityType |
String (EntityTypeId) |
Да | Код сущности |
fieldCode |
String (FieldName) |
Да | Код поля |
warningType |
String (WarningType) |
Да | Код предупреждения |
status |
String (WarningStatus) |
Да | Состояние Active/Inactive |
EstimateProgressStats
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| estimateTime | Duration ISO8601 | Да | Время до конца в таком формате PT12H54M5.02S |
| percent | Double | Да | Процент выполнения (уже рассчитанные цифры из stats) |
| stats | GenerationStatistic | Да | Числа статистики |
GenerationStatistic
На данный момент статистика представлена в виде завершения этапа: 0/1 (начато); 1/1 (выполнено)
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| contextCreated | StatFraction | Да | Подготовка контекста, сбор объектов от рута по пользовательскому пути |
| generated | StatFraction | Да | Создание объектов по атрибутам из генератора |
| numerated | StatFraction | Да | Нумерация по указанному правилу |
| attributesAdded | StatFraction | Да | Добавление атрибутов |
| submitted | StatFraction | Да | Сохранение в Data Model |
| reported | StatFraction | Да | Сохранение отчёта в S3 |
| errors | Int | Да | Количество объектов с ошибкой |
StatFraction
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| succeed | Int | Да | Успешно обработано |
| skipped | Int | Нет | Пропущено |
| total | Int | Да | Всего операций |
Модели server-common
HierarchyEntityObject
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | UUID | да | ID |
| hierarchyEntityId | string | да | ID сущности объекта |
| parentId | UUID | нет | Родительский объект |
| data | json | да | доп. данные |
| externalType | ExternalEntityTypes | нет | код типа внешнего объекта |
| externalEntityType | string | нет | тип объекта хранящегося в ноде (код каталога или EntityType) |
| externalId | string | нет | код или UUID внешнего объекта |
| created | TimeStamp | да | дата и время создания |
| createdBy | UUID | да | ID создавшего запись пользователя |
| modified | TimeStamp | да | дата и время изменения |
| modifiedBy | UUID | да | ID изменившего запись пользователя |
| removed | Boolean | да | признак удаления |
| version | Integer | да | версия для оптимистичной блокировки |
HierarchyEntityObjectCreateDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| hierarchyEntityId | string | да | ID сущности объекта |
| parentId | UUID | нет | Родительский объект |
| data | json | да | доп. данные |
| externalType | ExternalEntityTypes | нет | код типа внешнего объекта |
| externalEntityType | string | нет | тип объекта хранящегося в ноде (код каталога или EntityType) |
| externalId | string | нет | код или UUID внешнего объекта |
HierarchyEntityObjectExtendedDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| entityObject | HierarchyEntityObject | да | Сущность иерархий |
| isMatched | boolean | да | Попадает ли объект под фильтр |
| childrenCount | Integer | да | Количество дочерних объектов на следующем уровне |
| children | HierarchyEntityObjectExtendedDto[] | нет | Дочерние объекты |
HierarchySearch
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| search | Search | да | Параметры запроса |
| expandTree | boolean | да | Раскрыть родителей для всех подходящих под фильтр объектов |
| parentId | UUID | нет | Ограничить вывод объектов указанным родителем |
ExternalEntityTypes
| Тип | Определение |
|---|---|
| catalogItem | Объект сервиса каталогов |
| entityObject | Объект сервиса моделей данных |
Примечания
*1 - Подробнее на странице Confluence -> Техническая документация -> Генерация документов
*2 - Подробнее на странице Confluence -> Техническая документация -> Конфиг динамического дерева [или -> Конфиг для ВНП]