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