Commit 526b21ec924cbfef3e64b2b5ec5f39700113466f

Authored by 黄 x
1 parent f58f3e56

feat: 组态添加CRUD

... ... @@ -12,6 +12,7 @@ import org.thingsboard.server.common.data.yunteng.common.DeleteGroup;
12 12 import org.thingsboard.server.common.data.yunteng.common.UpdateGroup;
13 13 import org.thingsboard.server.common.data.yunteng.dto.ConfigurationCenterDTO;
14 14 import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
  15 +import org.thingsboard.server.common.data.yunteng.dto.request.ConfigurationContentInfoDTO;
15 16 import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum;
16 17 import org.thingsboard.server.common.data.yunteng.utils.tools.YtPageData;
17 18 import org.thingsboard.server.controller.BaseController;
... ... @@ -86,4 +87,13 @@ public class YtConfigurationCenterController extends BaseController {
86 87 deleteDTO.setTenantId(getCurrentUser().getCurrentTenantId());
87 88 return ResponseEntity.ok(ytConfigurationCenterService.deleteConfigurationCenter(deleteDTO));
88 89 }
  90 +
  91 + @GetMapping("/getConfigurationInfo/{id}")
  92 + @ApiOperation("获取组态信息")
  93 + public ResponseEntity<ConfigurationContentInfoDTO> getConfigurationInfos(
  94 + @PathVariable("id") String id) throws ThingsboardException {
  95 + return ResponseEntity.ok(
  96 + ytConfigurationCenterService.getConfigurationInfos(
  97 + id, getCurrentUser().getCurrentTenantId()));
  98 + }
89 99 }
... ...
  1 +package org.thingsboard.server.controller.yunteng;
  2 +
  3 +import io.swagger.annotations.Api;
  4 +import io.swagger.annotations.ApiOperation;
  5 +import lombok.RequiredArgsConstructor;
  6 +import org.springframework.http.ResponseEntity;
  7 +import org.springframework.validation.annotation.Validated;
  8 +import org.springframework.web.bind.annotation.*;
  9 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  10 +import org.thingsboard.server.common.data.yunteng.common.AddGroup;
  11 +import org.thingsboard.server.common.data.yunteng.common.DeleteGroup;
  12 +import org.thingsboard.server.common.data.yunteng.common.UpdateGroup;
  13 +import org.thingsboard.server.common.data.yunteng.dto.ConfigurationContentDTO;
  14 +import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
  15 +import org.thingsboard.server.common.data.yunteng.dto.request.ConfigurationContentInfoDTO;
  16 +import org.thingsboard.server.controller.BaseController;
  17 +import org.thingsboard.server.dao.yunteng.service.YtConfigurationContentService;
  18 +
  19 +@RestController
  20 +@RequestMapping("/api/yt/configuration/content")
  21 +@RequiredArgsConstructor
  22 +@Api(tags = "组态内容")
  23 +public class YtConfigurationContentController extends BaseController {
  24 +
  25 + private final YtConfigurationContentService ytConfigurationContentService;
  26 +
  27 + @PostMapping
  28 + @ApiOperation("新增")
  29 + public ResponseEntity<ConfigurationContentDTO> save(
  30 + @Validated({AddGroup.class}) @RequestBody ConfigurationContentDTO configurationContentDTO)
  31 + throws ThingsboardException {
  32 + configurationContentDTO.setTenantId(getCurrentUser().getCurrentTenantId());
  33 + return ResponseEntity.ok(
  34 + ytConfigurationContentService.saveConfigurationContent(configurationContentDTO));
  35 + }
  36 +
  37 + @PutMapping
  38 + @ApiOperation("修改")
  39 + public ResponseEntity<ConfigurationContentInfoDTO> update(
  40 + @Validated({UpdateGroup.class}) @RequestBody ConfigurationContentInfoDTO contentReqDTO)
  41 + throws ThingsboardException {
  42 + for (ConfigurationContentDTO configurationContentDTO :
  43 + contentReqDTO.getConfigurationContentList()) {
  44 + configurationContentDTO.setTenantId(getCurrentUser().getCurrentTenantId());
  45 + configurationContentDTO.setConfigurationId(contentReqDTO.getConfigurationId());
  46 + ytConfigurationContentService.updateConfigurationContent(configurationContentDTO);
  47 + }
  48 + return ResponseEntity.ok(contentReqDTO);
  49 + }
  50 +
  51 + @DeleteMapping
  52 + @ApiOperation("删除")
  53 + public ResponseEntity<Boolean> delete(
  54 + @Validated({DeleteGroup.class}) @RequestBody DeleteDTO deleteDTO)
  55 + throws ThingsboardException {
  56 + deleteDTO.setTenantId(getCurrentUser().getCurrentTenantId());
  57 + return ResponseEntity.ok(ytConfigurationContentService.deleteConfigurationContent(deleteDTO));
  58 + }
  59 +}
