Commit 75de6c14d8bd3bc323d4249430798d933d08603b

Authored by xp.Huang
2 parents f9f6a7f4 dd1d86a3

Merge branch '20220913' into 'master_dev'

fix(DEFECT-1017): 住户配置选择错误异常信息调整

See merge request yunteng/thingskit!230
@@ -22,6 +22,8 @@ import org.thingsboard.server.common.data.id.UserId; @@ -22,6 +22,8 @@ import org.thingsboard.server.common.data.id.UserId;
22 import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent; 22 import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent;
23 import org.thingsboard.server.common.data.yunteng.common.DeleteGroup; 23 import org.thingsboard.server.common.data.yunteng.common.DeleteGroup;
24 import org.thingsboard.server.common.data.yunteng.common.UpdateGroup; 24 import org.thingsboard.server.common.data.yunteng.common.UpdateGroup;
  25 +import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException;
  26 +import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
25 import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO; 27 import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
26 import org.thingsboard.server.common.data.yunteng.dto.MenuDTO; 28 import org.thingsboard.server.common.data.yunteng.dto.MenuDTO;
27 import org.thingsboard.server.common.data.yunteng.dto.TenantDTO; 29 import org.thingsboard.server.common.data.yunteng.dto.TenantDTO;
@@ -30,6 +32,7 @@ import org.thingsboard.server.common.data.yunteng.dto.request.TenantReqDTO; @@ -30,6 +32,7 @@ import org.thingsboard.server.common.data.yunteng.dto.request.TenantReqDTO;
30 import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum; 32 import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum;
31 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData; 33 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
32 import org.thingsboard.server.controller.BaseController; 34 import org.thingsboard.server.controller.BaseController;
  35 +import org.thingsboard.server.dao.exception.DataValidationException;
