Commit 4af840a21b0c340fe5ddde536686ba42b089fbc6
1 parent
e5be8978
fix: [DEFECT-905] sms config error throw exception
Showing
2 changed files
with
59 additions
and
44 deletions
@@ -85,6 +85,7 @@ public enum ErrorMessage { | @@ -85,6 +85,7 @@ public enum ErrorMessage { | ||
85 | PROJECT_USED_SCRIPT(400061,"产品【%s】正在使用待删除的解析脚本"), | 85 | PROJECT_USED_SCRIPT(400061,"产品【%s】正在使用待删除的解析脚本"), |
86 | RULE_CHAIN_NOT_ENABLE(400062,"规则链不是有效的!"), | 86 | RULE_CHAIN_NOT_ENABLE(400062,"规则链不是有效的!"), |
87 | DUPLICATE_IDENTIFIERS_EXIST(400063,"存在重复的功能标识符。"), | 87 | DUPLICATE_IDENTIFIERS_EXIST(400063,"存在重复的功能标识符。"), |
88 | + SMS_CONFIG_ERROR(400064,"短信配置错误。"), | ||
88 | HAVE_NO_PERMISSION(500002,"没有修改权限"); | 89 | HAVE_NO_PERMISSION(500002,"没有修改权限"); |
89 | private final int code; | 90 | private final int code; |
90 | private String message; | 91 | private String message; |
1 | package org.thingsboard.server.dao.yunteng.impl; | 1 | package org.thingsboard.server.dao.yunteng.impl; |
2 | 2 | ||
3 | - | ||
4 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
5 | import com.fasterxml.jackson.databind.JsonNode; | 4 | import com.fasterxml.jackson.databind.JsonNode; |
6 | import com.fasterxml.jackson.databind.node.ObjectNode; | 5 | import com.fasterxml.jackson.databind.node.ObjectNode; |
@@ -19,10 +18,7 @@ import org.thingsboard.server.common.data.yunteng.core.exception.YtDataValidatio | @@ -19,10 +18,7 @@ import org.thingsboard.server.common.data.yunteng.core.exception.YtDataValidatio | ||
19 | import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage; | 18 | import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage; |
20 | import org.thingsboard.server.common.data.yunteng.dto.request.CodeTTL; | 19 | import org.thingsboard.server.common.data.yunteng.dto.request.CodeTTL; |
21 | import org.thingsboard.server.common.data.yunteng.dto.request.SmsReqDTO; | 20 | import org.thingsboard.server.common.data.yunteng.dto.request.SmsReqDTO; |
22 | -import org.thingsboard.server.common.data.yunteng.enums.AssetStatusEnum; | ||
23 | -import org.thingsboard.server.common.data.yunteng.enums.MessageTypeEnum; | ||
24 | -import org.thingsboard.server.common.data.yunteng.enums.MsgTemplatePurposeEnum; | ||
25 | -import org.thingsboard.server.common.data.yunteng.enums.ResponseCodeEnum; | 21 | +import org.thingsboard.server.common.data.yunteng.enums.*; |
26 | import org.thingsboard.server.dao.yunteng.entities.TkMessageConfigEntity; | 22 | import org.thingsboard.server.dao.yunteng.entities.TkMessageConfigEntity; |
27 | import org.thingsboard.server.dao.yunteng.entities.TkMessageTemplateEntity; | 23 | import org.thingsboard.server.dao.yunteng.entities.TkMessageTemplateEntity; |
28 | import org.thingsboard.server.dao.yunteng.entities.TkSmsLogEntity; | 24 | import org.thingsboard.server.dao.yunteng.entities.TkSmsLogEntity; |
@@ -66,44 +62,60 @@ public class TkSmsServiceImpl implements TkSmsService { | @@ -66,44 +62,60 @@ public class TkSmsServiceImpl implements TkSmsService { | ||
66 | if (StringUtils.isEmpty(phoneNumbers) || StringUtils.isEmpty(templateId)) { | 62 | if (StringUtils.isEmpty(phoneNumbers) || StringUtils.isEmpty(templateId)) { |
67 | throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage()); | 63 | throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage()); |
68 | } | 64 | } |
69 | - /**消息模板是否可用*/ | ||
70 | - QueryWrapper<TkMessageTemplateEntity> messageTemplateQueryWrapper = new QueryWrapper<TkMessageTemplateEntity>(); | ||
71 | - messageTemplateQueryWrapper.lambda() | ||
72 | - .eq(TkMessageTemplateEntity::getId, templateId) | ||
73 | - .eq(TkMessageTemplateEntity::getStatus, AssetStatusEnum.ENABLE.ordinal()); | ||
74 | - TkMessageTemplateEntity messageTemplate = messageTemplateMapper.selectOne(messageTemplateQueryWrapper); | 65 | + /** 消息模板是否可用 */ |
66 | + QueryWrapper<TkMessageTemplateEntity> messageTemplateQueryWrapper = | ||
67 | + new QueryWrapper<TkMessageTemplateEntity>(); | ||
68 | + messageTemplateQueryWrapper | ||
69 | + .lambda() | ||
70 | + .eq(TkMessageTemplateEntity::getId, templateId) | ||
71 | + .eq(TkMessageTemplateEntity::getStatus, AssetStatusEnum.ENABLE.ordinal()); | ||
72 | + TkMessageTemplateEntity messageTemplate = | ||
73 | + messageTemplateMapper.selectOne(messageTemplateQueryWrapper); | ||
75 | if (null == messageTemplate) { | 74 | if (null == messageTemplate) { |
76 | throw new YtDataValidationException(ErrorMessage.MESSAGE_TEMPLATE_NOT_EXISTS.getMessage()); | 75 | throw new YtDataValidationException(ErrorMessage.MESSAGE_TEMPLATE_NOT_EXISTS.getMessage()); |
77 | } | 76 | } |
78 | 77 | ||
79 | - /**消息配置是否可用*/ | 78 | + /** 消息配置是否可用 */ |
80 | QueryWrapper<TkMessageConfigEntity> configQueryWrapper = new QueryWrapper<>(); | 79 | QueryWrapper<TkMessageConfigEntity> configQueryWrapper = new QueryWrapper<>(); |
81 | - configQueryWrapper.lambda() | ||
82 | - .eq(TkMessageConfigEntity::getId, messageTemplate.getMessageConfigId()) | ||
83 | - .eq(TkMessageConfigEntity::getStatus, AssetStatusEnum.ENABLE.ordinal()); | ||
84 | - TkMessageConfigEntity messageConfig = | ||
85 | - messageConfigMapper.selectOne(configQueryWrapper); | 80 | + configQueryWrapper |
81 | + .lambda() | ||
82 | + .eq(TkMessageConfigEntity::getId, messageTemplate.getMessageConfigId()) | ||
83 | + .eq(TkMessageConfigEntity::getStatus, AssetStatusEnum.ENABLE.ordinal()); | ||
84 | + TkMessageConfigEntity messageConfig = messageConfigMapper.selectOne(configQueryWrapper); | ||
86 | if (null == messageConfig) { | 85 | if (null == messageConfig) { |
87 | throw new YtDataValidationException(ErrorMessage.MESSAGE_CONFIG_NOT_EXISTS.getMessage()); | 86 | throw new YtDataValidationException(ErrorMessage.MESSAGE_CONFIG_NOT_EXISTS.getMessage()); |
88 | } | 87 | } |
89 | 88 | ||
90 | JsonNode configJsonNode = messageConfig.getConfig(); | 89 | JsonNode configJsonNode = messageConfig.getConfig(); |
91 | ObjectNode configObjectNode = (ObjectNode) configJsonNode; | 90 | ObjectNode configObjectNode = (ObjectNode) configJsonNode; |
92 | - configObjectNode.put("type", messageConfig.getPlatformType()); | 91 | + String platForm = messageConfig.getPlatformType(); |
92 | + configObjectNode.put("type", platForm); | ||
93 | + boolean isMatch = true; | ||
94 | + if (platForm.equals(SmsProviderTypeEnum.TENCENT_CLOUD.name()) | ||
95 | + && (null == configJsonNode.get("appId") || null == configJsonNode.get("appKey"))) { | ||
96 | + isMatch = false; | ||
97 | + } else if (platForm.equals(SmsProviderTypeEnum.ALI_CLOUD.name()) | ||
98 | + && (null == configJsonNode.get("accessKeyId") | ||
99 | + || null == configJsonNode.get("accessKeySecret"))) { | ||
100 | + isMatch = false; | ||
101 | + } | ||
102 | + if (!isMatch) { | ||
103 | + throw new YtDataValidationException(ErrorMessage.SMS_CONFIG_ERROR.getMessage()); | ||
104 | + } | ||
93 | SmsProviderConfiguration smsProviderConfiguration = | 105 | SmsProviderConfiguration smsProviderConfiguration = |
94 | - JacksonUtil.convertValue(configObjectNode, SmsProviderConfiguration.class); | 106 | + JacksonUtil.convertValue(configObjectNode, SmsProviderConfiguration.class); |
95 | if (null != smsProviderConfiguration) { | 107 | if (null != smsProviderConfiguration) { |
96 | SmsSender smsSender = ytDefaultSmsSenderFactory.createSmsSender(smsProviderConfiguration); | 108 | SmsSender smsSender = ytDefaultSmsSenderFactory.createSmsSender(smsProviderConfiguration); |
97 | String result = | 109 | String result = |
98 | - smsSender.sendSms( | ||
99 | - phoneNumbers, | ||
100 | - messageTemplate.getTemplateCode(), | ||
101 | - templateParam, | ||
102 | - messageTemplate.getSignName()); | 110 | + smsSender.sendSms( |
111 | + phoneNumbers, | ||
112 | + messageTemplate.getTemplateCode(), | ||
113 | + templateParam, | ||
114 | + messageTemplate.getSignName()); | ||
103 | // 记录短信日志 | 115 | // 记录短信日志 |
104 | String status = ResponseCodeEnum.SUCCESS.name(); | 116 | String status = ResponseCodeEnum.SUCCESS.name(); |
105 | - String remark = smsReqDTO.getRemark()==null?"":smsReqDTO.getRemark(); | ||
106 | - if(!ResponseCodeEnum.SUCCESS.name().equals(result)){ | 117 | + String remark = smsReqDTO.getRemark() == null ? "" : smsReqDTO.getRemark(); |
118 | + if (!ResponseCodeEnum.SUCCESS.name().equals(result)) { | ||
107 | status = ResponseCodeEnum.FAILED.name(); | 119 | status = ResponseCodeEnum.FAILED.name(); |
108 | remark += result; | 120 | remark += result; |
109 | } | 121 | } |
@@ -123,18 +135,21 @@ public class TkSmsServiceImpl implements TkSmsService { | @@ -123,18 +135,21 @@ public class TkSmsServiceImpl implements TkSmsService { | ||
123 | return false; | 135 | return false; |
124 | } | 136 | } |
125 | 137 | ||
126 | - | ||
127 | @Override | 138 | @Override |
128 | @Transactional | 139 | @Transactional |
129 | - public boolean sendSmsCode(String phoneNumber,MsgTemplatePurposeEnum purpose) { | 140 | + public boolean sendSmsCode(String phoneNumber, MsgTemplatePurposeEnum purpose) { |
130 | // 检查手机号码是否存在系统,以免乱发消息 | 141 | // 检查手机号码是否存在系统,以免乱发消息 |
131 | - List<SysUserEntity> users = userMapper | ||
132 | - .selectList(new QueryWrapper<SysUserEntity>().lambda().eq(SysUserEntity::getPhoneNumber, phoneNumber)); | 142 | + List<SysUserEntity> users = |
143 | + userMapper.selectList( | ||
144 | + new QueryWrapper<SysUserEntity>() | ||
145 | + .lambda() | ||
146 | + .eq(SysUserEntity::getPhoneNumber, phoneNumber)); | ||
133 | if (users.isEmpty()) { | 147 | if (users.isEmpty()) { |
134 | throw new YtDataValidationException("电话号码未在系统注册,请联系你的管理员"); | 148 | throw new YtDataValidationException("电话号码未在系统注册,请联系你的管理员"); |
135 | } | 149 | } |
136 | - if(users.get(0).getAccountExpireTime() != null && users.get(0).getAccountExpireTime().isBefore(LocalDateTime.now())){ | ||
137 | - throw new YtDataValidationException(ErrorMessage.ACCOUNT_HAS_EXPIRED.getMessage()); | 150 | + if (users.get(0).getAccountExpireTime() != null |
151 | + && users.get(0).getAccountExpireTime().isBefore(LocalDateTime.now())) { | ||
152 | + throw new YtDataValidationException(ErrorMessage.ACCOUNT_HAS_EXPIRED.getMessage()); | ||
138 | } | 153 | } |
139 | // 获取是否有验证码存在,防止发送数量过多 | 154 | // 获取是否有验证码存在,防止发送数量过多 |
140 | String key = | 155 | String key = |
@@ -157,28 +172,27 @@ public class TkSmsServiceImpl implements TkSmsService { | @@ -157,28 +172,27 @@ public class TkSmsServiceImpl implements TkSmsService { | ||
157 | throw new YtDataValidationException(ErrorMessage.MESSAGE_SEND_TOO_FAST.getMessage()); | 172 | throw new YtDataValidationException(ErrorMessage.MESSAGE_SEND_TOO_FAST.getMessage()); |
158 | } | 173 | } |
159 | 174 | ||
160 | - /**消息模板是否可用*/ | 175 | + /** 消息模板是否可用 */ |
161 | List<TkMessageTemplateEntity> messageTemplates = | 176 | List<TkMessageTemplateEntity> messageTemplates = |
162 | messageTemplateMapper.selectList( | 177 | messageTemplateMapper.selectList( |
163 | new QueryWrapper<TkMessageTemplateEntity>() | 178 | new QueryWrapper<TkMessageTemplateEntity>() |
164 | .lambda() | 179 | .lambda() |
165 | - .eq(TkMessageTemplateEntity::getTenantId, users.get(0).getTenantId()) | ||
166 | - .eq(TkMessageTemplateEntity::getStatus, 1) | ||
167 | - .eq(TkMessageTemplateEntity::getTemplatePurpose, purpose.name()) | ||
168 | - .eq(TkMessageTemplateEntity::getMessageType, MessageTypeEnum.PHONE_MESSAGE.name())); | 180 | + .eq(TkMessageTemplateEntity::getTenantId, users.get(0).getTenantId()) |
181 | + .eq(TkMessageTemplateEntity::getStatus, 1) | ||
182 | + .eq(TkMessageTemplateEntity::getTemplatePurpose, purpose.name()) | ||
183 | + .eq(TkMessageTemplateEntity::getMessageType, MessageTypeEnum.PHONE_MESSAGE.name())); | ||
169 | if (messageTemplates.isEmpty()) { | 184 | if (messageTemplates.isEmpty()) { |
170 | throw new YtDataValidationException(ErrorMessage.MESSAGE_TEMPLATE_NOT_EXISTS.getMessage()); | 185 | throw new YtDataValidationException(ErrorMessage.MESSAGE_TEMPLATE_NOT_EXISTS.getMessage()); |
171 | } | 186 | } |
172 | 187 | ||
173 | - /**消息配置是否可用*/ | ||
174 | - | 188 | + /** 消息配置是否可用 */ |
175 | TkMessageTemplateEntity messageTemplate = messageTemplates.get(0); | 189 | TkMessageTemplateEntity messageTemplate = messageTemplates.get(0); |
176 | QueryWrapper<TkMessageConfigEntity> configQueryWrapper = new QueryWrapper<>(); | 190 | QueryWrapper<TkMessageConfigEntity> configQueryWrapper = new QueryWrapper<>(); |
177 | - configQueryWrapper.lambda() | ||
178 | - .eq(TkMessageConfigEntity::getId, messageTemplate.getMessageConfigId()) | ||
179 | - .eq(TkMessageConfigEntity::getStatus, AssetStatusEnum.ENABLE.ordinal()); | ||
180 | - TkMessageConfigEntity messageConfig = | ||
181 | - messageConfigMapper.selectOne(configQueryWrapper); | 191 | + configQueryWrapper |
192 | + .lambda() | ||
193 | + .eq(TkMessageConfigEntity::getId, messageTemplate.getMessageConfigId()) | ||
194 | + .eq(TkMessageConfigEntity::getStatus, AssetStatusEnum.ENABLE.ordinal()); | ||
195 | + TkMessageConfigEntity messageConfig = messageConfigMapper.selectOne(configQueryWrapper); | ||
182 | if (null == messageConfig) { | 196 | if (null == messageConfig) { |
183 | throw new YtDataValidationException(ErrorMessage.MESSAGE_CONFIG_NOT_EXISTS.getMessage()); | 197 | throw new YtDataValidationException(ErrorMessage.MESSAGE_CONFIG_NOT_EXISTS.getMessage()); |
184 | } | 198 | } |