Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
расширенная.настройка:рассылка.уведомлений:push [2018/08/15 09:30]
a.korobka [Push уведомления]
расширенная.настройка:рассылка.уведомлений:push [2019/07/04 08:22] (текущий)
Строка 16: Строка 16:
  
 Также, для работы с данными событиями дополняется справочник типов смс сообщений (SMS_REF) с настройками рассылки Также, для работы с данными событиями дополняется справочник типов смс сообщений (SMS_REF) с настройками рассылки
-^  Идентификатор\\ рассылки ​ ^  Назначение ​ ^  Объект формирования ​ | +^  Идентификатор\\ рассылки ​ ^  Назначение ​ ^  Объект формирования ​уведомления ​ ^  Действие при получении\\ в мобильном приложении ​ | 
-|  70001  |Новое назначение к доктору|Триггер на таблице SCHEDULE, с отправкой на события наступаемые более чем через 10 минут от текущего времени| +|  70001  |Новое назначение к доктору|Триггер на таблице SCHEDULE, с отправкой на события наступаемые более чем через 10 минут от текущего времени|Откроется страница «Мои записи»,​ вкладка «Текущие»
-|  70002  |Перенос назначения|:::​| +|  70002  |Перенос назначения|:::|:::| 
-|  70003  |Отмена назначения|:::​| +|  70003  |Отмена назначения|:::|:::| 
-|  70005  |Повторная явка|Скрипт в репликаторе,​ выполняемый по филиальным БД, раз в сутки| +|  70005  |Повторная явка|Скрипт в репликаторе,​ выполняемый по филиальным БД, раз в сутки|Открывается расписание доктора,​ с пропуском всех промежуточных экранов (выбор отделения,​ филиала,​ доктора)
-|  70006  |Результат исследования|Триггер на таблице TREATSCH, с проверкой всех услуг наряда на готовность| +|  70006  |Результат исследования|Триггер на таблице TREATSCH, с проверкой всех услуг наряда на готовность|Открывается страница «Медицинские данные»
-|  70008  |Оценка приема|Триггер на таблице ORDERS, с проверкой наличия записи в расписании,​ и наличия суммы за прием, с задержкой 2 часа на отправку|+|  70008  |Оценка приема|Триггер на таблице ORDERS, с проверкой наличия записи в расписании,​ и наличия суммы за прием, с задержкой 2 часа на отправку|Открывается форма оценки приема| 
 +|         ​|Акции|PHP-скрипт при добавлении акции|Открывается страница акций, с полным текстом соответствующей акции|
  
 Тип рассылки:​ Только Push.\\ Тип рассылки:​ Только Push.\\
Строка 28: Строка 29:
  
 ==== Запись ==== ==== Запись ====