33 import org.thingsboard.server.dao.tenant.TenantService; 36 import org.thingsboard.server.dao.tenant.TenantService;
34 import org.thingsboard.server.dao.user.UserService; 37 import org.thingsboard.server.dao.user.UserService;
35 import org.thingsboard.server.dao.yunteng.service.MenuService; 38 import org.thingsboard.server.dao.yunteng.service.MenuService;
@@ -219,10 +222,17 @@ public class TkAdminController extends BaseController { @@ -219,10 +222,17 @@ public class TkAdminController extends BaseController {
219 updateOrSaveTenant(tenantReqDTO, isCreate); 222 updateOrSaveTenant(tenantReqDTO, isCreate);
220 result = tkTenantService.updateOrCreateTenant(tenantReqDTO, isCreate); 223 result = tkTenantService.updateOrCreateTenant(tenantReqDTO, isCreate);
221 } catch (Exception e) { 224 } catch (Exception e) {
222 - if (isCreate) { 225 + if (isCreate && result != null) {
223 deleteTenant(tenantReqDTO.getTenantId()); 226 deleteTenant(tenantReqDTO.getTenantId());
224 - throw handleException(e);  
225 } 227 }
  228 + if(e instanceof DataValidationException){
  229 + String errMsg = e.getMessage();
  230 + if(errMsg.contains("isolated tenant profiles")){
  231 + errMsg = ErrorMessage.NOT_ALLOED_ISOLATED_IN_MONOLITH.getMessage();
  232 + }
  233 + throw new DataValidationException(errMsg);
  234 + }
  235 + throw handleException(e);
226 } 236 }
227 return result; 237 return result;
228 } 238 }
@@ -73,8 +73,8 @@ public class TkMessageConfigController extends BaseController { @@ -73,8 +73,8 @@ public class TkMessageConfigController extends BaseController {
73 @DeleteMapping 73 @DeleteMapping
74 @PreAuthorize("@check.checkPermissions({},{'api:yt:message:delete'})") 74 @PreAuthorize("@check.checkPermissions({},{'api:yt:message:delete'})")
75 public ResponseResult<String> deleteMessageConfig( 75 public ResponseResult<String> deleteMessageConfig(
76 - @Validated({DeleteGroup.class}) @RequestBody DeleteDTO deleteDTO) {  
77 - return messageConfigService.deleteMessageConfig(deleteDTO.getIds()) 76 + @Validated({DeleteGroup.class}) @RequestBody DeleteDTO deleteDTO) throws ThingsboardException {
  77 + return messageConfigService.deleteMessageConfig(deleteDTO.getIds(),getCurrentUser().getCurrentTenantId())
78 ? ResponseResult.success(FastIotConstants.StateValue.DELETE_SUCCESS) 78 ? ResponseResult.success(FastIotConstants.StateValue.DELETE_SUCCESS)
79 : ResponseResult.failed(FastIotConstants.StateValue.DELETE_FAILED); 79 : ResponseResult.failed(FastIotConstants.StateValue.DELETE_FAILED);
80 } 80 }
@@ -84,7 +84,7 @@ public interface FastIotConstants { @@ -84,7 +84,7 @@ public interface FastIotConstants {
84 84
85 /** 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加) */ 85 /** 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加) */
86 public static final String[] JOB_WHITELIST_STR = { 86 public static final String[] JOB_WHITELIST_STR = {
87 - "org.thingsboard.server.dao.util.yunteng.task" 87 + "org.thingsboard.server.dao.util.yunteng.task","org.thingsboard.server.utils.yunteng"
88 }; 88 };
89 /** http请求 */ 89 /** http请求 */
90 public static final String HTTP = "http://"; 90 public static final String HTTP = "http://";
@@ -107,7 +107,10 @@ public enum ErrorMessage { @@ -107,7 +107,10 @@ public enum ErrorMessage {
107 HIKVISION_GET_URL_ERROR(400083,"海康威视视API调用获取URL失败!!"), 107 HIKVISION_GET_URL_ERROR(400083,"海康威视视API调用获取URL失败!!"),
108 HIKVISION_API_ERROR(400084,"海康威视视频预览API调用失败【%s】,错误码【%s】"), 108 HIKVISION_API_ERROR(400084,"海康威视视频预览API调用失败【%s】,错误码【%s】"),
109 RESET_PASSWORD_SUCCESS(400085,"重置成功,请使用默认密码登录"), 109 RESET_PASSWORD_SUCCESS(400085,"重置成功,请使用默认密码登录"),
110 - HAVE_NO_PERMISSION(500002,"没有修改权限"); 110 + HAVE_NO_PERMISSION(500002,"没有修改权限"),
  111 + MESSAGE_TEMPLATE_DELETED(400020,"消息模板不存在!"),
  112 + NOT_ALLOED_ISOLATED_IN_MONOLITH(500003,"【monolith】模式下,不能选择【isolated】类型的租户配置"),
  113 + MESSAGE_TEMPLATE_USING_CONFIG(500003,"删除消息配置前,需要禁用使用消息配置的消息模板%s。");
111 private final int code; 114 private final int code;
112 private String message; 115 private String message;
113 116
1 package org.thingsboard.server.dao.yunteng.impl; 1 package org.thingsboard.server.dao.yunteng.impl;
2 2
  3 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
3 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 4 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4 import com.baomidou.mybatisplus.core.metadata.IPage; 5 import com.baomidou.mybatisplus.core.metadata.IPage;
5 -import java.util.List;  
6 -import java.util.Map;  
7 -import java.util.Set; 6 +
  7 +import java.util.*;
  8 +import java.util.stream.Collectors;
  9 +
8 import lombok.RequiredArgsConstructor; 10 import lombok.RequiredArgsConstructor;
9 import lombok.extern.slf4j.Slf4j; 11 import lombok.extern.slf4j.Slf4j;
10 import org.apache.commons.lang3.StringUtils; 12 import org.apache.commons.lang3.StringUtils;
@@ -15,12 +17,17 @@ import org.thingsboard.server.common.data.yunteng.constant.ModelConstants; @@ -15,12 +17,17 @@ import org.thingsboard.server.common.data.yunteng.constant.ModelConstants;
15 import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException; 17 import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException;
16 import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage; 18 import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
17 import org.thingsboard.server.common.data.yunteng.dto.MessageConfigDTO; 19 import org.thingsboard.server.common.data.yunteng.dto.MessageConfigDTO;
  20 +import org.thingsboard.server.common.data.yunteng.enums.StatusEnum;
18 import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils; 21 import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils;
19 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData; 22 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
20 import org.thingsboard.server.dao.yunteng.entities.TkMessageConfigEntity; 23 import org.thingsboard.server.dao.yunteng.entities.TkMessageConfigEntity;
  24 +import org.thingsboard.server.dao.yunteng.entities.TkMessageTemplateEntity;
21 import org.thingsboard.server.dao.yunteng.mapper.MessageConfigMapper; 25 import org.thingsboard.server.dao.yunteng.mapper.MessageConfigMapper;
  26 +import org.thingsboard.server.dao.yunteng.mapper.MessageTemplateMapper;
22 import org.thingsboard.server.dao.yunteng.service.AbstractBaseService; 27 import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
23 import org.thingsboard.server.dao.yunteng.service.TkMessageConfigService; 28 import org.thingsboard.server.dao.yunteng.service.TkMessageConfigService;
  29 +import org.thingsboard.server.dao.yunteng.service.TkMessageTemplateService;
  30 +import org.thingsboard.server.dao.yunteng.service.TkUserService;
24 31
25 @Service 32 @Service
26 @Slf4j 33 @Slf4j
@@ -28,7 +35,7 @@ import org.thingsboard.server.dao.yunteng.service.TkMessageConfigService; @@ -28,7 +35,7 @@ import org.thingsboard.server.dao.yunteng.service.TkMessageConfigService;
28 public class TkMessageConfigServiceImpl 35 public class TkMessageConfigServiceImpl
29 extends AbstractBaseService<MessageConfigMapper, TkMessageConfigEntity> 36 extends AbstractBaseService<MessageConfigMapper, TkMessageConfigEntity>
30 implements TkMessageConfigService { 37 implements TkMessageConfigService {
31 - 38 + private final MessageTemplateMapper templateMapper;
32 @Override 39 @Override
33 public TkPageData<MessageConfigDTO> page(String tenantId, Map<String, Object> queryMap) { 40 public TkPageData<MessageConfigDTO> page(String tenantId, Map<String, Object> queryMap) {
34 IPage<TkMessageConfigEntity> configIPage = 41 IPage<TkMessageConfigEntity> configIPage =
@@ -69,7 +76,18 @@ public class TkMessageConfigServiceImpl @@ -69,7 +76,18 @@ public class TkMessageConfigServiceImpl
69 76
70 @Override 77 @Override
71 @Transactional 78 @Transactional
72 - public boolean deleteMessageConfig(Set<String> ids) { 79 + public boolean deleteMessageConfig(Set<String> ids,String tenantId) {
  80 + LambdaQueryWrapper<TkMessageTemplateEntity> filter = new LambdaQueryWrapper<>();
  81 + filter
  82 + .in(TkMessageTemplateEntity::getMessageConfigId, ids)
  83 + .eq(TkMessageTemplateEntity::getTenantId, tenantId)
  84 + .eq(TkMessageTemplateEntity::getStatus, StatusEnum.ENABLE.getIndex());
  85 + List<TkMessageTemplateEntity> templates = templateMapper.selectList(filter);
  86 + if(templates.size()>0){
  87 + List<String> templateNames =templates.stream().map(t->t.getTemplateName()).collect(Collectors.toList());
  88 + String errMsg = String.format(ErrorMessage.MESSAGE_TEMPLATE_USING_CONFIG.getMessage(), templateNames);
  89 + throw new TkDataValidationException(errMsg);
  90 + }
73 return baseMapper.deleteBatchIds(ids) > 0; 91 return baseMapper.deleteBatchIds(ids) > 0;
74 } 92 }
75 93
@@ -10,7 +10,9 @@ import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidatio @@ -10,7 +10,9 @@ import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidatio
10 import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage; 10 import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
11 import org.thingsboard.server.common.data.yunteng.dto.MessageTemplateDTO; 11 import org.thingsboard.server.common.data.yunteng.dto.MessageTemplateDTO;
12 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData; 12 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
  13 +import org.thingsboard.server.dao.yunteng.entities.TkMessageConfigEntity;
13 import org.thingsboard.server.dao.yunteng.entities.TkMessageTemplateEntity; 14 import org.thingsboard.server.dao.yunteng.entities.TkMessageTemplateEntity;
  15 +import org.thingsboard.server.dao.yunteng.mapper.MessageConfigMapper;
14 import org.thingsboard.server.dao.yunteng.mapper.MessageTemplateMapper; 16 import org.thingsboard.server.dao.yunteng.mapper.MessageTemplateMapper;
15 import org.thingsboard.server.dao.yunteng.service.AbstractBaseService; 17 import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
16 import org.thingsboard.server.dao.yunteng.service.TkMessageTemplateService; 18 import org.thingsboard.server.dao.yunteng.service.TkMessageTemplateService;
@@ -25,6 +27,7 @@ import java.util.Set; @@ -25,6 +27,7 @@ import java.util.Set;
25 public class TkMessageTemplateServiceImpl 27 public class TkMessageTemplateServiceImpl
26 extends AbstractBaseService<MessageTemplateMapper, TkMessageTemplateEntity> 28 extends AbstractBaseService<MessageTemplateMapper, TkMessageTemplateEntity>
27 implements TkMessageTemplateService { 29 implements TkMessageTemplateService {
  30 + private final MessageConfigMapper configMapper;
28 @Override 31 @Override
29 public TkPageData<MessageTemplateDTO> page(Map<String, Object> queryMap) { 32 public TkPageData<MessageTemplateDTO> page(Map<String, Object> queryMap) {
30 IPage<TkMessageTemplateEntity> configIPage = getPage(queryMap, FastIotConstants.DefaultOrder.CREATE_TIME,false); 33 IPage<TkMessageTemplateEntity> configIPage = getPage(queryMap, FastIotConstants.DefaultOrder.CREATE_TIME,false);
@@ -52,7 +55,6 @@ public class TkMessageTemplateServiceImpl @@ -52,7 +55,6 @@ public class TkMessageTemplateServiceImpl
52 @Override 55 @Override
53 @Transactional 56 @Transactional
54 public MessageTemplateDTO updateMessageTemplate(MessageTemplateDTO templateDTO) { 57 public MessageTemplateDTO updateMessageTemplate(MessageTemplateDTO templateDTO) {
55 -  
56 //查询该租户下 是否已经启用相同消息类型、相同用途的模板 58 //查询该租户下 是否已经启用相同消息类型、相同用途的模板
57 if(null!=templateDTO.getStatus() && templateDTO.getStatus() == FastIotConstants.MagicNumber.ONE){ 59 if(null!=templateDTO.getStatus() && templateDTO.getStatus() == FastIotConstants.MagicNumber.ONE){
58 MessageTemplateDTO queryTemplate = new MessageTemplateDTO(); 60 MessageTemplateDTO queryTemplate = new MessageTemplateDTO();
@@ -69,6 +71,13 @@ public class TkMessageTemplateServiceImpl @@ -69,6 +71,13 @@ public class TkMessageTemplateServiceImpl
69 } 71 }
70 } 72 }
71 TkMessageTemplateEntity messageTemplate = baseMapper.selectById(templateDTO.getId()); 73 TkMessageTemplateEntity messageTemplate = baseMapper.selectById(templateDTO.getId());
  74 + if(messageTemplate == null){
  75 + throw new TkDataValidationException(ErrorMessage.MESSAGE_TEMPLATE_DELETED.getMessage());
  76 + }
  77 + TkMessageConfigEntity configEntity =configMapper.selectById(StringUtils.isNotBlank(templateDTO.getMessageConfigId())?templateDTO.getMessageConfigId():messageTemplate.getMessageConfigId());
  78 + if(configEntity == null){
  79 + throw new TkDataValidationException(ErrorMessage.MESSAGE_CONFIG_NOT_EXISTS.getMessage());
  80 + }
72 templateDTO.copyToEntity(messageTemplate); 81 templateDTO.copyToEntity(messageTemplate);
73 baseMapper.updateById(messageTemplate); 82 baseMapper.updateById(messageTemplate);
74 messageTemplate.copyToDTO(templateDTO); 83 messageTemplate.copyToDTO(templateDTO);
@@ -14,7 +14,7 @@ public interface TkMessageConfigService extends BaseService<TkMessageConfigEntit @@ -14,7 +14,7 @@ public interface TkMessageConfigService extends BaseService<TkMessageConfigEntit
14 14
15 MessageConfigDTO saveMessageConfig(String tenantId,MessageConfigDTO configDTO); 15 MessageConfigDTO saveMessageConfig(String tenantId,MessageConfigDTO configDTO);
16 16
17 - boolean deleteMessageConfig(Set<String> ids); 17 + boolean deleteMessageConfig(Set<String> ids,String tenantId);
18 18
19 MessageConfigDTO updateMessageConfig(String tenantId,MessageConfigDTO configDTO); 19 MessageConfigDTO updateMessageConfig(String tenantId,MessageConfigDTO configDTO);
20 20