Экспорт данных в СКУД PERCo-S-20
Модуль передачи данных в Систему контроля и управления доступом (СКУД) Сервиса по оформлению заявок на пропуск на объекты транспортной инфраструктуры операторов морских портов и аэропортов (далее «Сервис») предназначен для автоматической передачи данных об оформленных заявках на пропуск из Сервиса в СКУД. Модуль получает данные от Сервиса через стандартный механизм передачи данных во внешние информационные системы, а затем передает их дальше в СКУД через специфические протоколы, свойственные конкретной СКУД.
В данном разделе описывается механизм интеграции со СКУД PERCo-S-20.
Ввиду отсутствия в СКУД PERCo-S-20 штатного межсистемного интерфейса (API) с внешними системами, данные из Сервиса передаются прямыми запросами в базу данных СКУД (СУБД FireBird 2.7). Для обеспечения безопасности передачи данных между серверами Сервиса и СКУД устанавливается защищенное VPN соединение (VPN-сервер на стороне СКУД, VPN-клиент на стороне Сервиса).
Модуль формирует следующую последовательность запросов к базе данных СКУД:
1. Генерация нового идентификатора (для большинства новых записей)
SELECT GEN_ID(GENERAL_GENERATOR, 1) AS ID FROM RDB$DATABASE
2. Информация о посетителе
INSERT INTO STAFF (ID_STAFF, LAST_NAME, FIRST_NAME, MIDDLE_NAME, TEMPORARY_ACC, DEL_GUEST_AFTER_PASS, VALID, ACCESS_BEGIN_DATE, ACCESS_END_DATE, ACCESS_PROHIBIT, DELETED, DATE_BEGIN) VALUES ('2336495', 'Иванов', 'Иван', 'Иванович', 1, 1, 1, '24.03.2020, 00:00:00.000', '24.03.2020, 23:59:59.000', 0, 0, '23.03.2020')
где:
- ID_STAFF – идентификатор посетителя (генерируется счетчиком GENERAL_GENERATOR)
- LAST_NAME – фамилия посетителя
- FIRST_NAME – имя посетителя
- MIDDLE_NAME – отчество посетителя
- TEMPORARY_ACC – флаг разового прохода (1 – для разовых пропусков, 0 – для постоянных)
- DEL_GUEST_AFTER_PASS – флаг удаления посетителя после прохода (1 – для разовых пропусков, 0 – для постоянных)
- VALID – всегда 1
- ACCESS_BEGIN_DATE – дата начала действия пропуска
- ACCESS_END_DATE – дата окончания действия пропуска
- ACCESS_PROHIBIT – всегда 0
- DELETED – всегда 0
- DATE_BEGIN – дата передачи заявки в СКУД
Примечание: При добавлении посетителя проверка на его уникальность не проверяется, т.к. в информации о посетителе присутствуют данные о сроках действия пропуска. При этом в сервисе можно настроить добавление префикса к фамилии посетителя для облегчения поиска новых посетителей в СКУД, например, вместо «Иванов» добавлять «99Иванов».
3. Паспортные данные посетителя
INSERT INTO STAFF_DOCS (STAFF_ID, DOC_NAME, DOC_NUMBER, BIRTHDAY_DATE, BIRTHDAY_PLACE, SEX, ISSUED_BY, ISSUED_DATE, EXPIRY_DATE, NATIONALITY, DEPARTMENT_CODE, DOC_PICTURE) VALUES (2336522, 'Гражданский паспорт', '4007 654321', '07.07.1986', 'г Ленинград', '', 'ТП №35 ОТДЕЛА УФМС РОССИИ ПО САНКТ-ПЕТЕРБУРГУ И ЛЕНИНГРАДСКОЙ ОБЛ. В КРАСНОГВАРДЕЙСКОМ Р-НЕ Г.САНКТ-ПЕТЕРБУРГА', '15.12.2007', '30.12.1899', 'Россия', '780-035', NULL)
где:
- STAFF_ID – идентификатор посетителя
- DOC_NAME – вид документа
- DOC_NUMBER – серия и номер документа
- BIRTHDAY_DATE – дата рождения
- BIRTHDAY_PLACE – место рождения
- SEX – пол посетителя (не заполняется)
- ISSUED_BY – орган, выдавший документ
- ISSUED_DATE – дата выдачи документа
- EXPIRY_DATE – дата окончания срока действия документа
- NATIONALITY – гражданство
- DEPARTMENT_CODE – код подразделения, выдавшего документ
- DOC_PICTURE – всегда NULL
Примечание: Если срок действия документа не установлен, то в поле EXPIRY_DATE передается значение '30.12.1899'.
4. Информация об организации посетителя
Данные об организации посетителя передаются в СКУД несколькими запросами.
Примечание: Если в форме заявки на пропуск наименование организации и ИНН введены в секции «Посетитель», то для передачи в СКУД они берутся из данной секции, в противном случае данные берутся из секции «Заявитель».
В таблицу STAFF_INFO_DATA_STR:
INSERT INTO STAFF_INFO_DATA_STR (ID_DATA, REF_ID, STAFF_ID, STAFF_TYPE, INFO_DATA) VALUES (2336502, 1743640, 2336501, NULL, 'БАЛТИЙСКИЙ ПОРТ ООО - 7826023942')
где:
- ID_DATA – идентификатор записи (генерируется счетчиком GENERAL_GENERATOR)
- REF_ID – идентификатор справочника (настраивается)
- STAFF_ID – идентификатор посетителя
- STAFF_TYPE – всегда NULL
- INFO_DATA – наименование и ИНН организации (через дефис)
В таблицу SUBDIV_REF:
Вначале ведется поиск организации в таблице по ИНН организации:
SELECT ID_REF FROM SUBDIV_REF WHERE SUBDIV_DESC = '7826023942';
Если запись не найдена, то создается новая запись:
SELECT N_RIGHT FROM SUBDIV_REF WHERE ID_REF = '0';
UPDATE SUBDIV_REF SET N_RIGHT = 1220 WHERE ID_REF = 0;
INSERT INTO SUBDIV_REF (ID_REF, N_LEFT, N_RIGHT, N_LEVEL, DISPLAY_NAME, DESCRIPTION, VISIBLE, ID_FROM_1C, SUBDIV_STATE, SUBDIV_OFFICIES, STAFF_ID_CONTANT_PERSON, STAFF_ID_ACCOMPANY, SUBDIV_DESC, PHONES, STAFF_ACCESS_PATTERN_ID, GUEST_ACCESS_PATTERN_ID) VALUES (2686051, 1218, 1219, 1, 'БАЛТИЙСКИЙ ПОРТ ООО', NULL, 1, NULL, 0, '', 0, 0, '7826023942', '', 0, 0);
где:
- ID_REF – идентификатор записи (генерируется счетчиком GENERAL_GENERATOR)
- N_LEFT – идентификатор узла слева (для иерархической структуры справочника)
- N_RIGHT – идентификатор узла справа (для иерархической структуры справочника)
- N_LEVEL – всегда 1
- DISPLAY_NAME – наименование организации
- DESCRIPTION – всегда NULL
- VISIBLE – всегда 1
- ID_FROM_1C – всегда NULL
- SUBDIV_STATE – всегда 0
- SUBDIV_OFFICIES – всегда пустое
- STAFF_ID_CONTANT_PERSON – всегда 0
- STAFF_ID_ACCOMPANY – всегда 0
- SUBDIV_DESC – ИНН организации
- PHONES – всегда пустое
- STAFF_ACCESS_PATTERN_ID – всегда 0
- GUEST_ACCESS_PATTERN_ID – всегда 0
Примечание: В сервисе можно настроить нормализацию наименований организаций: с кавычками / без кавычек (ООО "НАИМЕНОВАНИЕ" / ООО НАИМЕНОВАНИЕ), форма собственности в начале / в конце (ООО НАИМЕНОВАНИЕ / НАИМЕНОВАНИЕ ООО).
5. Должность посетителя
Данные о должности посетителя передаются в СКУД несколькими запросами.
В таблицу STAFF_INFO_DATA_STR:
INSERT INTO STAFF_INFO_DATA_STR (ID_DATA, REF_ID, STAFF_ID, STAFF_TYPE, INFO_DATA) VALUES (2336497, 1748759, 2336495, NULL, 'Водитель')
где:
- ID_DATA – идентификатор записи (генерируется счетчиком GENERAL_GENERATOR)
- REF_ID – идентификатор справочника (настраивается)
- STAFF_ID – идентификатор посетителя
- STAFF_TYPE – всегда NULL
- INFO_DATA – должность посетителя
В таблицу SUBDIV_REF:
Вначале ведется поиск должности в таблице по наименованию должности:
SELECT ID_REF FROM APPOINT_REF WHERE DISPLAY_NAME = 'Водитель'
Если запись не найдена, то создается новая запись:
INSERT INTO APPOINT_REF (ID_REF, DISPLAY_NAME, DESCRIPTION, VISIBLE, ID_FROM_1C, APPOINT_STATE, AUTHORIZATION_TYPE) VALUES (2686053, 'Водитель', '', 1, NULL, 0, 0)
где:
- ID_REF – идентификатор записи (генерируется счетчиком GENERAL_GENERATOR)
- DISPLAY_NAME – наименование должности
- DESCRIPTION – всегда пустое
- VISIBLE – всегда 1
- ID_FROM_1C – всегда NULL
- APPOINT_STATE – всегда 0
- AUTHORIZATION_TYPE – всегда 0
6. Связь посетителя, организации и должности
INSERT INTO STAFF_REF (ID_STAFF_REF, STAFF_ID, DATE_ACTION, SUBDIV_ID, APPOINT_ID, GROUP_WT_ID, DOCUMENTS_ID, LAST_TIMESTAMP) VALUES (149422, 2686048, '27.03.2020, 16:39:49.000', 2686051, 2686053, 1390567, 0, '27.03.2020, 16:39:49.795')
где:
- ID_STAFF_REF – идентификатор справочника (настраивается)
- STAFF_ID – идентификатор посетителя
- DATE_ACTION – дата и время выполнения операции
- SUBDIV_ID – идентификатор организации
- APPOINT_ID – идентификатор должности
- GROUP_WT_ID – всегда 1390567
- DOCUMENTS_ID – всегда 0
- LAST_TIMESTAMP – дата и время выполнения операции
7. Информация о транспортных средствах посетителя (при наличии)
Данные о транспортных средствах посетителя передаются в СКУД несколькими запросами.
В таблицу GUEST_ATP:
Генерация нового идентификатора для транспортного средства:
SELECT GEN_ID(GEN_GUEST_ATP_ID, 1) AS ID FROM RDB$DATABASE
INSERT INTO GUEST_ATP (ID_GUEST_ATP, STAFF_ID, CATEGORY_ATP_ID, MODEL_ATP, NUMBER_ATP, NUMBER_PRIZEP, EXP_PASSP_NUMBER, EXP_FIO, EXP_PASP_WHO, EXP_PASSP_WHEN, COLOR_ATP, PHOTO_ATP, PHOTO_PRIZEP, PHOTO_EXP, NEED_EXCORT, NUMBER_TTN, DESCRIPTION_TTN) VALUES (29369, 2686048, 1773576, 'СКАНИЯ R440 LA4X2HNA', 'К029КУ750', 'АО162135', '', '', '', '27.03.2020', 'Белый', NULL, NULL, NULL, 0, '', '')
где:
- ID_GUEST_ATP – идентификатор записи (генерируется счетчиком GEN_GUEST_ATP_ID)
- STAFF_ID – идентификатор посетителя
- CATEGORY_ATP_ID – идентификатор вида транспортного средства (настраивается отдельно для грузовых, отдельно для всех остальных)
- MODEL_ATP – марка и модель транспортного средства (через пробел)
- NUMBER_ATP – государственный регистрационный знак транспортного средства
- NUMBER_PRIZEP – государственный регистрационный знак прицепа
- EXP_PASSP_NUMBER – всегда пустое
- EXP_FIO – всегда пустое
- EXP_PASP_WHO – всегда пустое
- EXP_PASSP_WHEN – всегда пустое
- COLOR_ATP – цвет транспортного средства
- PHOTO_ATP – всегда NULL
- PHOTO_PRIZEP – всегда NULL
- PHOTO_EXP – всегда NULL
- NEED_EXCORT – всегда 0
- NUMBER_TTN – всегда пустое
- DESCRIPTION_TTN – всегда пустое
В таблицу STAFF_INFO_DATA_STR:
INSERT INTO STAFF_INFO_DATA_STR (ID_DATA, REF_ID, STAFF_ID, STAFF_TYPE, INFO_DATA) VALUES (2336500, 1748760, 2336495, NULL, 'СКАНИЯ R440 LA4X2HNA')
где:
- ID_DATA – идентификатор записи (генерируется счетчиком GENERAL_GENERATOR)
- REF_ID – идентификатор справочника (настраивается)
- STAFF_ID – идентификатор посетителя
- STAFF_TYPE – всегда NULL
- INFO_DATA – марка и модель транспортного средства (через пробел)
INSERT INTO STAFF_INFO_DATA_STR (ID_DATA, REF_ID, STAFF_ID, STAFF_TYPE, INFO_DATA) VALUES (2336500, 1748761, 2336495, NULL, 'К029КУ750')
где:
- ID_DATA – идентификатор записи (генерируется счетчиком GENERAL_GENERATOR)
- REF_ID – идентификатор справочника (настраивается)
- STAFF_ID – идентификатор посетителя
- STAFF_TYPE – всегда NULL
- INFO_DATA – государственный регистрационный знак ТС и номер прицепа (через пробел)