Утилита забирает сообщения из брокера Kafka из определенных очередей (топиков) и создает структуру в Vitro MP на основе этих данных.
Обрабатываемые топики
ИСУП
ФСК Проектирование
1 Описание интеграции
ИСУП предоставляет сообщения о верхнеуровневой структуре системы: Проект - Объект Строительства - Корпус.
Сущности распространяются на 3 списка:
В Файловой структуре вместо "Объект строительства" создается "Очередь", которая является агрегатором нескольких объектов строительства. Отношение объекта к очереди определено через Связи.
ФСК Проектирование предоставляет информацию о всех сущностях ниже ТЭ "Корпус":
Связь между ИСУП и ФСК Проектирование осуществляется через дополнительный Справочник "Графики КУП" (kup.direction-1).
При создании Корпус в системе настроена автоматизация на разворачивание шаблона Vitro. Внутри этого шаблона есть элемент с полем sync_kup по которому определяется, в какую папку должна попасть интеграция ФСК Проектирование
На схеме ниже изображена логика построения папочной структуры из ФСК Проектирования

2 Требования к системе
2.1 Атрибуты
| Название | Системное имя | Тип атрибута | Короткое описание |
|---|---|---|---|
| ID ИСУП | is_isup | Integer | числовой идентификатор элемента в ИСУП |
| GUID 1C | guid_1c | string | идентификатор из 1С (guid) |
| Короткое имя | short_name | string | короткое имя элемента |
| Описание | description | Note | полное описание элемента |
| Очередь | queue | integer | очередь объекта строительства |
| Проект | project_card | Lookup | лукап на список Реестр проектов (карточка проекта) |
| Тип объекта строительства | construction_object_type | Lookup | лукап на список Типы объектов строительства |
| GUID KUP | guid_kup | string | уникальный идентификатор ФСКП (GUID) |
| ИД КУП | short_name_kup | string | короткое имя в ФСКП (Key) |
| ИД Шаблона КУП | template_task_id | string | идентификатор шаблона задачи ФСКП |
| Синхронизация ФСКП | sync_kup | string | флаг синхронизации ФСКП. Проставляется в шаблоне у 01_ФСК Проект |
| Сортировка КУП | order_kup | string | порядок элемента ФСКП |
| Полное название | full_name | Note | полное имя элемента |
| Направление ЦГИП | division_tsgip_att | lookup | лукап на список Справочник Направлений ЦГИП |
| Сообщение Kafka | message_kafka | Note | текст сообщения в Kafka |
| Топик Kafka | topic_kafka | string | топик (очередь) в Kafka |
| Ошибка Kafka | error_kafka | string | описание ошибки обработки |
| Обработано Kafka | success_kafka | boolean | флаг успешной обработки |
2.2 Типы элементов
Необходимы следующие типы элементов и минимальный набор атрибутов к ним. Дополнительные атрибуты не мешают работе.
| Тип элемента | Атрибуты |
|---|---|
| Карточка проекта | id_isup, short_name, description, guid_1c |
| Карточка объекта строительства | id_isup, construction_object_type, queue, guid_1c |
| Карточка корпуса | id_isup |
| Проект | id_isup, guid_1c, short_name, description |
| Очередь | достаточно name наследуемого от Элемент |
| Участник | sync_kup |
| Стадия | guid_kup, order_kup, short_name_kup, template_task_id |
| Комплект | guid_kup, order_kup, short_name_kup, template_task_id |
| Раздел | guid_kup, order_kup, short_name_kup, template_task_id |
| Альбом | guid_kup, order_kup, short_name_kup, template_task_id , division_tsgip_att |
| Задача план-графика | id_isup |
| Карточка направления ЦГИП | guid_kup |
| Сообщение Kafka | message_kafka, topic_kafka, error_kafka, success_kafka |
2.3 Списки
В системе должны быть заведены следующие списки, с привязанными ТЭ:
| Название | Типы элементов |
|---|---|
| Файлы | Альбом, Комплект, Раздел, Стадия, Участник, Корпус, Очередь, Проект |
| Справочник направлений ЦГИП | Карточка направления ЦГИП Типы объектов строительства: Тип объекта строительства |
| Типы объектов строительства | Тип объекта строительства |
| Импорт из Kafka | Сообщение Kafka |
| Экспорт в Kafka | Сообщение Kafka |
| Реестр проектов | Карточка проекта, Карточка объекта строительства, Карточка корпуса |
| Черный список проектов ИСУП | Карточка проекта, Карточка объекта строительства |
3 Настройка config.json
Файл расположен в корне с исполняемым файлом утилиты. Пример конфигурации для vitro.dev FSK без паролей.
{
"WebUrl": "https://vitro.dev.fsk.ru",
"Login": "admin",
"Password": "password",
"LibraryListId": "966e62c5-a803-49a0-a1be-e680d130c481",
"LibraryParentId": "5da4709f-3c94-4a82-b335-800117096b46",
"ReferenceListId": "5b911635-5f2a-4049-926b-60ec11be3d17",
"ObjectTypeListId": "1a0671ac-6ffd-4c2a-ac83-177c4902377d",
"KafkaMessageContentTypeId": "c3629456-3773-49b8-8a58-d4198e77ad8e",
"KafkaExportListId": "d244569a-fb9b-46f9-8a04-925c8baba2bb",
"KafkaImportListId": "9955d107-98e8-42e9-8cd6-19817764cfd3",
"ObjectTypeContentTypeId": "c8988a65-df34-4f60-88fd-90d23965c1fe",
"ProjectReferenceContentTypeId": "74546a61-799e-46aa-9a79-7f7661bb707f",
"ProjectContentTypeId": "540ff572-4a29-4d8e-8dfb-8eda093c583a",
"ObjectReferenceContentTypeId": "2ecac8b4-e621-400d-a63f-d456f4820efb",
"ObjectContentTypeId": "529c78d4-cc65-44d5-9055-71d33845d084",
"ObjectLinkContentTypeId": "7a03c92a-72cc-4eb5-8098-9b11e625b286",
"BuildingReferenceContentTypeId": "7175d8a2-2253-4172-b68b-150b823d855c",
"BuildingContentTypeId": "5c16ee47-fe94-4fc2-bd68-32ce0beb2a68",
"ParcticipantContentTypeId": "8c339404-3c15-421f-a867-d0867bd791c8",
"PerformerGroupContentTypeId": "7a5850e5-c2f4-4121-8ed4-450e3f0b4439",
"PerformerGroupListId": "daf3fd57-a7a4-4524-ae87-a359e6ffe082",
"ScheduleContentTypeId": "8e692548-5786-4aa5-b9af-8ad5ac157819",
"ScheduleListId": "e3d0f0ac-cc64-49b0-a06e-774fdc618ea2",
"DirectionContentTypeId": "9846503c-0b8a-4405-9d10-44f672f83fd5",
"DirectionListId": "66ec35fd-a050-45b6-87b2-61d65115cf90",
"IsupBlackListId": "af70989d-ca8f-450e-9422-6f323e9fcf65",
"KupMap": {
"STAGE": "64a15f4c-083e-420b-b54e-fc75d44f31b7",
"SET": "78109552-37b6-4d87-b57f-bf11867bbaa9",
"SECTION": "ae453be5-c213-4ec6-b0ca-4efa2f9a98b7",
"ALBUM": "28a48961-35e0-43ae-ad6b-8f159cfd7202"
},
"KafkaConfig": {
"GroupId": "vitro.test",
"BootstrapServers": "kafka.k8s-dev.fsk.ru:9094",
"SaslUsername": "vitro",
"SaslPassword": "password",
"SecurityProtocol": "SaslPlaintext"
}
}
4 Настройка времени запуска утилиты
Производится на усмотрение администраторов системы. Пример https://portal.vitrocad.ru/pages/viewpage.action?pageId=23659062
5 Обратная интеграция. Настройка автоматизации
Тип элемента: Альбом. Атрибут триггера: Статус.
Вызов внешнего сервиса.
Условия: IsNotNull(This("GUID КУП"))
Действия:
Format('{0}/api/automation/post?baseUrl={0}/api/item/update¶m=[{{\"list_id\":\"d244569a-fb9b-46f9-8a04-925c8baba2bb\",\"content_type_id\":\"c3629456-3773-49b8-8a58-d4198e77ad8e\",\"success_kafka\":false,\"topic_kafka\":\"vitro.event-status\",\"message_kafka\":\"{{\\\"update_date\\\":\\\"{1}\\\",\\\"guid_kup\\\":\\\"{2}\\\",\\\"template_task_guid\\\":\\\"{3}\\\",\\\"key\\\":\\\"{4}\\\",\\\"document_status\\\":\\\"{5}\\\",\\\"building_id\\\":\\\"{6}\\\",\\\"type\\\":\\\"PDF\\\",\\\"change_number\\\":{7} }}\"}}]',Cfg('Site.PortalUrl'), DateTime(This('Изменен'), 'yyyy-MM-ddTHH:mm:ss.fffZ'), This('GUID КУП'), This('ИД Шаблона КУП'), This('ИД КУП'), Id(This('Статус')), Field(Parent('Корпус'),'id_isup'), This('Номер ИЗМа'))
Guid после list_id и content_type_id могут различаться в разных системах. List_id – guid списка Экспорт в Kafka; content_type_id – guid типа элемента Сообщение Kafka.
Для всех статусов, которые необходимо отправлять в Kafka необходимо добавить данную автоматизацию. При большом количестве статусов лучше сделать скриптом.
6 Черный список проектов ИСУП
В черном списке хранятся все проекты и объекты строительства, которые не будут созданы или обновлены в Vitro
Чтобы добавить проект в черный список нужно:
Для удаления проекта из черного списка необходимо:
Альтернативным путем восстановления может буть повторная отправка в очередь сообщений по всему восстанавливаемому проекту из ИСУП
При необходимости все шаги выше можно автоматизировать через скрипт.