Commit 33d094697d545516c0192e0cc358b0e693faaf3d

Authored by 芋道源码
Committed by Gitee
2 parents 569242d8 45083c89

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

Merge pull request !205 from muyi/login
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImpl.java
... ... @@ -11,6 +11,7 @@ import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory;
11 11 import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult;
12 12 import cn.iocoder.yudao.framework.sms.core.client.dto.SmsReceiveRespDTO;
13 13 import cn.iocoder.yudao.framework.sms.core.client.dto.SmsSendRespDTO;
  14 +import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO;
14 15 import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO;
15 16 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
16 17 import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage;
... ... @@ -40,7 +41,8 @@ public class SmsSendServiceImpl implements SmsSendService {
40 41 private AdminUserService adminUserService;
41 42 @Resource
42 43 private MemberService memberService;
43   -
  44 + @Resource
  45 + private SmsChannelService smsChannelService;
44 46 @Resource
45 47 private SmsTemplateService smsTemplateService;
46 48 @Resource
... ... @@ -80,13 +82,18 @@ public class SmsSendServiceImpl implements SmsSendService {
80 82 String templateCode, Map<String, Object> templateParams) {
81 83 // 校验短信模板是否合法
82 84 SmsTemplateDO template = this.checkSmsTemplateValid(templateCode);
  85 + // 校验短信渠道是否合法
  86 + SmsChannelDO smsChannel = this.checkSmsChannelValid(template.getChannelId());
  87 +
83 88 // 校验手机号码是否存在
84 89 mobile = this.checkMobile(mobile);
85 90 // 构建有序的模板参数。为什么放在这个位置,是提前保证模板参数的正确性,而不是到了插入发送日志
86 91 List<KeyValue<String, Object>> newTemplateParams = this.buildTemplateParams(template, templateParams);
87 92  
88 93 // 创建发送日志。如果模板被禁用,则不发送短信,只记录日志
89   - Boolean isSend = CommonStatusEnum.ENABLE.getStatus().equals(template.getStatus());
  94 + Boolean isSend = CommonStatusEnum.ENABLE.getStatus().equals(template.getStatus())
  95 + && CommonStatusEnum.ENABLE.getStatus().equals(smsChannel.getStatus());
  96 + ;
90 97 String content = smsTemplateService.formatSmsTemplateContent(template.getContent(), templateParams);
91 98 Long sendLogId = smsLogService.createSmsLog(mobile, userId, userType, isSend, template, content, templateParams);
92 99  
... ... @@ -98,6 +105,16 @@ public class SmsSendServiceImpl implements SmsSendService {
98 105 return sendLogId;
99 106 }
100 107  
  108 + @VisibleForTesting
  109 + public SmsChannelDO checkSmsChannelValid(Long channelId) {
  110 + // 获得短信模板。考虑到效率,从缓存中获取
  111 + SmsChannelDO channelDO = smsChannelService.getSmsChannel(channelId);
  112 + // 短信模板不存在
  113 + if (channelDO == null) {
  114 + throw exception(SMS_SEND_TEMPLATE_NOT_EXISTS);
  115 + }
  116 + return channelDO;
  117 + }
101 118  
102 119 @VisibleForTesting
103 120 public SmsTemplateDO checkSmsTemplateValid(String templateCode) {
... ... @@ -112,10 +129,10 @@ public class SmsSendServiceImpl implements SmsSendService {
112 129  
113 130 /**
114 131 * 将参数模板,处理成有序的 KeyValue 数组
115   - *
  132 + * <p>
116 133 * 原因是,部分短信平台并不是使用 key 作为参数,而是数组下标,例如说腾讯云 https://cloud.tencent.com/document/product/382/39023
117 134 *
118   - * @param template 短信模板
  135 + * @param template 短信模板
119 136 * @param templateParams 原始参数
120 137 * @return 处理后的参数
121 138 */
... ...
yudao-ui-admin/src/views/infra/fileConfig/index.vue
... ... @@ -77,7 +77,7 @@
77 77 <el-input v-model="form.remark" placeholder="请输入备注" />
78 78 </el-form-item>
79 79 <el-form-item label="存储器" prop="storage">
80   - <el-select v-model="form.storage" placeholder="请选择存储器" :disabled="form.id">
  80 + <el-select v-model="form.storage" placeholder="请选择存储器" :disabled="form.id !== undefined">
81 81 <el-option v-for="dict in this.getDictDatas(DICT_TYPE.INFRA_FILE_STORAGE)"
82 82 :key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
83 83 </el-select>
... ... @@ -91,7 +91,7 @@
91 91 <el-input v-model="form.config.host" placeholder="请输入主机地址" />
92 92 </el-form-item>
93 93 <el-form-item v-if="form.storage >= 11 && form.storage <= 12" label="主机端口" prop="config.port">
94   - <el-input-number min="0" v-model="form.config.port" placeholder="请输入主机端口" />
  94 + <el-input-number :min="0" v-model="form.config.port" placeholder="请输入主机端口" />
95 95 </el-form-item>
96 96 <el-form-item v-if="form.storage >= 11 && form.storage <= 12" label="用户名" prop="config.username">
97 97 <el-input v-model="form.config.username" placeholder="请输入密码" />
... ...