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

Материал из ИбисоПедии
Перейти к: навигация, поиск
(Новая страница: «* Цель: Автоматическая выгрузка ИЭМК * Периодичность: ежеминутно Необходима etl схема в ба…»)
 
 
(не показано 7 промежуточных версий этого же участника)
Строка 2: Строка 2:
 
* Периодичность: ежеминутно
 
* Периодичность: ежеминутно
  
Необходима etl схема в базе данных. Для её переноса использовать скрипт IBIS_ADM\AdminDB\helpers\etl.bat. Перед использованием скрипт необходимо скопировать в IBIS_ADM\AdminDB и вызывать оттуда. На базе mis3 необходимо выполнить дамп схемы. Файлы дампа будут находится в %DUMPDIR%.
+
Необходима ''etl'' схема в базе данных и расширении ''uuid-ossp'' в схеме ''public''. Для её переноса использовать скрипт ''IBIS_ADM\AdminDB\helpers\etl.bat''. Перед использованием скрипт необходимо скопировать в IBIS_ADM\AdminDB и вызывать оттуда. На базе mis3 необходимо выполнить дамп схемы. Файлы дампа будут находится в %DUMPDIR%.
  
 
  etl.bat dump
 
  etl.bat dump
  
Скопировать файлы дампа на сервер клиента в %DUMPDIT% и восстановить их
+
Скопировать файлы дампа на сервер клиента в %DUMPDIR% и восстановить их
  
 
  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; 
 +
  res1 record;
 +
  res2 record;
 
  BEGIN
 
  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;
 
 
   
 
   
 
     -- вставили в лог очереди ответ
 
     -- вставили в лог очереди ответ
Строка 41: Строка 56:
 
         UPDATE iemk.iemk_upload_queue  SET added=now() WHERE id=r.id;               
 
         UPDATE iemk.iemk_upload_queue  SET added=now() WHERE id=r.id;               
 
   
 
   
  --возможно ошибка при передаче, тогда просто проапдейтим время появления в очереди на текущее;     
+
      --возможно ошибка при передаче, тогда просто проапдейтим время появления в очереди на текущее;     
    EXCEPTION WHEN OTHERS THEN
+
        EXCEPTION WHEN OTHERS THEN
        UPDATE iemk.iemk_upload_queue  SET added=now() WHERE id=r.id;
+
          UPDATE iemk.iemk_upload_queue  SET added=now() WHERE id=r.id;
 
     END;
 
     END;
 
   
 
   
Строка 49: Строка 64:
 
   
 
   
 
  END$$
 
  END$$
LANGUAGE 'plpgsql';
+
LANGUAGE 'plpgsql';
 +
 
[[Категория:JOB в БД MIS3]]
 
[[Категория:JOB в БД MIS3]]

Текущая версия на 08:30, 18 мая 2016

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

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