Commit 7a8e5274635fb1424d997906a4694a3c30d6fb6d

Authored by 云中非
1 parent 40dd5ed6

refactor(DEFECT-759;DEFECT-758): 发送消息时,消息配置或消息模板未启用弹出提示信息

... ... @@ -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);
... ...