Browse Source

危急值短信

master
wxd 1 year ago
parent
commit
a138b2d1d1
  1. 90
      src/Shentun.Sms.Application.Contracts/SmsTasks/CreateThirdPartySmsTaskInputDto.cs
  2. 13
      src/Shentun.Sms.Application/Jobs/SmsSendJob.cs
  3. 46
      src/Shentun.Sms.Application/Jobs/SmsTaskJob.cs
  4. 63
      src/Shentun.Sms.Application/SmsTasks/SmsTaskAppService.cs
  5. 2
      src/Shentun.Sms.DbMigrator/appsettings.json
  6. 2
      src/Shentun.Sms.Domain/SmsTasks/SmsTask.cs
  7. 6
      src/Shentun.Sms.Domain/SmsTypes/SmsType.cs
  8. 2226
      src/Shentun.Sms.EntityFrameworkCore/Migrations/20240924021839_update_sms_type_template_id.Designer.cs
  9. 26
      src/Shentun.Sms.EntityFrameworkCore/Migrations/20240924021839_update_sms_type_template_id.cs
  10. 5
      src/Shentun.Sms.EntityFrameworkCore/Migrations/SmsDbContextModelSnapshot.cs

90
src/Shentun.Sms.Application.Contracts/SmsTasks/CreateThirdPartySmsTaskInputDto.cs

