InstantSms change signalR

This commit is contained in:
gozareshgir
2026-02-03 14:08:16 +03:30
parent 4ccade4c7a
commit c493718452
5 changed files with 127 additions and 44 deletions

View File

@@ -1,5 +1,6 @@
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using _0_Framework.Application;
using Microsoft.AspNetCore.SignalR;
namespace CompanyManagment.App.Contracts.Hubs;
@@ -7,6 +8,20 @@ namespace CompanyManagment.App.Contracts.Hubs;
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)
{

View File

@@ -136,11 +136,33 @@ public class SmsSettingApplication : ISmsSettingApplication
public async Task<OperationResult> InstantSendReminderSms(List<SmsListData> command)
{
var op = new OperationResult();
List<string> devModeNumberList = [];
if (_hostEnvironment.IsDevelopment())
{
return op.Failed(" در محیط توسعه امکان ارسال وجود ندارد ");
int taker = 0;
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 sendMessStart = "شروع یادآور آنی";
@@ -163,10 +185,32 @@ public class SmsSettingApplication : ISmsSettingApplication
{
var op = new OperationResult();
List<string> devModeNumberList = [];
if (_hostEnvironment.IsDevelopment())
{
return op.Failed(" در محیط توسعه امکان ارسال وجود ندارد ");
int taker = 0;
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 = "اعلام مسدودی طرف حساب";
@@ -289,16 +333,7 @@ public class SmsSettingApplication : ISmsSettingApplication
{
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 (phoneNumbers.Any())

View File

@@ -31,8 +31,9 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
private readonly ISmsResultRepository _smsResultRepository;
private readonly IHubContext<SendSmsHub> _hubContext;
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;
_smsService = smsService;
@@ -40,6 +41,7 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
_smsResultRepository = smsResultRepository;
_hubContext = hubContext;
_personalContractingPartyRepository = personalContractingPartyRepository;
_authHelper = authHelper;
}
//هشدار - اقدام قضائی
@@ -937,12 +939,26 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
public async Task SendBlockSmsToContractingParties(List<BlockSmsListData> smsListData, string typeOfSms,
string sendMessStart, string sendMessEnd)
{
var currentAccountId = _authHelper.CurrentAccountId();
var signalR = _hubContext.Clients.Group(SendSmsHub.GetGroupName(currentAccountId));
if (smsListData.Any())
{
await _smsService.Alarm("09114221321", sendMessStart);
Thread.Sleep(1000);
await _smsService.Alarm("09111485044", sendMessStart);
Thread.Sleep(1000);
try
{
var sendingStart = await _smsService.Alarm("09114221321", sendMessStart);
Thread.Sleep(1000);
if (!sendingStart)
{
await signalR.SendAsync("sendToApi", "failed");
return;
}
}
catch (Exception e)
{
await signalR.SendAsync("sendToApi", "failed");
return;
}
int successProcess = 1;
int countList = smsListData.Count;
@@ -960,6 +976,7 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
item.PartyName, item.PhoneNumber, item.ContractingPartyId, item.InstitutionContractId);
await _smsResultRepository.CreateAsync(createSmsResult);
await _smsResultRepository.SaveChangesAsync();
await signalR.SendAsync("sendStatus", true, item.PhoneNumber);
}
else
{
@@ -971,6 +988,7 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
item.PartyName, item.PhoneNumber, item.ContractingPartyId, item.InstitutionContractId);
await _smsResultRepository.CreateAsync(createSmsResult);
await _smsResultRepository.SaveChangesAsync();
await signalR.SendAsync("sendStatus", true, item.PhoneNumber);
}
}
@@ -978,13 +996,13 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
{
string name = item.PartyName.Length > 18 ? item.PartyName.Substring(0, 18) : item.PartyName;
string errMess = $"{name}-خطا";
await signalR.SendAsync("sendStatus", false, item.PhoneNumber);
await _smsService.Alarm("09114221321", errMess);
}
Thread.Sleep(600);
var percent = (successProcess / (double)countList) * 100;
await _hubContext.Clients.Group(SendSmsHub.GetGroupName(10))
.SendAsync("showStatus", (int)percent);
await signalR.SendAsync("showStatus", (int)percent);
successProcess += 1;
}
@@ -2099,13 +2117,27 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
#region SendSMSFromList
var currentAccountId = _authHelper.CurrentAccountId();
var signalR = _hubContext.Clients.Group(SendSmsHub.GetGroupName(currentAccountId));
if (smsListData.Any())
{
//await _smsService.Alarm("09114221321", sendMessStart);
//Thread.Sleep(1000);
//await _smsService.Alarm("09111485044", sendMessStart);
//Thread.Sleep(1000);
try
{
var sendingStart = await _smsService.Alarm("09114221321", sendMessStart);
Thread.Sleep(1000);
if (!sendingStart)
{
await signalR.SendAsync("sendToApi", "failed");
return;
}
}
catch (Exception e)
{
await signalR.SendAsync("sendToApi", "failed");
return;
}
int successProcess = 1;
int countList = smsListData.Count;
@@ -2123,12 +2155,14 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
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();
await signalR.SendAsync("sendStatus", true, item.PhoneNumber);
}
}
else
@@ -2137,12 +2171,14 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
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();
await signalR.SendAsync("sendStatus", true, item.PhoneNumber);
}
}
@@ -2152,13 +2188,13 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
{
string name = item.PartyName.Length > 18 ? item.PartyName.Substring(0, 18) : item.PartyName;
string errMess = $"{name}-خطا";
await signalR.SendAsync("sendStatus", false, item.PhoneNumber);
_logger.LogError(errMess);
await _smsService.Alarm("09114221321", errMess);
}
var percent = (successProcess / (double)countList) * 100;
await _hubContext.Clients.Group(SendSmsHub.GetGroupName(7))
.SendAsync("showStatus", (int)percent);
await signalR.SendAsync("showStatus", (int)percent);
successProcess += 1;
}

View File

@@ -607,17 +607,14 @@ public class SmsService : ISmsService
//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) });
Thread.Sleep(1000);
var status = verificationSendResult.Result.Status;
var mess = verificationSendResult.Result.Message;
var messaeId = verificationSendResult.Result.Data.MessageId;
if (verificationSendResult.IsCompletedSuccessfully) return true;
var resStartStatus = verificationSendResult.Result;
var resResult = verificationSendResult.Status;
var reseExceptiont = verificationSendResult.Exception;
Thread.Sleep(800);
if (verificationSendResult.Message == "موفق")
{
return true;
}
return false;
}

View File

@@ -260,10 +260,10 @@ public class SmsReportController : AdminBaseController
/// <param name="phoneNumbers"></param>
/// <returns></returns>
[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);
return result;
var result = _smsSettingApplication.InstantSmsSendApi(TypeOfSmsSetting.InstitutionContractDebtReminder, phoneNumbers);
return Ok();
}
/// <summary>
@@ -272,10 +272,10 @@ public class SmsReportController : AdminBaseController
/// <param name="phoneNumbers"></param>
/// <returns></returns>
[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);
return result;
var result = _smsSettingApplication.InstantSmsSendApi(TypeOfSmsSetting.BlockContractingParty, phoneNumbers);
return Ok();
}
#endregion
}