From e1886ba4b5f6ed4b4e14117985ba95802c36d2e1 Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Wed, 24 Apr 2024 17:00:00 +0800
Subject: [PATCH] 海康事件新增事件信息写入及查询

---
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/AsyncHkEventService.java     |   47 ++++++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/mapper/HkEventMapper.xml             |   25 +++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/HkEventService.java          |   23 +++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/impl/HkEventServiceImpl.java |   29 ++++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkEventController.java    |   86 ++++++++++-
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/mapper/HkEventMapper.java            |   20 ++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkConstant.java             |    8 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/entity/HkEvent.java                  |  118 ++++++++++++++++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/HkEventVO.java                    |   25 +++
 9 files changed, 366 insertions(+), 15 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 ad50578..bc118df 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
@@ -10,15 +10,15 @@
 	/**
 	 * post
 	 */
-	public static final String HOST = "36.134.79.80:1443";
-//	public static final String HOST = "v.hubeishuiyi.cn:1443";
+//	public static final String HOST = "36.134.79.80:1443";
+	public static final String HOST = "v.hubeishuiyi.cn:1443";
 
 
 	/**
 	 * newPost
 	 */
-	public static final String NEW_HOST = "223.76.234.232:1443";
-//	public static final String NEW_HOST = "v.hubeishuiyi.cn:1443";
+//	public static final String NEW_HOST = "223.76.234.232:1443";
+	public static final String NEW_HOST = "v.hubeishuiyi.cn:1443";
 
 
 	/**
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
index 57f782d..6dc8071 100644
--- 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
@@ -1,24 +1,26 @@
 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.entity.HkEvent;
+import cn.gistack.sm.hk.service.AsyncHkEventService;
+import cn.gistack.sm.hk.service.HkEventService;
 import cn.gistack.sm.hk.vo.EventVO;
-import cn.gistack.sm.hk.vo.HkVO;
+import cn.gistack.sm.hk.vo.HkEventVO;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.mp.support.Condition;
 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.*;
 
@@ -34,7 +36,71 @@
 @AllArgsConstructor
 public class HkEventController {
 
-	private final HkService hkService;
+	private final HkEventService hkEventService;
+	private final AsyncHkEventService asyncHkEventService;
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param hkEvent
+	 * @return
+	 */
+	@ApiOperation(value="告警记录-分页列表查询", notes="告警记录-分页列表查询")
+	@GetMapping(value = "/list")
+	public R queryPageList(HkEvent hkEvent, Query query) {
+		IPage<HkEvent> pageList = hkEventService.page(Condition.getPage(query), Condition.getQueryWrapper(hkEvent));
+		return R.data(pageList);
+	}
+
+	/**
+	 * 自定义分页列表查询
+	 * @param query
+	 * @param hkEvent
+	 * @return
+	 */
+	@ApiOperation(value="告警记录-自定义分页列表查询", notes="告警记录-自定义分页列表查询")
+	@GetMapping(value = "/page")
+	public R selectAlarmPage(HkEventVO hkEvent, Query query) {
+		return R.data(hkEventService.selectHkEventPage(Condition.getPage(query),hkEvent));
+	}
+
+	/**
+	 * 添加
+	 *
+	 * @param hkEvent
+	 * @return
+	 */
+	@ApiOperation(value="告警记录-添加", notes="告警记录-添加")
+	@PostMapping(value = "/add")
+	public R add(@RequestBody HkEvent hkEvent) {
+		return R.data(hkEventService.save(hkEvent));
+	}
+
+	/**
+	 * 编辑
+	 *
+	 * @param hkEvent
+	 * @return
+	 */
+	@ApiOperation(value="告警记录-编辑", notes="告警记录-编辑")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public R edit(@RequestBody HkEvent hkEvent) {
+		return R.data(hkEventService.updateById(hkEvent));
+	}
+
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@ApiOperation(value="告警记录-通过id查询", notes="告警记录-通过id查询")
+	@GetMapping(value = "/queryById")
+	public R queryById(@RequestParam(name="id",required=true) String id) {
+		HkEvent hkEvent = hkEventService.getById(id);
+		return R.data(hkEvent);
+	}
+
 
 	/**
 	 * 海康视频事件订阅
@@ -83,15 +149,13 @@
 	 */
 	@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);
