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'; } } }