Files
Backend-Api/BackgroundInstitutionContract/BackgroundInstitutionContract.Task/Jobs/JobSchedulerRegistrator.cs
2026-01-12 13:10:58 +03:30

274 lines
9.6 KiB
C#

using _0_Framework.Application;
using _0_Framework.Application.Enums;
using _0_Framework.Application.Sms;
using Company.Domain.ContarctingPartyAgg;
using Company.Domain.InstitutionContractAgg;
using Hangfire;
namespace BackgroundInstitutionContract.Task.Jobs;
public class JobSchedulerRegistrator
{
private readonly IBackgroundJobClient _backgroundJobClient;
private readonly SmsReminder _smsReminder;
private readonly IInstitutionContractRepository _institutionContractRepository;
private readonly IInstitutionContractSmsServiceRepository _institutionContractSmsServiceRepository;
private static DateTime? _lastRunCreateTransaction;
private static DateTime? _lastRunSendMonthlySms;
private readonly ISmsService _smsService;
private readonly ILogger<JobSchedulerRegistrator> _logger;
public JobSchedulerRegistrator(SmsReminder smsReminder, IBackgroundJobClient backgroundJobClient, IInstitutionContractRepository institutionContractRepository, ISmsService smsService, ILogger<JobSchedulerRegistrator> logger, IInstitutionContractSmsServiceRepository institutionContractSmsServiceRepository)
{
_smsReminder = smsReminder;
_backgroundJobClient = backgroundJobClient;
_institutionContractRepository = institutionContractRepository;
_smsService = smsService;
_logger = logger;
_institutionContractSmsServiceRepository = institutionContractSmsServiceRepository;
}
public void Register()
{
//_logger.LogInformation("hangfire Started");
//RecurringJob.AddOrUpdate(
// "InstitutionContract.CreateFinancialTransaction",
// () => CreateFinancialTransaction(),
// "*/30 * * * *" // هر 30 دقیقه یکبار چک کن
//);
//RecurringJob.AddOrUpdate(
// "InstitutionContract.SendMonthlySms",
// () => SendFirstDayOfMonthSms(),
// "*/20 * * * *" // هر 30 دقیقه یکبار چک کن
//);
//RecurringJob.AddOrUpdate(
// "InstitutionContract.SendReminderSms",
// () => SendReminderSms(),
// "*/1 * * * *" // هر 1 دقیقه یکبار چک کن
//);
//RecurringJob.AddOrUpdate(
// "InstitutionContract.SendBlockSms",
// () => SendBlockSms(),
// "*/1 * * * *" // هر 1 دقیقه یکبار چک کن
//);
//RecurringJob.AddOrUpdate(
// "InstitutionContract.SendInstitutionContractConfirmSms",
// () => SendInstitutionContractConfirmSms(),
// "*/1 * * * *" // هر 1 دقیقه یکبار چک کن
//);
//RecurringJob.AddOrUpdate(
// "InstitutionContract.SendWarningSms",
// () => SendWarningSms(),
// "*/1 * * * *" // هر 1 دقیقه یکبار چک کن
//);
//RecurringJob.AddOrUpdate(
// "InstitutionContract.SendLegalActionSms",
// () => SendLegalActionSms(),
// "*/1 * * * *" // هر 1 دقیقه یکبار چک کن
//);
//RecurringJob.AddOrUpdate(
// "InstitutionContract.Block",
// () => Block(),
// "*/30 * * * *" // هر 30 دقیقه یکبار چک کن
//);
//RecurringJob.AddOrUpdate(
// "InstitutionContract.UnBlock",
// () => UnBlock(),
// "*/10 * * * *"
//);
RecurringJob.AddOrUpdate(
"InstitutionContract.DeActiveInstitutionEndOfContract",
() => DeActiveInstitutionEndOfContract(),
"*/30 * * * *"
);
}
///// <summary>
///// ایجاد سند بدهی ماهیانه برای قراداد مالی
///// </summary>
///// <returns></returns>
//[DisableConcurrentExecution(timeoutInSeconds: 1200)]
//public async System.Threading.Tasks.Task CreateFinancialTransaction()
//{
// var now = DateTime.Now;
// var endOfMonth = now.ToFarsi().FindeEndOfMonth();
// var endOfMonthGr = endOfMonth.ToGeorgianDateTime();
// _logger.LogInformation("CreateFinancialTransaction job run");
// if (now.Date == endOfMonthGr.Date && now.Hour >= 2 && now.Hour < 4 &&
// now.Date != _lastRunCreateTransaction?.Date)
// {
// var month = endOfMonth.Substring(5, 2);
// var year = endOfMonth.Substring(0, 4);
// var monthName = month.ToFarsiMonthByNumber();
// var description = $"{monthName} {year}";
// var endnew = ($"{endOfMonth.Substring(0, 8)}01").FindeEndOfMonth();
// var endNewGr = endnew.ToGeorgianDateTime();
// var endNewFa = endNewGr.ToFarsi();
// try
// {
// await _institutionContractRepository.CreateTransactionForInstitutionContracts(endNewGr, endNewFa, description);
// _lastRunCreateTransaction = now;
// Console.WriteLine("CreateTransAction executed");
// }
// catch (Exception e)
// {
// await _smsService.Alarm("09114221321", "خطا-ایجاد سند مالی");
// }
// }
//}
///// <summary>
///// ارسال پیامک صورت حساب ماهانه
///// </summary>
///// <returns></returns>
//[DisableConcurrentExecution(timeoutInSeconds: 600)]
//public async System.Threading.Tasks.Task SendFirstDayOfMonthSms()
//{
// //var now = new DateTime(2025,11,21, 10,30,0);
// var now = DateTime.Now;
// var endOfMonth = now.ToFarsi().FindeEndOfMonth();
// var endOfMonthGr = endOfMonth.ToGeorgianDateTime();
// _logger.LogInformation("SendFirstDayOfMonthSms job run");
// if (now.Date == endOfMonthGr.Date && now.Hour >= 10 && now.Hour < 11 &&
// now.Date != _lastRunSendMonthlySms?.Date)
// {
// try
// {
// await _institutionContractRepository.SendMonthlySms(now);
// _lastRunSendMonthlySms = now;
// Console.WriteLine("Send Monthly sms executed");
// }
// catch (Exception e)
// {
// //_smsService.Alarm("09114221321", "خطا-ایجاد سند مالی");
// }
// }
//}
///// <summary>
///// ارسال پیامک یاد آور بدهی
///// </summary>
///// <returns></returns>
//[DisableConcurrentExecution(timeoutInSeconds: 1200)]
//public async System.Threading.Tasks.Task SendReminderSms()
//{
// _logger.LogInformation("SendReminderSms job run");
// await _institutionContractRepository.SendReminderSmsForBackgroundTask();
//}
///// <summary>
///// ارسال پیامک مسدودی
///// </summary>
///// <returns></returns>
//[DisableConcurrentExecution(timeoutInSeconds: 100)]
//public async System.Threading.Tasks.Task SendBlockSms()
//{
// _logger.LogInformation("SendBlockSms job run");
// await _institutionContractSmsServiceRepository.SendBlockSmsForBackgroundTask();
//}
///// <summary>
///// ارسال پیامک یادآور تایید قراداد مالی
///// </summary>
///// <returns></returns>
//[DisableConcurrentExecution(timeoutInSeconds: 100)]
//public async System.Threading.Tasks.Task SendInstitutionContractConfirmSms()
//{
// _logger.LogInformation("SendInstitutionContractConfirmSms job run");
// await _institutionContractRepository.SendInstitutionContractConfirmSmsTask();
//}
///// <summary>
///// ارسال پیامک هشدار
///// </summary>
///// <returns></returns>
//[DisableConcurrentExecution(timeoutInSeconds: 100)]
//public async System.Threading.Tasks.Task SendWarningSms()
//{
// _logger.LogInformation("SendWarningSms job run");
// await _institutionContractSmsServiceRepository.SendWarningOrLegalActionSmsTask(TypeOfSmsSetting.Warning);
//}
//[DisableConcurrentExecution(timeoutInSeconds: 100)]
//public async System.Threading.Tasks.Task SendLegalActionSms()
//{
// _logger.LogInformation("SendWarningSms job run");
// await _institutionContractSmsServiceRepository.SendWarningOrLegalActionSmsTask(TypeOfSmsSetting.LegalAction);
//}
/// <summary>
/// بلاگ سازی
/// </summary>
///// <returns></returns>
//[DisableConcurrentExecution(timeoutInSeconds: 100)]
//public async System.Threading.Tasks.Task Block()
//{
// _logger.LogInformation("block job run");
// var now = DateTime.Now;
// var executeDate = now.ToFarsi().Substring(8, 2);
// if (executeDate == "20")
// {
// if (now.Hour >= 9 && now.Hour < 10)
// {
// await _institutionContractSmsServiceRepository.Block(now);
// }
// }
//}
//[DisableConcurrentExecution(timeoutInSeconds: 100)]
//public async System.Threading.Tasks.Task UnBlock()
//{
// _logger.LogInformation("UnBlock job run");
// await _institutionContractSmsServiceRepository.UnBlock();
//}
[DisableConcurrentExecution(timeoutInSeconds: 100)]
public async System.Threading.Tasks.Task DeActiveInstitutionEndOfContract()
{
_logger.LogInformation("DeActiveInstitutionEndOfContract job run");
var now = DateTime.Now;
var executeDate = now.ToFarsi().Substring(8, 2);
if (executeDate == "01")
{
if (now.Hour >= 9 && now.Hour < 10)
{
await _institutionContractSmsServiceRepository.DeActiveInstitutionEndOfContract(now);
}
}
}
}