Автоматизация выгрузки ИЭМК

Материал из ИбисоПедии
Перейти к: навигация, поиск
  • Цель: Автоматическая выгрузка ИЭМК
  • Периодичность: ежеминутно

Необходима etl схема в базе данных и расширении uuid-ossp в схеме public. Для её переноса использовать скрипт IBIS_ADM\AdminDB\helpers\etl.bat. Перед использованием скрипт необходимо скопировать в IBIS_ADM\AdminDB и вызывать оттуда. На базе mis3 необходимо выполнить дамп схемы. Файлы дампа будут находится в %DUMPDIR%.

etl.bat dump

Скопировать файлы дампа на сервер клиента в %DUMPDIR% и восстановить их

etl.bat restore

Далее необходимо в таблице etl.cfg_url во всех URL, которые содержат строку IEMKRegionalService/services/ (скорее всего srv_id=7) изменить адрес тестового сервера на реальный. После этого создать событие со следующим SQL запросом

DO $$
DECLARE
  r record;
  uid1 UUID;
  uid2 UUID;  
  res1 record;
  res2 record;  
BEGIN

--выбираем самую последнюю запись в очереди и пытаемся ее передать

select i.*, md.people_id into r
from 
    iemk.iemk_upload_queue i 
    left join mm.naz n on i.naz_id=n.id
    left join mm.ambticket a on i.ambticket_id = a.id
    left join mm.gravid_risk gr on gr.id=i.gravid_risk_id
    inner join mm.mdoc md on md.id = coalesce(n.mdoc_id, a.mdoc_id, gr.mdoc_id, i.hospdoc_id)
order by i.added asc limit 1;

RAISE NOTICE '%', r.id;

IF FOUND 
THEN
  --пытаемся передать документ
    BEGIN
       select etl.exch('ADDPATIENT',ARRAY[ r.people_id::text ]) into uid1;
       
       RAISE NOTICE 'Регистрация пациента %', uid1;
       select * into res1 from etl.se_all a where a.id= uid1;
       RAISE NOTICE '%', res1.res;
       
       select etl.exch('adddoc',ARRAY[ r.id::text ]) into uid2;

       RAISE NOTICE 'Отправка документа %', uid2;
       select * into res2 from etl.se_all a where a.id= uid2;
       RAISE NOTICE '%', res2.res;

    -- вставили в лог очереди ответ
       INSERT INTO iemk.iemk_upload_events ( upload_id, event_time, respond, code, ambticket_id, hospdoc_id, naz_id, tp )
       VALUES (  r.id,  now(),  res.res,  200,  r.ambticket_id,  r.hospdoc_id,  r.naz_id,  3);

       UPDATE iemk.iemk_upload_queue  SET added=now() WHERE id=r.id;              

     --возможно ошибка при передаче, тогда просто проапдейтим время появления в очереди на текущее;     
       EXCEPTION WHEN OTHERS THEN
         UPDATE iemk.iemk_upload_queue  SET added=now() WHERE id=r.id;
    END;

END IF;

END$$
LANGUAGE 'plpgsql';