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 22 import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent;
23 23 import org.thingsboard.server.common.data.yunteng.common.DeleteGroup;
24 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 27 import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
26 28 import org.thingsboard.server.common.data.yunteng.dto.MenuDTO;
27 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 32 import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum;
31 33 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
32 34 import org.thingsboard.server.controller.BaseController;
  35 +import org.thingsboard.server.dao.exception.DataValidationException;
33 36 import org.thingsboard.server.dao.tenant.TenantService;
34 37 import org.thingsboard.server.dao.user.UserService;
35 38 import org.thingsboard.server.dao.yunteng.service.MenuService;
... ... @@ -219,10 +222,17 @@ public class TkAdminController extends BaseController {
219 222 updateOrSaveTenant(tenantReqDTO, isCreate);
220 223 result = tkTenantService.updateOrCreateTenant(tenantReqDTO, isCreate);
221 224 } catch (Exception e) {
222   - if (isCreate) {
  225 + if (isCreate && result != null) {
223 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 237 return result;
228 238 }
... ...
... ... @@ -73,8 +73,8 @@ public class TkMessageConfigController extends BaseController {
73 73 @DeleteMapping
74 74 @PreAuthorize("@check.checkPermissions({},{'api:yt:message:delete'})")
75 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 78 ? ResponseResult.success(FastIotConstants.StateValue.DELETE_SUCCESS)
79 79 : ResponseResult.failed(FastIotConstants.StateValue.DELETE_FAILED);
80 80 }
... ...
... ... @@ -84,7 +84,7 @@ public interface FastIotConstants {
84 84
85 85 /** 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加) */
86 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 89 /** http请求 */
90 90 public static final String HTTP = "http://";
... ...
... ... @@ -107,7 +107,10 @@ public enum ErrorMessage {
107 107 HIKVISION_GET_URL_ERROR(400083,"海康威视视API调用获取URL失败!!"),
108 108 HIKVISION_API_ERROR(400084,"海康威视视频预览API调用失败【%s】,错误码【%s】"),
109 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 114 private final int code;
112 115 private String message;
113 116
... ...
1 1 package org.thingsboard.server.dao.yunteng.impl;
2 2
  3 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
3 4 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4 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 10 import lombok.RequiredArgsConstructor;
9 11 import lombok.extern.slf4j.Slf4j;
10 12 import org.apache.commons.lang3.StringUtils;
... ... @@ -15,12 +17,17 @@ import org.thingsboard.server.common.data.yunteng.constant.ModelConstants;
15 17 import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException;
16 18 import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
17 19 import org.thingsboard.server.common.data.yunteng.dto.MessageConfigDTO;
  20 +import org.thingsboard.server.common.data.yunteng.enums.StatusEnum;
18 21 import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils;
19 22 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
20 23 import org.thingsboard.server.dao.yunteng.entities.TkMessageConfigEntity;
  24 +import org.thingsboard.server.dao.yunteng.entities.TkMessageTemplateEntity;
21 25 import org.thingsboard.server.dao.yunteng.mapper.MessageConfigMapper;
  26 +import org.thingsboard.server.dao.yunteng.mapper.MessageTemplateMapper;
22 27 import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
23 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 32 @Service
26 33 @Slf4j
... ... @@ -28,7 +35,7 @@ import org.thingsboard.server.dao.yunteng.service.TkMessageConfigService;
28 35 public class TkMessageConfigServiceImpl
29 36 extends AbstractBaseService<MessageConfigMapper, TkMessageConfigEntity>
30 37 implements TkMessageConfigService {
31   -
  38 + private final MessageTemplateMapper templateMapper;
32 39 @Override
33 40 public TkPageData<MessageConfigDTO> page(String tenantId, Map<String, Object> queryMap) {
34 41 IPage<TkMessageConfigEntity> configIPage =
... ... @@ -69,7 +76,18 @@ public class TkMessageConfigServiceImpl
69 76
70 77 @Override
71 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 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 10 import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
11 11 import org.thingsboard.server.common.data.yunteng.dto.MessageTemplateDTO;
12 12 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
  13 +import org.thingsboard.server.dao.yunteng.entities.TkMessageConfigEntity;
13 14 import org.thingsboard.server.dao.yunteng.entities.TkMessageTemplateEntity;
  15 +import org.thingsboard.server.dao.yunteng.mapper.MessageConfigMapper;
14 16 import org.thingsboard.server.dao.yunteng.mapper.MessageTemplateMapper;
15 17 import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
16 18 import org.thingsboard.server.dao.yunteng.service.TkMessageTemplateService;
... ... @@ -25,6 +27,7 @@ import java.util.Set;
25 27 public class TkMessageTemplateServiceImpl
26 28 extends AbstractBaseService<MessageTemplateMapper, TkMessageTemplateEntity>
27 29 implements TkMessageTemplateService {
  30 + private final MessageConfigMapper configMapper;
28 31 @Override
29 32 public TkPageData<MessageTemplateDTO> page(Map<String, Object> queryMap) {
30 33 IPage<TkMessageTemplateEntity> configIPage = getPage(queryMap, FastIotConstants.DefaultOrder.CREATE_TIME,false);
... ... @@ -52,7 +55,6 @@ public class TkMessageTemplateServiceImpl
52 55 @Override
53 56 @Transactional
54 57 public MessageTemplateDTO updateMessageTemplate(MessageTemplateDTO templateDTO) {
55   -
56 58 //查询该租户下 是否已经启用相同消息类型、相同用途的模板
57 59 if(null!=templateDTO.getStatus() && templateDTO.getStatus() == FastIotConstants.MagicNumber.ONE){
58 60 MessageTemplateDTO queryTemplate = new MessageTemplateDTO();
... ... @@ -69,6 +71,13 @@ public class TkMessageTemplateServiceImpl
69 71 }
70 72 }
71 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 81 templateDTO.copyToEntity(messageTemplate);
73 82 baseMapper.updateById(messageTemplate);
74 83 messageTemplate.copyToDTO(templateDTO);
... ...
... ... @@ -14,7 +14,7 @@ public interface TkMessageConfigService extends BaseService<TkMessageConfigEntit
14 14
15 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 19 MessageConfigDTO updateMessageConfig(String tenantId,MessageConfigDTO configDTO);
20 20
... ...