diff --git a/BackgroundInstitutionContract/BackgroundInstitutionContract.Task/Jobs/JobSchedulerRegistrator.cs b/BackgroundInstitutionContract/BackgroundInstitutionContract.Task/Jobs/JobSchedulerRegistrator.cs index a0365042..1425a1a7 100644 --- a/BackgroundInstitutionContract/BackgroundInstitutionContract.Task/Jobs/JobSchedulerRegistrator.cs +++ b/BackgroundInstitutionContract/BackgroundInstitutionContract.Task/Jobs/JobSchedulerRegistrator.cs @@ -25,23 +25,23 @@ public class JobSchedulerRegistrator public void Register() { - //RecurringJob.AddOrUpdate( - // "InstitutionContract.CreateFinancialTransaction", - // () => CreateFinancialTransaction(), - // "*/30 * * * *" // هر 30 دقیقه یکبار چک کن - //); + RecurringJob.AddOrUpdate( + "InstitutionContract.CreateFinancialTransaction", + () => CreateFinancialTransaction(), + "*/30 * * * *" // هر 30 دقیقه یکبار چک کن + ); - //RecurringJob.AddOrUpdate( - // "InstitutionContract.SendMonthlySms", - // () => SendMonthlySms(), - // "*/20 * * * *" // هر 30 دقیقه یکبار چک کن - //); + RecurringJob.AddOrUpdate( + "InstitutionContract.SendMonthlySms", + () => SendFirstDayOfMonthSms(), + "*/20 * * * *" // هر 30 دقیقه یکبار چک کن + ); - //RecurringJob.AddOrUpdate( - // "InstitutionContract.SendReminderSms", - // () => SendReminderSms(), - // "*/1 * * * *" // هر 1 دقیقه یکبار چک کن - //); + RecurringJob.AddOrUpdate( + "InstitutionContract.SendReminderSms", + () => SendReminderSms(), + "*/1 * * * *" // هر 1 دقیقه یکبار چک کن + ); RecurringJob.AddOrUpdate( "InstitutionContract.SendBlockSms", () => SendBlockSms(), @@ -98,8 +98,8 @@ public class JobSchedulerRegistrator /// ارسال پیامک صورت حساب ماهانه /// /// - [DisableConcurrentExecution(timeoutInSeconds: 1000)] - public async System.Threading.Tasks.Task SendMonthlySms() + [DisableConcurrentExecution(timeoutInSeconds: 600)] + public async System.Threading.Tasks.Task SendFirstDayOfMonthSms() { //var now = new DateTime(2025,11,21, 10,30,0); var now = DateTime.Now; diff --git a/BackgroundInstitutionContract/BackgroundInstitutionContract.Task/Program.cs b/BackgroundInstitutionContract/BackgroundInstitutionContract.Task/Program.cs index 0c6798e6..dda9d58e 100644 --- a/BackgroundInstitutionContract/BackgroundInstitutionContract.Task/Program.cs +++ b/BackgroundInstitutionContract/BackgroundInstitutionContract.Task/Program.cs @@ -5,6 +5,7 @@ using _0_Framework.InfraStructure.Mongo; using AccountManagement.Configuration; using BackgroundInstitutionContract.Task; using BackgroundInstitutionContract.Task.Jobs; +using CompanyManagment.App.Contracts.Hubs; using CompanyManagment.EFCore.Services; using Hangfire; using Microsoft.AspNetCore.Identity; @@ -45,7 +46,10 @@ QueryBootstrapper.Configure(builder.Services); JobsBootstrapper.Configure(builder.Services); builder.Services.AddHttpClient(); builder.Services.AddHttpContextAccessor(); +builder.Services.AddSignalR(); + var app = builder.Build(); +app.MapHub("/sendSmsHub"); app.MapHangfireDashboard(); app.MapGet("/", () => "Hello World!"); diff --git a/BackgroundInstitutionContract/BackgroundInstitutionContract.Task/appsettings.Development.json b/BackgroundInstitutionContract/BackgroundInstitutionContract.Task/appsettings.Development.json index 2dc32b9b..07d44356 100644 --- a/BackgroundInstitutionContract/BackgroundInstitutionContract.Task/appsettings.Development.json +++ b/BackgroundInstitutionContract/BackgroundInstitutionContract.Task/appsettings.Development.json @@ -25,7 +25,8 @@ //mahan Docker //"MesbahDb": "Data Source=localhost,5069;Initial Catalog=mesbah_db;User ID=sa;Password=YourPassword123;TrustServerCertificate=True;", - "HangfireDb": "Data Source=.;Initial Catalog=hangfire_db;Integrated Security=True;TrustServerCertificate=true;" + //"HangfireDb": "Data Source=.;Initial Catalog=hangfire_db;Integrated Security=True;TrustServerCertificate=true;", + "HangfireDb": "Data Source=185.208.175.186;Initial Catalog=hangfire_db;Persist Security Info=False;User ID=ir_db;Password=R2rNp[170]18[3019]#@ATt;TrustServerCertificate=true;" }, "GoogleRecaptchaV3": { diff --git a/BackgroundInstitutionContract/BackgroundInstitutionContract.Task/appsettings.json b/BackgroundInstitutionContract/BackgroundInstitutionContract.Task/appsettings.json index 10f68b8c..06293dbd 100644 --- a/BackgroundInstitutionContract/BackgroundInstitutionContract.Task/appsettings.json +++ b/BackgroundInstitutionContract/BackgroundInstitutionContract.Task/appsettings.json @@ -2,8 +2,27 @@ "Logging": { "LogLevel": { "Default": "Information", - "Microsoft.AspNetCore": "Warning" + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" } }, - "AllowedHosts": "*" + "ConnectionStrings": { + + //local + //"MesbahDb": "Data Source=.;Initial Catalog=mesbah_db;Integrated Security=True;TrustServerCertificate=true;", + "MesbahDb": "Data Source=185.208.175.186;Initial Catalog=mesbah_db;Persist Security Info=False;User ID=ir_db;Password=R2rNp[170]18[3019]#@ATt;TrustServerCertificate=true;", + //dad-mehr + //"MesbahDb": "Data Source=.;Initial Catalog=teamWork;Integrated Security=True;TrustServerCertificate=true;", + + //"TestDb": "Data Source=.;Initial Catalog=TestDb;Integrated Security=True;TrustServerCertificate=true;", + "TestDb": "Data Source=185.208.175.186;Initial Catalog=TestDb;Persist Security Info=False;User ID=ir_db;Password=R2rNp[170]18[3019]#@ATt;TrustServerCertificate=true;", + //"MesbahDb": "Data Source=.\\MSSQLSERVER2019;Initial Catalog=mesbah_db;Persist Security Info=False;User ID=mesbah_db;Password=sa142857$@;" + //"HangfireDb": "Data Source=.;Initial Catalog=hangfire_db;Integrated Security=True;TrustServerCertificate=true;", + "HangfireDb": "Data Source=185.208.175.186;Initial Catalog=hangfire_db;Persist Security Info=False;User ID=ir_db;Password=R2rNp[170]18[3019]#@ATt;TrustServerCertificate=true;" + }, + "MongoDb": { + "ConnectionString": "mongodb://localhost:27017", + "DatabaseName": "Gozareshgir" + } + } diff --git a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs index c06280a0..804252fd 100644 --- a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs +++ b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs @@ -3168,11 +3168,24 @@ public class InstitutionContractRepository : RepositoryBase 0).GroupBy(x => x.ContractingPartyId).Select(x => x.First()).ToListAsync(); + var contractingPartyList = await _context.PersonalContractingParties + .Where(x => institutionContracts.Select(ins => ins.ContractingPartyId).Contains(x.id)).ToListAsync(); + + var financialStatmentList = await _context.FinancialStatments.AsSplitQuery() + .Where(x => institutionContracts.Select(ins => ins.ContractingPartyId).Contains(x.ContractingPartyId)) + .Include(x => x.FinancialTransactionList).Where( + x => x.FinancialTransactionList.Count > 0).ToListAsync(); + + var phoneNumberList = await _context.InstitutionContractContactInfos + .Where(x => institutionContracts.Select(ins => ins.Id).Contains(x.InstitutionContractId)) + .Where(x => x.SendSms && x.PhoneType == "شماره همراه" && !string.IsNullOrWhiteSpace(x.PhoneNumber) && + x.PhoneNumber.Length == 11).ToListAsync(); + foreach (var item in institutionContracts) { try { - var contractingParty = await _context.PersonalContractingParties.FirstOrDefaultAsync(x => x.id == item.ContractingPartyId); + var contractingParty = contractingPartyList.FirstOrDefault(x => x.id == item.ContractingPartyId); if (contractingParty != null && contractingParty.IsBlock == "true") { @@ -3184,26 +3197,25 @@ public class InstitutionContractRepository : RepositoryBase x.FinancialTransactionList).AnyAsync( - x => x.ContractingPartyId == item.ContractingPartyId && x.FinancialTransactionList.Count > 0); - - var hasPhonNumber =await _context.InstitutionContractContactInfos - .AnyAsync(x => x.InstitutionContractId == item.Id && x.SendSms && x.PhoneType == "شماره همراه" && - x.PhoneNumber.Length == 11); + var hasFinancialStatment = + financialStatmentList.Any(x => x.ContractingPartyId == item.ContractingPartyId & x.FinancialTransactionList.Count > 0); + + + var hasPhonNumber = phoneNumberList.Any(x => x.InstitutionContractId == item.Id); + - if (hasFinancialStatment && hasPhonNumber) { - var transactions = GetFinancialByContractingPartyId(contractingParty.id).GetAwaiter().GetResult(); - - var debtor = transactions.FinancialTransactionViewModels.Sum(x => x.Deptor); - var creditor = transactions.FinancialTransactionViewModels.Sum(x => x.Creditor); + var transactions = financialStatmentList.FirstOrDefault(x => x.ContractingPartyId == item.ContractingPartyId); + + var debtor = transactions.FinancialTransactionList.Sum(x => x.Deptor); + var creditor = transactions.FinancialTransactionList.Sum(x => x.Creditor); var id = $"{item.ContractingPartyId}"; - var aprove = $"{transactions.Id}"; + var aprove = $"{transactions.id}"; var balance = debtor - creditor; if (balance > 0) { @@ -3211,10 +3223,10 @@ public class InstitutionContractRepository : RepositoryBase x.TdateGr).FirstOrDefault(x => x.TypeOfTransaction == "debt" && x.DescriptionOption == jobRelation); - var taxAndFinancialContract = transactions.FinancialTransactionViewModels + var taxAndFinancialContract = transactions.FinancialTransactionList .OrderByDescending(x => x.TdateGr).FirstOrDefault(x => x.TypeOfTransaction == "debt" && x.DescriptionOption == taxAndFinancial); @@ -3227,9 +3239,7 @@ public class InstitutionContractRepository : RepositoryBase= sumOfAmounts) { var phoneNumbers = new List(); - phoneNumbers = await _context.InstitutionContractContactInfos.Where(n => - n.InstitutionContractId == item.Id && n.SendSms && n.PhoneType == "شماره همراه" && - !string.IsNullOrWhiteSpace(n.PhoneNumber)) + phoneNumbers = phoneNumberList.Where(x => x.InstitutionContractId == item.Id) .Select(x => new CreateContactInfo { PhoneType = x.PhoneType, @@ -3237,7 +3247,8 @@ public class InstitutionContractRepository : RepositoryBase x.PhoneNumber.Length == 11).ToListAsync(); + }).Where(x => x.PhoneNumber.Length == 11).ToList(); + var accountType = item.OfficialCompany == "Official" ? "ol" : "nol"; @@ -3309,7 +3320,7 @@ public class InstitutionContractRepository : RepositoryBase institutionContracts.Select(ins => ins.ContractingPartyId).Contains(x.id)).ToListAsync(); - var financialStamentList = await _context.FinancialStatments.AsSplitQuery() + var financialStatmentList = await _context.FinancialStatments.AsSplitQuery() .Where(x=> institutionContracts.Select(ins => ins.ContractingPartyId).Contains(x.ContractingPartyId)) .Include(x => x.FinancialTransactionList).Where( x => x.FinancialTransactionList.Count > 0).ToListAsync(); @@ -3343,7 +3354,7 @@ public class InstitutionContractRepository : RepositoryBase x.ContractingPartyId == item.ContractingPartyId); + financialStatmentList.Any(x => x.ContractingPartyId == item.ContractingPartyId); var hasPhonNumber = phoneNumberList.Any(x => x.InstitutionContractId == item.Id); @@ -3362,7 +3373,7 @@ public class InstitutionContractRepository : RepositoryBase x.PhoneNumber.Length == 11).ToList(); - var transactions = financialStamentList.FirstOrDefault(x=>x.ContractingPartyId == item.ContractingPartyId); + var transactions = financialStatmentList.FirstOrDefault(x=>x.ContractingPartyId == item.ContractingPartyId); var debtor = transactions.FinancialTransactionList.Sum(x => x.Deptor); var creditor = transactions.FinancialTransactionList.Sum(x => x.Creditor);