From 415b1f8521f9137c2a625d6ed89dccc9c9d2da0a Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Thu, 10 Aug 2023 16:12:04 +0800
Subject: [PATCH] 海康视频报警事件订阅接入
---
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/EventVO.java | 37 +++++++
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkEventController.java | 101 ++++++++++++++++++++
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkConstant.java | 15 +++
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/util/GetCameraUtils.java | 88 +++++++++++++++--
4 files changed, 230 insertions(+), 11 deletions(-)
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkConstant.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkConstant.java
index a17d791..28d39b0 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkConstant.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkConstant.java
@@ -120,6 +120,21 @@
*/
public static final String presetsDeletionURLs = "/api/video/v1/presets/deletion";
+ /**
+ * 按事件类型订阅事件
+ */
+ public static final String eventSubscriptionByEventTypesURLs = "/api/eventService/v1/eventSubscriptionByEventTypes";
+
+ /**
+ * 按事件类型取消订阅
+ */
+ public static final String eventUnSubscriptionByEventTypesURLs = "/api/eventService/v1/eventUnSubscriptionByEventTypes";
+
+ /**
+ * 查询事件订阅信息
+ */
+ public static final String eventSubscriptionViewURLs = "/api/eventService/v1/eventSubscriptionView";
+
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkEventController.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkEventController.java
new file mode 100644
index 0000000..969ee48
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkEventController.java
@@ -0,0 +1,101 @@
+package cn.gistack.sm.hk.controller;
+
+import cn.gistack.sm.hk.constant.HkConstant;
+import cn.gistack.sm.hk.constant.ProtocolConstant;
+import cn.gistack.sm.hk.service.HkService;
+import cn.gistack.sm.hk.vo.EventVO;
+import cn.gistack.sm.hk.vo.HkVO;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.*;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Map;
+
+import static cn.gistack.sm.hk.util.GetCameraUtils.*;
+
+/**
+ * @author zhongrj
+ * @Description: 海康视频事件管理
+ * @date 2023-08-10
+ */
+@Slf4j
+@Api(tags = "海康视频事件")
+@RestController
+@RequestMapping("/hk/hkEvent")
+@AllArgsConstructor
+public class HkEventController {
+
+ private final HkService hkService;
+
+ /**
+ * 海康视频事件订阅
+ * @param eventVO 订阅参数
+ * @return
+ */
+ @GetMapping(value = "/eventSubscriptionByEventTypes")
+ public R eventSubscriptionByEventTypes(EventVO eventVO) {
+ String result = addEventSubscriptionByEventTypes(eventVO, HkConstant.eventSubscriptionByEventTypesURLs);
+ JSONObject jsonObject1 = JSONObject.parseObject(result);
+ // 查询海康设备列表并返回
+ return R.data(jsonObject1);
+ }
+
+ /**
+ * 海康视频事件取消订阅
+ * @param eventVO 订阅参数
+ * @return
+ */
+ @GetMapping(value = "/eventUnSubscriptionByEventTypes")
+ public R eventUnSubscriptionByEventTypes(EventVO eventVO) {
+ String result = removeEventSubscriptionByEventTypes(eventVO, HkConstant.eventUnSubscriptionByEventTypesURLs);
+ JSONObject jsonObject1 = JSONObject.parseObject(result);
+ // 查询海康设备列表并返回
+ return R.data(jsonObject1);
+ }
+
+ /**
+ * 查询事件订阅信息
+ * @param eventVO 订阅参数
+ * @return
+ */
+ @GetMapping(value = "/eventSubscriptionView")
+ public R eventSubscriptionView(EventVO eventVO) {
+ String result = getEventSubscriptionView(eventVO, HkConstant.eventSubscriptionViewURLs);
+ JSONObject jsonObject1 = JSONObject.parseObject(result);
+ // 查询海康设备列表并返回
+ return R.data(jsonObject1);
+ }
+
+ /**
+ * 事件回调事件
+ * @param data 回调数据
+ * @return
+ */
+ @PostMapping(value = "/eventRcv")
+ public String eventRcv(@RequestBody String data) {
+ Date date = new Date();
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ //格式化输出json
+ JSONObject jsonObject = JSON.parseObject(data);
+ String prettyData = JSON.toJSONString(jsonObject, SerializerFeature.PrettyFormat,
+ SerializerFeature.WriteMapNullValue);
+ System.out.println(simpleDateFormat.format(date) + "收到数据:" + System.lineSeparator() + prettyData);
+
+ JSONObject jsonBody = new JSONObject();
+ jsonBody.put("code", "200");
+ jsonBody.put("msg", "ok");
+ jsonBody.put("data", null);
+ return jsonBody.toJSONString();
+ }
+
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/util/GetCameraUtils.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/util/GetCameraUtils.java
index cb5f10d..f98b0f3 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/util/GetCameraUtils.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/util/GetCameraUtils.java
@@ -2,6 +2,7 @@
import cn.gistack.sm.hk.constant.HkConstant;
import cn.gistack.sm.hk.constant.ProtocolConstant;
+import cn.gistack.sm.hk.vo.EventVO;
import cn.gistack.sm.hk.vo.HkVO;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
@@ -10,10 +11,7 @@
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import org.springblade.core.tool.api.R;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import static cn.gistack.sm.hk.constant.HkConstant.ARTEMIS_PATH;
import static cn.gistack.sm.hk.util.GetCameraUtils.GetCameraPreviewURL;
@@ -247,10 +245,29 @@
return common(type,url,body);
}
+ /**
+ * 抓图
+ *
+ * @param url 监控资源url
+ * @return
+ */
+ public static String manualCaptureUrls(Integer type,String url,String cameraIndexCode) {
+ /**
+ * 组装请求参数
+ */
+ JSONObject jsonBody = new JSONObject();
+ jsonBody.put("cameraIndexCode", cameraIndexCode);
+ String body = jsonBody.toJSONString();
+
+ /**
+ * 调用接口并返回数据
+ * post请求application/json类型参数;
+ */
+ return common(type,url, body);
+ }
/**
* 获取监控点资源分页数据
- *
* @param url 监控资源url
* @return
*/
@@ -271,24 +288,73 @@
}
/**
- * 抓图
- *
- * @param url 监控资源url
+ * 海康视频事件订阅
+ * @param eventVO
+ * @param url
* @return
*/
- public static String manualCaptureUrls(Integer type,String url,String cameraIndexCode) {
+ public static String addEventSubscriptionByEventTypes(EventVO eventVO, String url) {
/**
* 组装请求参数
*/
JSONObject jsonBody = new JSONObject();
- jsonBody.put("cameraIndexCode", cameraIndexCode);
+ jsonBody.put("eventTypes", Arrays.stream(eventVO.getEventTypes().split(",")).mapToInt(Integer::parseInt).toArray());
+ jsonBody.put("eventDest", eventVO.getEventDest());
+ if (null!=eventVO.getSubType()){
+ jsonBody.put("subType", eventVO.getSubType());
+ }
+ if (null!=eventVO.getEventLvl()){
+ jsonBody.put("eventLvl", Arrays.stream(eventVO.getEventLvl().split(",")).mapToInt(Integer::parseInt).toArray());
+ }
String body = jsonBody.toJSONString();
/**
* 调用接口并返回数据
* post请求application/json类型参数;
*/
- return common(type,url, body);
+ return common(null==eventVO.getType()?1:eventVO.getType(),url, body);
+ }
+
+ /**
+ * 海康视频事件取消订阅
+ * @param eventVO
+ * @param url
+ * @return
+ */
+ public static String removeEventSubscriptionByEventTypes(EventVO eventVO, String url) {
+ int[] eventTypes = Arrays.stream(eventVO.getEventTypes().split(",")).mapToInt(Integer::parseInt).toArray();
+ /**
+ * 组装请求参数
+ */
+ JSONObject jsonBody = new JSONObject();
+ jsonBody.put("eventTypes", eventTypes);
+ String body = jsonBody.toJSONString();
+
+ /**
+ * 调用接口并返回数据
+ * post请求application/json类型参数;
+ */
+ return common(null==eventVO.getType()?1:eventVO.getType(),url, body);
+ }
+
+ /**
+ * 查询事件订阅信息
+ * @param eventVO
+ * @param url
+ * @return
+ */
+ public static String getEventSubscriptionView(EventVO eventVO, String url) {
+ /**
+ * 组装请求参数
+ */
+ JSONObject jsonBody = new JSONObject();
+ String body = jsonBody.toJSONString();
+
+ /**
+ * 调用接口并返回数据
+ * post请求application/json类型参数;
+ */
+ return common(null==eventVO.getType()?1:eventVO.getType(),url, body);
}
// public static void main(String[] args) {
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/EventVO.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/EventVO.java
new file mode 100644
index 0000000..27a0771
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/EventVO.java
@@ -0,0 +1,37 @@
+package cn.gistack.sm.hk.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class EventVO implements Serializable {
+
+ /**
+ * 类型(新站,老站)
+ */
+ private Integer type;
+
+ /**
+ * 事件类型 区域入侵:131588,徘徊侦测:131590 视频丢失:131329
+ */
+ private String eventTypes;
+
+ /**
+ * 指定事件接收的地址,采用restful回调模式,支持http和https,样式如下:http://ip:port/eventRcv或者
+ * https://ip:port/eventRcv
+ */
+ private String eventDest;
+
+ /**
+ * 订阅类型,0-订阅原始事件,1-联动事件,2-原始事件和联动事件,不填使用默认值0
+ */
+ private Integer subType;
+
+ /**
+ * 事件等级,0-未配置,1-低,2-中,3-高
+ */
+ private String eventLvl;
+
+
+}
--
Gitblit v1.9.3