... ...
... ... @@ -6,6 +6,9 @@ public interface FastIotConstants {
6 6 Integer JAVA_SCRIPT = 0;
7 7 Integer CONVERT_DATA = 1;
8 8 Integer SCENE_REACT = 2;
  9 + Integer MOBILE_TYPE = 0;
  10 + Integer PC_TYPE = 1;
  11 + String FIRST_PAGE_NAME = "第 1 页";
9 12 class DefaultOrder {
10 13 public static final String CREATE_TIME="create_time";
11 14 }
... ...
... ... @@ -73,12 +73,13 @@ public final class ModelConstants {
73 73 public static final String IOTFS_CONVERT_CONFIG_TABLE_NAME = "iotfs_convert_config";
74 74 /** 组态中心 */
75 75 public static final String IOTFS_CONFIGURATION_CENTER_NAME = "iotfs_configuration_center";
76   -
  76 + /** 组态内容 */
  77 + public static final String IOTFS_CONFIGURATION_CONTENT_NAME = "iotfs_configuration_content";
77 78 /** 视频流 */
78 79 public static final String IOTFS_VIDEO_STREAM_TABLE_NAME = "iotfs_device_camera";
79 80 /** 意见反馈 */
80 81 public static final String IOTFS_OPINION_TABLE_NAME = "iotfs_opinion";
81   - /** 意见反馈 */
  82 + /** 第三方用户表 */
82 83 public static final String IOTFS_THIRD_USER_TABLE_NAME = "iotfs_third_user";
83 84 }
84 85
... ...
  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 javax.validation.constraints.NotNull;
  11 +
  12 +@EqualsAndHashCode(callSuper = true)
  13 +@Data
  14 +public class ConfigurationContentDTO extends TenantDTO {
  15 + @ApiModelProperty(value = "页面名称", required = true)
  16 + @NotEmpty(
  17 + message = "页面名称不能为空或空字符串",
  18 + groups = {UpdateGroup.class, AddGroup.class})
  19 + private String name;
  20 +
  21 + @ApiModelProperty(value = "页面内容")
  22 + @NotEmpty(
  23 + message = "页面内容不能为空或空字符串",
  24 + groups = {UpdateGroup.class})
  25 + private String content;
  26 +
  27 + @ApiModelProperty(value = "组态描述")
  28 + private String remark;
  29 +
  30 + @ApiModelProperty(value = "组织中心ID", required = true)
  31 + @NotEmpty(
  32 + message = "组织中心ID不能为空或空字符串",
  33 + groups = {UpdateGroup.class, AddGroup.class})
  34 + private String configurationId;
  35 +
  36 + @ApiModelProperty(value = "类型:0手机 1PC", required = true)
  37 + @NotNull(
  38 + message = "类型不能为空",
  39 + groups = {UpdateGroup.class, AddGroup.class})
  40 + private Integer type;
  41 +}
... ...
  1 +package org.thingsboard.server.common.data.yunteng.dto.request;
  2 +
  3 +import io.swagger.annotations.ApiModel;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +import lombok.Data;
  6 +import org.thingsboard.server.common.data.yunteng.dto.ConfigurationContentDTO;
  7 +
  8 +import java.util.List;
  9 +@Data
  10 +@ApiModel(value = "组态编辑")
  11 +public class ConfigurationContentInfoDTO {
  12 + @ApiModelProperty(value = "组态中心ID",required = true)
  13 + private String configurationId;
  14 + @ApiModelProperty(value = "组态中心名称")
  15 + private String configurationName;
  16 + @ApiModelProperty(value = "组态内容",required = true)
  17 + private List<ConfigurationContentDTO> configurationContentList;
  18 +}
... ...
  1 +package org.thingsboard.server.dao.yunteng.entities;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.TableName;
  4 +import lombok.Data;
  5 +import lombok.EqualsAndHashCode;
  6 +import org.thingsboard.server.common.data.yunteng.constant.ModelConstants;
  7 +
  8 +@EqualsAndHashCode(callSuper = true)
  9 +@TableName(ModelConstants.Table.IOTFS_CONFIGURATION_CONTENT_NAME)
  10 +@Data
  11 +public class ConfigurationContent extends TenantBaseEntity {
  12 +
  13 + private static final long serialVersionUID = -419380277607655083L;
  14 + private String name;
  15 + private String remark;
  16 + private String configurationId;
  17 + private String content;
  18 + private Integer type;
  19 +}
... ...
... ... @@ -9,16 +9,15 @@ import org.springframework.transaction.annotation.Transactional;
9 9 import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants;
10 10 import org.thingsboard.server.common.data.yunteng.core.exception.YtDataValidationException;
11 11 import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
12   -import org.thingsboard.server.common.data.yunteng.dto.BaseDTO;
13   -import org.thingsboard.server.common.data.yunteng.dto.ConfigurationCenterDTO;
14   -import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
15   -import org.thingsboard.server.common.data.yunteng.dto.OrganizationDTO;
  12 +import org.thingsboard.server.common.data.yunteng.dto.*;
  13 +import org.thingsboard.server.common.data.yunteng.dto.request.ConfigurationContentInfoDTO;
16 14 import org.thingsboard.server.common.data.yunteng.utils.tools.YtPageData;
17 15 import org.thingsboard.server.dao.yunteng.entities.ConfigurationCenter;
18 16 import org.thingsboard.server.dao.yunteng.mapper.ConfigurationCenterMapper;
19 17 import org.thingsboard.server.dao.yunteng.mapper.OrganizationMapper;
20 18 import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
21 19 import org.thingsboard.server.dao.yunteng.service.YtConfigurationCenterService;
  20 +import org.thingsboard.server.dao.yunteng.service.YtConfigurationContentService;
22 21
23 22 import java.util.HashSet;
24 23 import java.util.List;
... ... @@ -32,6 +31,7 @@ public class YtConfigurationCenterServiceImpl
32 31 extends AbstractBaseService<ConfigurationCenterMapper, ConfigurationCenter>
33 32 implements YtConfigurationCenterService {
34 33 private final OrganizationMapper organizationMapper;
  34 + private final YtConfigurationContentService ytConfigurationContentService;
35 35
36 36 @Override
37 37 public YtPageData<ConfigurationCenterDTO> page(Map<String, Object> queryMap) {
... ... @@ -59,7 +59,14 @@ public class YtConfigurationCenterServiceImpl
59 59 @Override
60 60 @Transactional
61 61 public ConfigurationCenterDTO saveConfiguration(ConfigurationCenterDTO configurationCenterDTO) {
62   - baseMapper.insert(configurationCenterDTO.getEntity(ConfigurationCenter.class));
  62 + ConfigurationCenter configurationCenter = configurationCenterDTO.getEntity(ConfigurationCenter.class);
  63 + baseMapper.insert(configurationCenter);
  64 + ConfigurationContentDTO contentDTO = new ConfigurationContentDTO();
  65 + contentDTO.setTenantId(configurationCenter.getTenantId());
  66 + contentDTO.setType(FastIotConstants.PC_TYPE);
  67 + contentDTO.setName(FastIotConstants.FIRST_PAGE_NAME);
  68 + contentDTO.setConfigurationId(configurationCenter.getId());
  69 + ytConfigurationContentService.saveConfigurationContent(contentDTO);
63 70 return configurationCenterDTO;
64 71 }
65 72
... ... @@ -86,6 +93,15 @@ public class YtConfigurationCenterServiceImpl
86 93 throw new YtDataValidationException(ErrorMessage.TENANT_MISMATCHING.getMessage());
87 94 }
88 95 }
  96 + ytConfigurationContentService.deleteConfigurationContentByCenterId(deleteDTO.getIds());
89 97 return baseMapper.deleteBatchIds(deleteDTO.getIds()) > FastIotConstants.MagicNumber.ZERO;
90 98 }
  99 +
  100 + @Override
  101 + public ConfigurationContentInfoDTO getConfigurationInfos(String id, String tenantId) {
  102 + List<ConfigurationContentInfoDTO> list = baseMapper.getConfigurationInfoById(id, tenantId);
  103 + return list.size() > FastIotConstants.MagicNumber.ZERO
  104 + ? list.get(FastIotConstants.MagicNumber.ZERO)
  105 + : null;
  106 + }
