Commit 245f2fa788825b5e38a91af1f8294ca304dd7006

Authored by 云中非
1 parent d27f9d3c

refactor: 节点信息保存DTO优化

@@ -9,21 +9,17 @@ import org.springframework.validation.annotation.Validated; @@ -9,21 +9,17 @@ import org.springframework.validation.annotation.Validated;
9 import org.springframework.web.bind.annotation.*; 9 import org.springframework.web.bind.annotation.*;
10 import org.thingsboard.server.common.data.exception.ThingsboardException; 10 import org.thingsboard.server.common.data.exception.ThingsboardException;
11 import org.thingsboard.server.common.data.yunteng.common.AddGroup; 11 import org.thingsboard.server.common.data.yunteng.common.AddGroup;
12 -import org.thingsboard.server.common.data.yunteng.common.DeleteGroup;  
13 import org.thingsboard.server.common.data.yunteng.core.exception.YtDataValidationException; 12 import org.thingsboard.server.common.data.yunteng.core.exception.YtDataValidationException;
14 import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage; 13 import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
15 -import org.thingsboard.server.common.data.yunteng.dto.ConfigurationActDTO;  
16 -import org.thingsboard.server.common.data.yunteng.dto.ConfigurationDatasourceDTO;  
17 -import org.thingsboard.server.common.data.yunteng.dto.ConfigurationEventDTO;  
18 -import org.thingsboard.server.common.data.yunteng.dto.ConfigurationNodeDTO; 14 +import org.thingsboard.server.common.data.yunteng.dto.*;
  15 +import org.thingsboard.server.common.data.yunteng.utils.JacksonUtil;
  16 +import org.thingsboard.server.common.transport.util.JsonUtils;
