Утилита забирает сообщения из брокера Kafka из определённых очередей (топиков) и создаёт структуру в Vitro MP на основе этих данных.
ИСУП
isup.project-1 — сообщения о проектах системыisup.constructions-object-1 — объекты строительства системыisup.construction-object-type-1 — (справочник) типы объектов строительстваisup.place-of-implementation-1 — (справочник) места реализацииisup.building-unit-1 — корпусыФСК Проектирование
kup.schedule-1 — графикиkup.schedule-responsibles-1 — ответственные у графиковkup.performers-groups-1 — группы исполнителейkup.direction-1 — направления ЦГИПkup.task-1 — задачиИсходящие (Vitro → Kafka)
vitro.event-status — смена статуса альбома (раздел 5)vitro.status-list — справочник статусов (раздел 5.1)ИСУП предоставляет сообщения о верхнеуровневой структуре: Проект → Объект строительства → Корпус.
Сущности распространяются на списки:
В реестре проектов сохраняется полная иерархия ИСУП. В файловой структуре создаются проект и корпус; корпус размещается непосредственно под проектом. Промежуточный элемент «Очередь» и связи через список «Связи» больше не используются.
Связь корпуса с проектом в файлах обеспечивается полем proekt_id_isup на карточке корпуса в реестре (заполняется вычислением, см. раздел 7.3).
ФСК Проектирование предоставляет сущности ниже ТЭ «Корпус»: Стадия, Комплект, Раздел, Альбом, ИЗМ и другие типы из KupMap.
Связь ИСУП и ФСК Проектирование — через справочник «Графики KUP» (kup.direction-1).
При создании корпуса в системе настроена автоматизация на разворачивание шаблона Vitro.
KafkaSync записывает числовые id ИСУП и иерархию parent_id. Guid-лукапы заполняются в Vitro через вычисления и автоматизации (раздел 7).
| Название | Системное имя | Тип | Описание |
|---|---|---|---|
| ID ИСУП | id_isup | Integer | числовой идентификатор в ИСУП |
| GUID 1C | guid_1c | string | идентификатор из 1С |
| Короткое имя | short_name | string | короткое имя |
| Описание | description | Note | полное описание |
| Проект (карточка) | project_card | Lookup | лукап на карточку проекта |
| Карточка корпуса | building_lookup | Lookup | лукап на карточку корпуса |
| ID проекта ИСУП | proekt_id_isup | Integer | id_isup проекта для размещения корпуса в файлах |
| Тип объекта (значение ИСУП) | object_type_isup_value | Integer | числовой id типа объекта из Kafka |
| Тип объекта строительства | construction_object_type | Lookup | лукап на справочник типов |
| Место реализации (значение) | mesto_realizacii_isup_value | Integer | числовой id места реализации |
| Место реализации | mesto_realizacii | Lookup | лукап на справочник мест |
| GUID KUP | guid_kup | string | идентификатор ФСКП |
| ИД КУП | short_name_kup | string | Key в ФСКП |
| ИД Шаблона КУП | template_task_id | string | шаблон задачи ФСКП |
| Сортировка КУП | order_kup | string | порядок элемента |
| Тип KUP | type_kup | string | тип задачи из Kafka |
| Path GUID KUP | path_guid_kup | string | уникальный путь элемента |
| Schedule ID KUP | schedule_id_kup | string | идентификатор графика |
| Основной график | is_primary_kup | boolean | флаг основного графика |
| Полное название | full_name | Note | полное имя |
| Направление ЦГИП | division_tsgip_att | Lookup | направление ЦГИП |
| ГИП | chief_project_engineer | Lookup | на корпусе |
| Помощник ГИПа | chief_engineer_assistant | Lookup | на корпусе |
| ГИП наружных сетей | chief_project_engineer_site_utilities | Lookup | на корпусе |
| ГИП заказчика | gip_customer | Lookup | на корпусе |
| Руководитель проекта | project_manager | Lookup | на корпусе |
| Ответственный | responsible | Lookup | на задачах ФСКП |
| Лист согласования | approval_user_list | Lookup | исполнители |
| Наличие внешнего проектировщика | external_designer_condition | Lookup | тип исполнителя |
| Сообщение Kafka | message_kafka | Note | текст сообщения |
| Топик Kafka | topic_kafka | string | топик |
| Ошибка Kafka | error_kafka | string | ошибка обработки |
| Обработано Kafka | success_kafka | boolean | флаг обработки |
| Тип элемента | Атрибуты |
|---|---|
| Карточка проекта | id_isup, short_name, description, guid_1c, mesto_realizacii_isup_value, mesto_realizacii |
| Карточка объекта строительства | id_isup, guid_1c, object_type_isup_value, construction_object_type |
| Карточка корпуса | id_isup, proekt_id_isup, construction_object_type |
| Место реализации | id_isup |
| Тип объекта строительства | id_isup |
| Проект | id_isup, guid_1c, short_name, description, project_card, mesto_realizacii |
| Корпус | id_isup, building_lookup, construction_object_type, chief_project_engineer, chief_engineer_assistant, chief_project_engineer_site_utilities, gip_customer, project_manager |
| Стадия / Комплект / Раздел / Альбом / ИЗМ | guid_kup, order_kup, short_name_kup, template_task_id, type_kup, path_guid_kup, schedule_id_kup, full_name |
| Альбом | + division_tsgip_att, responsible, approval_user_list, external_designer_condition |
| Задача план-графика | id_isup |
| Карточка направления ЦГИП | guid_kup |
| График KUP | guid_kup, id_isup, is_primary_kup |
| Сообщение Kafka | message_kafka, topic_kafka, error_kafka, success_kafka |
| Название | Типы элементов |
|---|---|
| Файлы | Альбом, Комплект, Раздел, Стадия, Корпус, Проект, ИЗМ |
| Реестр проектов | Карточка проекта, Карточка объекта строительства, Карточка корпуса |
| Типы объектов строительства | Тип объекта строительства |
| Места реализации | Место реализации |
| Справочник направлений ЦГИП | Карточка направления ЦГИП |
| Графики KUP | График KUP |
| Импорт из Kafka | Сообщение Kafka |
| Экспорт в Kafka | Сообщение Kafka |
| Черный список проектов ИСУП | Карточка проекта, Карточка объекта строительства |
| Черный список элементов ФСКП | Папка |
Файл в корне с исполняемым файлом. Пример для 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",
"PlaceImplListId": "fcdecebd-4a57-41ed-8265-9c3d4d586b8b",
"KafkaMessageContentTypeId": "c3629456-3773-49b8-8a58-d4198e77ad8e",
"KafkaExportListId": "d244569a-fb9b-46f9-8a04-925c8baba2bb",
"KafkaImportListId": "9955d107-98e8-42e9-8cd6-19817764cfd3",
"ObjectTypeContentTypeId": "c8988a65-df34-4f60-88fd-90d23965c1fe",
"PlaceImplContentTypeId": "4002a57c-d5ad-42e9-a7f5-531c5d3ad99e",
"ProjectReferenceContentTypeId": "74546a61-799e-46aa-9a79-7f7661bb707f",
"ProjectContentTypeId": "540ff572-4a29-4d8e-8dfb-8eda093c583a",
"ObjectReferenceContentTypeId": "2ecac8b4-e621-400d-a63f-d456f4820efb",
"BuildingReferenceContentTypeId": "7175d8a2-2253-4172-b68b-150b823d855c",
"BuildingContentTypeId": "5c16ee47-fe94-4fc2-bd68-32ce0beb2a68",
"PerformerGroupContentTypeId": "7a5850e5-c2f4-4121-8ed4-450e3f0b4439",
"PerformerGroupListId": "daf3fd57-a7a4-4524-ae87-a359e6ffe082",
"ScheduleContentTypeId": "8e825548-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",
"KupBlackListId": "e77e04d3-f830-4b97-9d3a-d7cb39bd76b6",
"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",
"IZM": "40a444c3-0f78-407f-8dba-d79ab0db2583",
"APR": "39c299a7-8c85-4c5c-811f-b654e2eb3099",
"STAGE_P": "da4a52ff-ceda-4b5e-b593-5a6339b50233",
"AGR": "0ae0d7cb-b8a2-43fe-8e40-9841c016adad",
"AGO": "f971344d-2e33-4d3a-8c84-cd942db81096",
"PSO": "b4a23642-bc6b-4aa2-97fb-b53631c732bd",
"FACTORY_PREORDER": "75e05071-cf52-4068-963f-622e66ecf7c8",
"RD": "de5012af-fa90-443e-b79b-cf2f56e0b5ed",
"CORRECTION_P": "8f586139-8987-4572-bae7-281d9d31acac",
"IEMD": "78109552-37b6-4d87-b57f-bf11867bbaa9",
"ITERATION_SET": "09ad2c16-6047-4dfb-8274-6c4a5f1edbe5",
"CORRECTION_P_ZOS": "09ad2c16-6047-4dfb-8274-6c4a5f1edbe5"
},
"PerformerTypeMap": {
"CONTRACTOR": "67e87ece-0994-4bf0-98d2-8837f6f87abf"
},
"KafkaConfig": {
"GroupId": "vitro.test",
"BootstrapServers": "kafka.k8s-dev.fsk.ru:9094",
"SaslUsername": "vitro",
"SaslPassword": "password",
"SecurityProtocol": "SaslPlaintext"
}
}
На усмотрение администраторов. Пример: https://portal.vitrocad.ru/pages/viewpage.action?pageId=23659062
Условия: 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('Номер ИЗМа'))
При срабатывании создаётся элемент в «Экспорт в Kafka» с success_kafka = false. Утилита отправляет его в vitro.event-status.
Утилита автоматически экспортирует изменённые статусы в vitro.status-list. Автоматизация не требуется. Формат: {"status":"{название}","id":"{guid}"}
Проекты и объекты строительства, которые не будут созданы или обновлены.
id_isup.В «Черном списке»: записать id_isup объектов, удалить объекты и проект.
В «Импорт из Kafka»: для сообщений с BlackListException проставить success_kafka = false.
Шаг «восстановление очередей» больше не актуален.
Список KupBlackListId. Элементы с неизвестным type из kup.task-1 или дочерние заблокированного родителя попадают сюда автоматически.
Инструкция первичной настройки. Предполагается, что базовые списки заведены, но изменения по новой схеме ИСУП (без очередей) ещё не выполнены.
| Название | Системное имя | Тип |
|---|---|---|
| Место реализации | mesto_realizacii | Lookup → справочник мест реализации |
| Место реализации (значение ИСУП) | mesto_realizacii_isup_value | Integer |
| Тип объекта (значение ИСУП) | object_type_isup_value | Integer |
| ID проекта ИСУП | proekt_id_isup | Integer |
| Тип объекта строительства | construction_object_type | Lookup → типы объектов |
| Проект (карточка) | project_card | Lookup → реестр проектов |
| Карточка корпуса | building_lookup | Lookup → реестр проектов |
| Тип элемента | Добавить атрибуты |
|---|---|
| Карточка проекта | mesto_realizacii_isup_value, mesto_realizacii |
| Карточка объекта строительства | object_type_isup_value, construction_object_type |
| Карточка корпуса | proekt_id_isup, construction_object_type |
| Проект (Файлы) | project_card, mesto_realizacii |
| Корпус (Файлы) | building_lookup, construction_object_type |
Формулы вычисления (не автоматизации). Имена типов в Parent('…') — как в UI.
| Тип элемента | Атрибут | Формула |
|---|---|---|
| Карточка корпуса | proekt_id_isup | Field(Parent('Карточка проекта'), 'id_isup') |
| Карточка корпуса | construction_object_type | Field(Parent("Карточка объекта строительства"), "construction_object_type") |
| Корпус (Файлы) | construction_object_type | Field(This("building_lookup"), "construction_object_type") |
| Проект (Файлы) | mesto_realizacii | Field(This('project_card'), 'mesto_realizacii') |
Остальные лукапы — записи в списке «Автоматизация». Общий алгоритм:
true (поле «Формула» у условия).config.json целевой среды.Таблица автоматизаций:
| № | Название | Тип элемента | Тип действия | Триггер | Атрибут действия |
|---|---|---|---|---|---|
| 1 | Проект → project_card | Проект (Файлы) | Установить значение атрибута | id_isup | project_card |
| 2 | Карточка проекта → mesto_realizacii | Карточка проекта | Установить значение атрибута | mesto_realizacii_isup_value | mesto_realizacii |
| 3 | Карточка объекта → construction_object_type | Карточка объекта строительства | Установить значение атрибута | object_type_isup_value | construction_object_type |
| 4 | Корпус → building_lookup | Корпус (Файлы) | Установить значение атрибута | id_isup | building_lookup |
Условие:
Count(GetList(
"5b911635-5f2a-4049-926b-60ec11be3d17",
"i => i.ContentTypeId == Guid(\"74546a61-799e-46aa-9a79-7f7661bb707f\") && i.GetValueAsInt(\"id_isup\") == " + Str(This("id_isup")),
true)) == 1
Формула действия:
Join("", Select(GetList(
"5b911635-5f2a-4049-926b-60ec11be3d17",
"i => i.ContentTypeId == Guid(\"74546a61-799e-46aa-9a79-7f7661bb707f\") && i.GetValueAsInt(\"id_isup\") == " + Str(This("id_isup")),
true), "Str(Id())"))
Условие:
Count(GetList(
"fcdecebd-4a57-41ed-8265-9c3d4d586b8b",
"i => i.ContentTypeId == Guid(\"4002a57c-d5ad-42e9-a7f5-531c5d3ad99e\") && i.GetValueAsInt(\"id_isup\") == " + Str(This("mesto_realizacii_isup_value")),
false)) == 1
Формула действия:
Join("", Select(GetList(
"fcdecebd-4a57-41ed-8265-9c3d4d586b8b",
"i => i.ContentTypeId == Guid(\"4002a57c-d5ad-42e9-a7f5-531c5d3ad99e\") && i.GetValueAsInt(\"id_isup\") == " + Str(This("mesto_realizacii_isup_value")),
false), "Str(Id())"))
Условие:
Count(GetList(
"1a0671ac-6ffd-4c2a-ac83-177c4902377d",
"i => i.ContentTypeId == Guid(\"c8988a65-df34-4f60-88fd-90d23965c1fe\") && i.GetValueAsInt(\"id_isup\") == " + Str(This("object_type_isup_value")),
false)) == 1
Формула действия:
Join("", Select(GetList(
"1a0671ac-6ffd-4c2a-ac83-177c4902377d",
"i => i.ContentTypeId == Guid(\"c8988a65-df34-4f60-88fd-90d23965c1fe\") && i.GetValueAsInt(\"id_isup\") == " + Str(This("object_type_isup_value")),
false), "Str(Id())"))
Условие:
Count(GetList(
"5b911635-5f2a-4049-926b-60ec11be3d17",
"i => i.ContentTypeId == Guid(\"7175d8a2-2253-4172-b68b-150b823d855c\") && i.GetValueAsInt(\"id_isup\") == " + Str(This("id_isup")),
true)) == 1
Формула действия:
Join("", Select(GetList(
"5b911635-5f2a-4049-926b-60ec11be3d17",
"i => i.ContentTypeId == Guid(\"7175d8a2-2253-4172-b68b-150b823d855c\") && i.GetValueAsInt(\"id_isup\") == " + Str(This("id_isup")),
true), "Str(Id())"))