91 107 }
... ...
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +
  3 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4 +import lombok.RequiredArgsConstructor;
  5 +import lombok.extern.slf4j.Slf4j;
  6 +import org.springframework.stereotype.Service;
  7 +import org.springframework.transaction.annotation.Transactional;
  8 +import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants;
  9 +import org.thingsboard.server.common.data.yunteng.core.exception.YtDataValidationException;
  10 +import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
  11 +import org.thingsboard.server.common.data.yunteng.dto.*;
  12 +import org.thingsboard.server.dao.yunteng.entities.ConfigurationContent;
  13 +import org.thingsboard.server.dao.yunteng.mapper.ConfigurationContentMapper;
  14 +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
  15 +import org.thingsboard.server.dao.yunteng.service.YtConfigurationContentService;
  16 +import java.util.List;
  17 +import java.util.Set;
  18 +
  19 +@Slf4j
  20 +@Service
  21 +@RequiredArgsConstructor
  22 +public class YtConfigurationContentServiceImpl
  23 + extends AbstractBaseService<ConfigurationContentMapper, ConfigurationContent>
  24 + implements YtConfigurationContentService {
  25 +
  26 + @Override
  27 + @Transactional
  28 + public ConfigurationContentDTO saveConfigurationContent(
  29 + ConfigurationContentDTO configurationContentDTO) {
  30 + baseMapper.insert(configurationContentDTO.getEntity(ConfigurationContent.class));
  31 + return configurationContentDTO;
  32 + }
  33 +
  34 + @Override
  35 + @Transactional
  36 + public ConfigurationContentDTO updateConfigurationContent(
  37 + ConfigurationContentDTO configurationContentDTO) {
  38 + ConfigurationContent configurationContent =
  39 + baseMapper.selectById(configurationContentDTO.getId());
  40 + if (!configurationContent.getTenantId().equals(configurationContentDTO.getTenantId())) {
  41 + throw new YtDataValidationException(ErrorMessage.TENANT_MISMATCHING.getMessage());
  42 + }
  43 + baseMapper.updateById(configurationContentDTO.getEntity(ConfigurationContent.class));
  44 + return configurationContentDTO;
  45 + }
  46 +
  47 + @Override
  48 + @Transactional
  49 + public boolean deleteConfigurationContent(DeleteDTO deleteDTO) {
  50 + List<ConfigurationContent> centerList =
  51 + baseMapper.selectList(
  52 + new LambdaQueryWrapper<ConfigurationContent>()
  53 + .in(ConfigurationContent::getId, deleteDTO.getIds()));
  54 + for (ConfigurationContent center : centerList) {
  55 + if (!center.getTenantId().equals(deleteDTO.getTenantId())) {
  56 + throw new YtDataValidationException(ErrorMessage.TENANT_MISMATCHING.getMessage());
  57 + }
  58 + }
  59 + return baseMapper.deleteBatchIds(deleteDTO.getIds()) > FastIotConstants.MagicNumber.ZERO;
  60 + }
  61 +
  62 + @Override
  63 + @Transactional
  64 + public boolean deleteConfigurationContentByCenterId(Set<String> configurationCenterIds) {
  65 + return baseMapper.delete(
  66 + new LambdaQueryWrapper<ConfigurationContent>()
  67 + .in(ConfigurationContent::getConfigurationId, configurationCenterIds))
  68 + > FastIotConstants.MagicNumber.ZERO;
  69 + }
  70 +}