-== Push объект ​==+<​spoiler|Push объект>
 <code javascript>​ <code javascript>​
 { {
Строка 62: Строка 63:
 </​code>​ </​code>​
 В поле ''​action''​ передается производимое действие (''​new''​ - новое назначение;​ ''​move''​ - перенесено назначение;​ ''​delete''​ - удалено назначение) В поле ''​action''​ передается производимое действие (''​new''​ - новое назначение;​ ''​move''​ - перенесено назначение;​ ''​delete''​ - удалено назначение)
 +</​spoiler>​
  
-== Триггер ​==+<​spoiler|Триггер>
 <code sql> ​ <code sql> ​
 create or alter trigger USER$SCHEDULE_PUSH for SCHEDULE create or alter trigger USER$SCHEDULE_PUSH for SCHEDULE
Строка 191: Строка 193:
       smstypeid = 0;       smstypeid = 0;
       smsprofileid = 1;       smsprofileid = 1;
-      --in autonomous transaction do +      -- 
-      ​begin +      insert into SMS_LOG(LOGID,​SMSTYPEID,​SMSREFID,​SMSPROFILEID,​FILIAL,​ 
-        ​insert into SMS_LOG(LOGID,​SMSTYPEID,​SMSREFID,​SMSPROFILEID,​FILIAL,​ +                 ​CREATEDATE,​SMSTEXT,​PCODE,​UID,​INTERNALID,​PLANBTIME,​PLANFTIME,​STATE) 
-                   ​CREATEDATE,​SMSTEXT,​PCODE,​UID,​INTERNALID,​PLANBTIME,​PLANFTIME,​STATE) +          values(:​logid,​ :smstypeid, :smsrefid, :​smsprofileid,​ :filial, 
-            values(:​logid,​ :smstypeid, :smsrefid, :​smsprofileid,​ :filial, +                 ​current_timestamp,​ :pushtext, :pcode, :uid, :​internalid,​ current_timestamp,​ :planftime, 0); 
-                   ​current_timestamp,​ :pushtext, :pcode, :uid, :​internalid,​ current_timestamp,​ :planftime, 0); +      insert into SMS_LOGDET(SMSID,​LOGID,​PHONETYPE,​EXTSMSID,​PHPREFIX,​PHONE,​STATE,​NOTIFICATIONID) 
-        insert into SMS_LOGDET(SMSID,​LOGID,​PHONETYPE,​EXTSMSID,​PHPREFIX,​PHONE,​STATE,​NOTIFICATIONID) +          values(:​smsid,​ :logid, 21, null, null, null, 0, :notify);
-            values(:​smsid,​ :logid, 21, null, null, null, 0, :notify); +
-      end +
     end     end
   end   end
Строка 206: Строка 205:
 end end
 </​code>​ </​code>​
 +</​spoiler>​
 +
 +=== Нюансы ===
 +Рассылка будет формироваться,​ в случае если назначение позже 10 минут от текущего времени
 +
 ==== Повторная явка ==== ==== Повторная явка ====
-== Push объект ​==+<​spoiler|Push объект>
 <code javascript>​ <code javascript>​
 { {
Строка 232: Строка 236:
 } }
 </​code>​ </​code>​
- +</​spoiler>​ 
 + 
 +Скрипт выполняется раз в день и указан на [[:​администрирование:​скрипты:​фбд:​Push - повторная явка|отдельной странице]] 
 ==== Результат исследования ==== ==== Результат исследования ====
-== Push объект ​==+<​spoiler|Push объект>
 <code javascript>​ <code javascript>​
 { {
Строка 255: Строка 262:
 } }
 </​code>​ </​code>​
 +</​spoiler>​
  
 ==== Оценка приема ==== ==== Оценка приема ====
-== Push объект ​==+<​spoiler|Push объект>
 <code javascript>​ <code javascript>​
 { {
Строка 278: Строка 286:
 } }
 </​code>​ </​code>​
 +</​spoiler>​
 +
 +<​spoiler|Триггер>​
 +<code sql>
 +create or alter trigger USER$ORDERS_PUSH for ORDERS
 +active after insert or update or delete position 99
 +as
 +--
 +declare logid type of column sms_log.logid;​
 +declare smsid type of column sms_logdet.smsid;​
 +declare smstypeid type of column sms_log.smstypeid;​
 +declare smsrefid type of column sms_log.smsrefid;​
 +declare smsprofileid type of column sms_log.smsprofileid;​
 +declare planbtime type of column sms_log.planbtime;​
 +declare planftime type of column sms_log.planftime;​
 +declare pushtext type of column sms_log.smstext;​
 +declare ttl int;
 +--
 +declare uid type of column doctor.dcode;​
 +declare notify type of column clphones.notificationid;​
 +declare summa type of column orderdet.schamount;​
 +--
 +declare schedid type of column schedule.schedid;​
 +declare filial type of column filials.filid;​
 +declare fname type of column filials.shortname;​
 +declare dcode type of column doctor.dcode;​
 +declare dname type of column doctor.dname;​
 +begin
 +  if (exists(select * from repl$getaccess where repl$access = '​USER'​)) then
 +  begin
 +    if (exists(select * from repl$getgrpid g join filials f on f.grpid=g.repl$grpid where f.ismain=1)) then
 +      exit;
 +
 +    select current_uid from s_session_info into uid;
 +    ttl = 7*24*60*60; -- 1 неделя ​ секундах
 +    -- вставка или обновление
 +    if (inserting or updating)then
 +    begin
 +      -- проверяем наличие идентификатора
 +      notify = null;
 +      select notificationid from clphones cp where cp.pcode= new.pcode and coalesce(cp.isdeleted,​0)=0 and cp.phonetype=21
 +        into notify;
 +      notify = coalesce(notify,'​-'​);​
 +      -- проверяем сумму
 +      select sum(coalesce(schamount,​0)) from orderdet where orderno= new.ordercod
 +        into summa;
 +      -- проверяем возможность рассылки (SCHEDULE)
 +      select max(coalesce(s.schedid,​0)) from treat t join schedule s on s.treatcode=t.treatcode
 +       where t.orderno= new.ordercod and s.workdate=current_date
 +        into schedid;
 +
 +      -- объек добавляем/​изменяем
 +      if (notify != '​-'​ and summa > 0 and schedid>​0) then
 +      begin
 +        -- формируем запись
 +        logid = null;
 +        select logid from sms_log where smsrefid=70008 and pcode= new.pcode and internalid= :schedid
 +          into logid;
 +        planbtime = dateadd(2 hour to current_timestamp); ​ -- не ранее чем через 2 часа после приема
 +        planftime = dateadd(ttl second to planbtime); ​     -- не позже ttl (неделя),​ т.к. не имеет смысла
 +        if (logid is null) then
 +        begin
 +          -- данные
 +          select d.dcode, d.dname, f.filid, f.shortname from schedule s
 +            left join doctor d on d.dcode=s.dcode
 +            left join filials f on f.filid=s.filial
 +           where s.schedid= :schedid
 +            into dcode, dname, filial, fname;
 +          -- формируем объект
 +          pushtext = '​{"​to":"'​||notify||'","​time_to_leave":'​||ttl||',"​notification":​{';​
 +          pushtext = pushtext||'"​title":"​Оценка посещения","​body":"​Пожалуйста,​ оцените прием доктора",';​
 +          pushtext = pushtext||'"​sound":"​true","​tag":"​mark"​},';​
 +          pushtext = pushtext||'"​data":​{"​action":"​mark",';​
 +          pushtext = pushtext||'"​SchedId":'​||schedid||',';​
 +          pushtext = pushtext||'"​DCode":'​||dcode||',"​DName":"'​||dname||'",';​
 +          pushtext = pushtext||'"​filial":'​||filial||',"​FName":"'​||fname||'",';​
 +          pushtext = pushtext||'​}}';​
 +
 +          -- заполняем данные
 +          logid = gen_id(SMS_LOG_GEN,​ 1);
 +          smsid = gen_id(SMS_GEN,​ 1);
 +          smstypeid = 0;
 +          smsprofileid = 1;
 +          smsrefid = 70008;
 +          -- вставляем запись
 +          insert into sms_log(logid,​smstypeid,​smsrefid,​smsprofileid,​filial,​
 +                     ​createdate,​smstext,​pcode,​uid,​internalid,​planbtime,​planftime,​state)
 +              values(:​logid,​ :smstypeid, :smsrefid, :​smsprofileid,​ new.filial,
 +                     ​current_timestamp,​ :pushtext, new.pcode, :uid, :schedid, :planbtime, :planftime, 0);
 +          insert into sms_logdet(smsid,​logid,​phonetype,​extsmsid,​phprefix,​phone,​state,​notificationid)
 +              values(:​smsid,​ :logid, 21, null, null, null, 0, :notify);
 +        end
 +        else
 +        begin
 +          -- обновляем запись
 +          update sms_log set planbtime = :planbtime , planftime = :planftime
 +           where logid= :logid;
 +          update sms_logdet set state=0 where logid= :logid and state not in (1,2);
 +        end
 +      end
 +
 +      -- объект удаляем
 +      else
 +      begin
 +        logid = null;
 +        select logid from sms_log where smsrefid=70008 and pcode= new.pcode and internalid= :schedid
 +          into logid;
 +        -- деактивируем запись с ошибкой
 +        if (logid is not null and schedid>​0) then
 +          update sms_logdet set state=-6 where state=0 and logid= :logid;
 +      end
 +    end
 +
 +    -- удаление
 +    else
 +    begin
 +      -- вычисляем данные
 +      select max(coalesce(s.schedid,​0)) from treat t join schedule s on s.treatcode=t.treatcode
 +       where t.orderno= old.ordercod
 +        into schedid;
 +      logid = null;
 +      select logid from sms_log where smsrefid=70008 and pcode= old.pcode and internalid= :schedid
 +        into logid;
 +      -- деактивируем запись с ошибкой
 +      if (logid is not null and schedid>​0) then
 +        update sms_logdet set state=-6 where state=0 and logid= :logid;
 +    end
 +  end
 +end
 +</​code>​
 +</​spoiler>​
    
 ==== Акции ==== ==== Акции ====
-== Push объект ​==+<​spoiler|Push объект>
 (при передаче объекта используется картинка с самым маленьким размером - 2) (при передаче объекта используется картинка с самым маленьким размером - 2)
 <code javascript>​ <code javascript>​
Строка 294: Строка 433:
     "​data":​{     "​data":​{
         "​action":"​shares",​         "​action":"​shares",​
-        "​info":​<​InfoRecord>​,+        "​info":​
 +            "​infoId":​ 0, 
 +            "​infoPreview":​ "​string",​ 
 +            "​infoTitle":​ "​string",​ 
 +            "​infoText":​ "​string",​ 
 +            "​record":​ "​string",​ 
 +            "​link":​ "​string"​ 
 +        }
     }     }
 } }
 </​code>​ </​code>​
 +</​spoiler>​
  

расширенная.настройка/рассылка.уведомлений/push.1534314629.txt.gz · Последние изменения: 2018/08/15 09:30 (внешнее изменение)