80 lines
2.3 KiB
C#
80 lines
2.3 KiB
C#
|
|
using Hangfire;
|
|
|
|
namespace BackgroundInstitutionContract.Task.Jobs;
|
|
|
|
public class JobSchedulerRegistrator
|
|
{
|
|
private readonly IBackgroundJobClient _backgroundJobClient;
|
|
private readonly SmsReminder _smsReminder;
|
|
private static DateTime? _lastRunDateMorning;
|
|
private static DateTime? _lastRunDateEvening;
|
|
|
|
public JobSchedulerRegistrator(SmsReminder smsReminder, IBackgroundJobClient backgroundJobClient)
|
|
{
|
|
_smsReminder = smsReminder;
|
|
_backgroundJobClient = backgroundJobClient;
|
|
}
|
|
|
|
public void Register()
|
|
{
|
|
RecurringJob.AddOrUpdate(
|
|
"Task.Test",
|
|
() => SmsReminderCheckAndSchedule(),
|
|
"*/1 * * * *" // هر 5 دقیقه یکبار چک کن
|
|
);
|
|
|
|
RecurringJob.AddOrUpdate(
|
|
"Task.ReminderDebtSMS",
|
|
() => DebtSmsReminder(),
|
|
"*/1 * * * *" // هر 1 دقیقه یکبار چک کن
|
|
);
|
|
}
|
|
|
|
/// <summary>
|
|
/// پیامک های یاد آور
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public void DebtSmsReminder()
|
|
{
|
|
var now = DateTime.Now;
|
|
_backgroundJobClient.Enqueue(() => _smsReminder.Execute());
|
|
_lastRunDateMorning = now;
|
|
}
|
|
|
|
public void SmsReminderCheckAndSchedule()
|
|
{
|
|
var now = DateTime.Now;
|
|
|
|
var startMorning = new TimeSpan(9, 0, 0);
|
|
var endMorning = new TimeSpan(9, 40, 0);
|
|
|
|
var startEvening = new TimeSpan(15, 30, 0);
|
|
var endEvening = new TimeSpan(15, 40, 0);
|
|
|
|
// صبح
|
|
if (now.DayOfWeek != DayOfWeek.Friday &&
|
|
now.TimeOfDay >= startMorning &&
|
|
now.TimeOfDay < endMorning)
|
|
{
|
|
if (_lastRunDateMorning?.Date != now.Date)
|
|
{
|
|
_backgroundJobClient.Enqueue(() => _smsReminder.Execute());
|
|
_lastRunDateMorning = now;
|
|
}
|
|
}
|
|
|
|
// عصر - پنجشنبه و جمعه تعطیل است
|
|
if (now.DayOfWeek != DayOfWeek.Friday &&
|
|
now.DayOfWeek != DayOfWeek.Thursday &&
|
|
now.TimeOfDay >= startEvening &&
|
|
now.TimeOfDay < endEvening)
|
|
{
|
|
if (_lastRunDateEvening?.Date != now.Date)
|
|
{
|
|
_backgroundJobClient.Enqueue(() => _smsReminder.Execute());
|
|
_lastRunDateEvening = now;
|
|
}
|
|
}
|
|
}
|
|
} |