diff --git a/0_Framework/Application/Sms/ISmsService.cs b/0_Framework/Application/Sms/ISmsService.cs
index 04bd637d..4b200d23 100644
--- a/0_Framework/Application/Sms/ISmsService.cs
+++ b/0_Framework/Application/Sms/ISmsService.cs
@@ -36,4 +36,44 @@ public interface ISmsService
#endregion
+
+ #region InstitutionContractSMS
+ ///
+ /// پیامک اهانه جدید
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task<(byte status, string message, int messaeId, bool isSucceded)> MonthlyBillNew(string number, int tamplateId, string fullname, string amount, string code1,
+ string code2);
+ ///
+ /// پیامک ماهانه قدیم
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task<(byte status, string message, int messaeId, bool isSucceded)> MonthlyBill(string number, int tamplateId, string fullname, string amount, string id, string aprove);
+
+ ///
+ /// پیامک مسدودی طرف حساب
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task<(byte status, string message, int messaeId, bool isSucceded)> BlockMessage(string number, string fullname, string amount, string accountType, string id, string aprove);
+
+ #endregion
+
}
\ No newline at end of file
diff --git a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs
index 94a30142..03f9205f 100644
--- a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs
+++ b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs
@@ -80,11 +80,19 @@ public interface IInstitutionContractRepository : IRepository
+ ///دریافت لیست بدهکارن
+ /// جهت ارسال پیامک
+ ///
+ ///
+ Task> GetSmsListData(DateTime checkDate);
+
///
/// ارسال پیامک های یاد آور بدهی
///
///
- Task DebtReminderSMS();
+ Task SendReminderSmsToContractingParties(List smsListData);
#endregion
}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/InstitutionContract/SmsListData.cs b/CompanyManagment.App.Contracts/InstitutionContract/SmsListData.cs
new file mode 100644
index 00000000..ed207aec
--- /dev/null
+++ b/CompanyManagment.App.Contracts/InstitutionContract/SmsListData.cs
@@ -0,0 +1,55 @@
+namespace CompanyManagment.App.Contracts.InstitutionContract;
+
+///
+/// لیست پیامکهای بدهکاران قرارداد ملی
+///
+public class SmsListData
+{
+ ///
+ /// شماره تماس طرف حساب
+ ///
+ public string PhoneNumber { get; set; }
+ ///
+ /// تمپلیت آی دی
+ ///
+ public int TemplateId { get; set; }
+
+ ///
+ /// نام طرف حساب
+ ///
+ public string PartyName { get; set; }
+
+ ///
+ /// مبلغ بدهی
+ ///
+ public string Amount { get; set; }
+ ///
+ /// آی دی طرف حساب
+ ///
+ public long ContractingPartyId { get; set; }
+
+ ///
+ /// آی دی صورت حساب مالی
+ ///
+ public string AproveId { get; set; }
+
+ ///
+ /// نوع متد ارسال پیامک
+ ///
+ public string TypeOfSmsMethod { get; set; }
+
+ ///
+ /// پابلیک آی دی بخش یک
+ ///
+ public string Code1 { get; set; }
+
+ ///
+ /// پابلیک آی دی بخش دو
+ ///
+ public string Code2 { get; set; }
+
+ ///
+ /// ای دی قراداد مالی
+ ///
+ public long InstitutionContractId { get; set; }
+}
\ No newline at end of file
diff --git a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs
index e20a13e0..5e812b38 100644
--- a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs
+++ b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs
@@ -40,8 +40,10 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using MongoDB.Driver;
using OfficeOpenXml.Packaging.Ionic.Zip;
using PersianTools.Core;
+using static System.Runtime.InteropServices.JavaScript.JSType;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
using SmsResult = CompanyManagment.EFCore.Migrations.SmsResult;
+using String = System.String;
namespace CompanyManagment.EFCore.Repository;
@@ -54,6 +56,7 @@ public class InstitutionContractRepository : RepositoryBase _institutionAmendmentTemp;
private readonly IPlanPercentageRepository _planPercentageRepository;
private readonly ISmsService _smsService;
+ private readonly ISmsResultRepository _smsResultRepository;
private readonly InstitutionContratVerificationParty _firstParty = new()
{
@@ -67,13 +70,14 @@ public class InstitutionContractRepository : RepositoryBase("InstitutionContractExtensionTemp");
_institutionAmendmentTemp =
@@ -2946,20 +2950,30 @@ public class InstitutionContractRepository : RepositoryBase SendReminderSmsForBackgroundTask()
{
- var checkDate = DateTime.Now;
+ return true;
+ }
+
+ public async Task> GetSmsListData(DateTime checkDate)
+ {
+
+
+ var smsList = new List();
var currentMonthStart = ($"{(checkDate.ToFarsi()).Substring(0, 8)}01").ToGeorgianDateTime();
var previusMonthEnd = currentMonthStart.AddDays(-1);
var previusMonthStart = ($"{(previusMonthEnd.ToFarsi()).Substring(0, 8)}01").ToGeorgianDateTime();
var typeOfSms = "یادآور بدهی ماهانه";
- //var rollcallServiceList = _context.RollCallServices.Where(x => x.StartService.Date <= previusMonthStart.Date && x.EndService.Date >= previusMonthEnd.Date).ToList();
- var institutionContracts =await _context.InstitutionContractSet.AsSplitQuery().Select(x => new InstitutionContractViewModel
+
+ //دریافت اطلاعات بدهکارن و ساخت لیست پیامک
+ #region GetSmsListData
+
+ //var rollcallServiceList = _context.RollCallServices.Where(x => x.StartService.Date <= previusMonthStart.Date && x.EndService.Date >= previusMonthEnd.Date).ToList();
+ var institutionContracts = await _context.InstitutionContractSet.AsSplitQuery().Select(x => new InstitutionContractViewModel
{
Id = x.id,
ContractingPartyId = x.ContractingPartyId,
@@ -2979,7 +2993,7 @@ public class InstitutionContractRepository : RepositoryBasex.id == item.ContractingPartyId);
+ var contractingParty = await _context.PersonalContractingParties.FirstOrDefaultAsync(x => x.id == item.ContractingPartyId);
//var isSend = sendedSms.Any(x => x.ContractingPatyId == contractingParty.Id);
if (!string.IsNullOrWhiteSpace(contractingParty.LName))
{
@@ -2993,19 +3007,19 @@ public class InstitutionContractRepository : RepositoryBase x.FinancialTransactionList).AnyAsync(
+ var hasFinancialStatement = await _context.FinancialStatments.Include(x => x.FinancialTransactionList).AnyAsync(
x => x.ContractingPartyId == item.ContractingPartyId && x.FinancialTransactionList.Count > 0);
- Thread.Sleep(500);
- var hasPhonNumber =await _context.InstitutionContractContactInfos
+
+ var hasPhonNumber = await _context.InstitutionContractContactInfos
.AnyAsync(x => x.InstitutionContractId == item.Id && x.SendSms && x.PhoneType == "شماره همراه" &&
x.PhoneNumber.Length == 11);
- Thread.Sleep(500);
+
if (hasFinancialStatement && hasPhonNumber)
{
-
- var phoneNumbers =await _context.InstitutionContractContactInfos.Where(n =>
+
+ var phoneNumbers = await _context.InstitutionContractContactInfos.Where(n =>
n.InstitutionContractId == item.Id && n.SendSms && n.PhoneType == "شماره همراه" &&
!string.IsNullOrWhiteSpace(n.PhoneNumber))
.Select(x => new CreateContactInfo
@@ -3017,10 +3031,10 @@ public class InstitutionContractRepository : RepositoryBase x.PhoneNumber.Length == 11).ToListAsync();
var transactions = GetFinancialByContractingPartyId(contractingParty.id).GetAwaiter().GetResult();
- Thread.Sleep(500);
+
var debtor = transactions.FinancialTransactionViewModels.Sum(x => x.Deptor);
var creditor = transactions.FinancialTransactionViewModels.Sum(x => x.Creditor);
- Thread.Sleep(500);
+
var id = $"{item.ContractingPartyId}";
var aprove = $"{transactions.Id}";
@@ -3076,38 +3090,19 @@ public class InstitutionContractRepository : RepositoryBase 18 ? item.ContractingPartyName.Substring(0, 18) : item.ContractingPartyName;
string errMess = $"{name}-خطا";
- _smsService.Alarm("09114221321", errMess);
- _logger.LogError(e, "ReminderSms");
+ // _smsService.Alarm("09114221321", errMess);
+
}
}
+
+ #endregion
+
+
+ return smsList;
+
}
+ public async Task SendReminderSmsToContractingParties(List smsListData)
+ {
+ //ارسال پیامک با اساس لیست
+ #region SendSMSFromList
- #region ExternalMetods
+ var typeOfSms = "یادآور بدهی ماهانه";
- private async Task? GetFinancialByContractingPartyId(long contractingPartyId)
+ if (smsListData.Any())
+ {
+ foreach (var item in smsListData)
+ {
+ if (item.TypeOfSmsMethod == "MonthlyBill")
+ {
+ var res = await _smsService.MonthlyBill(item.PhoneNumber, item.TemplateId, item.PartyName, item.Amount,
+ $"{item.ContractingPartyId}", item.AproveId);
+
+ if (res.isSucceded)
+ {
+ var createSmsResult = new Company.Domain.SmsResultAgg.SmsResult(res.messaeId,
+ res.message, typeOfSms, item.PartyName, item.PhoneNumber,
+ item.ContractingPartyId, item.InstitutionContractId);
+
+ await _smsResultRepository.CreateAsync(createSmsResult);
+ await _smsResultRepository.SaveChangesAsync();
+
+ }
+ }
+ else
+ {
+ var res = await _smsService.MonthlyBillNew(item.PhoneNumber, item.TemplateId, item.PartyName, item.Amount, item.Code1, item.Code2);
+ if (res.isSucceded)
+ {
+ var createSmsResult = new Company.Domain.SmsResultAgg.SmsResult(res.messaeId,
+ res.message, typeOfSms, item.PartyName, item.PhoneNumber,
+ item.ContractingPartyId, item.InstitutionContractId);
+
+ await _smsResultRepository.CreateAsync(createSmsResult);
+ await _smsResultRepository.SaveChangesAsync();
+
+ }
+ }
+ Thread.Sleep(1000);
+ }
+ }
+
+
+ #endregion
+ }
+
+ #region PrivateMetods
+ ///
+ /// دریافت صورت حساب مالی با آی دی طرف حساب
+ ///
+ ///
+ ///
+ private async Task GetFinancialByContractingPartyId(long contractingPartyId)
{
return await _context.FinancialStatments.Include(x => x.FinancialTransactionList)
.Select(x => new FinancialStatmentViewModel
@@ -3340,6 +3326,7 @@ public class InstitutionContractRepository : RepositoryBase
+ {
+ private string phoneNumber;
+ private int v1;
+ private string partyName;
+ private string balanceToMoney;
+ private string id;
+ private string aprove;
+ private string v2;
+ private string v3;
+ private string v4;
+
+ public ValueTuple(string phoneNumber, int v1, string partyName, string balanceToMoney, string id, string aprove, string v2, string v3, string v4)
+ {
+ this.phoneNumber = phoneNumber;
+ this.v1 = v1;
+ this.partyName = partyName;
+ this.balanceToMoney = balanceToMoney;
+ this.id = id;
+ this.aprove = aprove;
+ this.v2 = v2;
+ this.v3 = v3;
+ this.v4 = v4;
+ }
+ }
+}
\ No newline at end of file
diff --git a/CompanyManagment.EFCore/Services/SmsService.cs b/CompanyManagment.EFCore/Services/SmsService.cs
index 6f4587d4..e8ab3edd 100644
--- a/CompanyManagment.EFCore/Services/SmsService.cs
+++ b/CompanyManagment.EFCore/Services/SmsService.cs
@@ -409,4 +409,83 @@ public class SmsService : ISmsService
}
#endregion
+
+
+ #region InstitutionContractSMS
+
+ public async Task<(byte status, string message, int messaeId, bool isSucceded)> MonthlyBillNew(string number, int tamplateId, string fullname, string amount, string code1,
+ string code2)
+ {
+
+ var smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
+ var result = new ValueTuple();
+ var sendResult = await smsIr.VerifySendAsync(number, tamplateId,
+ new VerifySendParameter[]
+ { new("FULLNAME", fullname), new("AMOUNT", amount), new("CODE1", code1), new("CODE2", code2) });
+ Thread.Sleep(500);
+
+
+ if (sendResult.Message == "موفق")
+ {
+
+ result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, true);
+ return result;
+ }
+
+ result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, false);
+ return result;
+
+ }
+
+ public async Task<(byte status, string message, int messaeId, bool isSucceded)> MonthlyBill(string number, int tamplateId, string fullname, string amount, string id,
+ string aprove)
+ {
+
+ var smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
+ var result = new ValueTuple();
+ var sendResult = await smsIr.VerifySendAsync(number, tamplateId,
+ new VerifySendParameter[]
+ { new("FULLNAME", fullname), new("AMOUNT", amount), new("ID", id), new("APROVE", aprove) });
+ Thread.Sleep(500);
+
+
+ if (sendResult.Message == "موفق")
+ {
+
+ result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, true);
+ return result;
+ }
+
+ result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, false);
+ return result;
+ }
+
+ public async Task<(byte status, string message, int messaeId, bool isSucceded)> BlockMessage(string number, string fullname, string amount, string accountType, string id,
+ string aprove)
+ {
+ var tamplateId = 117946;
+ var result = new ValueTuple();
+ var smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
+
+ var sendResult = await smsIr.VerifySendAsync(number, tamplateId,
+ new VerifySendParameter[]
+ {
+ new("FULLNAME", fullname), new("AMOUNT", amount), new("ACCOUNTTYPE", accountType), new("ID", id),
+ new("APROVE", aprove)
+ });
+ Thread.Sleep(500);
+
+
+ if (sendResult.Message == "موفق")
+ {
+
+ result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, true);
+ return result;
+ }
+
+ result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, false);
+ return result;
+ }
+
+ #endregion
}