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);