19 import org.thingsboard.server.controller.BaseController; 17 import org.thingsboard.server.controller.BaseController;
20 import org.thingsboard.server.dao.yunteng.service.YtConfigurationActService; 18 import org.thingsboard.server.dao.yunteng.service.YtConfigurationActService;
21 import org.thingsboard.server.dao.yunteng.service.YtConfigurationDatasourceService; 19 import org.thingsboard.server.dao.yunteng.service.YtConfigurationDatasourceService;
22 import org.thingsboard.server.dao.yunteng.service.YtConfigurationEventService; 20 import org.thingsboard.server.dao.yunteng.service.YtConfigurationEventService;
23 21
24 -import java.util.HashMap;  
25 import java.util.List; 22 import java.util.List;
26 -import java.util.Map;  
27 import java.util.Optional; 23 import java.util.Optional;
28 24
29 /** 25 /**
@@ -41,32 +37,37 @@ public class YtConfigurationNodeController extends BaseController { @@ -41,32 +37,37 @@ public class YtConfigurationNodeController extends BaseController {
41 37
42 @PostMapping 38 @PostMapping
43 @ApiOperation("编辑节点信息") 39 @ApiOperation("编辑节点信息")
44 - public ResponseEntity<ConfigurationNodeDTO> saveNode(  
45 - @Validated({AddGroup.class}) @RequestBody ConfigurationNodeDTO nodeDTO) 40 + public ResponseEntity<ConfigurationNodeStateDTO> saveNode(
  41 + @Validated({AddGroup.class}) @RequestBody ConfigurationNodeStateDTO nodeDTO)
46 throws ThingsboardException { 42 throws ThingsboardException {
47 String tenantId = getCurrentUser().getCurrentTenantId(); 43 String tenantId = getCurrentUser().getCurrentTenantId();
48 - Optional.ofNullable(nodeDTO.getDataSources()).ifPresent(datas ->{  
49 - datas.forEach(one -> {  
50 - if(!one.getTenantId().equals(tenantId)){  
51 - throw new YtDataValidationException(ErrorMessage.HAVE_NO_PERMISSION.getMessage());  
52 - }  
53 - datasourceService.saveConfigurationDatasource(one);  
54 - }); 44 + Optional.ofNullable(nodeDTO.getDataSources()).ifPresent(one ->{
  45 + ConfigurationDatasourceDTO dto = JacksonUtil.convertValue(one,ConfigurationDatasourceDTO.class);
  46 + dto.setTenantId(tenantId);
  47 + dto.setConfigurationId(nodeDTO.getConfigurationId());
  48 + dto.setContentId(nodeDTO.getContentId());
  49 + dto.setNodeId(nodeDTO.getNodeId());
  50 + datasourceService.saveConfigurationDatasource(dto);
55 }); 51 });
56 Optional.ofNullable(nodeDTO.getEvent()).ifPresent(datas ->{ 52 Optional.ofNullable(nodeDTO.getEvent()).ifPresent(datas ->{
57 datas.forEach(one -> { 53 datas.forEach(one -> {
58 - if(!one.getTenantId().equals(tenantId)){  
59 - throw new YtDataValidationException(ErrorMessage.HAVE_NO_PERMISSION.getMessage());  
60 - }  
61 - eventService.saveConfigurationEvent(one); 54 + ConfigurationEventDTO dto = JacksonUtil.convertValue(one,ConfigurationEventDTO.class);
  55 + dto.setTenantId(tenantId);
  56 + dto.setConfigurationId(nodeDTO.getConfigurationId());
  57 + dto.setContentId(nodeDTO.getContentId());
  58 + dto.setId(nodeDTO.getNodeId());
  59 + eventService.saveConfigurationEvent(dto);
62 }); 60 });
63 }); 61 });
64 Optional.ofNullable(nodeDTO.getAct()).ifPresent(datas ->{ 62 Optional.ofNullable(nodeDTO.getAct()).ifPresent(datas ->{
65 datas.forEach(one -> { 63 datas.forEach(one -> {
66 - if(!one.getTenantId().equals(tenantId)){  
67 - throw new YtDataValidationException(ErrorMessage.HAVE_NO_PERMISSION.getMessage());  
68 - }  
69 - actService.saveConfigurationAct(one); 64 +
  65 + ConfigurationActDTO dto = JacksonUtil.convertValue(one,ConfigurationActDTO.class);
  66 + dto.setTenantId(tenantId);
  67 + dto.setConfigurationId(nodeDTO.getConfigurationId());
  68 + dto.setContentId(nodeDTO.getContentId());
  69 + dto.setId(nodeDTO.getNodeId());
  70 + actService.saveConfigurationAct(dto);
70 }); 71 });
71 }); 72 });
72 return ResponseEntity.ok(nodeDTO); 73 return ResponseEntity.ok(nodeDTO);
@@ -129,7 +130,7 @@ public class YtConfigurationNodeController extends BaseController { @@ -129,7 +130,7 @@ public class YtConfigurationNodeController extends BaseController {
129 130
130 @GetMapping("/{levelType}/{levelId}") 131 @GetMapping("/{levelType}/{levelId}")
131 @ApiOperation("组件信息") 132 @ApiOperation("组件信息")
132 - public ResponseEntity<ConfigurationNodeDTO> nodeInform( 133 + public ResponseEntity<ConfigurationNodeDetailDTO> nodeInform(
133 @ApiParam(value = "组态资源类型,例如:CONFIGURE、CONTENT、NODE", required = true, defaultValue = "NODE") @PathVariable("levelType") String levelType, 134 @ApiParam(value = "组态资源类型,例如:CONFIGURE、CONTENT、NODE", required = true, defaultValue = "NODE") @PathVariable("levelType") String levelType,
134 @ApiParam(value = "组态资源ID", required = true) @PathVariable("levelId") String levelId) throws ThingsboardException { 135 @ApiParam(value = "组态资源ID", required = true) @PathVariable("levelId") String levelId) throws ThingsboardException {
135 String tenantId = getCurrentUser().getCurrentTenantId(); 136 String tenantId = getCurrentUser().getCurrentTenantId();
@@ -137,7 +138,7 @@ public class YtConfigurationNodeController extends BaseController { @@ -137,7 +138,7 @@ public class YtConfigurationNodeController extends BaseController {
137 List<ConfigurationDatasourceDTO> sources = datasourceService.listConfigurationDatasource(tenantId, levelType, levelId); 138 List<ConfigurationDatasourceDTO> sources = datasourceService.listConfigurationDatasource(tenantId, levelType, levelId);
138 List<ConfigurationEventDTO> events = eventService.listConfigurationEvent(tenantId, levelType, levelId); 139 List<ConfigurationEventDTO> events = eventService.listConfigurationEvent(tenantId, levelType, levelId);
139 List<ConfigurationActDTO> acts = actService.listConfigurationAct(tenantId, levelType, levelId); 140 List<ConfigurationActDTO> acts = actService.listConfigurationAct(tenantId, levelType, levelId);
140 - ConfigurationNodeDTO result = new ConfigurationNodeDTO(); 141 + ConfigurationNodeDetailDTO result = new ConfigurationNodeDetailDTO();
141 if (sources != null && sources.size() > 0) { 142 if (sources != null && sources.size() > 0) {
142 result.setDataSources(sources); 143 result.setDataSources(sources);
143 } 144 }
@@ -18,18 +18,8 @@ import java.util.List; @@ -18,18 +18,8 @@ import java.util.List;
18 */ 18 */
19 @EqualsAndHashCode(callSuper = true) 19 @EqualsAndHashCode(callSuper = true)
20 @Data 20 @Data
21 -public class ConfigurationActDTO extends TenantDTO {  
22 - @ApiModelProperty(value = "组态ID", required = true)  
23 - @NotEmpty(  
24 - message = "组态ID不能为空或空字符串",  
25 - groups = {UpdateGroup.class, AddGroup.class})  
26 - private String configurationId; 21 +public class ConfigurationActDTO extends ConfigurationDTO {
27 22
28 - @ApiModelProperty(value = "页面ID", required = true)  
29 - @NotEmpty(  
30 - message = "页面ID不能为空或空字符串",  
31 - groups = {UpdateGroup.class, AddGroup.class})  
32 - private String contentId;  
33 23
34 @ApiModelProperty(value = "动画类型", required = true) 24 @ApiModelProperty(value = "动画类型", required = true)
35 private ActTypeEnum type; 25 private ActTypeEnum type;
  1 +package org.thingsboard.server.common.data.yunteng.dto;
  2 +
  3 +import com.fasterxml.jackson.databind.JsonNode;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +import lombok.Data;
  6 +import lombok.EqualsAndHashCode;
  7 +import org.thingsboard.server.common.data.yunteng.common.AddGroup;
  8 +import org.thingsboard.server.common.data.yunteng.common.UpdateGroup;
  9 +import org.thingsboard.server.common.data.yunteng.enums.ActTypeEnum;
  10 +
  11 +import javax.validation.constraints.NotEmpty;
  12 +
  13 +/**
  14 + * 组态节点动画效果
  15 + * @author Administrator
  16 + */
  17 +@Data
  18 +public class ConfigurationActStatusDTO {
  19 +
  20 +
  21 + @ApiModelProperty(value = "动画类型", required = true)
  22 + private ActTypeEnum type;
  23 + @ApiModelProperty(value = "状态", required = true)
  24 + private Boolean enabled;
  25 +}
  1 +package org.thingsboard.server.common.data.yunteng.dto;
  2 +
  3 +import com.fasterxml.jackson.annotation.JsonFormat;
  4 +import com.fasterxml.jackson.annotation.JsonInclude;
  5 +import com.fasterxml.jackson.databind.annotation.JsonSerialize;
  6 +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
  7 +import io.swagger.annotations.ApiModelProperty;
  8 +import lombok.Data;
  9 +import lombok.EqualsAndHashCode;
  10 +import org.thingsboard.server.common.data.yunteng.common.AddGroup;
  11 +import org.thingsboard.server.common.data.yunteng.common.UpdateGroup;
  12 +import org.thingsboard.server.common.data.yunteng.enums.TenantStatusEnum;
  13 +
  14 +import javax.validation.constraints.NotEmpty;
  15 +import java.time.LocalDateTime;
  16 +
  17 +@EqualsAndHashCode(callSuper = false)
  18 +@Data
  19 +public class ConfigurationDTO extends TenantDTO {
  20 +
  21 +
  22 + @ApiModelProperty(value = "组态ID", required = true)
  23 + @NotEmpty(
  24 + message = "组态ID不能为空或空字符串",
  25 + groups = {UpdateGroup.class, AddGroup.class})
  26 + private String configurationId;
  27 +
  28 + @ApiModelProperty(value = "页面ID", required = true)
  29 + @NotEmpty(
  30 + message = "页面ID不能为空或空字符串",
  31 + groups = {UpdateGroup.class, AddGroup.class})
  32 + private String contentId;
  33 +
  34 +
  35 +}
@@ -17,25 +17,13 @@ import java.util.List; @@ -17,25 +17,13 @@ import java.util.List;
17 */ 17 */
18 @EqualsAndHashCode(callSuper = true) 18 @EqualsAndHashCode(callSuper = true)
19 @Data 19 @Data
20 -public class ConfigurationDatasourceDTO extends TenantDTO {  
21 - @ApiModelProperty(value = "组态ID", required = true)  
22 - @NotEmpty(  
23 - message = "组态ID不能为空或空字符串",  
24 - groups = {UpdateGroup.class, AddGroup.class})  
25 - private String configurationId;  
26 -  
27 - @ApiModelProperty(value = "页面ID", required = true)  
28 - @NotEmpty(  
29 - message = "页面ID不能为空或空字符串",  
30 - groups = {UpdateGroup.class, AddGroup.class})  
31 - private String contentId; 20 +public class ConfigurationDatasourceDTO extends ConfigurationDTO {
32 21
33 @ApiModelProperty(value = "组态ID", required = true) 22 @ApiModelProperty(value = "组态ID", required = true)
34 @NotEmpty( 23 @NotEmpty(
35 message = "组件ID不能未空或空字符串", 24 message = "组件ID不能未空或空字符串",
36 groups = {UpdateGroup.class, AddGroup.class}) 25 groups = {UpdateGroup.class, AddGroup.class})
37 private String nodeId; 26 private String nodeId;
38 -  
39 @ApiModelProperty(value = "orgId", required = true) 27 @ApiModelProperty(value = "orgId", required = true)
40 @NotEmpty( 28 @NotEmpty(
41 message = "设备所属组织ID", 29 message = "设备所属组织ID",
@@ -49,8 +37,11 @@ public class ConfigurationDatasourceDTO extends TenantDTO { @@ -49,8 +37,11 @@ public class ConfigurationDatasourceDTO extends TenantDTO {
49 private String deviceId; 37 private String deviceId;
50 private String slaveDeviceId; 38 private String slaveDeviceId;
51 39
52 - @ApiModelProperty(value = "组件关注的指标")  
53 - private List<String> attr; 40 + @ApiModelProperty(value = "组件关注的指标", required = true)
  41 + @NotEmpty(
  42 + message = "遥测指标不能为空",
  43 + groups = {UpdateGroup.class, AddGroup.class})
  44 + private String attr;
54 45
55 @ApiModelProperty(value = "组态描述") 46 @ApiModelProperty(value = "组态描述")
56 private String remark; 47 private String remark;
  1 +package org.thingsboard.server.common.data.yunteng.dto;
  2 +
  3 +import io.swagger.annotations.ApiModelProperty;
  4 +import lombok.Data;
  5 +import lombok.EqualsAndHashCode;
  6 +import org.thingsboard.server.common.data.yunteng.common.AddGroup;
  7 +import org.thingsboard.server.common.data.yunteng.common.UpdateGroup;
  8 +
  9 +import javax.validation.constraints.NotEmpty;
  10 +
  11 +/**
  12 + * 组态结点数据源
  13 + * @author Administrator
  14 + */
  15 +@Data
  16 +public class ConfigurationDatasourceStatusDTO {
  17 +
  18 +
  19 + @ApiModelProperty(value = "orgId", required = true)
  20 + @NotEmpty(
  21 + message = "设备所属组织ID",
  22 + groups = {UpdateGroup.class, AddGroup.class})
  23 + private String orgId;
  24 +
  25 + @ApiModelProperty(value = "tbDeviceId", required = true)
  26 + @NotEmpty(
  27 + message = "tbDeviceId不能未空或空字符串",
  28 + groups = {UpdateGroup.class, AddGroup.class})
  29 + private String deviceId;
  30 + private String slaveDeviceId;
  31 +
  32 + @ApiModelProperty(value = "组件关注的指标")
  33 + @NotEmpty(
  34 + message = "遥测指标不能为空",
  35 + groups = {UpdateGroup.class, AddGroup.class})
  36 + private String attr;
  37 +
  38 + @ApiModelProperty(value = "组态描述")
  39 + private String remark;
  40 +}
@@ -16,20 +16,13 @@ import javax.validation.constraints.NotEmpty; @@ -16,20 +16,13 @@ import javax.validation.constraints.NotEmpty;
16 */ 16 */
17 @EqualsAndHashCode(callSuper = true) 17 @EqualsAndHashCode(callSuper = true)
18 @Data 18 @Data
19 -public class ConfigurationEventDTO extends TenantDTO {  
20 - @ApiModelProperty(value = "组态ID", required = true)  
21 - @NotEmpty(  
22 - message = "组态ID不能为空或空字符串",  
23 - groups = {UpdateGroup.class, AddGroup.class})  
24 - private String configurationId; 19 +public class ConfigurationEventDTO extends ConfigurationDTO {
25 20
26 - @ApiModelProperty(value = "页面ID", required = true)  
27 - @NotEmpty(  
28 - message = "页面ID不能为空或空字符串",  
29 - groups = {UpdateGroup.class, AddGroup.class})  
30 - private String contentId;  
31 21
32 @ApiModelProperty(value = "事件类型", required = true) 22 @ApiModelProperty(value = "事件类型", required = true)
  23 +// @NotEmpty(
  24 +// message = "事件类型不能为空",
  25 +// groups = {UpdateGroup.class, AddGroup.class})
33 private EventTypeEnum type; 26 private EventTypeEnum type;
34 27
35 @ApiModelProperty(value = "事件内容") 28 @ApiModelProperty(value = "事件内容")
  1 +package org.thingsboard.server.common.data.yunteng.dto;
  2 +
  3 +import com.fasterxml.jackson.databind.JsonNode;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +import lombok.Data;
  6 +import lombok.EqualsAndHashCode;
  7 +import org.thingsboard.server.common.data.yunteng.enums.EventTypeEnum;
  8 +
  9 +/**
  10 + * 组态节点事件
  11 + * @author Administrator
  12 + */
  13 +@Data
  14 +public class ConfigurationEventStatusDTO {
  15 +
  16 +
  17 + @ApiModelProperty(value = "事件类型", required = true)
  18 +// @NotEmpty(
  19 +// message = "事件类型不能为空",
  20 +// groups = {UpdateGroup.class, AddGroup.class})
  21 + private EventTypeEnum type;
  22 +
  23 + @ApiModelProperty(value = "状态", required = true)
  24 + private Boolean enabled;
  25 +}
common/data/src/main/java/org/thingsboard/server/common/data/yunteng/dto/ConfigurationNodeDetailDTO.java renamed from common/data/src/main/java/org/thingsboard/server/common/data/yunteng/dto/ConfigurationNodeDTO.java
1 package org.thingsboard.server.common.data.yunteng.dto; 1 package org.thingsboard.server.common.data.yunteng.dto;
2 2
3 -import com.fasterxml.jackson.databind.JsonNode;  
4 import io.swagger.annotations.ApiModelProperty; 3 import io.swagger.annotations.ApiModelProperty;
5 import lombok.Data; 4 import lombok.Data;
6 import lombok.EqualsAndHashCode; 5 import lombok.EqualsAndHashCode;
7 -import org.thingsboard.server.common.data.yunteng.common.AddGroup;  
8 -import org.thingsboard.server.common.data.yunteng.common.UpdateGroup;  
9 -import org.thingsboard.server.common.data.yunteng.enums.ActTypeEnum;  
10 6
11 -import javax.validation.constraints.NotEmpty;  
12 import java.util.List; 7 import java.util.List;
13 8
14 /** 9 /**
@@ -17,7 +12,7 @@ import java.util.List; @@ -17,7 +12,7 @@ import java.util.List;
17 */ 12 */
18 @EqualsAndHashCode(callSuper = true) 13 @EqualsAndHashCode(callSuper = true)
19 @Data 14 @Data
20 -public class ConfigurationNodeDTO extends TenantDTO { 15 +public class ConfigurationNodeDetailDTO extends TenantDTO {
21 @ApiModelProperty(value = "数据源") 16 @ApiModelProperty(value = "数据源")
22 private List<ConfigurationDatasourceDTO> dataSources; 17 private List<ConfigurationDatasourceDTO> dataSources;
23 18
  1 +package org.thingsboard.server.common.data.yunteng.dto;
  2 +
  3 +import io.swagger.annotations.ApiModelProperty;
  4 +import lombok.Data;
  5 +import lombok.EqualsAndHashCode;
  6 +import org.thingsboard.server.common.data.yunteng.common.AddGroup;
  7 +import org.thingsboard.server.common.data.yunteng.common.UpdateGroup;
  8 +
  9 +import javax.validation.constraints.NotEmpty;
  10 +import java.util.List;
  11 +
  12 +/**
  13 + * 组态节点动画效果
  14 + * @author Administrator
  15 + */
  16 +@EqualsAndHashCode(callSuper = true)
  17 +@Data
  18 +public class ConfigurationNodeStateDTO extends ConfigurationDTO {
  19 + @ApiModelProperty(value = "组态ID", required = true)
  20 + @NotEmpty(
  21 + message = "组件ID不能未空或空字符串",
  22 + groups = {UpdateGroup.class, AddGroup.class})
  23 + private String nodeId;
  24 +
  25 + @ApiModelProperty(value = "数据源")
  26 + private ConfigurationDatasourceStatusDTO dataSources;
  27 +
  28 + @ApiModelProperty(value = "事件集合")
  29 + private List<ConfigurationEventStatusDTO> event;
  30 +
  31 + @ApiModelProperty(value = "动画集合")
  32 + private List<ConfigurationActStatusDTO> act;
  33 +}