348 lines
12 KiB
C#
348 lines
12 KiB
C#
using _0_Framework.Application;
|
|
using _0_Framework.Application.Enums;
|
|
using Company.Domain.InstitutionContractAgg;
|
|
using Company.Domain.SmsResultAgg;
|
|
using CompanyManagment.App.Contracts.InstitutionContract;
|
|
using CompanyManagment.App.Contracts.SmsResult;
|
|
using CompanyManagment.EFCore.Repository;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.Extensions.Hosting;
|
|
|
|
namespace CompanyManagment.Application;
|
|
|
|
public class SmsSettingApplication : ISmsSettingApplication
|
|
{
|
|
private readonly ISmsSettingsRepository _smsSettingsRepository;
|
|
private readonly IInstitutionContractRepository _institutionContractRepository;
|
|
private readonly IInstitutionContractSmsServiceRepository _institutionContractSmsServiceRepository;
|
|
private readonly IHostEnvironment _hostEnvironment;
|
|
|
|
public SmsSettingApplication(ISmsSettingsRepository smsSettingsRepository, IInstitutionContractRepository institutionContractRepository, IInstitutionContractSmsServiceRepository institutionContractSmsServiceRepository, IHostEnvironment hostEnvironment)
|
|
{
|
|
_smsSettingsRepository = smsSettingsRepository;
|
|
_institutionContractRepository = institutionContractRepository;
|
|
_institutionContractSmsServiceRepository = institutionContractSmsServiceRepository;
|
|
_hostEnvironment = hostEnvironment;
|
|
|
|
}
|
|
|
|
|
|
public async Task<SmsSettingViewModel> GetSmsSettingsByType(TypeOfSmsSetting typeOfSmsSetting)
|
|
{
|
|
return await _smsSettingsRepository.GetSmsSettingsByType(typeOfSmsSetting);
|
|
}
|
|
|
|
/// <summary>
|
|
/// ایجاد تنظیمات پیامک یادآور
|
|
/// </summary>
|
|
/// <param name="dayOfMonth"></param>
|
|
/// <param name="timeOfDay"></param>
|
|
/// <param name="typeOfSmsSetting"></param>
|
|
/// <returns></returns>
|
|
public async Task<OperationResult> CreateSmsSetting(int dayOfMonth, string timeOfDay,
|
|
TypeOfSmsSetting typeOfSmsSetting)
|
|
{
|
|
var op = new OperationResult();
|
|
var timeSpan = new TimeSpan();
|
|
if (string.IsNullOrWhiteSpace(timeOfDay))
|
|
return op.Failed("ساعت وارد نشده است");
|
|
|
|
try
|
|
{
|
|
timeSpan = TimeSpan.ParseExact(timeOfDay, @"hh\:mm", null);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
return op.Failed("فرمت ساعت اشتباه است");
|
|
}
|
|
|
|
|
|
if (dayOfMonth < 1 || dayOfMonth > 31)
|
|
{
|
|
return op.Failed("عدد روز می بایست بین 1 تا 31 باشد");
|
|
}
|
|
|
|
if (_smsSettingsRepository.Exists(x => x.DayOfMonth == dayOfMonth && x.TimeOfDay == timeSpan && x.TypeOfSmsSetting == typeOfSmsSetting))
|
|
return op.Failed("رکورد ایجاد شده تکراری است");
|
|
|
|
var create = new SmsSetting(typeOfSmsSetting, dayOfMonth, timeSpan);
|
|
await _smsSettingsRepository.CreateAsync(create);
|
|
await _smsSettingsRepository.SaveChangesAsync();
|
|
|
|
|
|
return op.Succcedded();
|
|
}
|
|
|
|
public async Task<EditSmsSetting> GetSmsSettingToEdit(long id)
|
|
{
|
|
return await _smsSettingsRepository.GetSmsSettingToEdit(id);
|
|
}
|
|
|
|
public async Task<OperationResult> EditeSmsSetting(EditSmsSetting command)
|
|
{
|
|
var op = new OperationResult();
|
|
var timeSpan = new TimeSpan();
|
|
if (string.IsNullOrWhiteSpace(command.TimeOfDayDisplay))
|
|
return op.Failed("ساعت وارد نشده است");
|
|
|
|
try
|
|
{
|
|
timeSpan = TimeSpan.ParseExact(command.TimeOfDayDisplay, @"hh\:mm", null);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
return op.Failed("فرمت ساعت اشتباه است");
|
|
}
|
|
|
|
if (command.DayOfMonth < 1 || command.DayOfMonth > 31)
|
|
{
|
|
return op.Failed("عدد روز می بایست بین 1 تا 31 باشد");
|
|
}
|
|
|
|
if (_smsSettingsRepository.Exists(x => x.DayOfMonth == command.DayOfMonth && x.TimeOfDay == timeSpan && x.TypeOfSmsSetting == command.TypeOfSmsSetting && x.id != command.Id))
|
|
return op.Failed("رکورد ایجاد شده تکراری است");
|
|
|
|
var editSmsSetting = _smsSettingsRepository.Get(command.Id);
|
|
editSmsSetting.Edit(command.DayOfMonth, timeSpan);
|
|
await _smsSettingsRepository.SaveChangesAsync();
|
|
|
|
return op.Succcedded();
|
|
}
|
|
|
|
public async Task RemoveSetting(long id)
|
|
{
|
|
await _smsSettingsRepository.RemoveItem(id);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public async Task<List<SmsListData>> GetSmsListData(TypeOfSmsSetting typeOfSmsSetting)
|
|
{
|
|
return await _institutionContractSmsServiceRepository.GetSmsListData(DateTime.Now, typeOfSmsSetting);
|
|
}
|
|
|
|
public async Task<List<BlockSmsListData>> GetBlockSmsListData(TypeOfSmsSetting typeOfSmsSetting)
|
|
{
|
|
return await _institutionContractSmsServiceRepository.GetBlockListData(DateTime.Now);
|
|
}
|
|
|
|
|
|
public async Task<OperationResult> InstantSendReminderSms(List<SmsListData> command)
|
|
{
|
|
var op = new OperationResult();
|
|
if (_hostEnvironment.IsDevelopment())
|
|
{
|
|
|
|
return op.Failed(" در محیط توسعه امکان ارسال وجود ندارد ");
|
|
|
|
}
|
|
string typeOfSms = "یادآور بدهی ماهانه";
|
|
string sendMessStart = "شروع یادآور آنی";
|
|
string sendMessEnd = "پایان یادآور آنی";
|
|
|
|
if (command.Any())
|
|
{
|
|
await _institutionContractSmsServiceRepository.SendReminderSmsToContractingParties(command, typeOfSms, sendMessStart, sendMessEnd);
|
|
return op.Succcedded();
|
|
}
|
|
else
|
|
{
|
|
return op.Failed("موردی انتخاب نشده است");
|
|
}
|
|
|
|
|
|
}
|
|
|
|
public async Task<OperationResult> InstantSendBlockSms(List<BlockSmsListData> command)
|
|
{
|
|
var op = new OperationResult();
|
|
|
|
if (_hostEnvironment.IsDevelopment())
|
|
{
|
|
|
|
return op.Failed(" در محیط توسعه امکان ارسال وجود ندارد ");
|
|
|
|
}
|
|
string typeOfSms = "اعلام مسدودی طرف حساب";
|
|
string sendMessStart = "شروع مسدودی آنی";
|
|
string sendMessEnd = "پایان مسدودی آنی ";
|
|
if (command.Any())
|
|
{
|
|
await _institutionContractSmsServiceRepository.SendBlockSmsToContractingParties(command, typeOfSms, sendMessStart,
|
|
sendMessEnd);
|
|
return op.Succcedded();
|
|
}
|
|
else
|
|
{
|
|
return op.Failed("موردی انتخاب نشده است");
|
|
}
|
|
}
|
|
|
|
#region ForApi
|
|
|
|
/// <summary>
|
|
/// دریافت لیست پیامک های خودکار بر اساس نوع آن
|
|
/// Api
|
|
/// </summary>
|
|
/// <param name="typeOfSmsSetting"></param>
|
|
/// <returns></returns>
|
|
public async Task<List<SmsSettingDto>> GetSmsSettingList(TypeOfSmsSetting typeOfSmsSetting)
|
|
{
|
|
return await _smsSettingsRepository.GetSmsSettingList(typeOfSmsSetting);
|
|
}
|
|
|
|
|
|
public async Task<SmsSettingDto> GetSmsSettingDataToEdit(long id)
|
|
{
|
|
return await _smsSettingsRepository.GetSmsSettingDataToEdit(id);
|
|
}
|
|
|
|
|
|
public async Task<OperationResult> EditSmsSetting(SmsSettingDto command)
|
|
{
|
|
var op = new OperationResult();
|
|
var editSmsSetting = _smsSettingsRepository.Get(command.Id);
|
|
var timeSpan = new TimeSpan();
|
|
if (string.IsNullOrWhiteSpace(command.TimeOfDayDisplay))
|
|
return op.Failed("ساعت وارد نشده است");
|
|
|
|
try
|
|
{
|
|
timeSpan = TimeSpan.ParseExact(command.TimeOfDayDisplay, @"hh\:mm", null);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
return op.Failed("فرمت ساعت اشتباه است");
|
|
}
|
|
|
|
if (command.DayOfMonth < 1 || command.DayOfMonth > 31)
|
|
{
|
|
return op.Failed("عدد روز می بایست بین 1 تا 31 باشد");
|
|
}
|
|
|
|
if (_smsSettingsRepository.Exists(x => x.DayOfMonth == command.DayOfMonth && x.TimeOfDay == timeSpan && x.TypeOfSmsSetting == editSmsSetting.TypeOfSmsSetting && x.id != command.Id))
|
|
return op.Failed("رکورد ایجاد شده تکراری است");
|
|
|
|
|
|
editSmsSetting.Edit(command.DayOfMonth, timeSpan);
|
|
await _smsSettingsRepository.SaveChangesAsync();
|
|
|
|
return op.Succcedded();
|
|
}
|
|
|
|
|
|
public async Task<List<InstantReminderSendSms>> GetInstantReminderSmsListData(TypeOfSmsSetting typeOfSmsSetting)
|
|
{
|
|
var result = new List<InstantReminderSendSms>();
|
|
|
|
|
|
if (typeOfSmsSetting == TypeOfSmsSetting.InstitutionContractDebtReminder)
|
|
{
|
|
var data = await _institutionContractSmsServiceRepository.GetSmsListData(DateTime.Now, TypeOfSmsSetting.InstitutionContractDebtReminder);
|
|
|
|
if (data.Any())
|
|
{
|
|
result = data.GroupBy(x => x.PartyName).Select(m => new InstantReminderSendSms()
|
|
{
|
|
FullName = m.Key,
|
|
Amount = m.Select(c => c.Amount).First(),
|
|
InstantReminderSmsList = m.Select(c => new InstantReminderSmsList()
|
|
{
|
|
PhoneNumber = c.PhoneNumber,
|
|
}).ToList()
|
|
|
|
|
|
}).ToList();
|
|
}
|
|
}
|
|
|
|
if (typeOfSmsSetting == TypeOfSmsSetting.BlockContractingParty)
|
|
{
|
|
var data = await _institutionContractSmsServiceRepository.GetBlockListData(DateTime.Now);
|
|
|
|
if (data.Any())
|
|
{
|
|
result = data.GroupBy(x => x.PartyName).Select(m => new InstantReminderSendSms()
|
|
{
|
|
FullName = m.Key,
|
|
Amount = m.Select(c => c.Amount).First(),
|
|
InstantReminderSmsList = m.Select(c => new InstantReminderSmsList()
|
|
{
|
|
PhoneNumber = c.PhoneNumber,
|
|
}).ToList()
|
|
|
|
|
|
}).ToList();
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
public async Task<OperationResult> InstantSmsSendApi(TypeOfSmsSetting typeOfSmsSetting, List<string> phoneNumbers)
|
|
{
|
|
|
|
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())
|
|
{
|
|
var data = await _institutionContractSmsServiceRepository.GetSmsListData(DateTime.Now, TypeOfSmsSetting.InstitutionContractDebtReminder);
|
|
|
|
if (data.Any())
|
|
{
|
|
phoneNumbers = phoneNumbers.Where(x => x.Length == 11).ToList();
|
|
var sendItems = data.Where(x => phoneNumbers.Contains(x.PhoneNumber)).ToList();
|
|
var res = await InstantSendReminderSms(sendItems);
|
|
return res;
|
|
|
|
}
|
|
|
|
return op.Succcedded();
|
|
}
|
|
|
|
return op.Failed("موردی انتخاب نشده است");
|
|
|
|
}
|
|
|
|
if (typeOfSmsSetting == TypeOfSmsSetting.BlockContractingParty)
|
|
{
|
|
if (phoneNumbers.Any())
|
|
{
|
|
var data = await _institutionContractSmsServiceRepository.GetBlockListData(DateTime.Now);
|
|
|
|
if (data.Any())
|
|
{
|
|
phoneNumbers = phoneNumbers.Where(x => x.Length == 11).ToList();
|
|
var sendItems = data.Where(x => phoneNumbers.Contains(x.PhoneNumber)).ToList();
|
|
var res = await InstantSendBlockSms(sendItems);
|
|
return res;
|
|
}
|
|
return op.Succcedded();
|
|
}
|
|
return op.Failed("موردی انتخاب نشده است");
|
|
}
|
|
|
|
|
|
|
|
|
|
return op.Failed("خطای انتخاب نوع ارسال");
|
|
}
|
|
#endregion
|
|
} |