Я использую DelayedJob для планирования report
и отправляю его на customer
в рельсах.Customer
может выбрать отчет за определенный промежуток времени.Например, customer
может выбрать отчет от даты «05/04/2019» до даты «06/04/2019».Customer
также может установить frequency
и time
.ie для ежедневного запуска отчета в определенное время.В этом случае даты from
и to
будут увеличиваться ежедневно.Если frequency
равно monthly
, даты будут обновлены соответствующим образом.
Мой код выглядит следующим образом:
Report#schedule
метод:
def schedule
#send report to customer
end
handle_asynchronously :schedule,
frequency: Proc.new{ |r| r.deliver_frequency },
run_at: Proc.new { |r| r.next_reschedule_time },
def deliver_frequency
if frequency.eql?('daily')
'daily'
elsif frequency.eql?('monthly?')
'monthly'
end
end
Символ 'издата и дата взяты из customer_params
@customer.params[:from] = params[:from]
@customer.params[:to] = params[:to]
@customer.save
Указанные выше параметры сохраняются в атрибутах customer
как:
:id => 10167,
:params => {
"from" => "05/04/2019",
"to" => "06/04/2019"
}
Эти даты сохраняются в report_name
который отправляется на customer
.
Мой вопрос, как проверить, выполнил ли delayed_job заданную задачу, чтобы даты from
и to
могли быть обновлены.
Я хочу, чтобы при каждом выполнении метода schedule
даты обновлялись в соответствии с частотой.Например: если отчет запланирован на «ежедневный», даты from
и to
должны обновляться ежедневно после выполнения schedule
.
Аналогично, если частота «ежемесячная» и отчет запланирован на дату from: 22/3/2019 to: 22/4/2019
, то при следующем выполнении метода расписания даты должны обновляться до from: 22/4/2019 to: 22/5/2019
Я попытался добавить+1
за сутки.Но это не будет работать для ежемесячной частоты.
Кто-нибудь может подсказать мне, как можно достичь вышеуказанного?
Спасибо