... ...
... ... @@ -5,12 +5,17 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
5 5 import org.apache.ibatis.annotations.Mapper;
6 6 import org.apache.ibatis.annotations.Param;
7 7 import org.thingsboard.server.common.data.yunteng.dto.ConfigurationCenterDTO;
  8 +import org.thingsboard.server.common.data.yunteng.dto.request.ConfigurationContentInfoDTO;
8 9 import org.thingsboard.server.dao.yunteng.entities.ConfigurationCenter;
9 10
  11 +import java.util.List;
10 12 import java.util.Map;
11 13
12 14 @Mapper
13 15 public interface ConfigurationCenterMapper extends BaseMapper<ConfigurationCenter> {
14 16 IPage<ConfigurationCenterDTO> getConfigurationCenterPage(
15 17 IPage<?> page, @Param("queryMap") Map<String, Object> queryMap);
  18 +
  19 + List<ConfigurationContentInfoDTO> getConfigurationInfoById(
  20 + @Param("id") String id, @Param("tenantId") String tenantId);
16 21 }
... ...
  1 +package org.thingsboard.server.dao.yunteng.mapper;
  2 +
  3 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4 +import org.apache.ibatis.annotations.Mapper;
  5 +import org.thingsboard.server.dao.yunteng.entities.ConfigurationContent;
  6 +
  7 +@Mapper
  8 +public interface ConfigurationContentMapper extends BaseMapper<ConfigurationContent> {
  9 +}