-		log.info(simpleDateFormat.format(date) + "收到数据:" + System.lineSeparator() + prettyData);
-
+		// 异步保存数据
+		asyncHkEventService.saveHkEventInfo(prettyData);
+		// 立即返回
 		JSONObject jsonBody = new JSONObject();
 		jsonBody.put("code", "200");
 		jsonBody.put("msg", "ok");
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/entity/HkEvent.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/entity/HkEvent.java
new file mode 100644
index 0000000..e3a5f02
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/entity/HkEvent.java
@@ -0,0 +1,118 @@
+package cn.gistack.sm.hk.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 海康视频事件
+ *
+ * @author zhongrj
+ * @date 2024-04-24
+ */
+@Data
+@TableName(value = "sm_hk_event")
+@ApiModel(value = "sm_hk_event对象", description = "考核方案")
+public class HkEvent implements Serializable {
+
+	/**
+	 * 主键id
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/**
+	 * 事件唯一标识
+	 */
+	@ApiModelProperty(value = "事件唯一标识")
+	private String eventId;
+
+	/**
+	 * 事件源编号,物理设备是资源编号
+	 */
+	@ApiModelProperty(value = "事件源编号,物理设备是资源编号")
+	private String srcIndex;
+
+	/**
+	 * 事件源类型
+	 */
+	@ApiModelProperty(value = "事件源类型")
+	private String srcType;
+	/**
+	 * 事件源名称
+	 */
+	@ApiModelProperty(value = "事件源名称")
+	private String srcName;
+
+	/**
+	 * 事件类型
+	 */
+	@ApiModelProperty(value = "事件类型")
+	private Long eventType;
+	/**
+	 * 事件状态
+	 * 0-瞬时
+	 * 1-开始
+	 * 2-停止
+	 * 4-事件联动结果更新
+	 * 5-事件图片异步上传
+	 */
+	@ApiModelProperty(value = "事件状态")
+	private Integer status;
+
+	/**
+	 * 事件等级:
+	 * 0-未配置
+	 * 1-低
+	 * 2-中
+	 * 3-高
+	 * 注意,此处事件等级是指在事件联动中配置的等级,需要配置了事件联动,才返回这个字段
+	 */
+	@ApiModelProperty(value = "事件等级")
+	private Integer eventLvl;
+
+	/**
+	 * 脉冲超时时间
+	 */
+	@ApiModelProperty(value = "脉冲超时时间")
+	private Long timeout;
+
+	/**
+	 * 事件发生时间(设备时间)
+	 */
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "事件发生时间(设备时间)")
+	private Date happenTime;
+
+	/**
+	 * 事件发生的事件源父设备编码
+	 */
+	@ApiModelProperty(value = "事件发生的事件源父设备编码")
+	private String srcParentIndex;
+
+	/**
+	 * 事件从接收者(程序处理后)发出的时间
+	 */
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "事件从接收者(程序处理后)发出的时间")
+	private Date sendTime;
+
+	/**
+	 * 创建时间
+	 */
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "创建时间")
+	@TableField(value = "create_time",fill = FieldFill.INSERT)
+	private Date createTime;
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/mapper/HkEventMapper.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/mapper/HkEventMapper.java
new file mode 100644
index 0000000..26ef039
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/mapper/HkEventMapper.java
@@ -0,0 +1,20 @@
+package cn.gistack.sm.hk.mapper;
+
+import cn.gistack.sm.hk.entity.HkEvent;
+import cn.gistack.sm.hk.vo.HkEventVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface HkEventMapper extends BaseMapper<HkEvent> {
+
+	/**
+	 * 自定义分页列表查询
+	 * @param page
+	 * @param hkEvent
+	 * @return
+	 */
+	List<HkEventVO> selectHkEventPage(@Param("page") IPage<HkEventVO> page,@Param("hkEvent")  HkEventVO hkEvent);
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/mapper/HkEventMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/mapper/HkEventMapper.xml
new file mode 100644
index 0000000..c58e669
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/mapper/HkEventMapper.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.gistack.sm.hk.mapper.HkEventMapper">
+
+    <!--自定义分页列表查询-->
+    <select id="selectHkEventPage" resultType="cn.gistack.sm.hk.vo.HkEventVO">
+        select * from sm_hk_event where 1 =1
+        <if test="hkEvent.srcName!=null and hkEvent.srcName!=''">
+            and src_name like concat('%',#{hkEvent.srcName},'%')
+        </if>
+        <if test="hkEvent.status!=null">
+            and status = #{hkEvent.status}
+        </if>
+        <if test="hkEvent.eventType!=null">
+            and event_type = #{hkEvent.eventType}
+        </if>
+        <if test="hkEvent.startTime !=null and hkEvent.startTime !=''">
+            AND send_time &gt;= #{hkEvent.startTime}
+        </if>
+        <if test="hkEvent.endTime !=null and hkEvent.endTime !=''">
+            AND send_time &lt;= #{hkEvent.endTime}
+        </if>
+    </select>
+
+</mapper>
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/AsyncHkEventService.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/AsyncHkEventService.java
new file mode 100644
index 0000000..6806bd5
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/AsyncHkEventService.java
@@ -0,0 +1,47 @@
+package cn.gistack.sm.hk.service;
+
+import cn.gistack.sm.hk.entity.HkEvent;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+@Component
+public class AsyncHkEventService {
+
+	@Autowired
+	private HkEventService hkEventService;
+
+	/**
+	 * 异步加载海康视频事件
+	 * @param jsonData
+	 */
+	@Async
+	public void saveHkEventInfo(String jsonData){
+		JSONObject jsonObject = JSONObject.parseObject(jsonData);
+		String params = jsonObject.get("params").toString();
+		JSONObject parseObject = JSONObject.parseObject(params);
+		JSONArray eventsArray = parseObject.getJSONArray("events");
+		Date sendTime = parseObject.getDate("sendTime");
+		for (int i = 0; i < eventsArray.size(); i++) {
+			HkEvent hkEvent = new HkEvent();
+			hkEvent.setEventId(eventsArray.getJSONObject(i).getString("eventId"));
+			hkEvent.setEventType(eventsArray.getJSONObject(i).getLong("eventType"));
+			hkEvent.setSrcIndex(eventsArray.getJSONObject(i).getString("srcIndex"));
+			hkEvent.setSrcName(eventsArray.getJSONObject(i).getString("srcName"));
+			hkEvent.setSrcType(eventsArray.getJSONObject(i).getString("srcType"));
+			hkEvent.setSrcParentIndex(eventsArray.getJSONObject(i).getString("srcParentIndex"));
+			hkEvent.setTimeout(eventsArray.getJSONObject(i).getLong("timeout"));
+			hkEvent.setHappenTime(eventsArray.getJSONObject(i).getDate("happenTime"));
+			hkEvent.setStatus(eventsArray.getJSONObject(i).getInteger("status"));
+			hkEvent.setEventLvl(eventsArray.getJSONObject(i).getInteger("eventLvl"));
+			hkEvent.setCreateTime(new Date());
+			hkEvent.setSendTime(sendTime);
+			// 保存
+			hkEventService.save(hkEvent);
+		}
+	}
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/HkEventService.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/HkEventService.java
new file mode 100644
index 0000000..809b69f
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/HkEventService.java
@@ -0,0 +1,23 @@
+package cn.gistack.sm.hk.service;
+
+
+import cn.gistack.sm.hk.entity.HkEvent;
+import cn.gistack.sm.hk.vo.HkEventVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 海康事件服务接口层
+ * @author zhongrj
+ * @date 2024-04-24
+ */
+public interface HkEventService extends IService<HkEvent> {
+
+	/**
+	 * 自定义分页列表查询
+	 * @param page
+	 * @param hkEvent
+	 * @return
+	 */
+	IPage<HkEventVO> selectHkEventPage(IPage<HkEventVO> page, HkEventVO hkEvent);
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/impl/HkEventServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/impl/HkEventServiceImpl.java
new file mode 100644
index 0000000..ada980b
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/impl/HkEventServiceImpl.java
@@ -0,0 +1,29 @@
+package cn.gistack.sm.hk.service.impl;
+
+import cn.gistack.sm.hk.entity.HkEvent;
+import cn.gistack.sm.hk.mapper.HkEventMapper;
+import cn.gistack.sm.hk.service.HkEventService;
+import cn.gistack.sm.hk.vo.HkEventVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 海康事件服务接口实现层
+ * @author zhongrj
+ * @date 2024-04-24
+ */
+@Service
+public class HkEventServiceImpl extends ServiceImpl<HkEventMapper, HkEvent> implements HkEventService {
+
+	/**
+	 * 自定义分页列表查询
+	 * @param page
+	 * @param hkEvent
+	 * @return
+	 */
+	@Override
+	public IPage<HkEventVO> selectHkEventPage(IPage<HkEventVO> page, HkEventVO hkEvent) {
+		return page.setRecords(baseMapper.selectHkEventPage(page,hkEvent));
+	}
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/HkEventVO.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/HkEventVO.java
new file mode 100644
index 0000000..d19f912
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/HkEventVO.java
@@ -0,0 +1,25 @@
+package cn.gistack.sm.hk.vo;
+
+import cn.gistack.sm.hk.entity.HkEvent;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class HkEventVO extends HkEvent implements Serializable {
+
+	/**
+	 * 事件类型名称
+	 */
+	private String eventTypeName;
+
+	/**
+	 * 开始时间
+	 */
+	private String startTime;
+
+	/**
+	 * 结束时间
+	 */
+	private String endTime;
+}

--
Gitblit v1.9.3