Compare commits

...

3 Commits

Author SHA1 Message Date
gozareshgir
1ac73f9689 change showStatus signalR 2026-02-03 15:09:50 +03:30
gozareshgir
fe8e94f121 merge from master 2026-02-03 14:10:48 +03:30
gozareshgir
c493718452 InstantSms change signalR 2026-02-03 14:08:16 +03:30
5 changed files with 136 additions and 63 deletions

View File

@@ -1,5 +1,6 @@
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Threading.Tasks; using System.Threading.Tasks;
using _0_Framework.Application;
using Microsoft.AspNetCore.SignalR; using Microsoft.AspNetCore.SignalR;
namespace CompanyManagment.App.Contracts.Hubs; namespace CompanyManagment.App.Contracts.Hubs;
@@ -7,6 +8,20 @@ namespace CompanyManagment.App.Contracts.Hubs;
public class SendSmsHub : Hub public class SendSmsHub : Hub
{ {
private readonly IAuthHelper _authHelper;
public SendSmsHub(IAuthHelper authHelper)
{
_authHelper = authHelper;
}
public override async Task OnConnectedAsync()
{
var accountId = _authHelper.CurrentAccountId();
var connectionId = Context.ConnectionId;
await send(accountId);
await base.OnConnectedAsync();
}
public async Task send(long id) public async Task send(long id)
{ {

View File

@@ -136,11 +136,33 @@ public class SmsSettingApplication : ISmsSettingApplication
public async Task<OperationResult> InstantSendReminderSms(List<SmsListData> command) public async Task<OperationResult> InstantSendReminderSms(List<SmsListData> command)
{ {
var op = new OperationResult(); var op = new OperationResult();
List<string> devModeNumberList = [];
if (_hostEnvironment.IsDevelopment()) if (_hostEnvironment.IsDevelopment())
{ {
int taker = 0;
return op.Failed(" در محیط توسعه امکان ارسال وجود ندارد "); switch (command.Count)
{
case >= 3:
taker = 3;
break;
case > 0:
case < 3:
taker = command.Count;
break;
default:
taker = 0;
}
if (taker > 0)
{
devModeNumberList = ["09114221321", "09116967898", "09116067106"];
command = command.Take(taker).ToList();
for (int i = 0; i < 3; i++)
{
command[i].PhoneNumber = devModeNumberList[i];
}
}
} }
string typeOfSms = "یادآور بدهی ماهانه"; string typeOfSms = "یادآور بدهی ماهانه";
string sendMessStart = "شروع یادآور آنی"; string sendMessStart = "شروع یادآور آنی";
@@ -163,10 +185,32 @@ public class SmsSettingApplication : ISmsSettingApplication
{ {
var op = new OperationResult(); var op = new OperationResult();
List<string> devModeNumberList = [];
if (_hostEnvironment.IsDevelopment()) if (_hostEnvironment.IsDevelopment())
{ {
int taker = 0;
return op.Failed(" در محیط توسعه امکان ارسال وجود ندارد "); switch (command.Count)
{
case >= 3:
taker = 3;
break;
case > 0:
case < 3:
taker = command.Count;
break;
default:
taker = 0;
}
if (taker > 0)
{
devModeNumberList = ["09114221321", "09116967898", "09116067106"];
command = command.Take(taker).ToList();
for (int i = 0; i < 3; i++)
{
command[i].PhoneNumber = devModeNumberList[i];
}
}
} }
string typeOfSms = "اعلام مسدودی طرف حساب"; string typeOfSms = "اعلام مسدودی طرف حساب";
@@ -289,16 +333,7 @@ public class SmsSettingApplication : ISmsSettingApplication
{ {
var op = new OperationResult(); var op = new OperationResult();
if (_hostEnvironment.IsDevelopment())
{
var str = "";
foreach (var item in phoneNumbers)
{
str += $" {item}, ";
}
return op.Failed(" در محیط توسعه امکان ارسال وجود ندارد " + " لیست ارسال شما " + str);
}
if (typeOfSmsSetting == TypeOfSmsSetting.InstitutionContractDebtReminder) if (typeOfSmsSetting == TypeOfSmsSetting.InstitutionContractDebtReminder)
{ {
if (phoneNumbers.Any()) if (phoneNumbers.Any())

View File

@@ -31,8 +31,9 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
private readonly ISmsResultRepository _smsResultRepository; private readonly ISmsResultRepository _smsResultRepository;
private readonly IHubContext<SendSmsHub> _hubContext; private readonly IHubContext<SendSmsHub> _hubContext;
private readonly IPersonalContractingPartyRepository _personalContractingPartyRepository; private readonly IPersonalContractingPartyRepository _personalContractingPartyRepository;
private readonly IAuthHelper _authHelper;
public InstitutionContractSmsServiceRepository(CompanyContext context, ISmsService smsService, ILogger<InstitutionContractSmsServiceRepository> logger, ISmsResultRepository smsResultRepository, IHubContext<SendSmsHub> hubContext, IPersonalContractingPartyRepository personalContractingPartyRepository) : base(context) public InstitutionContractSmsServiceRepository(CompanyContext context, ISmsService smsService, ILogger<InstitutionContractSmsServiceRepository> logger, ISmsResultRepository smsResultRepository, IHubContext<SendSmsHub> hubContext, IPersonalContractingPartyRepository personalContractingPartyRepository, IAuthHelper authHelper) : base(context)
{ {
_context = context; _context = context;
_smsService = smsService; _smsService = smsService;
@@ -40,6 +41,7 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
_smsResultRepository = smsResultRepository; _smsResultRepository = smsResultRepository;
_hubContext = hubContext; _hubContext = hubContext;
_personalContractingPartyRepository = personalContractingPartyRepository; _personalContractingPartyRepository = personalContractingPartyRepository;
_authHelper = authHelper;
} }
//هشدار - اقدام قضائی //هشدار - اقدام قضائی
@@ -937,15 +939,31 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
public async Task SendBlockSmsToContractingParties(List<BlockSmsListData> smsListData, string typeOfSms, public async Task SendBlockSmsToContractingParties(List<BlockSmsListData> smsListData, string typeOfSms,
string sendMessStart, string sendMessEnd) string sendMessStart, string sendMessEnd)
{ {
var currentAccountId = _authHelper.CurrentAccountId();
var signalR = _hubContext.Clients.Group(SendSmsHub.GetGroupName(currentAccountId));
if (smsListData.Any()) if (smsListData.Any())
{ {
await _smsService.Alarm("09114221321", sendMessStart); try
Thread.Sleep(1000); {
await _smsService.Alarm("09111485044", sendMessStart); var sendingStart = await _smsService.Alarm("09114221321", sendMessStart);
Thread.Sleep(1000); Thread.Sleep(1000);
if (!sendingStart)
{
await signalR.SendAsync("sendToApi", "failed");
return;
}
}
catch (Exception e)
{
await signalR.SendAsync("sendToApi", "failed");
return;
}
int successProcess = 1; int successProcess = 1;
int countList = smsListData.Count; int countList = smsListData.Count;
List<string> failedNumberList = [];
int successSend = 0;
int failedSend = 0;
foreach (var item in smsListData) foreach (var item in smsListData)
{ {
try try
@@ -960,6 +978,7 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
item.PartyName, item.PhoneNumber, item.ContractingPartyId, item.InstitutionContractId); item.PartyName, item.PhoneNumber, item.ContractingPartyId, item.InstitutionContractId);
await _smsResultRepository.CreateAsync(createSmsResult); await _smsResultRepository.CreateAsync(createSmsResult);
await _smsResultRepository.SaveChangesAsync(); await _smsResultRepository.SaveChangesAsync();
} }
else else
{ {
@@ -971,28 +990,31 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
item.PartyName, item.PhoneNumber, item.ContractingPartyId, item.InstitutionContractId); item.PartyName, item.PhoneNumber, item.ContractingPartyId, item.InstitutionContractId);
await _smsResultRepository.CreateAsync(createSmsResult); await _smsResultRepository.CreateAsync(createSmsResult);
await _smsResultRepository.SaveChangesAsync(); await _smsResultRepository.SaveChangesAsync();
} }
successSend += 1;
} }
catch (Exception e) catch (Exception e)
{ {
string name = item.PartyName.Length > 18 ? item.PartyName.Substring(0, 18) : item.PartyName; string name = item.PartyName.Length > 18 ? item.PartyName.Substring(0, 18) : item.PartyName;
string errMess = $"{name}-خطا"; string errMess = $"{name}-خطا";
failedNumberList.Add(item.PhoneNumber);
failedSend += 1;
await _smsService.Alarm("09114221321", errMess); await _smsService.Alarm("09114221321", errMess);
} }
Thread.Sleep(600); Thread.Sleep(600);
var percent = (successProcess / (double)countList) * 100; var percent = (successProcess / (double)countList) * 100;
await _hubContext.Clients.Group(SendSmsHub.GetGroupName(10)) await signalR.SendAsync("showStatus", countList, failedSend, successSend,(int)percent, failedNumberList);
.SendAsync("showStatus", (int)percent);
successProcess += 1; successProcess += 1;
} }
await _smsService.Alarm("09114221321", sendMessEnd); await _smsService.Alarm("09114221321", sendMessEnd);
Thread.Sleep(1000);
await _smsService.Alarm("09111485044", sendMessEnd);
} }
} }
@@ -2099,28 +2121,32 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
#region SendSMSFromList #region SendSMSFromList
var currentAccountId = _authHelper.CurrentAccountId();
var signalR = _hubContext.Clients.Group(SendSmsHub.GetGroupName(currentAccountId));
if (smsListData.Any()) if (smsListData.Any())
{ {
//await _smsService.Alarm("09114221321", sendMessStart); try
//Thread.Sleep(1000); {
//await _smsService.Alarm("09111485044", sendMessStart); var sendingStart = await _smsService.Alarm("09114221321", sendMessStart);
//Thread.Sleep(1000); Thread.Sleep(1000);
if (!sendingStart)
{
await signalR.SendAsync("sendToApi", "failed");
return;
}
}
catch (Exception e)
{
await signalR.SendAsync("sendToApi", "failed");
return;
}
int successProcess = 1; int successProcess = 1;
int countList = smsListData.Count; int countList = smsListData.Count;
List<string> failedNumberList = [];
#region Test int successSend = 0;
int failedSend = 0;
//for (int i = 0; i < 100; i++)
//{
// var percent = (successProcess / (double)countList) * 100;
// await _hubContext.Clients.Group(SendSmsHub.GetGroupName(7))
// .SendAsync("showStatus", (int)percent);
// Thread.Sleep(1000);
// successProcess += 1;
//}
#endregion
foreach (var item in smsListData) foreach (var item in smsListData)
{ {
@@ -2138,9 +2164,9 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
var createSmsResult = new Company.Domain.SmsResultAgg.SmsResult(res.messaeId, var createSmsResult = new Company.Domain.SmsResultAgg.SmsResult(res.messaeId,
res.message, typeOfSms, item.PartyName, item.PhoneNumber, res.message, typeOfSms, item.PartyName, item.PhoneNumber,
item.ContractingPartyId, item.InstitutionContractId); item.ContractingPartyId, item.InstitutionContractId);
await _smsResultRepository.CreateAsync(createSmsResult); await _smsResultRepository.CreateAsync(createSmsResult);
await _smsResultRepository.SaveChangesAsync(); await _smsResultRepository.SaveChangesAsync();
} }
} }
else else
@@ -2152,25 +2178,25 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
var createSmsResult = new Company.Domain.SmsResultAgg.SmsResult(res.messaeId, var createSmsResult = new Company.Domain.SmsResultAgg.SmsResult(res.messaeId,
res.message, typeOfSms, item.PartyName, item.PhoneNumber, res.message, typeOfSms, item.PartyName, item.PhoneNumber,
item.ContractingPartyId, item.InstitutionContractId); item.ContractingPartyId, item.InstitutionContractId);
await _smsResultRepository.CreateAsync(createSmsResult); await _smsResultRepository.CreateAsync(createSmsResult);
await _smsResultRepository.SaveChangesAsync(); await _smsResultRepository.SaveChangesAsync();
} }
} }
successSend += 1;
Thread.Sleep(600); Thread.Sleep(600);
} }
catch (Exception e) catch (Exception e)
{ {
string name = item.PartyName.Length > 18 ? item.PartyName.Substring(0, 18) : item.PartyName; string name = item.PartyName.Length > 18 ? item.PartyName.Substring(0, 18) : item.PartyName;
string errMess = $"{name}-خطا"; string errMess = $"{name}-خطا";
failedNumberList.Add(item.PhoneNumber);
failedSend += 1;
_logger.LogError(errMess); _logger.LogError(errMess);
await _smsService.Alarm("09114221321", errMess); await _smsService.Alarm("09114221321", errMess);
} }
var percent = (successProcess / (double)countList) * 100; var percent = (successProcess / (double)countList) * 100;
await _hubContext.Clients.Group(SendSmsHub.GetGroupName(7)) await signalR.SendAsync("showStatus", countList, failedSend, successSend, (int)percent, failedNumberList);
.SendAsync("showStatus", (int)percent);
successProcess += 1; successProcess += 1;
} }

