短信模板测试短信,检测模板状态与渠道状态,同时为开启时发送短信,否则只记录短信

This commit is contained in:
yjb 2022-06-25 10:53:15 +08:00
parent 3351ebbbb4
commit ee2c731d25

View File

@ -11,6 +11,7 @@ import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory;
import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult;
import cn.iocoder.yudao.framework.sms.core.client.dto.SmsReceiveRespDTO;
import cn.iocoder.yudao.framework.sms.core.client.dto.SmsSendRespDTO;
import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO;
import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage;
@ -40,7 +41,8 @@ public class SmsSendServiceImpl implements SmsSendService {
private AdminUserService adminUserService;
@Resource
private MemberService memberService;
@Resource
private SmsChannelService smsChannelService;
@Resource
private SmsTemplateService smsTemplateService;
@Resource
@ -80,13 +82,18 @@ public class SmsSendServiceImpl implements SmsSendService {
String templateCode, Map<String, Object> templateParams) {
// 校验短信模板是否合法
SmsTemplateDO template = this.checkSmsTemplateValid(templateCode);
// 校验短信渠道是否合法
SmsChannelDO smsChannel = this.checkSmsChannelValid(template.getChannelId());
// 校验手机号码是否存在
mobile = this.checkMobile(mobile);
// 构建有序的模板参数为什么放在这个位置是提前保证模板参数的正确性而不是到了插入发送日志
List<KeyValue<String, Object>> newTemplateParams = this.buildTemplateParams(template, templateParams);
// 创建发送日志如果模板被禁用则不发送短信只记录日志
Boolean isSend = CommonStatusEnum.ENABLE.getStatus().equals(template.getStatus());
Boolean isSend = CommonStatusEnum.ENABLE.getStatus().equals(template.getStatus())
&& CommonStatusEnum.ENABLE.getStatus().equals(smsChannel.getStatus());
;
String content = smsTemplateService.formatSmsTemplateContent(template.getContent(), templateParams);
Long sendLogId = smsLogService.createSmsLog(mobile, userId, userType, isSend, template, content, templateParams);
@ -98,6 +105,16 @@ public class SmsSendServiceImpl implements SmsSendService {
return sendLogId;
}
@VisibleForTesting
public SmsChannelDO checkSmsChannelValid(Long channelId) {
// 获得短信模板考虑到效率从缓存中获取
SmsChannelDO channelDO = smsChannelService.getSmsChannel(channelId);
// 短信模板不存在
if (channelDO == null) {
throw exception(SMS_SEND_TEMPLATE_NOT_EXISTS);
}
return channelDO;
}
@VisibleForTesting
public SmsTemplateDO checkSmsTemplateValid(String templateCode) {
@ -112,10 +129,10 @@ public class SmsSendServiceImpl implements SmsSendService {
/**
* 将参数模板处理成有序的 KeyValue 数组
*
* <p>
* 原因是部分短信平台并不是使用 key 作为参数而是数组下标例如说腾讯云 https://cloud.tencent.com/document/product/382/39023
*
* @param template 短信模板
* @param template 短信模板
* @param templateParams 原始参数
* @return 处理后的参数
*/