Автоматическое создание электронного письма на основе даты (ColdFusion)

У меня есть большая таблица базы данных, которая содержит 12 медицинских сертификатов, даты истечения срока действия, ссылки на файлы и компании, из которых они. Мне нужно создать отчет по электронной почте в течение 90,60,30 и 15 дней с даты окончания сертификации.

Вот как выглядит база данных:

certID,
profileID,
cprAdultExp,
cprAdultcompany,
cprAdultImage,
cprAdultOnFile,
cprInfantChildExp,
cprInfantChildcompany,
cprInfantChildImage,
cprInfantChildOnFile,
cprFPRExp,
cprFPRcompany,
cprFPRImage,
cprFPROnFile,
aedExp,
aedcompany,
aedImage,
aedOnFile,
firstAidExp,
firstAidcompany,
firstAidImage,
firstAidOnFile,
emtExp,
emtcompany,
emtImage,
emtOnFile,
waterSafetyInstructionExp,
waterSafetyInstructioncompany,
waterSafetyInstructionImage,
waterSafetyInstructionOnFile,
bloodPathogensExp,
bloodPathogenscompany,
bloodPathogensImage,
bloodPathogensOnFile,
oxygenAdminExp,
oxygenAdmincompany,
oxygenAdminImage,
oxygenAdminOnFile,
lifegaurdingExp,
lifegaurdingcompany,
lifegaurdingImage,
lifegaurdingOnFile,
wildernessResponderExp,
wildernessResponderCompany,
wildernessResponderImage,
wildernessResponderOnFile, 
notes

Как мне написать какой-то цикл, чтобы проверить все даты (что-нибудь с EXP - это дата), затем сохранить, какие из них истекают, и отправить все эти данные по электронной почте человеку?

3 ответа

Решение

Поскольку вы должны отправить электронное письмо через CF (я полагаю), то я бы подошел к этому так, чтобы один раз в день запускать запланированное задание, которое проверяет, какие строки имеют годовщину истечения 15, 30, 60 и 90 дней. Таким образом, запланированное задание будет выполнять несколько запросов, а затем отправлять электронные письма.

Первым делом нужно найти нужные строки (все мои SQL предполагают MS SQL Server - другие РСУБД будут иметь схожий синтаксис):

<cfquery name="qExpiring">
  select
  certID,  
  dateDiff(day, cprAdultExp, getDate()) as cprAdultExpDaysSince
  dateDiff(day, cprInfantChildExp, getDate()) as cprInfantChildExpDaysSince
  from yourTable
  where 
  dateDiff(day, cprAdultExp, getDate()) in (15, 30, 60, 90)
  or 
  dateDiff(day, cprInfantChildExp, getDate()) in (15, 30, 60, 90)
</cfquery>

Это должно дать вам набор результатов следующим образом:

certID|cprAdultExpDaysSince|cprInfantChildExpDaysSince|etc.
___________________________________________________________
xxxxxx|30                  |5                         |etc.
xxxxxx|16                  |60                        |etc.
xxxxxx|2                   |90                        |etc.

Любой, у кого есть совпадения по 15, 30, 60, 90, вас интересует дальнейшая обработка. Вы можете использовать запрос запросов, чтобы сделать это:

<cfquery name="qAdultExpRenewal" dbtype="query">
  select * from qExpiring
  where cprAdultExpDaysSince in (15, 30, 60, 90)
</cfquery>

Затем вы можете просмотреть эти записи и отправить соответствующее электронное письмо в зависимости от значения cprAdultExpDaysSince,

Вам не хватает информации, чтобы дать вам исчерпывающий ответ, но я надеюсь, что это укажет вам правильное направление.

Если у вас есть доступ к базе данных, вам, вероятно, следует создать представление или представления, в которых будут указаны только те, у кого истекает срок действия, или добавляется поле в течение нескольких дней до истечения срока действия для каждого сертификата и запросите его. В качестве альтернативы вы можете написать один запрос, который собирает всю информацию о том, где истекает срок действия любого сертификата (WHERE cprAdultExp [сравнение] дата ИЛИ cprInfantExp [сравнение] дата....), а затем перебирает записи для фильтрации или группировки по сертификату с истекающим сроком действия.

Вы вероятно хотите какой-то глупо-огромный запрос, который выглядит как

select "CPR Adult", cprAdultExp, cprAdultcompany, cprAdultImage, cprAdultOnFile from thebigtable where cprAdultExp [comparison] interestingdate
union
select "CPR Child", cprChild....
union ...

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

Другие вопросы по тегам