Экспорт данных в СКУД 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 – государственный регистрационный знак ТС и номер прицепа (через пробел)