using Cronos;
using Shentun.Sms.Enums;
using Shentun.Sms.SmsSends;
using Shentun.Sms.SmsTasks;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories;
using Volo.Abp;
using Microsoft.Extensions.Configuration;
using Shentun.Sms.Service.Sms;
using Volo.Abp.Caching;
using Microsoft.Extensions.Logging;
namespace Shentun.Sms.Jobs
{
///
/// 扫描短信发送记录,发送短信
///
[RemoteService(false)]
public class SmsSendJob : ApplicationService, ISmsSendJob
{
//private readonly IServiceProvider _service;
private readonly IRepository _smsSendRepository;
private readonly IRepository _smsTaskRepository;
private readonly SmsSendManager _smsSendManager;
private readonly IConfiguration _configuration;
private readonly SmsFactory _smsFactory;
private readonly ILogger _logger;
public SmsSendJob(
SmsSendManager smsSendManager,
IRepository smsSendRepository,
IConfiguration configuration,
IRepository smsTaskRepository,
ILogger logger,
SmsFactory smsFactory)
{
_smsSendManager = smsSendManager;
_smsSendRepository = smsSendRepository;
_configuration = configuration;
_smsTaskRepository = smsTaskRepository;
_logger = logger;
_smsFactory = smsFactory;
}
public async Task DoWork()
{
try
{
var smsSendQuery = from a in await _smsSendRepository.GetQueryableAsync()
join b in await _smsTaskRepository.GetQueryableAsync() on a.SmsTaskId equals b.Id
where a.IsComplete == 'N' && a.IsActive == 'Y' && a.PlanSendTime < DateTime.Now
select new
{
a,
CountryCode = b.CountryCode,
Content = b.Content
};
List smsSendUpdateList = new List();
foreach (var item in smsSendQuery.ToList())
{
string CountryCode = item.CountryCode;
string Content = item.Content;
SmsSendAsync(item.a, CountryCode, Content);
smsSendUpdateList.Add(item.a);
}
await _smsSendRepository.UpdateManyAsync(smsSendUpdateList);
_logger.LogInformation($"------扫描处理了【{smsSendUpdateList.Count}】条SmsSend记录------当前时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
}
catch (Exception ex)
{
_logger.LogInformation(ex.ToString());
}
}
///
/// 发送短信
///
///
///
public void SmsSendAsync(SmsSend smsSend, string CountryCode, string Content)
{
if (!string.IsNullOrEmpty(CountryCode) && !string.IsNullOrEmpty(smsSend.MobileTelephone))
{
SmsBase smsBase = _smsFactory.CreateSms();
string[] phoneNumber = { $"+{CountryCode}{smsSend.MobileTelephone}" };
string[] templateParam = Content.Trim('|').Split("|", StringSplitOptions.RemoveEmptyEntries);
smsBase.Send(phoneNumber, templateParam);
}
smsSend.IsActive = 'N';
smsSend.IsComplete = 'Y';
}
}
}