116 lines
5.4 KiB
C#
116 lines
5.4 KiB
C#
using _0_Framework.Application.Sms;
|
|
using AccountManagement.Application.Contracts.Account;
|
|
using AccountMangement.Infrastructure.EFCore;
|
|
using Company.Domain.SmsResultAgg;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using SmsResult = Company.Domain.SmsResultAgg.SmsResult;
|
|
|
|
namespace BackgroundJobs.Task.Jobs;
|
|
public class SmsReminder
|
|
{
|
|
private readonly AccountContext _accountContext;
|
|
private readonly ISmsService _smsService;
|
|
private readonly ISmsResultRepository _smsResultRepository;
|
|
|
|
public SmsReminder(ISmsService smsService, AccountContext accountContext, ISmsResultRepository smsResultRepository)
|
|
{
|
|
_smsService = smsService;
|
|
_accountContext = accountContext;
|
|
_smsResultRepository = smsResultRepository;
|
|
}
|
|
|
|
public void Execute()
|
|
{
|
|
//var accounts = _accountContext.Accounts.Where(x => x.PositionId > 0 && x.IsActiveString == "true").Select(x => new AccountViewModel() { Id = x.id, Mobile = x.Mobile, Fullname = x.Fullname }).ToList();
|
|
//Thread.Sleep(300);
|
|
//var accounts = new List<AccountViewModel>() { new AccountViewModel() { Mobile = "09114221321", Id = 2 } };
|
|
var accounts= _accountContext.Accounts.Where(x => x.Username.ToLower()=="mahan").Select(x => new AccountViewModel() { Id = x.id, Mobile = x.Mobile, Fullname = x.Fullname }).ToList();
|
|
var smsVM = accounts.Select(x => new AccountSmsTaskViewModel()
|
|
{
|
|
Mobile = x.Mobile,
|
|
AccountId = x.Id,
|
|
FullName = x.Fullname,
|
|
TaskCount = GetLateTasksCount(x.Id)
|
|
}).Where(x => x.TaskCount > 0 && !string.IsNullOrEmpty(x.Mobile) && x.Mobile.Length == 11).ToList();
|
|
Thread.Sleep(300);
|
|
|
|
|
|
foreach (var viewmodel in smsVM)
|
|
{
|
|
var smsResult = _smsService.TaskReminderSms(viewmodel.Mobile, $"{viewmodel.TaskCount}");
|
|
Thread.Sleep(1000);
|
|
var createSmsResult = new SmsResult(smsResult.MessageId, smsResult.Message, "یادآور وظایف",
|
|
viewmodel.FullName, viewmodel.Mobile, viewmodel.AccountId, viewmodel.AccountId);
|
|
_smsResultRepository.Create(createSmsResult);
|
|
_smsResultRepository.SaveChanges();
|
|
Thread.Sleep(1000);
|
|
}
|
|
}
|
|
private int GetLateTasksCount(long accountId)
|
|
{
|
|
var positionValue = _accountContext.Accounts
|
|
.Where(x => x.id == accountId)
|
|
.Include(p => p.Position)
|
|
.Select(x => x.Position.PositionValue)
|
|
.FirstOrDefault();
|
|
|
|
if (positionValue == 0)
|
|
return 0;
|
|
|
|
|
|
DateTime now = DateTime.Now;
|
|
int overdueTasksCount;
|
|
|
|
if (positionValue == 1)
|
|
{
|
|
overdueTasksCount = _accountContext.Assigns.Include(x => x.Task).Where(x => x.AssignedId == accountId &&
|
|
x.AssignerId == accountId && x.Task.Assigns.Count == 1 &&
|
|
!x.IsCancel && !x.IsCanceledRequest &&
|
|
!x.IsDone && !x.TimeRequest && !x.IsDoneRequest && x.EndTaskDate.Date <= DateTime.Now.Date && x.Task.IsActiveString == "true")
|
|
.GroupBy(x => x.TaskId).Select(x => x.First()).Count();
|
|
|
|
//overdueTasksCount = _accountContext.Tasks.Include(x =>
|
|
// x.Assigns).Count(x => !x.Assigns.Any(a => a.IsCancel) && !x.Assigns.Any(a => a.IsCanceledRequest) &&
|
|
// !x.Assigns.Any(a => a.IsDone) && !x.Assigns.Any(a => a.IsDoneRequest) &&
|
|
// !x.Assigns.Any(a => a.TimeRequest)
|
|
// && x.Assigns.Any(a => a.AssignedId == accountId && a.AssignerId == accountId) &&
|
|
// (x.Assigns.First(a => a.AssignedId == accountId && a.AssignerId == accountId)
|
|
// .EndTaskDate.Date <= DateTime.Now.Date) && x.Assigns.Count == 1);
|
|
}
|
|
else
|
|
{
|
|
|
|
overdueTasksCount = _accountContext.Assigns
|
|
.Include(x => x.Task)
|
|
.Where(x => x.AssignedId == accountId &&
|
|
!x.IsCancel && !x.IsCanceledRequest &&
|
|
!x.IsDone && !x.TimeRequest && !x.IsDoneRequest && x.EndTaskDate.Date <= DateTime.Now.Date && x.Task.IsActiveString == "true")
|
|
.GroupBy(x => x.TaskId).Select(x => x.First()).Count();
|
|
}
|
|
|
|
|
|
//overdueTasksCount = _accountContext.Tasks.Include(x =>
|
|
// x.Assigns).Count(x => !x.Assigns.Any(a => a.IsCancel) && !x.Assigns.Any(a => a.IsCanceledRequest) &&
|
|
// !x.Assigns.Any(a => a.IsDone) && !x.Assigns.Any(a => a.IsDoneRequest) &&
|
|
// !x.Assigns.Any(a => a.TimeRequest)
|
|
// && x.Assigns.Any(a => a.AssignedId == accountId) &&
|
|
// (x.Assigns.First(a => a.AssignedId == accountId).EndTaskDate.Date <= DateTime.Now.Date));
|
|
|
|
|
|
var overdueRequestsCount = _accountContext.Assigns.Include(x => x.Task)
|
|
.Where(x => (x.IsCanceledRequest
|
|
|| x.IsDoneRequest || x.TimeRequest) && !x.IsCancel && !x.IsDone &&
|
|
x.Task.IsActiveString == "true" &&
|
|
x.Task.SenderId == accountId).GroupBy(x => x.TaskId).Select(x => x.First()).Count();
|
|
|
|
return overdueTasksCount + overdueRequestsCount;
|
|
}
|
|
|
|
}
|
|
public class AccountSmsTaskViewModel
|
|
{
|
|
public int TaskCount { get; set; }
|
|
public long AccountId { get; set; }
|
|
public string Mobile { get; set; }
|
|
public string FullName { get; set; }
|
|
} |