Автоматизация выгрузки ИЭМК
Материал из ИбисоПедии
Версия от 15:28, 17 мая 2016; Admin (обсуждение | вклад)
- Цель: Автоматическая выгрузка ИЭМК
- Периодичность: ежеминутно
Необходима etl схема в базе данных. Для её переноса использовать скрипт IBIS_ADM\AdminDB\helpers\etl.bat. Перед использованием скрипт необходимо скопировать в IBIS_ADM\AdminDB и вызывать оттуда. На базе mis3 необходимо выполнить дамп схемы. Файлы дампа будут находится в %DUMPDIR%.
etl.bat dump
Скопировать файлы дампа на сервер клиента в %DUMPDIT% и восстановить их
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';