Commit 75de6c14d8bd3bc323d4249430798d933d08603b
Merge branch '20220913' into 'master_dev'
fix(DEFECT-1017): 住户配置选择错误异常信息调整 See merge request yunteng/thingskit!230
Showing
7 changed files
with
53 additions
and
13 deletions
@@ -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 |