@ -0,0 +1,90 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.Sms.SmsTasks
{
public class CreateThirdPartySmsTaskInputDto
{
/// <summary>
/// 短信类别ID
/// </summary>
public Guid SmsTypeId { get; set; }
/// <summary>
/// 人员ID
/// </summary>
public string PersonId { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string PersonName { get; set; }
/// <summary>
/// 手机号国家代码
/// </summary>
public string CountryCode { get; set; }
/// <summary>
/// 手机号
/// </summary>
public string MobileTelephone { get; set; }
/// <summary>
/// 短信内容
/// </summary>
public string Content { get; set; }
/// <summary>
/// 应用ID
/// </summary>
public Guid SmsAppId { get; set; }
/// <summary>
/// 第三方系统唯一ID
/// </summary>
public string? ThirdId { get; set; }
/// <summary>
/// 任务周期类别
/// </summary>
public char TaskCycleType { get; set; }
/// <summary>
/// 任务表达式
/// </summary>
public string? TaskCorn { get; set; }
/// <summary>
/// 停止执行时间
/// </summary>
public string? StopTime { get; set; }
/// <summary>
/// 发送者用户ID
/// </summary>
public string? SenderId { get; set; }
/// <summary>
/// 发送者用户名
/// </summary>
public string? SenderName { get; set; }
/// <summary>
/// 计划发送时间集合
/// </summary>
public List<string> PlanSendTimes { get; set; }
}
}

13
src/Shentun.Sms.Application/Jobs/SmsSendJob.cs

@ -14,6 +14,7 @@ using Microsoft.Extensions.Configuration;
using Shentun.Sms.Service.Sms;
using Volo.Abp.Caching;
using Microsoft.Extensions.Logging;
using Shentun.Sms.SmsTypes;
namespace Shentun.Sms.Jobs
{
@ -31,6 +32,7 @@ namespace Shentun.Sms.Jobs
private readonly SmsSendManager _smsSendManager;
private readonly IConfiguration _configuration;
private readonly SmsFactory _smsFactory;
private readonly IRepository<SmsType, Guid> _smsTypeRepository;
private readonly ILogger<SmsSendJob> _logger;
public SmsSendJob(
@ -39,7 +41,8 @@ namespace Shentun.Sms.Jobs
IConfiguration configuration,
IRepository<SmsTask, Guid> smsTaskRepository,
ILogger<SmsSendJob> logger,
SmsFactory smsFactory)
SmsFactory smsFactory,
IRepository<SmsType, Guid> smsTypeRepository)
{
_smsSendManager = smsSendManager;
_smsSendRepository = smsSendRepository;
@ -47,6 +50,7 @@ namespace Shentun.Sms.Jobs
_smsTaskRepository = smsTaskRepository;
_logger = logger;
_smsFactory = smsFactory;
_smsTypeRepository = smsTypeRepository;
}
public async Task DoWork()
@ -55,12 +59,15 @@ namespace Shentun.Sms.Jobs
{
var smsSendQuery = from a in await _smsSendRepository.GetQueryableAsync()
join b in await _smsTaskRepository.GetQueryableAsync() on a.SmsTaskId equals b.Id
join smsType in await _smsTypeRepository.GetQueryableAsync() on b.SmsTypeId equals smsType.Id into smsTypeTemp
from smsTypeEmpty in smsTypeTemp.DefaultIfEmpty()
where a.IsComplete == 'N' && a.IsActive == 'Y' && a.PlanSendTime < DateTime.Now
select new
{
a,
CountryCode = b.CountryCode,
Content = b.Content
Content = b.Content,
TemplateId = smsTypeEmpty == null ? "" : smsTypeEmpty.TemplateId
};
@ -70,7 +77,7 @@ namespace Shentun.Sms.Jobs
{
string CountryCode = item.CountryCode;
string Content = item.Content;
_smsSendManager.SmsSendAsync(item.a, CountryCode, Content, "");
_smsSendManager.SmsSendAsync(item.a, CountryCode, Content, item.TemplateId);
smsSendUpdateList.Add(item.a);
}

46
src/Shentun.Sms.Application/Jobs/SmsTaskJob.cs

@ -58,7 +58,7 @@ namespace Shentun.Sms.Jobs
{
try
{
_logger.LogInformation("测试");
//_logger.LogInformation("测试");
var smsTaskList = (from a in await _smsTaskRepository.GetQueryableAsync()
join b in await _smsSendRepository.GetQueryableAsync() on a.Id equals b.SmsTaskId into bb
from ab in bb.DefaultIfEmpty()
@ -144,31 +144,31 @@ namespace Shentun.Sms.Jobs
var schedule = CronExpression.Parse(taskCorn, CronFormat.IncludeSeconds);
var occurrences = schedule.GetOccurrences(DateTime.UtcNow, smsTask.StopTime.Value.ToUniversalTime()); //获取截止时间前所有的计划时间
if (occurrences.Count() < 10)
//if (occurrences.Count() < 10)
//{
foreach (var occurrence in occurrences)
{
foreach (var occurrence in occurrences)
var smsSendEntity = new SmsSend
{
var smsSendEntity = new SmsSend
{
Content = smsTask.Content,
IsActive = 'Y',
IsComplete = 'N',
SmsInterfaceId = SmsInterfaceId,
SmsTaskId = smsTask.Id,
MobileTelephone = smsTask.MobileTelephone,
PlanSendTime = occurrence
};
_smsSendManager.CreateAsync(smsSendEntity);
smsSendList.Add(smsSendEntity);
}
}
else
{
_logger.LogInformation($"------Id为【{smsTask.Id}】的SmsTask记录,Corn表达式记录超出10条,已跳过------当前时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
Content = smsTask.Content,
IsActive = 'Y',
IsComplete = 'N',
SmsInterfaceId = SmsInterfaceId,
SmsTaskId = smsTask.Id,
MobileTelephone = smsTask.MobileTelephone,
PlanSendTime = occurrence
};
_smsSendManager.CreateAsync(smsSendEntity);
smsSendList.Add(smsSendEntity);
}
//}
//else
//{
// _logger.LogInformation($"------Id为【{smsTask.Id}】的SmsTask记录,Corn表达式记录超出10条,已跳过------当前时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
//}
}
catch (Exception ex)
{

63
src/Shentun.Sms.Application/SmsTasks/SmsTaskAppService.cs

@ -270,5 +270,68 @@ namespace Shentun.Sms.SmsTasks
DataHelper.CheckEntityIsNull(input, "", "参数有误");
await _smsTaskManager.CheckIsDeleteAsync(input.Id);
}
/// <summary>
/// 创建第三方短信任务 危急值 非corn表达式形式
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task CreateThirdPartySmsTaskAsync(CreateThirdPartySmsTaskInputDto input)
{
DataHelper.CheckEntityIsNull(input, "", "参数有误");
//创建时,默认启用,扫描生成短信发送记录后,禁用
var smsTaskEntity = new SmsTask
{
Content = input.Content,
CountryCode = input.CountryCode,
IsActive = 'N',
MobileTelephone = input.MobileTelephone,
PersonId = input.PersonId,
PersonName = input.PersonName,
SenderId = input.SenderId,
SenderName = input.SenderName,
SmsAppId = input.SmsAppId,
SmsTypeId = input.SmsTypeId,
StopTime = !string.IsNullOrWhiteSpace(input.StopTime) ? DateTime.Parse(input.StopTime) : null,
TaskCorn = input.TaskCorn,
TaskCycleType = input.TaskCycleType,
ThirdId = input.ThirdId
};
smsTaskEntity = await _smsTaskManager.CreateAsync(smsTaskEntity);
List<SmsSend> smsSendList = new List<SmsSend>();
if (input.PlanSendTimes.Any())
{
string SmsInterfaceId = _configuration.GetValue<string>("Sms:SmsInterfaceId");
foreach (var item in input.PlanSendTimes)
{
var smsSendEntity = new SmsSend
{
Content = smsTaskEntity.Content,
IsActive = 'Y',
IsComplete = 'N',
MobileTelephone = smsTaskEntity.MobileTelephone,
PlanSendTime = Convert.ToDateTime(item),
SmsInterfaceId = SmsInterfaceId,
SmsTaskId = smsTaskEntity.Id
};
smsSendEntity = _smsSendManager.CreateAsync(smsSendEntity);
smsSendList.Add(smsSendEntity);
}
}
await _smsTaskRepository.InsertAsync(smsTaskEntity);
await _smsSendRepository.InsertManyAsync(smsSendList);
}
}
}

2
src/Shentun.Sms.DbMigrator/appsettings.json

@ -1,6 +1,6 @@
{
"ConnectionStrings": {
"Default": "Host=62.156.10.86;Port=5432;Database=ShentunSms;User ID=postgres;Password=st123;"
"Default": "Host=192.168.2.181;Port=5432;Database=ShentunSms;User ID=postgres;Password=st123;"
},
"OpenIddict": {
"Applications": {

2
src/Shentun.Sms.Domain/SmsTasks/SmsTask.cs

@ -84,7 +84,7 @@ namespace Shentun.Sms.SmsTasks
/// <summary>
/// 任务周期类别 0-及时发送 1-根据Cron表达式
/// 任务周期类别 0-及时发送 1-根据Cron表达式 2-第三方任务计划
/// </summary>
[Column("task_cycle_type")]
public char TaskCycleType { get; set; }

6
src/Shentun.Sms.Domain/SmsTypes/SmsType.cs

@ -40,6 +40,12 @@ namespace Shentun.Sms.SmsTypes
[StringLength(50)]
public string SimpleCode { get; set; }
/// <summary>
/// 模板ID
/// </summary>
[Column("template_id")]
[StringLength(50)]
public string TemplateId { get; set; }
/// <summary>
/// 排序

2226
src/Shentun.Sms.EntityFrameworkCore/Migrations/20240924021839_update_sms_type_template_id.Designer.cs
File diff suppressed because it is too large
View File

26
src/Shentun.Sms.EntityFrameworkCore/Migrations/20240924021839_update_sms_type_template_id.cs

@ -0,0 +1,26 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Shentun.Sms.Migrations
{
public partial class update_sms_type_template_id : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "template_id",
table: "sms_type",
type: "character varying(50)",
maxLength: 50,
nullable: true);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "template_id",
table: "sms_type");
}
}
}

5
src/Shentun.Sms.EntityFrameworkCore/Migrations/SmsDbContextModelSnapshot.cs

@ -422,6 +422,11 @@ namespace Shentun.Sms.Migrations
.HasColumnName("simple_code")
.HasComment("简码");
b.Property<string>("TemplateId")
.HasMaxLength(50)
.HasColumnType("character varying(50)")
.HasColumnName("template_id");
b.HasKey("Id")
.HasName("pk_sms_type");

Loading…
Cancel
Save