Автоматизация выгрузки ИЭМК — различия между версиями

Материал из ИбисоПедии
Перейти к: навигация, поиск
Строка 10: Строка 10:
 
  etl.bat restore
 
  etl.bat restore
  
После этого создать событие со следующим SQL запросом
+
Далее необходимо в таблице etl.cfg_url во всех URL, которые содержат строку IEMKRegionalService/services/ (скорее всего srv_id=7) изменить адрес тестового сервера на реальный. После этого создать событие со следующим SQL запросом
  
 
  DO $$
 
  DO $$
 
  DECLARE
 
  DECLARE
 
   r record;
 
   r record;
   uid UUID;
+
   uid1 UUID;
   res record;
+
   uid2 UUID; 
  BEGIN
+
  res1 record;
 +
  res2 record;
 +
  BEGIN  
 
   
 
   
 
  --выбираем самую последнюю запись в очереди и пытаемся ее передать
 
  --выбираем самую последнюю запись в очереди и пытаемся ее передать
  select * into r from iemk.iemk_upload_queue a where a.naz_id is null order by a.added asc limit 1;
+
 +
  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;
 
  RAISE NOTICE '%', r.id;
 
   
 
   
Строка 27: Строка 38:
 
   --пытаемся передать документ
 
   --пытаемся передать документ
 
     BEGIN
 
     BEGIN
         select etl.exch('adddoc',ARRAY[ r.id::text ]) into uid;
+
        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 '%', uid;
+
         RAISE NOTICE 'Отправка документа %', uid2;
+
         select * into res2 from etl.se_all a where a.id= uid2;
         select * into res from etl.se_all a where a.id= uid;
+
         RAISE NOTICE '%', res2.res;
 
         RAISE NOTICE '%', res.res;
 
 
   
 
   
 
     -- вставили в лог очереди ответ
 
     -- вставили в лог очереди ответ
Строка 49: Строка 64:
 
   
 
   
 
  END$$
 
  END$$
LANGUAGE 'plpgsql';
+
LANGUAGE 'plpgsql';
 +
 
[[Категория:JOB в БД MIS3]]
 
[[Категория:JOB в БД MIS3]]

Версия 15:27, 17 мая 2016

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

Необходима 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';