!205 短信发送时,新增短信渠道的状态校验

Merge pull request !205 from muyi/login
This commit is contained in:
芋道源码 2022-06-30 05:34:54 +00:00 committed by Gitee
commit 33d094697d
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
2 changed files with 23 additions and 6 deletions

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

View File

@ -77,7 +77,7 @@
<el-input v-model="form.remark" placeholder="请输入备注" /> <el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item> </el-form-item>
<el-form-item label="存储器" prop="storage"> <el-form-item label="存储器" prop="storage">
<el-select v-model="form.storage" placeholder="请选择存储器" :disabled="form.id"> <el-select v-model="form.storage" placeholder="请选择存储器" :disabled="form.id !== undefined">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.INFRA_FILE_STORAGE)" <el-option v-for="dict in this.getDictDatas(DICT_TYPE.INFRA_FILE_STORAGE)"
:key="dict.value" :label="dict.label" :value="parseInt(dict.value)" /> :key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
</el-select> </el-select>
@ -91,7 +91,7 @@
<el-input v-model="form.config.host" placeholder="请输入主机地址" /> <el-input v-model="form.config.host" placeholder="请输入主机地址" />
</el-form-item> </el-form-item>
<el-form-item v-if="form.storage >= 11 && form.storage <= 12" label="主机端口" prop="config.port"> <el-form-item v-if="form.storage >= 11 && form.storage <= 12" label="主机端口" prop="config.port">
<el-input-number min="0" v-model="form.config.port" placeholder="请输入主机端口" /> <el-input-number :min="0" v-model="form.config.port" placeholder="请输入主机端口" />
</el-form-item> </el-form-item>
<el-form-item v-if="form.storage >= 11 && form.storage <= 12" label="用户名" prop="config.username"> <el-form-item v-if="form.storage >= 11 && form.storage <= 12" label="用户名" prop="config.username">
<el-input v-model="form.config.username" placeholder="请输入密码" /> <el-input v-model="form.config.username" placeholder="请输入密码" />