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 }