Commit d5505b56aa600e29cd883c958437e8da32481fa9

Authored by xp.Huang
2 parents f60756e1 cf3576d3

Merge branch '2024-2-22' into 'master_dev'

feat:新增视频配置GBT28181新增全部设备选项

See merge request yunteng/thingskit!345
1 package org.thingsboard.server.controller.yunteng; 1 package org.thingsboard.server.controller.yunteng;
2 2
3 import io.swagger.annotations.Api; 3 import io.swagger.annotations.Api;
  4 +import io.swagger.annotations.ApiOperation;
4 import io.swagger.annotations.ApiParam; 5 import io.swagger.annotations.ApiParam;
5 import lombok.RequiredArgsConstructor; 6 import lombok.RequiredArgsConstructor;
6 import org.springframework.security.access.prepost.PreAuthorize; 7 import org.springframework.security.access.prepost.PreAuthorize;
@@ -22,6 +23,7 @@ import org.thingsboard.server.dao.yunteng.service.TkDeviceService; @@ -22,6 +23,7 @@ import org.thingsboard.server.dao.yunteng.service.TkDeviceService;
22 import org.thingsboard.server.dao.yunteng.service.media.TkVideoChannelService; 23 import org.thingsboard.server.dao.yunteng.service.media.TkVideoChannelService;
23 24
24 import java.util.HashMap; 25 import java.util.HashMap;
  26 +import java.util.List;
25 27
26 import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.*; 28 import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.*;
27 import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.ORDER_TYPE; 29 import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.ORDER_TYPE;
@@ -76,4 +78,14 @@ public class TkVideoChannelController extends BaseController { @@ -76,4 +78,14 @@ public class TkVideoChannelController extends BaseController {
76 } 78 }
77 return tkVideoChannelService.page(tenantId, queryMap); 79 return tkVideoChannelService.page(tenantId, queryMap);
78 } 80 }
  81 +
  82 + @GetMapping("/list")
  83 + @ApiOperation("选项列表")
  84 + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')")
  85 + public List<VideoChanelDTO> listDeviceProfile(
  86 + @ApiParam(value = "设备Id") @RequestParam(value = "deviceId", required = false) String deviceId)
  87 + throws ThingsboardException {
  88 + String tenantId = getCurrentUser().getCurrentTenantId();
  89 + return tkVideoChannelService.getListByDeviceId(deviceId,tenantId);
  90 + }