View File

@@ -607,17 +607,14 @@ public class SmsService : ISmsService
//var bulkSendResult = smsIr.BulkSendAsync(95007079000006, "your text message", new string[] { "9120000000" }); //var bulkSendResult = smsIr.BulkSendAsync(95007079000006, "your text message", new string[] { "9120000000" });
var verificationSendResult = var verificationSendResult = await
smsIr.VerifySendAsync(number, 662874, new VerifySendParameter[] { new("ALARM", message) }); smsIr.VerifySendAsync(number, 662874, new VerifySendParameter[] { new("ALARM", message) });
Thread.Sleep(1000); Thread.Sleep(800);
var status = verificationSendResult.Result.Status; if (verificationSendResult.Message == "موفق")
var mess = verificationSendResult.Result.Message; {
var messaeId = verificationSendResult.Result.Data.MessageId; return true;
if (verificationSendResult.IsCompletedSuccessfully) return true; }
var resStartStatus = verificationSendResult.Result;
var resResult = verificationSendResult.Status;
var reseExceptiont = verificationSendResult.Exception;
return false; return false;
} }

View File

@@ -260,10 +260,10 @@ public class SmsReportController : AdminBaseController
/// <param name="phoneNumbers"></param> /// <param name="phoneNumbers"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost("InstantReminderSmsSend")] [HttpPost("InstantReminderSmsSend")]
public async Task<ActionResult<OperationResult>> InstantReminderSmsSend([FromBody] List<string> phoneNumbers) public async Task<ActionResult> InstantReminderSmsSend([FromBody] List<string> phoneNumbers)
{ {
var result = await _smsSettingApplication.InstantSmsSendApi(TypeOfSmsSetting.InstitutionContractDebtReminder, phoneNumbers); var result = _smsSettingApplication.InstantSmsSendApi(TypeOfSmsSetting.InstitutionContractDebtReminder, phoneNumbers);
return result; return Ok();
} }
/// <summary> /// <summary>
@@ -272,10 +272,10 @@ public class SmsReportController : AdminBaseController
/// <param name="phoneNumbers"></param> /// <param name="phoneNumbers"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost("InstantBlockSmsSend")] [HttpPost("InstantBlockSmsSend")]
public async Task<ActionResult<OperationResult>> InstantBlockSmsSend([FromBody] List<string> phoneNumbers) public async Task<ActionResult> InstantBlockSmsSend([FromBody] List<string> phoneNumbers)
{ {
var result = await _smsSettingApplication.InstantSmsSendApi(TypeOfSmsSetting.BlockContractingParty, phoneNumbers); var result = _smsSettingApplication.InstantSmsSendApi(TypeOfSmsSetting.BlockContractingParty, phoneNumbers);
return result; return Ok();
} }
#endregion #endregion
} }