... ...
... ... @@ -2,6 +2,7 @@ package org.thingsboard.server.dao.yunteng.service;
2 2
3 3 import org.thingsboard.server.common.data.yunteng.dto.ConfigurationCenterDTO;
4 4 import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
  5 +import org.thingsboard.server.common.data.yunteng.dto.request.ConfigurationContentInfoDTO;
5 6 import org.thingsboard.server.common.data.yunteng.utils.tools.YtPageData;
6 7
7 8 import java.util.Map;
... ... @@ -14,4 +15,6 @@ public interface YtConfigurationCenterService {
14 15 ConfigurationCenterDTO updateConfiguration(ConfigurationCenterDTO configurationCenterDTO);
15 16
16 17 boolean deleteConfigurationCenter(DeleteDTO deleteDTO);
  18 +
  19 + ConfigurationContentInfoDTO getConfigurationInfos(String id,String tenantId);
17 20 }
... ...
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +import org.thingsboard.server.common.data.yunteng.dto.ConfigurationContentDTO;
  4 +import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
  5 +
  6 +import java.util.Set;
  7 +
  8 +public interface YtConfigurationContentService {
  9 +
  10 + ConfigurationContentDTO saveConfigurationContent(ConfigurationContentDTO configurationContentDTO);
  11 +
  12 + ConfigurationContentDTO updateConfigurationContent(
  13 + ConfigurationContentDTO configurationContentDTO);
  14 +
  15 + boolean deleteConfigurationContent(DeleteDTO deleteDTO);
  16 +
  17 + boolean deleteConfigurationContentByCenterId(Set<String> configurationCenterIds);
  18 +}
... ...
... ... @@ -17,6 +17,15 @@
17 17 <result property="name" column="organization_name"/>
18 18 </association>
19 19 </resultMap>
  20 + <resultMap id="configurationInfoMap" type="org.thingsboard.server.common.data.yunteng.dto.request.ConfigurationContentInfoDTO">
  21 + <result property="configurationId" column="id"/>
  22 + <result property="configurationName" column="name"/>
  23 + <collection property="configurationContentList" ofType="org.thingsboard.server.common.data.yunteng.dto.ConfigurationContentDTO">
  24 + <result property="id" column="content_id"/>
  25 + <result property="content" column="content"/>
  26 + </collection>
  27 + </resultMap>
  28 +
20 29 <sql id="columns">
21 30 a.id,a.name,a.organization_id,a.remark,a.update_time,a.create_time,a.creator,a.tenant_id,a.updater,io.name AS organization_name
22 31 </sql>
... ... @@ -40,4 +49,10 @@
40 49 </if>
41 50 </where>
42 51 </select>
  52 +
  53 + <select id="getConfigurationInfoById" resultMap="configurationInfoMap">
  54 + SELECT icc.id,icc.name,icct.id AS content_id,icct.content FROM iotfs_configuration_center icc LEFT JOIN
  55 + iotfs_configuration_content icct ON icc.id = icct.configuration_id
  56 + WHERE icc.id = #{id} AND icc.tenant_id = #{tenantId}
  57 + </select>
43 58 </mapper>
... ...