79 } 91 }
@@ -11,7 +11,7 @@ import org.thingsboard.server.common.data.exception.ThingsboardException; @@ -11,7 +11,7 @@ import org.thingsboard.server.common.data.exception.ThingsboardException;
11 import org.thingsboard.server.common.data.yunteng.common.DeleteGroup; 11 import org.thingsboard.server.common.data.yunteng.common.DeleteGroup;
12 import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO; 12 import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
13 import org.thingsboard.server.common.data.yunteng.dto.TkVideoDTO; 13 import org.thingsboard.server.common.data.yunteng.dto.TkVideoDTO;
14 -import org.thingsboard.server.common.data.yunteng.dto.TkVideoGptDTO; 14 +import org.thingsboard.server.common.data.yunteng.dto.TkVideoGbtDTO;
15 import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum; 15 import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum;
16 import org.thingsboard.server.common.data.yunteng.utils.tools.ProtocolType; 16 import org.thingsboard.server.common.data.yunteng.utils.tools.ProtocolType;
17 import org.thingsboard.server.common.data.yunteng.utils.tools.ResponseResult; 17 import org.thingsboard.server.common.data.yunteng.utils.tools.ResponseResult;
@@ -73,10 +73,10 @@ public class TkVideoController extends BaseController { @@ -73,10 +73,10 @@ public class TkVideoController extends BaseController {
73 @ApiOperation("新增国标视频") 73 @ApiOperation("新增国标视频")
74 @PreAuthorize( 74 @PreAuthorize(
75 "@check.checkPermissions({'TENANT_ADMIN','CUSTOMER_USER'},{'api:yt:video:post','api:yt:video:update'})") 75 "@check.checkPermissions({'TENANT_ADMIN','CUSTOMER_USER'},{'api:yt:video:post','api:yt:video:update'})")
76 - public TkVideoGptDTO saveOrUpdateAlarmProfile(@Validated @RequestBody TkVideoGptDTO dto) 76 + public TkVideoGbtDTO saveOrUpdateAlarmProfile(@Validated @RequestBody TkVideoGbtDTO dto)
77 throws ThingsboardException { 77 throws ThingsboardException {
78 dto.setTenantId(getCurrentUser().getCurrentTenantId()); 78 dto.setTenantId(getCurrentUser().getCurrentTenantId());
79 - return videoService.saveGpt(dto); 79 + return videoService.saveGbt(dto);
80 } 80 }
81 81
82 82
common/data/src/main/java/org/thingsboard/server/common/data/yunteng/dto/TkVideoGbtDTO.java renamed from common/data/src/main/java/org/thingsboard/server/common/data/yunteng/dto/TkVideoGptDTO.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;
@@ -10,7 +9,7 @@ import java.util.List; @@ -10,7 +9,7 @@ import java.util.List;
10 9
11 @Data 10 @Data
12 @EqualsAndHashCode(callSuper = true) 11 @EqualsAndHashCode(callSuper = true)
13 -public class TkVideoGptDTO extends TenantDTO { 12 +public class TkVideoGbtDTO extends TenantDTO {
14 13
15 @ApiModelProperty(value = "组织ID", required = true) 14 @ApiModelProperty(value = "组织ID", required = true)
16 @NotEmpty(message = "组织ID不能为空或空字符串") 15 @NotEmpty(message = "组织ID不能为空或空字符串")
@@ -20,6 +19,9 @@ public class TkVideoGptDTO extends TenantDTO { @@ -20,6 +19,9 @@ public class TkVideoGptDTO extends TenantDTO {
20 private Integer accessMode; 19 private Integer accessMode;
21 20
22 @ApiModelProperty(value = "多个设备id与通道号") 21 @ApiModelProperty(value = "多个设备id与通道号")
23 - private List<TkVideoGptDeviceDTO> gptDeviceDTOS; 22 + private List<TkVideoGbtDeviceDTO> gbtDeviceDTOS;
  23 +
  24 + @ApiModelProperty(value = "是否全部设备 0否 1是")
  25 + private Integer allDevice;
24 26
25 } 27 }
common/data/src/main/java/org/thingsboard/server/common/data/yunteng/dto/TkVideoGbtDeviceDTO.java renamed from common/data/src/main/java/org/thingsboard/server/common/data/yunteng/dto/TkVideoGptDeviceDTO.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 5
@@ -8,7 +7,7 @@ import javax.validation.constraints.NotEmpty; @@ -8,7 +7,7 @@ import javax.validation.constraints.NotEmpty;
8 import java.util.List; 7 import java.util.List;
9 8
10 @Data 9 @Data
11 -public class TkVideoGptDeviceDTO { 10 +public class TkVideoGbtDeviceDTO {
12 11
13 @ApiModelProperty(value = "设备id", required = true) 12 @ApiModelProperty(value = "设备id", required = true)
14 @NotEmpty(message = "设备id不能为空") 13 @NotEmpty(message = "设备id不能为空")
@@ -11,15 +11,11 @@ import lombok.extern.slf4j.Slf4j; @@ -11,15 +11,11 @@ import lombok.extern.slf4j.Slf4j;
11 import org.springframework.stereotype.Service; 11 import org.springframework.stereotype.Service;
12 import org.springframework.transaction.annotation.Transactional; 12 import org.springframework.transaction.annotation.Transactional;
13 import org.thingsboard.server.common.data.StringUtils; 13 import org.thingsboard.server.common.data.StringUtils;
14 -import org.thingsboard.server.common.data.alarm.Alarm;  
15 -import org.thingsboard.server.common.data.audit.ActionType;  
16 -import org.thingsboard.server.common.data.exception.ThingsboardException;  
17 -import org.thingsboard.server.common.data.id.AlarmId;  
18 -import org.thingsboard.server.common.data.id.EdgeId;  
19 import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants; 14 import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants;
20 import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException; 15 import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException;
21 import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage; 16 import org.thingsboard.server.common.data.yunteng.core.message.ErrorMessage;
22 import org.thingsboard.server.common.data.yunteng.dto.*; 17 import org.thingsboard.server.common.data.yunteng.dto.*;
  18 +import org.thingsboard.server.common.data.yunteng.dto.sip.VideoChanelDTO;
23 import org.thingsboard.server.common.data.yunteng.utils.JacksonUtil; 19 import org.thingsboard.server.common.data.yunteng.utils.JacksonUtil;
24 import org.thingsboard.server.common.data.yunteng.utils.tools.*; 20 import org.thingsboard.server.common.data.yunteng.utils.tools.*;
25 import org.thingsboard.server.dao.yunteng.entities.TkVideoEntity; 21 import org.thingsboard.server.dao.yunteng.entities.TkVideoEntity;
@@ -27,6 +23,7 @@ import org.thingsboard.server.dao.yunteng.entities.TkVideoPlatformEntity; @@ -27,6 +23,7 @@ import org.thingsboard.server.dao.yunteng.entities.TkVideoPlatformEntity;
27 import org.thingsboard.server.dao.yunteng.mapper.TkVideoMapper; 23 import org.thingsboard.server.dao.yunteng.mapper.TkVideoMapper;
28 import org.thingsboard.server.dao.yunteng.mapper.TkVideoPlatformMapper; 24 import org.thingsboard.server.dao.yunteng.mapper.TkVideoPlatformMapper;
29 import org.thingsboard.server.dao.yunteng.service.*; 25 import org.thingsboard.server.dao.yunteng.service.*;
  26 +import org.thingsboard.server.dao.yunteng.service.media.TkVideoChannelService;
30 27
31 import java.io.IOException; 28 import java.io.IOException;
32 import java.util.ArrayList; 29 import java.util.ArrayList;
@@ -43,6 +40,9 @@ public class TkVideoServiceImpl extends AbstractBaseService<TkVideoMapper, TkVid @@ -43,6 +40,9 @@ public class TkVideoServiceImpl extends AbstractBaseService<TkVideoMapper, TkVid
43 private final UserOrganizationMappingService userOrganizationMappingService; 40 private final UserOrganizationMappingService userOrganizationMappingService;
44 private final TkOrganizationService organizationService; 41 private final TkOrganizationService organizationService;
45 private final TkVideoPlatformMapper tkVideoPlatformMapper; 42 private final TkVideoPlatformMapper tkVideoPlatformMapper;
  43 + private final TkDeviceService tkdeviceService;
  44 + private final TkVideoChannelService tkVideoChannelService;
  45 +
46 @Override 46 @Override
47 public TkPageData<TkVideoDTO> pageDatas(IPage<TkVideoEntity> pageInfrom, 47 public TkPageData<TkVideoDTO> pageDatas(IPage<TkVideoEntity> pageInfrom,
48 boolean isPtTenantAdmin, String tenantId, String currentUserId, 48 boolean isPtTenantAdmin, String tenantId, String currentUserId,
@@ -92,25 +92,35 @@ public class TkVideoServiceImpl extends AbstractBaseService<TkVideoMapper, TkVid @@ -92,25 +92,35 @@ public class TkVideoServiceImpl extends AbstractBaseService<TkVideoMapper, TkVid
92 } 92 }
93 93
94 @Override 94 @Override
95 - public TkVideoGptDTO saveGpt(TkVideoGptDTO dto) {  
96 - List<TkVideoGptDeviceDTO> deviceList = dto.getGptDeviceDTOS();  
97 - deviceList.forEach(device -> {  
98 - String deviceId = device.getDeviceID();  
99 - String deviceName = device.getDeviceName();  
100 - List<String> channelNos = device.getChannelNos();  
101 - channelNos.forEach(channelNo -> {  
102 - TkVideoDTO videoDto = new TkVideoDTO();  
103 - videoDto.setOrganizationId(dto.getOrganizationId());  
104 - videoDto.setName(deviceName+channelNo);  
105 - videoDto.setAccessMode(dto.getAccessMode());  
106 - videoDto.setSn(channelNo);  
107 - String json = "{\"channelNo\":\""+channelNo+"\",\"deviceId\":\""+deviceId+"\",\"deviceName\":\""+deviceName+"\"}";  
108 - JsonNode params = JacksonUtil.toJsonNode(json);  
109 - videoDto.setParams(params);  
110 - videoDto.setTenantId(dto.getTenantId());  
111 - baseMapper.insert(videoDto.getEntity(TkVideoEntity.class));  
112 - });  
113 - }); 95 + public TkVideoGbtDTO saveGbt(TkVideoGbtDTO dto) {
  96 + if(dto.getAllDevice()==FastIotConstants.MagicNumber.ONE){
  97 + //插入组织下全部设备时后端处理dto对象 查询全部所需要插入的摄像头信息
  98 + String organizationId = dto.getOrganizationId();
  99 + List<TkVideoGbtDeviceDTO> deviceList = new ArrayList<>();
  100 + List<DeviceDTO> deviceDTOS = tkdeviceService.findDevicesByDeviceTypeAndOrganizationId(
  101 + null,dto.getTenantId(),organizationId,null,null,null);
  102 + for(DeviceDTO device:deviceDTOS){
  103 + List<VideoChanelDTO> chanelDTOS = tkVideoChannelService.getListByDeviceId(device.getTbDeviceId(),dto.getTenantId());
  104 + if(chanelDTOS.isEmpty()){
  105 + continue;
  106 + }
  107 + //该设备拥有通道号时才插入
  108 + TkVideoGbtDeviceDTO gbt = new TkVideoGbtDeviceDTO();
  109 + gbt.setDeviceID(device.getTbDeviceId());
  110 + gbt.setDeviceName(device.getAlias()==null?device.getName():device.getAlias());
  111 + List<String> channelNos = new ArrayList<>();
  112 + for (VideoChanelDTO chanel :chanelDTOS){
  113 + channelNos.add(chanel.getChannelId());
  114 + }
  115 + gbt.setChannelNos(channelNos);
  116 + deviceList.add(gbt);
  117 + }
  118 + dto.setGbtDeviceDTOS(deviceList);
  119 + saveGbtS(dto);
  120 + }
  121 + else{
  122 + saveGbtS(dto);
  123 + }
114 return dto; 124 return dto;
115 } 125 }
116 126
@@ -218,4 +228,34 @@ public class TkVideoServiceImpl extends AbstractBaseService<TkVideoMapper, TkVid @@ -218,4 +228,34 @@ public class TkVideoServiceImpl extends AbstractBaseService<TkVideoMapper, TkVid
218 return videoDTOList.get(0); 228 return videoDTOList.get(0);
219 } 229 }
220 230
  231 +
  232 + void saveGbtS(TkVideoGbtDTO dto){
  233 + List<TkVideoGbtDeviceDTO> deviceList = dto.getGbtDeviceDTOS();
  234 + deviceList.forEach(device -> {
  235 + String deviceId = device.getDeviceID();
  236 + String deviceName = device.getDeviceName();
  237 + List<String> channelNos = device.getChannelNos();
  238 + channelNos.forEach(channelNo -> {
  239 + TkVideoDTO videoDto = new TkVideoDTO();
  240 + videoDto.setOrganizationId(dto.getOrganizationId());
  241 + videoDto.setName(deviceName+channelNo);
  242 + videoDto.setAccessMode(dto.getAccessMode());
  243 + videoDto.setSn(channelNo);
  244 + String json = "{\"channelNo\":\""+channelNo+"\",\"deviceId\":\""+deviceId+"\",\"deviceName\":\""+deviceName+"\"}";
  245 + JsonNode params = JacksonUtil.toJsonNode(json);
  246 + videoDto.setParams(params);
  247 + videoDto.setTenantId(dto.getTenantId());
  248 + TkVideoEntity oldVideo = baseMapper.selectOne(new QueryWrapper<TkVideoEntity>().lambda()
  249 + .eq(TkVideoEntity::getSn, channelNo)
  250 + .like(TkVideoEntity::getParams, deviceId));
  251 + if(oldVideo!=null){
  252 + videoDto.setId(oldVideo.getId());
  253 + baseMapper.updateById(videoDto.getEntity(TkVideoEntity.class));
  254 + }else{
  255 + baseMapper.insert(videoDto.getEntity(TkVideoEntity.class));
  256 + }
  257 + });
  258 + });
  259 + }
  260 +
221 } 261 }
@@ -3,6 +3,7 @@ package org.thingsboard.server.dao.yunteng.impl.media; @@ -3,6 +3,7 @@ package org.thingsboard.server.dao.yunteng.impl.media;
3 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 3 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
4 import com.baomidou.mybatisplus.core.metadata.IPage; 4 import com.baomidou.mybatisplus.core.metadata.IPage;
5 import java.time.LocalDateTime; 5 import java.time.LocalDateTime;
  6 +import java.util.List;
6 import java.util.Map; 7 import java.util.Map;
7 import java.util.Optional; 8 import java.util.Optional;
8 import lombok.RequiredArgsConstructor; 9 import lombok.RequiredArgsConstructor;
@@ -12,6 +13,7 @@ import org.thingsboard.server.common.data.StringUtils; @@ -12,6 +13,7 @@ import org.thingsboard.server.common.data.StringUtils;
12 import org.thingsboard.server.common.data.yunteng.core.exception.TkDataValidationException; 13 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.core.message.ErrorMessage;
14 import org.thingsboard.server.common.data.yunteng.dto.sip.VideoChanelDTO; 15 import org.thingsboard.server.common.data.yunteng.dto.sip.VideoChanelDTO;
  16 +import org.thingsboard.server.common.data.yunteng.utils.ReflectUtils;
15 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData; 17 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
16 import org.thingsboard.server.dao.yunteng.entities.TkVideoChannelEntity; 18 import org.thingsboard.server.dao.yunteng.entities.TkVideoChannelEntity;
17 import org.thingsboard.server.dao.yunteng.mapper.TkVideoChannelMapper; 19 import org.thingsboard.server.dao.yunteng.mapper.TkVideoChannelMapper;
@@ -113,4 +115,15 @@ public class TkVideoChannelServiceImpl @@ -113,4 +115,15 @@ public class TkVideoChannelServiceImpl
113 }) 115 })
114 .orElse(false); 116 .orElse(false);
115 } 117 }
  118 +
  119 +
  120 + @Override
  121 + public List<VideoChanelDTO> getListByDeviceId(String deviceId,String tenantId) {
  122 + return ReflectUtils.sourceToTarget(
  123 + baseMapper.selectList(
  124 + new LambdaQueryWrapper<TkVideoChannelEntity>()
  125 + .eq(TkVideoChannelEntity::getDeviceId, deviceId)
  126 + .eq(TkVideoChannelEntity::getTenantId, tenantId)
  127 + ),VideoChanelDTO.class);
  128 + }
