Commit 7a8e5274635fb1424d997906a4694a3c30d6fb6d
1 parent
40dd5ed6
refactor(DEFECT-759;DEFECT-758): 发送消息时,消息配置或消息模板未启用弹出提示信息
Showing
3 changed files
with
106 additions
and
49 deletions
... | ... | @@ -37,9 +37,9 @@ public enum ErrorMessage { |
37 | 37 | USER_NOT_EXISTS(400015,"用户不存在"), |
38 | 38 | ENABLED_CONFIG_IS_EXISTED(400016,"已启用同类型配置"), |
39 | 39 | USERNAME_IS_IMMUTABLE(400017,"用户账号不可变"), |
40 | - CONFIG_IS_DISABLE(400018,"配置未启用"), | |
40 | + MESSAGE_CONFIG_NOT_EXISTS(400018,"消息配置不存在或未启用"), | |
41 | 41 | IT_CANT_EQUAL_ITSELF(400019,"父级组织不可以为本身"), |
42 | - TARGET_TEMPLATE_NOT_EXISTS(400020,"不存在可用的消息模板"), | |
42 | + MESSAGE_TEMPLATE_NOT_EXISTS(400020,"消息模板不存在或未启用!"), | |
43 | 43 | DEVICE_NOT_EXISTENCE_IN_TENANT(400021,"当前租户下不存在该设备"), |
44 | 44 | DEVICE_RELATION_IS_ABSENT(400022,"设备关联关系已不存在"), |
45 | 45 | DATA_IS_DELETED(400023,"数据已经删除"), | ... | ... |
1 | 1 | package org.thingsboard.server.dao.yunteng.impl; |
2 | 2 | |
3 | +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |
3 | 4 | import com.fasterxml.jackson.databind.JsonNode; |
4 | 5 | import jakarta.mail.*; |
5 | 6 | import jakarta.mail.internet.InternetAddress; |
... | ... | @@ -14,6 +15,7 @@ import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants; |
14 | 15 | import org.thingsboard.server.common.data.yunteng.core.exception.YtDataValidationException; |
15 | 16 | import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage; |
16 | 17 | import org.thingsboard.server.common.data.yunteng.dto.request.EmailReqDTO; |
18 | +import org.thingsboard.server.common.data.yunteng.enums.AssetStatusEnum; | |
17 | 19 | import org.thingsboard.server.common.data.yunteng.enums.EmailFormatEnum; |
18 | 20 | import org.thingsboard.server.common.data.yunteng.enums.ResponseCodeEnum; |
19 | 21 | import org.thingsboard.server.common.data.yunteng.utils.JacksonUtil; |
... | ... | @@ -45,15 +47,38 @@ public class YtMailServiceImpl implements YtMailService { |
45 | 47 | @Override |
46 | 48 | public boolean sendEmail(EmailReqDTO emailReqDTO) { |
47 | 49 | boolean result =false; |
48 | - //查询模板信息 | |
49 | - MessageTemplate messageTemplate = messageTemplateMapper.selectById(emailReqDTO.getId()); | |
50 | - if(null == messageTemplate){ | |
51 | - throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage()); | |
52 | - } | |
53 | - MessageConfig messageConfig =messageConfigMapper.selectById(messageTemplate.getMessageConfigId()); | |
54 | - if (messageConfig.getStatus() != FastIotConstants.StateValue.ENABLE) { | |
55 | - throw new YtDataValidationException(ErrorMessage.CONFIG_IS_DISABLE.getMessage()); | |
56 | - } | |
50 | + | |
51 | + | |
52 | + | |
53 | + /**消息模板是否可用*/ | |
54 | + QueryWrapper<MessageTemplate> messageTemplateQueryWrapper = new QueryWrapper<MessageTemplate>(); | |
55 | + messageTemplateQueryWrapper.lambda() | |
56 | + .eq(MessageTemplate::getId, emailReqDTO.getId()) | |
57 | + .eq(MessageTemplate::getStatus, AssetStatusEnum.ENABLE.ordinal()); | |
58 | + MessageTemplate messageTemplate = messageTemplateMapper.selectOne(messageTemplateQueryWrapper); | |
59 | + if (null == messageTemplate) { | |
60 | + throw new YtDataValidationException(ErrorMessage.MESSAGE_TEMPLATE_NOT_EXISTS.getMessage()); | |
61 | + } | |
62 | + | |
63 | + /**消息配置是否可用*/ | |
64 | + QueryWrapper<MessageConfig> configQueryWrapper = new QueryWrapper<>(); | |
65 | + configQueryWrapper.lambda() | |
66 | + .eq(MessageConfig::getId, messageTemplate.getMessageConfigId()) | |
67 | + .eq(MessageConfig::getStatus, AssetStatusEnum.ENABLE.ordinal()); | |
68 | + MessageConfig messageConfig = | |
69 | + messageConfigMapper.selectOne(configQueryWrapper); | |
70 | + if (null == messageConfig) { | |
71 | + throw new YtDataValidationException(ErrorMessage.MESSAGE_CONFIG_NOT_EXISTS.getMessage()); | |
72 | + } | |
73 | + | |
74 | + | |
75 | + | |
76 | + | |
77 | + | |
78 | + | |
79 | + | |
80 | + | |
81 | + | |
57 | 82 | JsonNode configNode = messageConfig.getConfig(); |
58 | 83 | EmailConfiguration emailConfiguration = JacksonUtil.convertValue(configNode, EmailConfiguration.class); |
59 | 84 | if(emailConfiguration !=null){ | ... | ... |
... | ... | @@ -19,6 +19,7 @@ import org.thingsboard.server.common.data.yunteng.core.exception.YtDataValidatio |
19 | 19 | import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage; |
20 | 20 | import org.thingsboard.server.common.data.yunteng.dto.request.CodeTTL; |
21 | 21 | import org.thingsboard.server.common.data.yunteng.dto.request.SmsReqDTO; |
22 | +import org.thingsboard.server.common.data.yunteng.enums.AssetStatusEnum; | |
22 | 23 | import org.thingsboard.server.common.data.yunteng.enums.MessageTypeEnum; |
23 | 24 | import org.thingsboard.server.common.data.yunteng.enums.MsgTemplatePurposeEnum; |
24 | 25 | import org.thingsboard.server.common.data.yunteng.enums.ResponseCodeEnum; |
... | ... | @@ -65,43 +66,59 @@ public class YtSmsServiceImpl implements YtSmsService { |
65 | 66 | if (StringUtils.isEmpty(phoneNumbers) || StringUtils.isEmpty(templateId)) { |
66 | 67 | throw new YtDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage()); |
67 | 68 | } |
68 | - MessageTemplate messageTemplate = messageTemplateMapper.selectById(templateId); | |
69 | - if (null != messageTemplate) { | |
70 | - MessageConfig messageConfig = | |
71 | - messageConfigMapper.selectById(messageTemplate.getMessageConfigId()); | |
72 | - JsonNode configJsonNode = messageConfig.getConfig(); | |
73 | - ObjectNode configObjectNode = (ObjectNode) configJsonNode; | |
74 | - configObjectNode.put("type", messageConfig.getPlatformType()); | |
75 | - SmsProviderConfiguration smsProviderConfiguration = | |
76 | - JacksonUtil.convertValue(configObjectNode, SmsProviderConfiguration.class); | |
77 | - if (null != smsProviderConfiguration) { | |
78 | - SmsSender smsSender = ytDefaultSmsSenderFactory.createSmsSender(smsProviderConfiguration); | |
79 | - String result = | |
80 | - smsSender.sendSms( | |
81 | - phoneNumbers, | |
82 | - messageTemplate.getTemplateCode(), | |
83 | - templateParam, | |
84 | - messageTemplate.getSignName()); | |
85 | - // 记录短信日志 | |
86 | - String status = ResponseCodeEnum.SUCCESS.name(); | |
87 | - String remark = smsReqDTO.getRemark()==null?"":smsReqDTO.getRemark(); | |
88 | - if(!ResponseCodeEnum.SUCCESS.name().equals(result)){ | |
89 | - status = ResponseCodeEnum.FAILED.name(); | |
90 | - remark += result; | |
91 | - } | |
92 | - SmsLog smsLog = new SmsLog(); | |
93 | - smsLog.setToPhone(phoneNumbers); | |
94 | - smsLog.setType(messageConfig.getPlatformType()); | |
95 | - smsLog.setStatus(status); | |
96 | - smsLog.setRemark(remark); | |
97 | - smsLog.setMessageTemplateId(messageTemplate.getId()); | |
98 | - smsLog.setTemplateParam(JacksonUtil.toJsonNode(JacksonUtil.toString(templateParam))); | |
99 | - smsLog.setSendTime(LocalDateTime.now()); | |
100 | - smsLog.setTenantId(messageTemplate.getTenantId()); | |
101 | - smsLog.setTemplatePurpose(smsReqDTO.getTemplatePurpose()); | |
102 | - smsLogMapper.insert(smsLog); | |
103 | - return ResponseCodeEnum.SUCCESS.name().equals(result); | |
69 | + /**消息模板是否可用*/ | |
70 | + QueryWrapper<MessageTemplate> messageTemplateQueryWrapper = new QueryWrapper<MessageTemplate>(); | |
71 | + messageTemplateQueryWrapper.lambda() | |
72 | + .eq(MessageTemplate::getId, templateId) | |
73 | + .eq(MessageTemplate::getStatus, AssetStatusEnum.ENABLE.ordinal()); | |
74 | + MessageTemplate messageTemplate = messageTemplateMapper.selectOne(messageTemplateQueryWrapper); | |
75 | + if (null == messageTemplate) { | |
76 | + throw new YtDataValidationException(ErrorMessage.MESSAGE_TEMPLATE_NOT_EXISTS.getMessage()); | |
77 | + } | |
78 | + | |
79 | + /**消息配置是否可用*/ | |
80 | + QueryWrapper<MessageConfig> configQueryWrapper = new QueryWrapper<>(); | |
81 | + configQueryWrapper.lambda() | |
82 | + .eq(MessageConfig::getId, messageTemplate.getMessageConfigId()) | |
83 | + .eq(MessageConfig::getStatus, AssetStatusEnum.ENABLE.ordinal()); | |
84 | + MessageConfig messageConfig = | |
85 | + messageConfigMapper.selectOne(configQueryWrapper); | |
86 | + if (null == messageConfig) { | |
87 | + throw new YtDataValidationException(ErrorMessage.MESSAGE_CONFIG_NOT_EXISTS.getMessage()); | |
88 | + } | |
89 | + | |
90 | + JsonNode configJsonNode = messageConfig.getConfig(); | |
91 | + ObjectNode configObjectNode = (ObjectNode) configJsonNode; | |
92 | + configObjectNode.put("type", messageConfig.getPlatformType()); | |
93 | + SmsProviderConfiguration smsProviderConfiguration = | |
94 | + JacksonUtil.convertValue(configObjectNode, SmsProviderConfiguration.class); | |
95 | + if (null != smsProviderConfiguration) { | |
96 | + SmsSender smsSender = ytDefaultSmsSenderFactory.createSmsSender(smsProviderConfiguration); | |
97 | + String result = | |
98 | + smsSender.sendSms( | |
99 | + phoneNumbers, | |
100 | + messageTemplate.getTemplateCode(), | |
101 | + templateParam, | |
102 | + messageTemplate.getSignName()); | |
103 | + // 记录短信日志 | |
104 | + String status = ResponseCodeEnum.SUCCESS.name(); | |
105 | + String remark = smsReqDTO.getRemark()==null?"":smsReqDTO.getRemark(); | |
106 | + if(!ResponseCodeEnum.SUCCESS.name().equals(result)){ | |
107 | + status = ResponseCodeEnum.FAILED.name(); | |
108 | + remark += result; | |
104 | 109 | } |
110 | + SmsLog smsLog = new SmsLog(); | |
111 | + smsLog.setToPhone(phoneNumbers); | |
112 | + smsLog.setType(messageConfig.getPlatformType()); | |
113 | + smsLog.setStatus(status); | |
114 | + smsLog.setRemark(remark); | |
115 | + smsLog.setMessageTemplateId(messageTemplate.getId()); | |
116 | + smsLog.setTemplateParam(JacksonUtil.toJsonNode(JacksonUtil.toString(templateParam))); | |
117 | + smsLog.setSendTime(LocalDateTime.now()); | |
118 | + smsLog.setTenantId(messageTemplate.getTenantId()); | |
119 | + smsLog.setTemplatePurpose(smsReqDTO.getTemplatePurpose()); | |
120 | + smsLogMapper.insert(smsLog); | |
121 | + return ResponseCodeEnum.SUCCESS.name().equals(result); | |
105 | 122 | } |
106 | 123 | return false; |
107 | 124 | } |
... | ... | @@ -136,6 +153,8 @@ public class YtSmsServiceImpl implements YtSmsService { |
136 | 153 | if (!canSend) { |
137 | 154 | throw new YtDataValidationException(ErrorMessage.MESSAGE_SEND_TOO_FAST.getMessage()); |
138 | 155 | } |
156 | + | |
157 | + /**消息模板是否可用*/ | |
139 | 158 | List<MessageTemplate> messageTemplates = |
140 | 159 | messageTemplateMapper.selectList( |
141 | 160 | new QueryWrapper<MessageTemplate>() |
... | ... | @@ -145,12 +164,25 @@ public class YtSmsServiceImpl implements YtSmsService { |
145 | 164 | .eq(MessageTemplate::getTemplatePurpose, purpose.name()) |
146 | 165 | .eq(MessageTemplate::getMessageType, MessageTypeEnum.PHONE_MESSAGE.name())); |
147 | 166 | if (messageTemplates.isEmpty()) { |
148 | - throw new YtDataValidationException(ErrorMessage.TARGET_TEMPLATE_NOT_EXISTS.getMessage()); | |
167 | + throw new YtDataValidationException(ErrorMessage.MESSAGE_TEMPLATE_NOT_EXISTS.getMessage()); | |
149 | 168 | } |
169 | + | |
170 | + /**消息配置是否可用*/ | |
171 | + | |
172 | + MessageTemplate messageTemplate = messageTemplates.get(0); | |
173 | + QueryWrapper<MessageConfig> configQueryWrapper = new QueryWrapper<>(); | |
174 | + configQueryWrapper.lambda() | |
175 | + .eq(MessageConfig::getId, messageTemplate.getMessageConfigId()) | |
176 | + .eq(MessageConfig::getStatus, AssetStatusEnum.ENABLE.ordinal()); | |
177 | + MessageConfig messageConfig = | |
178 | + messageConfigMapper.selectOne(configQueryWrapper); | |
179 | + if (null == messageConfig) { | |
180 | + throw new YtDataValidationException(ErrorMessage.MESSAGE_CONFIG_NOT_EXISTS.getMessage()); | |
181 | + } | |
182 | + | |
150 | 183 | String code = RandomStringUtils.randomNumeric(6); |
151 | 184 | LinkedHashMap<String, String> params = new LinkedHashMap<>(); |
152 | 185 | params.put("code", code); |
153 | - MessageTemplate messageTemplate = messageTemplates.get(0); | |
154 | 186 | SmsReqDTO smsReqDTO = new SmsReqDTO(); |
155 | 187 | smsReqDTO.setParams(params); |
156 | 188 | smsReqDTO.setPhoneNumbers(phoneNumber); | ... | ... |