Различия
Здесь показаны различия между двумя версиями данной страницы.
Следующая версия | Предыдущая версия | ||
расширенная.настройка:рассылка.уведомлений:push [2018/08/14 18:09] a.korobka создано |
расширенная.настройка:рассылка.уведомлений:push [2019/07/04 08:22] (текущий) |
||
---|---|---|---|
Строка 16: | Строка 16: | ||
Также, для работы с данными событиями дополняется справочник типов смс сообщений (SMS_REF) с настройками рассылки | Также, для работы с данными событиями дополняется справочник типов смс сообщений (SMS_REF) с настройками рассылки | ||
- | ^ Идентификатор рассылки ^ Назначение | | + | ^ Идентификатор\\ рассылки ^ Назначение ^ Объект формирования уведомления ^ Действие при получении\\ в мобильном приложении | |
- | |70001|Новое назначение к доктору| | + | | 70001 |Новое назначение к доктору|Триггер на таблице SCHEDULE, с отправкой на события наступаемые более чем через 10 минут от текущего времени|Откроется страница «Мои записи», вкладка «Текущие»| |
- | |70002|Перенос назначения| | + | | 70002 |Перенос назначения|:::|:::| |
- | |70003|Отмена назначения| | + | | 70003 |Отмена назначения|:::|:::| |
- | |70005|Повторная явка| | + | | 70005 |Повторная явка|Скрипт в репликаторе, выполняемый по филиальным БД, раз в сутки|Открывается расписание доктора, с пропуском всех промежуточных экранов (выбор отделения, филиала, доктора)| |
- | |70006|Результат исследования| | + | | 70006 |Результат исследования|Триггер на таблице TREATSCH, с проверкой всех услуг наряда на готовность|Открывается страница «Медицинские данные»| |
- | |70008|Оценка приема| | + | | 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 | ||
Строка 143: | Строка 145: | ||
notify = coalesce(notify,'-'); | notify = coalesce(notify,'-'); | ||
- | select current_uid from s_session_info | + | select current_uid from s_session_info into uid; |
- | into uid; | + | |
-- формируем данные | -- формируем данные | ||
+ | -- если есть идентификатор, можно рассылать, событие будет не ранее чем через time_delay сек | ||
if (notify != '-' and send=1 and ttl>time_delay)then | if (notify != '-' and send=1 and ttl>time_delay)then | ||
begin | begin | ||
Строка 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> | ||