Commit 9a61cfa1f00604a666ea20e6eb9bc999b68166fb

Authored by 芯火源
2 parents 732e9fdf 110561dd

Merge branch 'master_dev' into 20230426

... ... @@ -181,11 +181,12 @@ public class TkDeviceProfileController extends BaseController {
181 181 @DeleteMapping
182 182 @ApiOperation("删除")
183 183 @PreAuthorize("@check.checkPermissions({'TENANT_ADMIN'},{'api:yt:deviceProfile:delete'})")
184   - public void deleteDevices(@Validated({DeleteGroup.class}) @RequestBody DeleteDTO deleteDTO)
  184 + public void deleteDeviceProfiles(@Validated({DeleteGroup.class}) @RequestBody DeleteDTO deleteDTO)
185 185 throws ThingsboardException {
186 186 String tenantId = getCurrentUser().getCurrentTenantId();
187 187 ytDeviceProfileService.checkDeviceProfiles(tenantId, deleteDTO.getIds());
188 188
  189 +
189 190 for (String id : deleteDTO.getIds()) {
190 191 deleteTbDeviceProfile(id);
191 192 }
... ...
1 1 package org.thingsboard.server.controller.yunteng;
2 2
3 3 import lombok.RequiredArgsConstructor;
  4 +import org.apache.commons.lang3.StringUtils;
4 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 7 import org.thingsboard.server.common.data.TenantProfile;
10 8 import org.thingsboard.server.common.data.exception.ThingsboardException;
11 9 import org.thingsboard.server.common.data.id.TenantId;
12 10 import org.thingsboard.server.common.data.page.PageData;
13 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 15 import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum;
15 16 import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils;
  17 +import org.thingsboard.server.common.data.yunteng.utils.tools.ResponseResult;
16 18 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
17 19 import org.thingsboard.server.controller.BaseController;
  20 +import org.thingsboard.server.dao.yunteng.service.TkTenantService;
18 21
19 22 import java.util.List;
20 23 import java.util.UUID;
... ... @@ -25,6 +28,7 @@ import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.
25 28 @RequestMapping("/api/yt/tenant_profiles")
26 29 @RequiredArgsConstructor
27 30 public class TkTenantProfilesController extends BaseController {
  31 + private final TkTenantService tkTenantService;
28 32
29 33 @PreAuthorize("@check.checkPermissions({'SYS_ADMIN','PLATFORM_ADMIN'},{})")
30 34 @GetMapping(
... ... @@ -47,7 +51,7 @@ public class TkTenantProfilesController extends BaseController {
47 51 orderBy,
48 52 null == orderType ? OrderTypeEnum.DESC.name() : orderType.name());
49 53 TenantId tenantId = getTenantId();
50   - if(getCurrentUser().isPtAdmin()){
  54 + if (getCurrentUser().isPtAdmin()) {
51 55 tenantId = new TenantId(UUID.fromString(getCurrentUser().getCurrentTenantId()));
52 56 }
53 57 PageData<TenantProfile> tenantProfilePageData =
... ... @@ -59,4 +63,23 @@ public class TkTenantProfilesController extends BaseController {
59 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 }
... ...
... ... @@ -95,6 +95,9 @@ public enum ErrorMessage {
95 95 DATA_STATE_ENABLE_NOT_DELETE(400071,"【%s】数据为启用状态不能删除!!"),
96 96 EXECUTE_COMMAND_IS_NULL(400072,"执行命令不能为空"),
97 97 DEVICE_NAME_ALREADY_EXISTS(400073,"别名或设备名称已被使用"),
  98 + TENANT_USED_THIS_TENANT_PROFILE_ID(400074,"【%s】正在使用该租户配置"),
  99 + DEVICE_PROFILE_USED_BY_DEVICE(400075,"有设备使用待删除配置,请先删除设备或者修改设备配置"),
  100 + TASK_CENTER_IS_DISABLED(400076,"【%s】任务是禁用状态,不能执行"),
98 101 HAVE_NO_PERMISSION(500002,"没有修改权限");
99 102 private final int code;
100 103 private String message;
... ...
... ... @@ -146,9 +146,9 @@ public class TkDeviceProfileServiceImpl
146 146 // check if ids bind to device
147 147 int count =
148 148 deviceMapper.selectCount(
149   - new QueryWrapper<TkDeviceEntity>().lambda().in(TkDeviceEntity::getProfileId, ids));
  149 + new QueryWrapper<TkDeviceEntity>().lambda().in(TkDeviceEntity::getDeviceProfileId, ids));
150 150 if (count > 0) {
151   - throw new TkDataValidationException("有设备使用待删除配置,请先删除设备或者修改设备配置");
  151 + throw new TkDataValidationException(ErrorMessage.DEVICE_PROFILE_USED_BY_DEVICE.getMessage());
152 152 }
153 153 }
154 154
... ...
... ... @@ -310,24 +310,22 @@ public class TkTaskCenterServiceImpl
310 310 @Override
311 311 public boolean immediateExecute(TaskImmediateExecuteDTO immediateExecuteDTO, String tenantId)
312 312 throws SchedulerException {
313   - // 放入缓存
314 313 String taskCenterId = immediateExecuteDTO.getId();
315   - String key = FastIotConstants.CacheConfigKey.TASK_IMMEDIATE_EXECUTE + "_" + taskCenterId;
316   - cacheUtils.put(cacheName, key, immediateExecuteDTO);
  314 + boolean result = false;
317 315 // 直接调用任务中心任务执行
318 316 SysJobDTO sysJobDTO = tkSysJobService.findSysJobBySourceId(taskCenterId);
319   - if (null == sysJobDTO) {
320   - sysJobDTO = new SysJobDTO();
321   - sysJobDTO.setSourceId(taskCenterId);
322   - sysJobDTO.setInvokeTarget("rpcCommandTask.process('" + taskCenterId + "')");
323   - sysJobDTO.setJobGroup(JobGroupEnum.TASK_CENTER.name());
324   - sysJobDTO.setTenantId(tenantId);
325   - sysJobDTO.setCronExpression(immediateExecuteDTO.getCronExpression());
326   - sysJobDTO.setJobName(immediateExecuteDTO.getName());
327   - sysJobDTO.setStatus(StatusEnum.DISABLE.getIndex());
328   - tkSysJobService.saveOrUpdateJob(sysJobDTO);
  317 + if (null != sysJobDTO) {
  318 + if (Objects.equals(sysJobDTO.getStatus(), StatusEnum.DISABLE.getIndex())) {
  319 + throw new TkDataValidationException(
  320 + String.format(
  321 + ErrorMessage.TASK_CENTER_IS_DISABLED.getMessage(), sysJobDTO.getJobName()));
  322 + }
  323 + result = tkSysJobService.run(sysJobDTO);
  324 + // 放入缓存
  325 + String key = FastIotConstants.CacheConfigKey.TASK_IMMEDIATE_EXECUTE + "_" + taskCenterId;
  326 + cacheUtils.put(cacheName, key, immediateExecuteDTO);
329 327 }
330   - return tkSysJobService.run(sysJobDTO);
  328 + return result;
331 329 }
332 330
333 331 private void updateTaskCenterCache(TkTaskCenterEntity entity) {
... ...
... ... @@ -334,6 +334,21 @@ public class TkTenantServiceImpl extends AbstractBaseService<TenantMapper, SysTe
334 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 34 List<TenantDTO> getAllTenant();
35 35
36 36 CompletableFuture<TsValue> findTenantsByTs(LocalDateTime startTs, LocalDateTime endTs,long ts);
  37 +
  38 + List<TenantDTO> checkTenantProfileIdUsedByTenants(String tenantProfileId);
37 39 }
... ...