Commit 62b721e6 authored by tianbo's avatar tianbo

大屏视频接入增加iSecureCenter

parent b27e71ef
...@@ -87,4 +87,10 @@ public class BaseEnterpriseVideo extends BaseRelationEntity { ...@@ -87,4 +87,10 @@ public class BaseEnterpriseVideo extends BaseRelationEntity {
@TableField("equ_list_code") @TableField("equ_list_code")
private String equListCode; private String equListCode;
@TableField("platform")
private String platform;
@TableField("is_enabled")
private Boolean isEnabled;
} }
package com.yeejoin.amos.boot.module.common.api.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum VideoIntegrationPlatformEnum {
YS("ys","萤石"),
ISECURECENTER("iSecureCenter","海康iSecureCenter");
private final String code;
private final String name;
}
...@@ -2,24 +2,32 @@ package com.yeejoin.amos.boot.module.common.biz.service.impl; ...@@ -2,24 +2,32 @@ package com.yeejoin.amos.boot.module.common.biz.service.impl;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import com.yeejoin.amos.boot.biz.common.dto.CommonVideoDto; import com.yeejoin.amos.boot.biz.common.dto.CommonVideoDto;
import com.yeejoin.amos.boot.biz.common.enums.CommonVideoEnum; import com.yeejoin.amos.boot.biz.common.enums.CommonVideoEnum;
import com.yeejoin.amos.boot.module.common.api.dto.BaseEnterpriseVideoDto; import com.yeejoin.amos.boot.module.common.api.dto.BaseEnterpriseVideoDto;
import com.yeejoin.amos.boot.module.common.api.entity.BaseEnterpriseVideo; import com.yeejoin.amos.boot.module.common.api.entity.BaseEnterpriseVideo;
import com.yeejoin.amos.boot.module.common.api.enums.VideoIntegrationPlatformEnum;
import com.yeejoin.amos.boot.module.common.api.mapper.BaseEnterpriseVideoMapper; import com.yeejoin.amos.boot.module.common.api.mapper.BaseEnterpriseVideoMapper;
import com.yeejoin.amos.boot.module.common.api.service.IBaseEnterpriseVideoService; import com.yeejoin.amos.boot.module.common.api.service.IBaseEnterpriseVideoService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService; import org.typroject.tyboot.core.rdbms.service.BaseService;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
import static com.yeejoin.amos.boot.biz.common.constants.VideoConstant.CODE_200; import static com.yeejoin.amos.boot.biz.common.constants.VideoConstant.CODE_200;
...@@ -37,11 +45,86 @@ public class BaseEnterpriseVideoServiceImpl extends BaseService<BaseEnterpriseVi ...@@ -37,11 +45,86 @@ public class BaseEnterpriseVideoServiceImpl extends BaseService<BaseEnterpriseVi
private String defaultVideoUrl; private String defaultVideoUrl;
public List<CommonVideoDto> getUnitVideoUrl(String useUnitCode, String regionCode) { public List<CommonVideoDto> getUnitVideoUrl(String useUnitCode, String regionCode) {
List<CommonVideoDto> result = new ArrayList<CommonVideoDto>(); List<CommonVideoDto> result = new ArrayList<>();
LambdaQueryWrapper<BaseEnterpriseVideo> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<BaseEnterpriseVideo> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(BaseEnterpriseVideo::getUseUnitCode, useUnitCode); wrapper.eq(BaseEnterpriseVideo::getUseUnitCode, useUnitCode);
wrapper.eq(BaseEnterpriseVideo::getIsEnabled, true);
wrapper.like(StringUtils.isNotEmpty(regionCode), BaseEnterpriseVideo::getRegionCode, regionCode); wrapper.like(StringUtils.isNotEmpty(regionCode), BaseEnterpriseVideo::getRegionCode, regionCode);
List<BaseEnterpriseVideo> videos = this.getBaseMapper().selectList(wrapper); List<BaseEnterpriseVideo> videos = this.getBaseMapper().selectList(wrapper);
if (ValidationUtil.isEmpty(videos)) {
return result;
}
// 将videos按对接平台字段分组,并存放Map<String, List<BaseEnterpriseVideo>>中
Map<String, List<BaseEnterpriseVideo>> map = videos.stream().collect(Collectors.groupingBy(BaseEnterpriseVideo::getPlatform));
map.forEach((key, value) -> {
if (VideoIntegrationPlatformEnum.YS.getCode().equals(key)) {
getYsVideoUrl(value, result);
}
if (VideoIntegrationPlatformEnum.ISECURECENTER.getCode().equals(key)) {
getISecureCenterVideoUrl(value, result);
}
});
return result;
}
private void getISecureCenterVideoUrl(List<BaseEnterpriseVideo> videos, List<CommonVideoDto> videoUrlResult) {
List<CommonVideoDto> videoList = getISecureCenterCameras(videos);
if (ValidationUtil.isEmpty(videoList)) {
return;
}
BaseEnterpriseVideo baseEnterpriseVideo = videos.get(0);
videoList.forEach(video -> {
List<CommonVideoDto> commonVideoDtos = new ArrayList<>();
try {
String getCamerasUrl = baseEnterpriseVideo.getUrl();
// 将getCamerasUrl解析为https://192.168.1.1:8080/api/v1?pageNo=1&pageSize=20这种方式
// 使用URI标准库解析URL结构
URI uri = new URI(getCamerasUrl);
String scheme = uri.getScheme(); // 获取协议部分(https)
String protocol = scheme + "://"; // "https://"
String hostPort = uri.getHost() + (uri.getPort() != -1 ? ":" + uri.getPort() : ""); // "ip:port"
String urlPath = uri.getPath();
ArtemisConfig config = new ArtemisConfig();
config.setAppKey(baseEnterpriseVideo.getAppKey());
config.setAppSecret(baseEnterpriseVideo.getAppSecret());
config.setHost(hostPort);
Map<String, String> path = new HashMap<String, String>(2) {
{
put(protocol, urlPath);
}
};
JSONObject param = JSONObject.parseObject(baseEnterpriseVideo.getChannelNo());// post请求Form表单参数
param.put("cameraIndexCode", video.getKey());
String body = param.toJSONString();
String resultStr = ArtemisHttpUtil.doPostStringArtemis(config, path, body, null, null, "application/json", null);
if (ValidationUtil.isEmpty(resultStr)) {
return;
}
JSONObject result = JSONObject.parseObject(resultStr);
if (!result.get("code").equals("0")) {
log.error("获取iSecureCenter视频对接平台摄像头预览url失败,code:{}", result.get("code"));
}
if (result.get("data") == null) {
return;
}
if (result.get("data") instanceof JSONObject) {
JSONObject dataObj = (JSONObject) result.get("data");
String cameraUrl = dataObj.getString("url");
video.setUrl(cameraUrl);
}
} catch (URISyntaxException e) {
throw new RuntimeException("URL格式解析异常", e);
} catch (Exception e) {
throw new RuntimeException(e);
}
});
videoUrlResult.addAll(videoList);
}
private void getYsVideoUrl(List<BaseEnterpriseVideo> videos, List<CommonVideoDto> result) {
for (BaseEnterpriseVideo video : videos) { for (BaseEnterpriseVideo video : videos) {
Map<String, Object> requestInfo = new HashMap<>(); Map<String, Object> requestInfo = new HashMap<>();
requestInfo.put("appKey", video.getAppKey()); requestInfo.put("appKey", video.getAppKey());
...@@ -101,7 +184,6 @@ public class BaseEnterpriseVideoServiceImpl extends BaseService<BaseEnterpriseVi ...@@ -101,7 +184,6 @@ public class BaseEnterpriseVideoServiceImpl extends BaseService<BaseEnterpriseVi
this.setDefaultVideoIfConnectFailed(channelNoList, result); this.setDefaultVideoIfConnectFailed(channelNoList, result);
} }
} }
return result;
} }
/** /**
...@@ -132,4 +214,84 @@ public class BaseEnterpriseVideoServiceImpl extends BaseService<BaseEnterpriseVi ...@@ -132,4 +214,84 @@ public class BaseEnterpriseVideoServiceImpl extends BaseService<BaseEnterpriseVi
// 每个通道设备默认值 // 每个通道设备默认值
commonVideoDtos.forEach(channelNo -> this.setDefaultChannelData(result, channelNo)); commonVideoDtos.forEach(channelNo -> this.setDefaultChannelData(result, channelNo));
} }
public List<CommonVideoDto> getISecureCenterCameras(List<BaseEnterpriseVideo> videoEquipList) {
List<BaseEnterpriseVideo> iSecureCenterVideoList = videoEquipList.stream().filter(v -> VideoIntegrationPlatformEnum.ISECURECENTER.getCode().equals(v.getPlatform())).collect(Collectors.toList());
if (!ValidationUtil.isEmpty(iSecureCenterVideoList)) {
// 根据iSecureCenter视频对接平台,直接获取摄像头列表
return getRegionCameras(iSecureCenterVideoList);
}
return null;
}
/**
* iSecureCenter视频对接平台,根据区域ID(企业统一信用代码唯一对应)获取摄像头列表。
* 现有对接一个企业只有一条数据,取第一条数据作为企业信息。
* @param iSecureCenterVideoList 企业列表
* @return List<CommonVideoDto>
*/
private List<CommonVideoDto> getRegionCameras(List<BaseEnterpriseVideo> iSecureCenterVideoList) {
List<CommonVideoDto> commonVideoDtos = new ArrayList<>();
BaseEnterpriseVideo baseEnterpriseVideo = iSecureCenterVideoList.get(0);
try {
String getCamerasUrl = baseEnterpriseVideo.getTokenUrl();
// 将getCamerasUrl解析为https://192.168.1.1:8080/api/v1?pageNo=1&pageSize=20这种方式
// 使用URI标准库解析URL结构
URI uri = new URI(getCamerasUrl);
String scheme = uri.getScheme(); // 获取协议部分(https)
String protocol = scheme + "://"; // "https://"
String hostPort = uri.getHost() + (uri.getPort() != -1 ? ":" + uri.getPort() : ""); // "ip:port"
String urlPath = uri.getPath();
ArtemisConfig config = new ArtemisConfig();
config.setAppKey(baseEnterpriseVideo.getAppKey());
config.setAppSecret(baseEnterpriseVideo.getAppSecret());
config.setHost(hostPort);
Map<String, String> path = new HashMap<String, String>(2) {
{
put(protocol, urlPath);
}
};
Map<String, String> paramMap = new HashMap<>();// post请求Form表单参数
paramMap.put("regionIndexCode", baseEnterpriseVideo.getDeviceSerial());
paramMap.put("pageNo", "1");
paramMap.put("pageSize", "100");
String body = JSON.toJSON(paramMap).toString();
String resultStr = ArtemisHttpUtil.doPostStringArtemis(config, path, body, null, null, "application/json", null);
if (ValidationUtil.isEmpty(resultStr)) {
return null;
}
JSONObject result = JSONObject.parseObject(resultStr);
if (!result.get("code").equals("0")) {
log.error("获取iSecureCenter视频对接平台摄像头列表失败,code:{}", result.get("code"));
return commonVideoDtos;
}
if (result.get("data") == null) {
return commonVideoDtos;
}
if (result.get("data") instanceof JSONObject) {
JSONObject dataObj = (JSONObject) result.get("data");
JSONArray dataList = dataObj.getJSONArray("list");
if (ValidationUtil.isEmpty(dataList)) {
return commonVideoDtos;
}
dataList.forEach(data -> {
CommonVideoDto commonVideoDto = new CommonVideoDto();
JSONObject dataJson = (JSONObject) data;
commonVideoDto.setKey(dataJson.getString("cameraIndexCode"));
commonVideoDto.setLabel(dataJson.getString("cameraName"));
commonVideoDto.setTitle(dataJson.getString("cameraName"));
commonVideoDto.setParent(baseEnterpriseVideo.getUseUnitCode());
commonVideoDtos.add(commonVideoDto);
});
return commonVideoDtos;
}
} catch (URISyntaxException e) {
throw new RuntimeException("URL格式解析异常", e);
} catch (Exception e) {
throw new RuntimeException(e);
}
return commonVideoDtos;
}
} }
\ No newline at end of file
...@@ -52,6 +52,11 @@ ...@@ -52,6 +52,11 @@
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<dependency>
<groupId>com.hikvision.ga</groupId>
<artifactId>artemis-http-client</artifactId>
<version>1.1.13.RELEASE</version>
</dependency>
</dependencies> </dependencies>
<modules> <modules>
......
...@@ -7,6 +7,7 @@ import com.yeejoin.amos.boot.biz.common.dto.CommonVideoDto; ...@@ -7,6 +7,7 @@ import com.yeejoin.amos.boot.biz.common.dto.CommonVideoDto;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity; import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import com.yeejoin.amos.boot.module.common.api.dto.DPFilterParamDto; import com.yeejoin.amos.boot.module.common.api.dto.DPFilterParamDto;
import com.yeejoin.amos.boot.module.common.api.entity.BaseEnterpriseVideo; import com.yeejoin.amos.boot.module.common.api.entity.BaseEnterpriseVideo;
import com.yeejoin.amos.boot.module.common.api.enums.VideoIntegrationPlatformEnum;
import com.yeejoin.amos.boot.module.common.biz.service.impl.BaseEnterpriseVideoServiceImpl; import com.yeejoin.amos.boot.module.common.biz.service.impl.BaseEnterpriseVideoServiceImpl;
import com.yeejoin.amos.boot.module.statistics.api.dto.UnitVideoDto; import com.yeejoin.amos.boot.module.statistics.api.dto.UnitVideoDto;
import com.yeejoin.amos.boot.module.statistics.api.vo.TreeNodeVo; import com.yeejoin.amos.boot.module.statistics.api.vo.TreeNodeVo;
...@@ -17,6 +18,7 @@ import com.yeejoin.amos.feign.systemctl.model.RegionModel; ...@@ -17,6 +18,7 @@ import com.yeejoin.amos.feign.systemctl.model.RegionModel;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -143,11 +145,19 @@ public class VideoServiceImpl { ...@@ -143,11 +145,19 @@ public class VideoServiceImpl {
private List<CommonVideoDto> getVideoChannel(List<BaseEnterpriseVideo> videoEquipList) { private List<CommonVideoDto> getVideoChannel(List<BaseEnterpriseVideo> videoEquipList) {
List<CommonVideoDto> commonVideoDtos = new ArrayList<>(); List<CommonVideoDto> commonVideoDtos = new ArrayList<>();
videoEquipList.forEach(v -> { // 根据对接平台不同,摄像头通道信息不同,需要解析成CommonVideoDto
String channelNos = v.getChannelNo(); List<BaseEnterpriseVideo> ysVideoList = videoEquipList.stream().filter(v -> VideoIntegrationPlatformEnum.YS.getCode().equals(v.getPlatform())).collect(Collectors.toList());
List<CommonVideoDto> channelNoList = JSONObject.parseArray(channelNos, CommonVideoDto.class); if (!ValidationUtil.isEmpty(ysVideoList)) {
commonVideoDtos.addAll(channelNoList.stream().peek(e -> e.setParent(v.getUseUnitCode())).collect(Collectors.toList())); ysVideoList.forEach(v -> {
}); String channelNos = v.getChannelNo();
List<CommonVideoDto> channelNoList = JSONObject.parseArray(channelNos, CommonVideoDto.class);
commonVideoDtos.addAll(channelNoList.stream().peek(e -> e.setParent(v.getUseUnitCode())).collect(Collectors.toList()));
});
}
List<CommonVideoDto> iSecureCenterCameras = enterpriseVideoService.getISecureCenterCameras(videoEquipList);
if (!ValidationUtil.isEmpty(iSecureCenterCameras)) {
commonVideoDtos.addAll(iSecureCenterCameras);
}
return commonVideoDtos; return commonVideoDtos;
} }
...@@ -166,6 +176,7 @@ public class VideoServiceImpl { ...@@ -166,6 +176,7 @@ public class VideoServiceImpl {
LambdaQueryWrapper<BaseEnterpriseVideo> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<BaseEnterpriseVideo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(BaseEnterpriseVideo::getEquListCode, EquipmentClassifityEnum.KYSD.getCode()); queryWrapper.eq(BaseEnterpriseVideo::getEquListCode, EquipmentClassifityEnum.KYSD.getCode());
queryWrapper.like(BaseEnterpriseVideo::getRegionCode, dpFilterParamDto.getCityCode()); queryWrapper.like(BaseEnterpriseVideo::getRegionCode, dpFilterParamDto.getCityCode());
queryWrapper.eq(BaseEnterpriseVideo::getIsEnabled, true);
return enterpriseVideoService.list(queryWrapper); return enterpriseVideoService.list(queryWrapper);
} }
...@@ -174,6 +185,7 @@ public class VideoServiceImpl { ...@@ -174,6 +185,7 @@ public class VideoServiceImpl {
LambdaQueryWrapper<BaseEnterpriseVideo> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<BaseEnterpriseVideo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(BaseEnterpriseVideo::getEquListCode, EquipmentClassifityEnum.KYSD.getCode()); queryWrapper.eq(BaseEnterpriseVideo::getEquListCode, EquipmentClassifityEnum.KYSD.getCode());
queryWrapper.like(BaseEnterpriseVideo::getRegionCode, regionCode); queryWrapper.like(BaseEnterpriseVideo::getRegionCode, regionCode);
queryWrapper.eq(BaseEnterpriseVideo::getIsEnabled, true);
return enterpriseVideoService.list(queryWrapper); return enterpriseVideoService.list(queryWrapper);
} }
......
...@@ -309,7 +309,7 @@ ...@@ -309,7 +309,7 @@
<repository> <repository>
<id>thirdparty</id> <id>thirdparty</id>
<name>thirdparty</name> <name>thirdparty</name>
<url> http://47.92.103.240:8081/nexus/content/repositories/thirdparty/</url> <url>http://47.92.103.240:8081/nexus/content/repositories/thirdparty/</url>
</repository> </repository>
</repositories> </repositories>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment