Commit 0adf42195ffd05f5cd93daf9b97a92d68c8c25cf

Authored by 芯火源
1 parent 14323d91

refactor(DEFECT-1009): 消息配置被使用时,不能删除

消息模板启用时,监测消息配置是否存在。
... ... @@ -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 }
... ...
... ... @@ -108,8 +108,9 @@ public enum ErrorMessage {
108 108 HIKVISION_API_ERROR(400084,"海康威视视频预览API调用失败【%s】,错误码【%s】"),
109 109 RESET_PASSWORD_SUCCESS(400085,"重置成功,请使用默认密码登录"),
110 110 HAVE_NO_PERMISSION(500002,"没有修改权限"),
  111 + MESSAGE_TEMPLATE_DELETED(400020,"消息模板不存在!"),
111 112 NOT_ALLOED_ISOLATED_IN_MONOLITH(500003,"【monolith】模式下,不能选择【isolated】类型的租户配置"),
112   - MESSAGE_TEMPLATE_USING_CONFIG(500003,"消息模板【%s】正在使用消息配置。");
  113 + MESSAGE_TEMPLATE_USING_CONFIG(500003,"删除消息配置前,需要禁用使用消息配置的消息模板%s。");
113 114 private final int code;
114 115 private String message;
115 116
... ...
... ... @@ -3,9 +3,8 @@ package org.thingsboard.server.dao.yunteng.impl;
3 3 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
4 4 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
5 5 import com.baomidou.mybatisplus.core.metadata.IPage;
6   -import java.util.List;
7   -import java.util.Map;
8   -import java.util.Set;
  6 +
  7 +import java.util.*;
9 8 import java.util.stream.Collectors;
10 9
11 10 import lombok.RequiredArgsConstructor;
... ... @@ -18,6 +17,7 @@ import org.thingsboard.server.common.data.yunteng.constant.ModelConstants;
18 17 import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException;
19 18 import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
20 19 import org.thingsboard.server.common.data.yunteng.dto.MessageConfigDTO;
  20 +import org.thingsboard.server.common.data.yunteng.enums.StatusEnum;
21 21 import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils;
22 22 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
23 23 import org.thingsboard.server.dao.yunteng.entities.TkMessageConfigEntity;
... ... @@ -76,12 +76,16 @@ public class TkMessageConfigServiceImpl
76 76
77 77 @Override
78 78 @Transactional
79   - public boolean deleteMessageConfig(Set<String> ids) {
  79 + public boolean deleteMessageConfig(Set<String> ids,String tenantId) {
80 80 LambdaQueryWrapper<TkMessageTemplateEntity> filter = new LambdaQueryWrapper<>();
81   - filter.in(TkMessageTemplateEntity::getMessageConfigId,ids);
  81 + filter
  82 + .in(TkMessageTemplateEntity::getMessageConfigId, ids)
  83 + .eq(TkMessageTemplateEntity::getTenantId, tenantId)
  84 + .eq(TkMessageTemplateEntity::getStatus, StatusEnum.ENABLE.getIndex());
82 85 List<TkMessageTemplateEntity> templates = templateMapper.selectList(filter);
83 86 if(templates.size()>0){
84   - String errMsg = String.format(ErrorMessage.MESSAGE_TEMPLATE_USING_CONFIG.getMessage(),templates.stream().map(t->t.getTemplateName()).collect(Collectors.toList()));
  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);
85 89 throw new TkDataValidationException(errMsg);
86 90 }
87 91 return baseMapper.deleteBatchIds(ids) > 0;
... ...
... ... @@ -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
... ...