Commit 09c7933fe2c00fd82fb59dba40466daf7598d054

Authored by 云中非
2 parents 20884119 cca20b4a

Merge branch 'master' into 20220923

@@ -25,6 +25,7 @@ import org.thingsboard.server.controller.BaseController; @@ -25,6 +25,7 @@ import org.thingsboard.server.controller.BaseController;
25 import org.thingsboard.server.dao.yunteng.service.YtDataBoardService; 25 import org.thingsboard.server.dao.yunteng.service.YtDataBoardService;
26 import org.thingsboard.server.dao.yunteng.service.YtDataComponentService; 26 import org.thingsboard.server.dao.yunteng.service.YtDataComponentService;
27 27
  28 +import java.util.ArrayList;
28 import java.util.List; 29 import java.util.List;
29 30
30 @RestController 31 @RestController
@@ -129,6 +130,18 @@ public class YtDataComponentController extends BaseController { @@ -129,6 +130,18 @@ public class YtDataComponentController extends BaseController {
129 ? Math.max(dataBoardDTO.getComponentNum() - deleteNum, zero) 130 ? Math.max(dataBoardDTO.getComponentNum() - deleteNum, zero)
130 : zero; 131 : zero;
131 ytDataBoardService.updateDataBoardComponentNum(dataBoardId, tenantId, count); 132 ytDataBoardService.updateDataBoardComponentNum(dataBoardId, tenantId, count);
  133 + // 更新dataBoard的layout信息
  134 + DataBoardDTO dto = ytDataBoardService.findDataBoardInfoById(dataBoardId, tenantId);
  135 + List<ComponentLayoutDTO> layoutResult = new ArrayList<>();
  136 + for (ComponentLayoutDTO componentLayout : dto.getLayout()) {
  137 + for (String id : deleteDTO.getIds()) {
  138 + if (!componentLayout.getId().equals(id)) {
  139 + layoutResult.add(componentLayout);
  140 + }
  141 + }
  142 + }
  143 + dto.setLayout(layoutResult);
  144 + ytDataBoardService.saveOrUpdateDataBoard(dto);
132 } 145 }
133 return ResponseResult.success(result); 146 return ResponseResult.success(result);
134 } 147 }
@@ -8,7 +8,7 @@ import java.util.List; @@ -8,7 +8,7 @@ import java.util.List;
8 8
9 @Data 9 @Data
10 public class DataComponentDTO extends TenantDTO { 10 public class DataComponentDTO extends TenantDTO {
11 - @ApiModelProperty(value = "组件名称", required = true) 11 + @ApiModelProperty(value = "组件名称")
12 private String name; 12 private String name;
13 13
14 @ApiModelProperty(value = "数据看板ID", required = true) 14 @ApiModelProperty(value = "数据看板ID", required = true)
@@ -10,10 +10,7 @@ import org.springframework.transaction.annotation.Transactional; @@ -10,10 +10,7 @@ import org.springframework.transaction.annotation.Transactional;
10 import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants; 10 import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants;
11 import org.thingsboard.server.common.data.yunteng.core.exception.YtDataValidationException; 11 import org.thingsboard.server.common.data.yunteng.core.exception.YtDataValidationException;
12 import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage; 12 import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
13 -import org.thingsboard.server.common.data.yunteng.dto.BaseDTO;  
14 -import org.thingsboard.server.common.data.yunteng.dto.DataBoardDTO;  
15 -import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;  
16 -import org.thingsboard.server.common.data.yunteng.dto.OrganizationDTO; 13 +import org.thingsboard.server.common.data.yunteng.dto.*;
17 import org.thingsboard.server.common.data.yunteng.dto.board.ComponentLayoutDTO; 14 import org.thingsboard.server.common.data.yunteng.dto.board.ComponentLayoutDTO;
18 import org.thingsboard.server.common.data.yunteng.utils.JacksonUtil; 15 import org.thingsboard.server.common.data.yunteng.utils.JacksonUtil;
19 import org.thingsboard.server.common.data.yunteng.utils.tools.YtPageData; 16 import org.thingsboard.server.common.data.yunteng.utils.tools.YtPageData;
@@ -23,6 +20,7 @@ import org.thingsboard.server.dao.yunteng.mapper.OrganizationMapper; @@ -23,6 +20,7 @@ import org.thingsboard.server.dao.yunteng.mapper.OrganizationMapper;
23 import org.thingsboard.server.dao.yunteng.service.AbstractBaseService; 20 import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
24 import org.thingsboard.server.dao.yunteng.service.UserOrganizationMappingService; 21 import org.thingsboard.server.dao.yunteng.service.UserOrganizationMappingService;
25 import org.thingsboard.server.dao.yunteng.service.YtDataBoardService; 22 import org.thingsboard.server.dao.yunteng.service.YtDataBoardService;
  23 +import org.thingsboard.server.dao.yunteng.service.YtDataComponentService;
26 24
27 import java.util.*; 25 import java.util.*;
28 import java.util.stream.Collectors; 26 import java.util.stream.Collectors;
@@ -33,6 +31,7 @@ public class YtDataBoardServiceImpl extends AbstractBaseService<DataBoardMapper, @@ -33,6 +31,7 @@ public class YtDataBoardServiceImpl extends AbstractBaseService<DataBoardMapper,
33 implements YtDataBoardService { 31 implements YtDataBoardService {
34 private final OrganizationMapper organizationMapper; 32 private final OrganizationMapper organizationMapper;
35 private final UserOrganizationMappingService userOrganizationMappingService; 33 private final UserOrganizationMappingService userOrganizationMappingService;
  34 + private final YtDataComponentService ytDataComponentService;
36 35
37 @Override 36 @Override
38 public YtPageData<DataBoardDTO> dataBoardPage(Map<String, Object> queryMap, boolean tenantAdmin) { 37 public YtPageData<DataBoardDTO> dataBoardPage(Map<String, Object> queryMap, boolean tenantAdmin) {
@@ -89,6 +88,9 @@ public class YtDataBoardServiceImpl extends AbstractBaseService<DataBoardMapper, @@ -89,6 +88,9 @@ public class YtDataBoardServiceImpl extends AbstractBaseService<DataBoardMapper,
89 e.printStackTrace(); 88 e.printStackTrace();
90 } 89 }
91 } else { 90 } else {
  91 + if (null != dataBoardDTO.getLayout() && !dataBoardDTO.getLayout().isEmpty()) {
  92 + dataBoard.setLayout(JacksonUtil.convertValue(dataBoardDTO.getLayout(), JsonNode.class));
  93 + }
92 DataBoard board = 94 DataBoard board =
93 baseMapper.selectOne( 95 baseMapper.selectOne(
94 new LambdaQueryWrapper<DataBoard>() 96 new LambdaQueryWrapper<DataBoard>()
@@ -107,6 +109,12 @@ public class YtDataBoardServiceImpl extends AbstractBaseService<DataBoardMapper, @@ -107,6 +109,12 @@ public class YtDataBoardServiceImpl extends AbstractBaseService<DataBoardMapper,
107 @Override 109 @Override
108 @Transactional 110 @Transactional
109 public boolean deleteDataBoard(DeleteDTO deleteDTO) { 111 public boolean deleteDataBoard(DeleteDTO deleteDTO) {
  112 + List<DataComponentDTO> dataComponentDTOList =
  113 + ytDataComponentService.findDataComponentsByDataBoardIds(
  114 + deleteDTO.getTenantId(), deleteDTO.getIds());
  115 + if (null != dataComponentDTOList && !dataComponentDTOList.isEmpty()) {
  116 + throw new YtDataValidationException(ErrorMessage.EXIST_LEADER_MEMBER_RELATION.getMessage());
  117 + }
110 return baseMapper.delete( 118 return baseMapper.delete(
111 new LambdaQueryWrapper<DataBoard>() 119 new LambdaQueryWrapper<DataBoard>()
112 .eq(DataBoard::getTenantId, deleteDTO.getTenantId()) 120 .eq(DataBoard::getTenantId, deleteDTO.getTenantId())
@@ -19,6 +19,7 @@ import org.thingsboard.server.dao.yunteng.service.YtDataComponentService; @@ -19,6 +19,7 @@ import org.thingsboard.server.dao.yunteng.service.YtDataComponentService;
19 import java.util.ArrayList; 19 import java.util.ArrayList;
20 import java.util.List; 20 import java.util.List;
21 import java.util.Optional; 21 import java.util.Optional;
  22 +import java.util.Set;
22 import java.util.stream.Collectors; 23 import java.util.stream.Collectors;
23 24
24 @Service 25 @Service
@@ -36,18 +37,7 @@ public class YtDataComponentServiceImpl @@ -36,18 +37,7 @@ public class YtDataComponentServiceImpl
36 return null; 37 return null;
37 } 38 }
38 return dataComponentList.stream() 39 return dataComponentList.stream()
39 - .map(  
40 - obj -> {  
41 - DataComponentDTO dto = obj.getDTO(DataComponentDTO.class);  
42 - List<DataSourceInfoDTO> list = new ArrayList<>();  
43 - if (null != obj.getDataSource() && obj.getDataSource().isArray()) {  
44 - for (JsonNode jsonNode : obj.getDataSource()) {  
45 - list.add(JacksonUtil.convertValue(jsonNode, DataSourceInfoDTO.class));  
46 - }  
47 - }  
48 - dto.setDataSource(list);  
49 - return dto;  
50 - }) 40 + .map(this::getDataSourceByJsonNode)
51 .collect(Collectors.toList()); 41 .collect(Collectors.toList());
52 } 42 }
53 43
@@ -81,8 +71,33 @@ public class YtDataComponentServiceImpl @@ -81,8 +71,33 @@ public class YtDataComponentServiceImpl
81 @Transactional 71 @Transactional
82 public int deleteDataComponent(DeleteDTO deleteDTO) { 72 public int deleteDataComponent(DeleteDTO deleteDTO) {
83 return baseMapper.delete( 73 return baseMapper.delete(
  74 + new LambdaQueryWrapper<DataComponent>()
  75 + .eq(DataComponent::getTenantId, deleteDTO.getTenantId())
  76 + .in(DataComponent::getId, deleteDTO.getIds()));
  77 + }
  78 +
  79 + @Override
  80 + public List<DataComponentDTO> findDataComponentsByDataBoardIds(
  81 + String tenantId, Set<String> dataBoardIds) {
  82 + List<DataComponent> dataComponents =
  83 + baseMapper.selectList(
84 new LambdaQueryWrapper<DataComponent>() 84 new LambdaQueryWrapper<DataComponent>()
85 - .eq(DataComponent::getTenantId, deleteDTO.getTenantId())  
86 - .in(DataComponent::getId, deleteDTO.getIds())); 85 + .eq(DataComponent::getTenantId, tenantId)
  86 + .in(DataComponent::getDataBoardId, dataBoardIds));
  87 + return Optional.ofNullable(dataComponents)
  88 + .map(obj -> obj.stream().map(this::getDataSourceByJsonNode).collect(Collectors.toList()))
  89 + .orElse(null);
  90 + }
  91 +
  92 + private DataComponentDTO getDataSourceByJsonNode(DataComponent obj) {
  93 + DataComponentDTO dto = obj.getDTO(DataComponentDTO.class);
  94 + List<DataSourceInfoDTO> list = new ArrayList<>();
  95 + if (null != obj.getDataSource() && obj.getDataSource().isArray()) {
  96 + for (JsonNode jsonNode : obj.getDataSource()) {
  97 + list.add(JacksonUtil.convertValue(jsonNode, DataSourceInfoDTO.class));
  98 + }
  99 + }
  100 + dto.setDataSource(list);
  101 + return dto;
87 } 102 }
88 } 103 }
@@ -4,6 +4,7 @@ import org.thingsboard.server.common.data.yunteng.dto.DataComponentDTO; @@ -4,6 +4,7 @@ import org.thingsboard.server.common.data.yunteng.dto.DataComponentDTO;
4 import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO; 4 import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
5 5
6 import java.util.List; 6 import java.util.List;
  7 +import java.util.Set;
7 8
8 public interface YtDataComponentService { 9 public interface YtDataComponentService {
9 /** 10 /**
@@ -27,4 +28,12 @@ public interface YtDataComponentService { @@ -27,4 +28,12 @@ public interface YtDataComponentService {
27 * @param deleteDTO 删除IDS 28 * @param deleteDTO 删除IDS
28 */ 29 */
29 int deleteDataComponent(DeleteDTO deleteDTO); 30 int deleteDataComponent(DeleteDTO deleteDTO);
  31 +
  32 + /**
  33 + * 查询数据看板下面是否还有组件
  34 + * @param tenantId 租户ID
  35 + * @param dataBoardIds 数据看板IDS
  36 + * @return 组件信息
  37 + */
  38 + List<DataComponentDTO> findDataComponentsByDataBoardIds(String tenantId, Set<String> dataBoardIds);
30 } 39 }