添加项目文件。
This commit is contained in:
369
system/Tnb.Systems/System/SmsTemplateService.cs
Normal file
369
system/Tnb.Systems/System/SmsTemplateService.cs
Normal file
@@ -0,0 +1,369 @@
|
||||
using JNPF.Common.Core.Manager;
|
||||
using JNPF.Common.Enums;
|
||||
using JNPF.Common.Filter;
|
||||
using JNPF.Common.Security;
|
||||
using JNPF.DependencyInjection;
|
||||
using JNPF.DynamicApiController;
|
||||
using JNPF.Extras.Thirdparty.Sms;
|
||||
using JNPF.FriendlyException;
|
||||
using JNPF.Systems.Entitys.Dto.SmsTemplate;
|
||||
using JNPF.Systems.Entitys.Dto.SysConfig;
|
||||
using JNPF.Systems.Entitys.Permission;
|
||||
using JNPF.Systems.Entitys.System;
|
||||
using JNPF.Systems.Interfaces.System;
|
||||
using Mapster;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using SqlSugar;
|
||||
|
||||
namespace JNPF.Systems;
|
||||
|
||||
/// <summary>
|
||||
/// base_sms_template服务.
|
||||
/// </summary>
|
||||
[ApiDescriptionSettings(Tag = "System", Name = "SmsTemplate", Order = 200)]
|
||||
[Route("api/system/[controller]")]
|
||||
public class SmsTemplateService : ISmsTemplateService, IDynamicApiController, ITransient
|
||||
{
|
||||
/// <summary>
|
||||
/// 服务基础仓储.
|
||||
/// </summary>
|
||||
private readonly ISqlSugarRepository<SmsTemplateEntity> _repository;
|
||||
|
||||
/// <summary>
|
||||
/// 系统配置服务.
|
||||
/// </summary>
|
||||
private readonly ISysConfigService _sysConfigService;
|
||||
|
||||
/// <summary>
|
||||
/// 用户管理.
|
||||
/// </summary>
|
||||
private readonly IUserManager _userManager;
|
||||
|
||||
/// <summary>
|
||||
/// 初始化一个<see cref="SmsTemplateService"/>类型的新实例.
|
||||
/// </summary>
|
||||
public SmsTemplateService(
|
||||
ISqlSugarRepository<SmsTemplateEntity> repository,
|
||||
ISysConfigService sysConfigService,
|
||||
IUserManager userManager)
|
||||
{
|
||||
_repository = repository;
|
||||
_sysConfigService = sysConfigService;
|
||||
_userManager = userManager;
|
||||
}
|
||||
|
||||
#region Get
|
||||
|
||||
/// <summary>
|
||||
/// 获取base_sms_template列表.
|
||||
/// </summary>
|
||||
/// <param name="input">请求参数.</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("")]
|
||||
public async Task<dynamic> GetList([FromQuery] SmsTemplateListQueryInput input)
|
||||
{
|
||||
var data = await _repository.AsSugarClient().Queryable<SmsTemplateEntity, UserEntity>((a, b) => new JoinQueryInfos(JoinType.Left, a.CreatorUserId == b.Id))
|
||||
.WhereIF(!string.IsNullOrEmpty(input.keyword), a => a.FullName.Contains(input.keyword) || a.TemplateId.Contains(input.keyword))
|
||||
.Where(a => a.DeleteMark == null)
|
||||
.OrderBy(a => a.CreatorTime, OrderByType.Desc).OrderByIF(!string.IsNullOrEmpty(input.keyword), a => a.LastModifyTime, OrderByType.Desc)
|
||||
.Select((a, b) => new SmsTemplateListOutput
|
||||
{
|
||||
id = a.Id,
|
||||
company = SqlFunc.IIF(a.Company == 1, "阿里", "腾讯"),
|
||||
templateId = a.TemplateId,
|
||||
signContent = a.SignContent,
|
||||
enabledMark = a.EnabledMark,
|
||||
fullName = a.FullName,
|
||||
enCode = a.EnCode,
|
||||
creatorTime = a.CreatorTime,
|
||||
lastModifyTime = a.LastModifyTime,
|
||||
creatorUser = SqlFunc.MergeString(b.RealName, "/", b.Account),
|
||||
}).ToPagedListAsync(input.currentPage, input.pageSize);
|
||||
return PageResult<SmsTemplateListOutput>.SqlSugarPageResult(data);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取base_sms_template列表.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet("Selector")]
|
||||
public async Task<dynamic> GetSelector([FromQuery] PageInputBase input)
|
||||
{
|
||||
var data = await _repository.AsSugarClient().Queryable<SmsTemplateEntity, UserEntity>((a, b) => new JoinQueryInfos(JoinType.Left, a.CreatorUserId == b.Id))
|
||||
.WhereIF(!string.IsNullOrEmpty(input.keyword), a => a.FullName.Contains(input.keyword) || a.TemplateId.Contains(input.keyword))
|
||||
.Where(a => a.DeleteMark == null && a.EnabledMark == 1)
|
||||
.OrderBy(a => a.CreatorTime, OrderByType.Desc)
|
||||
.Select((a, b) => new SmsTemplateListOutput
|
||||
{
|
||||
id = a.Id,
|
||||
company = SqlFunc.IIF(a.Company == 1, "阿里", "腾讯"),
|
||||
templateId = a.TemplateId,
|
||||
signContent = a.SignContent,
|
||||
enabledMark = a.EnabledMark,
|
||||
fullName = a.FullName,
|
||||
enCode = a.EnCode,
|
||||
creatorTime = a.CreatorTime,
|
||||
lastModifyTime = a.LastModifyTime,
|
||||
creatorUser = SqlFunc.MergeString(b.RealName, "/", b.Account),
|
||||
}).ToPagedListAsync(input.currentPage, input.pageSize);
|
||||
return PageResult<SmsTemplateListOutput>.SqlSugarPageResult(data);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取base_sms_template.
|
||||
/// </summary>
|
||||
/// <param name="id">参数.</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{id}")]
|
||||
public async Task<dynamic> GetInfo(string id)
|
||||
{
|
||||
return (await _repository.GetFirstAsync(p => p.Id == id && p.DeleteMark == null)).Adapt<SmsTemplateInfoOutput>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取模板字段.
|
||||
/// </summary>
|
||||
/// <param name="id">主键值.</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("getTemplate/{id}")]
|
||||
public async Task<dynamic> GetTemplate(string id)
|
||||
{
|
||||
var sysconfig = await _sysConfigService.GetInfo();
|
||||
var entity = await _repository.GetFirstAsync(x => x.Id == id && x.DeleteMark == null);
|
||||
var smsModel = new SmsParameterInfo()
|
||||
{
|
||||
keyId = entity.Company == 1 ? sysconfig.aliAccessKey : sysconfig.tencentSecretId,
|
||||
keySecret = entity.Company == 1 ? sysconfig.aliSecret : sysconfig.tencentSecretKey,
|
||||
domain = entity.Endpoint,
|
||||
templateId = entity.TemplateId,
|
||||
region = entity.Region,
|
||||
};
|
||||
|
||||
try
|
||||
{
|
||||
if (entity.Company == 1)
|
||||
return SmsUtil.GetTemplateByAli(smsModel);
|
||||
else
|
||||
return SmsUtil.GetTemplateByTencent(smsModel);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw Oops.Oh(ErrorCode.D7004);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Post
|
||||
|
||||
/// <summary>
|
||||
/// 新建base_sms_template.
|
||||
/// </summary>
|
||||
/// <param name="input">参数.</param>
|
||||
/// <returns></returns>
|
||||
[HttpPost("")]
|
||||
public async Task Create([FromBody] SmsTemplateCrInput input)
|
||||
{
|
||||
if (await _repository.IsAnyAsync(x => x.EnCode == input.enCode && x.DeleteMark == null))
|
||||
throw Oops.Oh(ErrorCode.COM1004);
|
||||
var entity = input.Adapt<SmsTemplateEntity>();
|
||||
var isOk = await _repository.AsInsertable(entity).IgnoreColumns(ignoreNullColumn: true).CallEntityMethod(m => m.Creator()).ExecuteCommandAsync();
|
||||
if (!(isOk > 0)) throw Oops.Oh(ErrorCode.COM1000);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新base_sms_template.
|
||||
/// </summary>
|
||||
/// <param name="id">主键.</param>
|
||||
/// <param name="input">参数.</param>
|
||||
/// <returns></returns>
|
||||
[HttpPut("{id}")]
|
||||
public async Task Update(string id, [FromBody] SmsTemplateUpInput input)
|
||||
{
|
||||
if (await _repository.IsAnyAsync(x => x.Id != id && x.EnCode == input.enCode && x.DeleteMark == null))
|
||||
throw Oops.Oh(ErrorCode.COM1004);
|
||||
var entity = input.Adapt<SmsTemplateEntity>();
|
||||
var isOk = await _repository.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).CallEntityMethod(m => m.LastModify()).ExecuteCommandHasChangeAsync();
|
||||
if (!isOk) throw Oops.Oh(ErrorCode.COM1001);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除base_sms_template.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpDelete("{id}")]
|
||||
public async Task Delete(string id)
|
||||
{
|
||||
var entity = await _repository.GetFirstAsync(p => p.Id.Equals(id));
|
||||
_ = entity ?? throw Oops.Oh(ErrorCode.COM1005);
|
||||
var isOk = await _repository.AsUpdateable(entity).CallEntityMethod(m => m.Delete()).UpdateColumns(it => new { it.DeleteMark, it.DeleteTime, it.DeleteUserId }).ExecuteCommandHasChangeAsync();
|
||||
if (!isOk)
|
||||
throw Oops.Oh(ErrorCode.COM1002);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 修改单据规则状态.
|
||||
/// </summary>
|
||||
/// <param name="id">主键值.</param>
|
||||
/// <returns></returns>
|
||||
[HttpPut("{id}/Actions/State")]
|
||||
public async Task ActionsState_Api(string id)
|
||||
{
|
||||
var isOk = await _repository.AsUpdateable().SetColumns(it => new SmsTemplateEntity()
|
||||
{
|
||||
EnabledMark = SqlFunc.IIF(it.EnabledMark == 1, 0, 1),
|
||||
LastModifyUserId = _userManager.UserId,
|
||||
LastModifyTime = SqlFunc.GetDate()
|
||||
}).Where(it => it.Id.Equals(id)).ExecuteCommandHasChangeAsync();
|
||||
if (!isOk)
|
||||
throw Oops.Oh(ErrorCode.COM1003);
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取模板字段.
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost("getTemplate")]
|
||||
public async Task<dynamic> GetTemplate([FromBody] SmsTemplateCrInput input)
|
||||
{
|
||||
var sysconfig = await _sysConfigService.GetInfo();
|
||||
var smsModel = new SmsParameterInfo()
|
||||
{
|
||||
keyId = input.company == 1 ? sysconfig.aliAccessKey : sysconfig.tencentSecretId,
|
||||
keySecret = input.company == 1 ? sysconfig.aliSecret : sysconfig.tencentSecretKey,
|
||||
domain = input.endpoint,
|
||||
templateId = input.templateId,
|
||||
region = input.region,
|
||||
};
|
||||
try
|
||||
{
|
||||
if (input.company == 1)
|
||||
return SmsUtil.GetTemplateByAli(smsModel);
|
||||
else
|
||||
return SmsUtil.GetTemplateByTencent(smsModel);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw Oops.Oh(ErrorCode.D7004);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 测试发送.
|
||||
/// </summary>
|
||||
/// <param name="input">请求参数.</param>
|
||||
/// <returns></returns>
|
||||
[HttpPost("testSent")]
|
||||
public async Task SendTest([FromBody] SmsTemplateSendTestInput input)
|
||||
{
|
||||
var sysconfig = await _sysConfigService.GetInfo();
|
||||
var smsModel = new SmsParameterInfo()
|
||||
{
|
||||
keyId = input.company == 1 ? sysconfig.aliAccessKey : sysconfig.tencentSecretId,
|
||||
keySecret = input.company == 1 ? sysconfig.aliSecret : sysconfig.tencentSecretKey,
|
||||
region = input.region,
|
||||
domain = input.endpoint,
|
||||
templateId = input.templateId,
|
||||
signName = input.signContent
|
||||
};
|
||||
var msg = string.Empty;
|
||||
if (input.company == 1)
|
||||
{
|
||||
smsModel.mobileAli = input.phoneNumbers;
|
||||
smsModel.templateParamAli = input.parameters.ToJsonString();
|
||||
msg = SmsUtil.SendSmsByAli(smsModel);
|
||||
}
|
||||
else
|
||||
{
|
||||
smsModel.mobileTx = new string[] { input.phoneNumbers };
|
||||
List<string> mList = new List<string>();
|
||||
foreach (string data in input.parameters.Values)
|
||||
{
|
||||
mList.Add(data);
|
||||
}
|
||||
smsModel.appId = sysconfig.tencentAppId;
|
||||
smsModel.templateParamTx = mList.ToArray();
|
||||
msg = SmsUtil.SendSmsByTencent(smsModel);
|
||||
}
|
||||
|
||||
if (msg.Equals("短信发送失败"))
|
||||
throw Oops.Oh(ErrorCode.D7005);
|
||||
}
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// 获取短信模板字段.
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
[NonAction]
|
||||
public async Task<List<string>> GetSmsTemplateFields(string id)
|
||||
{
|
||||
var entity = await _repository.GetFirstAsync(x => x.Id == id && x.DeleteMark == null);
|
||||
var sysconfig = await _sysConfigService.GetInfo();
|
||||
var smsModel = new SmsParameterInfo()
|
||||
{
|
||||
keyId = entity.Company == 1 ? sysconfig.aliAccessKey : sysconfig.tencentSecretId,
|
||||
keySecret = entity.Company == 1 ? sysconfig.aliSecret : sysconfig.tencentSecretKey,
|
||||
region = entity.Region,
|
||||
domain = entity.Endpoint,
|
||||
templateId = entity.TemplateId
|
||||
};
|
||||
try
|
||||
{
|
||||
if (entity.Company == 1)
|
||||
return SmsUtil.GetTemplateByAli(smsModel);
|
||||
else
|
||||
return SmsUtil.GetTemplateByTencent(smsModel);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw Oops.Oh(ErrorCode.D7004);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 工作流发送短信.
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="sysconfig"></param>
|
||||
/// <param name="phoneNumbers"></param>
|
||||
/// <param name="parameters"></param>
|
||||
/// <returns></returns>
|
||||
[NonAction]
|
||||
public async Task FlowTaskSend(string id, SysConfigOutput sysconfig, List<string> phoneNumbers, Dictionary<string, string> parameters)
|
||||
{
|
||||
var entity = await _repository.GetFirstAsync(x => x.Id == id && x.DeleteMark == null);
|
||||
var smsModel = new SmsParameterInfo()
|
||||
{
|
||||
keyId = entity.Company == 1 ? sysconfig.aliAccessKey : sysconfig.tencentSecretId,
|
||||
keySecret = entity.Company == 1 ? sysconfig.aliSecret : sysconfig.tencentSecretKey,
|
||||
region = entity.Region,
|
||||
domain = entity.Endpoint,
|
||||
templateId = entity.TemplateId,
|
||||
signName = entity.SignContent
|
||||
};
|
||||
if (entity.Company == 1)
|
||||
{
|
||||
smsModel.mobileAli = string.Join(",", phoneNumbers);
|
||||
smsModel.templateParamAli = parameters.ToJsonString();
|
||||
SmsUtil.SendSmsByAli(smsModel);
|
||||
}
|
||||
else
|
||||
{
|
||||
smsModel.mobileTx = phoneNumbers.ToArray();
|
||||
List<string> mList = new List<string>();
|
||||
var fields = await GetSmsTemplateFields(id);
|
||||
foreach (string item in fields)
|
||||
{
|
||||
if (parameters.ContainsKey(item))
|
||||
mList.Add(parameters[item]);
|
||||
}
|
||||
|
||||
smsModel.templateParamTx = mList.ToArray();
|
||||
SmsUtil.SendSmsByTencent(smsModel);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user