Утилита забирает сообщения из брокера Kafka из определенных очередей (топиков).

Обрабатываемые топики

ИСУП

ФСК Проектирование

1 Описание интеграции

ИСУП предоставляет сообщения о верхнеуровневой структуре системы: Проект - Объект Строительства - Корпус.
Сущности распространяются на 3 списка:

В Файловой структуре вместо "Объект строительства" создается "Очередь", которая является агрегатором нескольких объектов строительства. Отношение объекта к очереди определено через Связи.

ФСК Проектирование предоставляет информацию о всех сущностях ниже ТЭ "Корпус":

Связь между ИСУП и ФСК Проектирование осуществляется через дополнительный Справочник "Графики КУП" (kup.direction-1).

При создании Корпус в системе настроена автоматизация на разворачивание шаблона Vitro. Внутри этого шаблона есть элемент с полем sync_kup по которому определяется, в какую папку должна попасть интеграция ФСК Проектирование

На схеме ниже изображена логика построения папочной структуры из ФСК Проектирования


2 Требования к системе

2.1 Атрибуты

НазваниеСистемное имяТип атрибутаКороткое описание
ID ИСУПis_isupIntegerчисловой идентификатор элемента в ИСУП
GUID 1Cguid_1cstringидентификатор из 1С (guid)
Короткое имяshort_namestringкороткое имя элемента
ОписаниеdescriptionNoteполное описание элемента
Очередьqueueintegerочередь объекта строительства
Проектproject_cardLookupлукап на список Реестр проектов (карточка проекта)
Тип объекта строительстваconstruction_object_typeLookupлукап на список Типы объектов строительства
GUID KUPguid_kupstringуникальный идентификатор ФСКП (GUID)
ИД КУПshort_name_kupstringкороткое имя в ФСКП (Key)
ИД Шаблона КУПtemplate_task_idstringидентификатор шаблона задачи ФСКП
Синхронизация ФСКПsync_kupstringфлаг синхронизации ФСКП. Проставляется в шаблоне у 01_ФСК Проект
Сортировка КУПorder_kupstringпорядок элемента ФСКП
Полное названиеfull_nameNoteполное имя элемента
Направление ЦГИПdivision_tsgip_attlookupлукап на список Справочник Направлений ЦГИП
Сообщение Kafkamessage_kafkaNoteтекст сообщения в Kafka
Топик Kafkatopic_kafkastringтопик (очередь) в Kafka
Ошибка Kafkaerror_kafkastringописание ошибки обработки
Обработано Kafkasuccess_kafkabooleanфлаг успешной обработки


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&param=[{{\"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


Чтобы добавить проект в черный список нужно:


Для удаления проекта из черного списка необходимо:

Альтернативным путем восстановления может буть повторная отправка в очередь сообщений по всему восстанавливаемому проекту из ИСУП
При необходимости все шаги выше можно автоматизировать через скрипт.