From 5e44f6ed44993c35b91093d72105b1bd41cf450e Mon Sep 17 00:00:00 2001
From: pengjie <17373303529@163.com>
Date: Wed, 21 Aug 2024 14:55:56 +0800
Subject: [PATCH] =?UTF-8?q?=E8=A7=86=E9=A2=91=E7=9B=91=E6=8E=A7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 17 ++++
.../zhgd/review/base/api/CameraPreview.java | 81 ++++++++++++++++
.../com/zhgd/review/base/api/MonitorApi.java | 92 +++++++++++++++++++
.../base/controller/MonitorDevController.java | 17 ++--
.../zhgd/review/base/entity/VideoConfig.java | 55 +++++++++++
.../review/base/mapper/VideoConfigMapper.java | 16 ++++
.../base/mapper/xml/VideoConfigMapper.xml | 5 +
.../base/service/IVideoConfigService.java | 14 +++
.../service/impl/VideoConfigServiceImpl.java | 18 ++++
9 files changed, 309 insertions(+), 6 deletions(-)
create mode 100644 src/main/java/com/zhgd/review/base/api/CameraPreview.java
create mode 100644 src/main/java/com/zhgd/review/base/api/MonitorApi.java
create mode 100644 src/main/java/com/zhgd/review/base/entity/VideoConfig.java
create mode 100644 src/main/java/com/zhgd/review/base/mapper/VideoConfigMapper.java
create mode 100644 src/main/java/com/zhgd/review/base/mapper/xml/VideoConfigMapper.xml
create mode 100644 src/main/java/com/zhgd/review/base/service/IVideoConfigService.java
create mode 100644 src/main/java/com/zhgd/review/base/service/impl/VideoConfigServiceImpl.java
diff --git a/pom.xml b/pom.xml
index 4bff33f..1daf92a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -165,6 +165,23 @@
+
+
+
+ com.hikvision.ga
+ artemis-http-client
+ 1.1.3
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+ ch.qos.logback
+ logback-classic
+
+
+
com.alibaba
diff --git a/src/main/java/com/zhgd/review/base/api/CameraPreview.java b/src/main/java/com/zhgd/review/base/api/CameraPreview.java
new file mode 100644
index 0000000..ab38062
--- /dev/null
+++ b/src/main/java/com/zhgd/review/base/api/CameraPreview.java
@@ -0,0 +1,81 @@
+package com.zhgd.review.base.api;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hikvision.artemis.sdk.ArtemisHttpUtil;
+import com.hikvision.artemis.sdk.config.ArtemisConfig;
+import com.zhgd.review.base.entity.VideoConfig;
+import com.zhgd.review.base.service.IVideoConfigService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 视频监控外部接口
+ */
+@Slf4j
+@Component
+public class CameraPreview {
+
+ @Autowired
+ private IVideoConfigService videoConfigService;
+
+ public JSONObject GetCameraPreviewURL(String requestUrl, String body) {
+ return GetCameraPreviewURL(requestUrl, body, null);
+ }
+
+ /**
+ * 调用
+ * @param requestUrl 请求路径
+ * @param body 请求参数体
+ * @return
+ */
+ public JSONObject GetCameraPreviewURL(String requestUrl, String body, Map header) {
+ /**
+ * STEP1:设置平台参数,根据实际情况,设置host appkey appsecret 三个参数.
+ */
+ List list = videoConfigService.list();
+ VideoConfig videoConfig = list.get(0);
+ ArtemisConfig.host = videoConfig.getIp() + ":" + videoConfig.getPort();
+ ArtemisConfig.appKey = videoConfig.getAppKey();
+ ArtemisConfig.appSecret = videoConfig.getAppSecret();
+ /**
+ * STEP2:设置OpenAPI接口的上下文
+ */
+ final String ARTEMIS_PATH = "/artemis";
+
+ /**
+ * STEP3:设置接口的URI地址
+ */
+ final String previewURLsApi = ARTEMIS_PATH + requestUrl;
+ Map path = new HashMap(2) {
+ {
+ put("https://", previewURLsApi);//根据现场环境部署确认是http还是https
+ }
+ };
+
+ /**
+ * STEP4:设置参数提交方式
+ */
+ String contentType = "application/json";
+
+
+ /**
+ * STEP6:调用接口
+ */
+ String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null,
+ contentType, header);// post请求application/json类型参数
+ JSONObject jsonResult = JSONObject.parseObject(result);
+ if (result != null) {
+ String code = jsonResult.getString("code");
+ if (!code.equals("0")) {
+ log.error("调用海康开发平台接口出现错误,请求接口:" + requestUrl + "请求参数 :" + body + "返回错误码:" + code);
+ jsonResult = null;
+ }
+ }
+ return jsonResult;
+ }
+}
diff --git a/src/main/java/com/zhgd/review/base/api/MonitorApi.java b/src/main/java/com/zhgd/review/base/api/MonitorApi.java
new file mode 100644
index 0000000..34cf5f8
--- /dev/null
+++ b/src/main/java/com/zhgd/review/base/api/MonitorApi.java
@@ -0,0 +1,92 @@
+package com.zhgd.review.base.api;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 监控外部接口
+ */
+@Component
+public class MonitorApi {
+
+ @Autowired
+ private CameraPreview cameraPreview;
+
+ /**
+ * 根据监控点编号获取监控点状态
+ * @return
+ */
+ public JSONObject getMonitorOnline(List monitorCode) {
+ String path = "/api/nms/v1/online/camera/get";
+ JSONObject jsonBody = new JSONObject();
+ Object [] array = monitorCode.toArray();
+ jsonBody.put("indexCodes", array);
+ return cameraPreview.GetCameraPreviewURL(path, jsonBody.toJSONString());
+ }
+
+
+ /**
+ * 监控点图片抓拍
+ * @return
+ */
+ public JSONObject manualCapture(String monitorCode) {
+ String path = "/api/video/v1/manualCapture";
+ JSONObject jsonBody = new JSONObject();
+ jsonBody.put("cameraIndexCode", monitorCode);
+// Map map = new HashMap<>();
+// map.put("userId", "admin");
+// map.put("domainId", "wan");
+ return cameraPreview.GetCameraPreviewURL(path, jsonBody.toJSONString());
+ }
+
+ /**
+ * 获取监控点预览取流
+ * @return
+ */
+ public String previewURLV1(Map map) {
+ String path = "/api/video/v1/cameras/previewURLs";
+ JSONObject jsonBody = JSONObject.parseObject(JSON.toJSONString(map));
+ JSONObject jsonObject = cameraPreview.GetCameraPreviewURL(path, jsonBody.toJSONString());
+ if (jsonObject == null) {
+ return null;
+ }
+ return jsonObject.getJSONObject("data").get("url").toString();
+ }
+
+ /**
+ * 获取监控点预览取流
+ * @return
+ */
+ public String previewURL(Map map) {
+ map.put("streamType", 1);
+ String path = "/api/video/v2/cameras/previewURLs";
+ JSONObject jsonBody = JSONObject.parseObject(JSON.toJSONString(map));
+ JSONObject jsonObject = cameraPreview.GetCameraPreviewURL(path, jsonBody.toJSONString());
+ if (jsonObject == null) {
+ return null;
+ }
+ return jsonObject.getJSONObject("data").get("url").toString();
+ }
+
+ /**
+ * 云台操作
+ * @return
+ */
+ public JSONObject controlling(Map map) {
+ String path = "/api/video/v1/ptzs/controlling";
+ JSONObject jsonBody = JSONObject.parseObject(JSON.toJSONString(map));
+ Map headMap = new HashMap<>();
+ headMap.put("userId", "admin");
+ JSONObject jsonObject = cameraPreview.GetCameraPreviewURL(path, jsonBody.toJSONString(), headMap);
+ if (jsonObject == null) {
+ return null;
+ }
+ return jsonObject;
+ }
+}
diff --git a/src/main/java/com/zhgd/review/base/controller/MonitorDevController.java b/src/main/java/com/zhgd/review/base/controller/MonitorDevController.java
index dc4629c..478a70f 100644
--- a/src/main/java/com/zhgd/review/base/controller/MonitorDevController.java
+++ b/src/main/java/com/zhgd/review/base/controller/MonitorDevController.java
@@ -4,6 +4,7 @@ import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import com.zhgd.review.annotation.OperLog;
+import com.zhgd.review.base.api.MonitorApi;
import com.zhgd.review.base.query.QueryGenerator;
import com.zhgd.review.base.util.Result;
import io.swagger.annotations.Api;
@@ -11,9 +12,7 @@ import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
@@ -58,6 +57,9 @@ public class MonitorDevController {
@Autowired
private IMonitorDevService monitorDevService;
+ @Autowired
+ private MonitorApi monitorApi;
+
/**
* 分页列表查询
*
@@ -202,9 +204,12 @@ public class MonitorDevController {
if (monitorDev == null) {
return Result.failed("未找到对应实体");
} else {
- String url = monitorDev.getUrl();
- String result = HttpUtil.get(url);
- return Result.ok(JSONObject.parseObject(result));
+ String cameraIndexCodes = monitorDev.getCode();
+ Map apply = new HashMap<>();
+ apply.put("cameraIndexCode", cameraIndexCodes);
+ apply.put("protocol", "hls");
+ String url = monitorApi.previewURL(apply);
+ return Result.ok(url, "操作成功");
}
}
}
diff --git a/src/main/java/com/zhgd/review/base/entity/VideoConfig.java b/src/main/java/com/zhgd/review/base/entity/VideoConfig.java
new file mode 100644
index 0000000..af7d39a
--- /dev/null
+++ b/src/main/java/com/zhgd/review/base/entity/VideoConfig.java
@@ -0,0 +1,55 @@
+package com.zhgd.review.base.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 视频配置
+ * @author: pengj
+ * @date: 2023-06-01
+ * @version: V1.0
+ */
+@Data
+@TableName("video_config")
+@ApiModel(value = "VideoConfig实体类", description = "VideoConfig")
+public class VideoConfig implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId(type = IdType.AUTO)
+ @ApiModelProperty(value = "id")
+ private Integer id;
+ /**
+ * ip地址
+ */
+ @Excel(name = "ip地址", width = 15)
+ @ApiModelProperty(value = "ip地址")
+ private String ip;
+ /**
+ * 端口号
+ */
+ @Excel(name = "端口号", width = 15)
+ @ApiModelProperty(value = "端口号")
+ private String port;
+ /**
+ * app_key
+ */
+ @Excel(name = "app_key", width = 15)
+ @ApiModelProperty(value = "app_key")
+ private String appKey;
+ /**
+ * app_secret
+ */
+ @Excel(name = "app_secret", width = 15)
+ @ApiModelProperty(value = "app_secret")
+ private String appSecret;
+}
diff --git a/src/main/java/com/zhgd/review/base/mapper/VideoConfigMapper.java b/src/main/java/com/zhgd/review/base/mapper/VideoConfigMapper.java
new file mode 100644
index 0000000..b1f10da
--- /dev/null
+++ b/src/main/java/com/zhgd/review/base/mapper/VideoConfigMapper.java
@@ -0,0 +1,16 @@
+package com.zhgd.review.base.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhgd.review.base.entity.VideoConfig;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @Description: 视频配置
+ * @author: pengj
+ * @date: 2023-06-01
+ * @version: V1.0
+ */
+@Mapper
+public interface VideoConfigMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/zhgd/review/base/mapper/xml/VideoConfigMapper.xml b/src/main/java/com/zhgd/review/base/mapper/xml/VideoConfigMapper.xml
new file mode 100644
index 0000000..9e8a5d5
--- /dev/null
+++ b/src/main/java/com/zhgd/review/base/mapper/xml/VideoConfigMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/zhgd/review/base/service/IVideoConfigService.java b/src/main/java/com/zhgd/review/base/service/IVideoConfigService.java
new file mode 100644
index 0000000..d9d334e
--- /dev/null
+++ b/src/main/java/com/zhgd/review/base/service/IVideoConfigService.java
@@ -0,0 +1,14 @@
+package com.zhgd.review.base.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhgd.review.base.entity.VideoConfig;
+
+/**
+ * @Description: 视频配置
+ * @author: pengj
+ * @date: 2023-06-01
+ * @version: V1.0
+ */
+public interface IVideoConfigService extends IService {
+
+}
diff --git a/src/main/java/com/zhgd/review/base/service/impl/VideoConfigServiceImpl.java b/src/main/java/com/zhgd/review/base/service/impl/VideoConfigServiceImpl.java
new file mode 100644
index 0000000..f7456cc
--- /dev/null
+++ b/src/main/java/com/zhgd/review/base/service/impl/VideoConfigServiceImpl.java
@@ -0,0 +1,18 @@
+package com.zhgd.review.base.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhgd.review.base.entity.VideoConfig;
+import com.zhgd.review.base.mapper.VideoConfigMapper;
+import com.zhgd.review.base.service.IVideoConfigService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description: 视频配置
+ * @author: pengj
+ * @date: 2023-06-01
+ * @version: V1.0
+ */
+@Service
+public class VideoConfigServiceImpl extends ServiceImpl implements IVideoConfigService {
+
+}