116 } 129 }
@@ -3,7 +3,7 @@ package org.thingsboard.server.dao.yunteng.service; @@ -3,7 +3,7 @@ package org.thingsboard.server.dao.yunteng.service;
3 import com.baomidou.mybatisplus.core.metadata.IPage; 3 import com.baomidou.mybatisplus.core.metadata.IPage;
4 import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO; 4 import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
5 import org.thingsboard.server.common.data.yunteng.dto.TkVideoDTO; 5 import org.thingsboard.server.common.data.yunteng.dto.TkVideoDTO;
6 -import org.thingsboard.server.common.data.yunteng.dto.TkVideoGptDTO; 6 +import org.thingsboard.server.common.data.yunteng.dto.TkVideoGbtDTO;
7 import org.thingsboard.server.common.data.yunteng.utils.tools.ProtocolType; 7 import org.thingsboard.server.common.data.yunteng.utils.tools.ProtocolType;
8 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData; 8 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
9 import org.thingsboard.server.dao.yunteng.entities.TkVideoEntity; 9 import org.thingsboard.server.dao.yunteng.entities.TkVideoEntity;
@@ -49,7 +49,7 @@ public interface TkVideoService extends BaseService<TkVideoEntity> { @@ -49,7 +49,7 @@ public interface TkVideoService extends BaseService<TkVideoEntity> {
49 * @param dto 49 * @param dto
50 * @return 50 * @return
51 */ 51 */
52 - TkVideoGptDTO saveGpt(TkVideoGptDTO dto); 52 + TkVideoGbtDTO saveGbt(TkVideoGbtDTO dto);
53 53
54 /** 54 /**
55 * @param deleteDTO 55 * @param deleteDTO
1 package org.thingsboard.server.dao.yunteng.service.media; 1 package org.thingsboard.server.dao.yunteng.service.media;
2 2
  3 +import java.util.List;
3 import java.util.Map; 4 import java.util.Map;
4 import org.thingsboard.server.common.data.yunteng.dto.sip.VideoChanelDTO; 5 import org.thingsboard.server.common.data.yunteng.dto.sip.VideoChanelDTO;
5 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData; 6 import org.thingsboard.server.common.data.yunteng.utils.tools.TkPageData;
@@ -55,4 +56,13 @@ public interface TkVideoChannelService extends BaseService<TkVideoChannelEntity> @@ -55,4 +56,13 @@ public interface TkVideoChannelService extends BaseService<TkVideoChannelEntity>
55 */ 56 */
56 boolean updateVideoChannelStreamId( 57 boolean updateVideoChannelStreamId(
57 String streamId, String deviceCode, String channelId); 58 String streamId, String deviceCode, String channelId);
  59 +
  60 + /**
  61 + * 根据设备id获取通道号集合
  62 + *
  63 + * @param deviceId 流ID
  64 + * @return VideoChanelDTOs 摄像头通道信息集合
  65 + */
  66 + List<VideoChanelDTO> getListByDeviceId(String deviceId,String tenantId);
  67 +
58 } 68 }