Commit 02ae52d72ab1d8389e0c4a2ea6ab8eba5801b6f9

Authored by xp.Huang
1 parent 3612fa7a

feat: 提供删除租户配置前的检查接口

1 package org.thingsboard.server.controller.yunteng; 1 package org.thingsboard.server.controller.yunteng;
2 2
3 import lombok.RequiredArgsConstructor; 3 import lombok.RequiredArgsConstructor;
  4 +import org.apache.commons.lang3.StringUtils;
4 import org.springframework.security.access.prepost.PreAuthorize; 5 import org.springframework.security.access.prepost.PreAuthorize;
5 -import org.springframework.web.bind.annotation.GetMapping;  
6 -import org.springframework.web.bind.annotation.RequestMapping;  
7 -import org.springframework.web.bind.annotation.RequestParam;  
8 -import org.springframework.web.bind.annotation.RestController; 6 +import org.springframework.web.bind.annotation.*;
9 import org.thingsboard.server.common.data.TenantProfile; 7 import org.thingsboard.server.common.data.TenantProfile;
10 import org.thingsboard.server.common.data.exception.ThingsboardException; 8 import org.thingsboard.server.common.data.exception.ThingsboardException;
11 import org.thingsboard.server.common.data.id.TenantId; 9 import org.thingsboard.server.common.data.id.TenantId;
12 import org.thingsboard.server.common.data.page.PageData; 10 import org.thingsboard.server.common.data.page.PageData;
13 import org.thingsboard.server.common.data.page.PageLink; 11 import org.thingsboard.server.common.data.page.PageLink;
  12 +import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException;
  13 +import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
  14 +import org.thingsboard.server.common.data.yunteng.dto.TenantDTO;
14 import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum; 15 import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum;
15 import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils; 16 import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils;
  17 +import org.thingsboard.server.common.data.yunteng.utils.tools.ResponseResult;
16 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData; 18 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
17 import org.thingsboard.server.controller.BaseController; 19 import org.thingsboard.server.controller.BaseController;
  20 +import org.thingsboard.server.dao.yunteng.service.TkTenantService;
18 21
19 import java.util.List; 22 import java.util.List;
20 import java.util.UUID; 23 import java.util.UUID;
@@ -25,6 +28,7 @@ import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant. @@ -25,6 +28,7 @@ import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.
25 @RequestMapping("/api/yt/tenant_profiles") 28 @RequestMapping("/api/yt/tenant_profiles")
26 @RequiredArgsConstructor 29 @RequiredArgsConstructor
27 public class TkTenantProfilesController extends BaseController { 30 public class TkTenantProfilesController extends BaseController {
  31 + private final TkTenantService tkTenantService;
28 32
29 @PreAuthorize("@check.checkPermissions({'SYS_ADMIN','PLATFORM_ADMIN'},{})") 33 @PreAuthorize("@check.checkPermissions({'SYS_ADMIN','PLATFORM_ADMIN'},{})")
30 @GetMapping( 34 @GetMapping(
@@ -47,7 +51,7 @@ public class TkTenantProfilesController extends BaseController { @@ -47,7 +51,7 @@ public class TkTenantProfilesController extends BaseController {
47 orderBy, 51 orderBy,
48 null == orderType ? OrderTypeEnum.DESC.name() : orderType.name()); 52 null == orderType ? OrderTypeEnum.DESC.name() : orderType.name());
49 TenantId tenantId = getTenantId(); 53 TenantId tenantId = getTenantId();
50 - if(getCurrentUser().isPtAdmin()){ 54 + if (getCurrentUser().isPtAdmin()) {
51 tenantId = new TenantId(UUID.fromString(getCurrentUser().getCurrentTenantId())); 55 tenantId = new TenantId(UUID.fromString(getCurrentUser().getCurrentTenantId()));
52 } 56 }
53 PageData<TenantProfile> tenantProfilePageData = 57 PageData<TenantProfile> tenantProfilePageData =
@@ -59,4 +63,23 @@ public class TkTenantProfilesController extends BaseController { @@ -59,4 +63,23 @@ public class TkTenantProfilesController extends BaseController {
59 throw handleException(e); 63 throw handleException(e);
60 } 64 }
61 } 65 }
  66 +
  67 + @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'PLATFORM_ADMIN')")
  68 + @GetMapping("/allow/{tenantProfileId}/delete")
  69 + public ResponseResult<Boolean> deleteCheck(
  70 + @PathVariable("tenantProfileId") String tenantProfileId) {
  71 + if (StringUtils.isEmpty(tenantProfileId)) {
  72 + throw new TkDataValidationException(ErrorMessage.INVALID_PARAMETER.getMessage());
  73 + }
  74 + List<TenantDTO> dtoList = tkTenantService.checkTenantProfileIdUsedByTenants(tenantProfileId);
  75 + boolean result = null == dtoList || dtoList.isEmpty();
  76 + String message = "OK";
  77 + if (!result) {
  78 + message =
  79 + String.format(
  80 + ErrorMessage.TENANT_USED_THIS_TENANT_PROFILE_ID.getMessage(),
  81 + dtoList.get(0).getName());
  82 + }
  83 + return ResponseResult.success(result, message);
  84 + }
62 } 85 }
@@ -334,6 +334,21 @@ public class TkTenantServiceImpl extends AbstractBaseService<TenantMapper, SysTe @@ -334,6 +334,21 @@ public class TkTenantServiceImpl extends AbstractBaseService<TenantMapper, SysTe
334 return CompletableFuture.supplyAsync(() -> new TsValue(ts, String.valueOf(tenants.size()))); 334 return CompletableFuture.supplyAsync(() -> new TsValue(ts, String.valueOf(tenants.size())));
335 } 335 }
336 336
  337 + @Override
  338 + public List<TenantDTO> checkTenantProfileIdUsedByTenants(String tenantProfileId) {
  339 + List<SysTenantEntity> entities =
  340 + baseMapper.selectList(
  341 + new LambdaQueryWrapper<SysTenantEntity>()
  342 + .eq(SysTenantEntity::getTenantProfileId, tenantProfileId));
  343 + return Optional.ofNullable(entities)
  344 + .map(
  345 + list ->
  346 + list.stream()
  347 + .map(entity -> entity.getDTO(TenantDTO.class))
  348 + .collect(Collectors.toList()))
  349 + .orElse(null);
  350 + }
  351 +
337 /** 352 /**
338 * 保存租户与菜单、角色的映射关系 353 * 保存租户与菜单、角色的映射关系
339 * 354 *
@@ -34,4 +34,6 @@ public interface TkTenantService { @@ -34,4 +34,6 @@ public interface TkTenantService {
34 List<TenantDTO> getAllTenant(); 34 List<TenantDTO> getAllTenant();
35 35
36 CompletableFuture<TsValue> findTenantsByTs(LocalDateTime startTs, LocalDateTime endTs,long ts); 36 CompletableFuture<TsValue> findTenantsByTs(LocalDateTime startTs, LocalDateTime endTs,long ts);
  37 +
  38 + List<TenantDTO> checkTenantProfileIdUsedByTenants(String tenantProfileId);
37 } 39 }