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"; /** 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"); skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/entity/HkEvent.java
New file @@ -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; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/mapper/HkEventMapper.java
New file @@ -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); } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/mapper/HkEventMapper.xml
New file @@ -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 >= #{hkEvent.startTime} </if> <if test="hkEvent.endTime !=null and hkEvent.endTime !=''"> AND send_time <= #{hkEvent.endTime} </if> </select> </mapper> skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/AsyncHkEventService.java
New file @@ -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); } } } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/HkEventService.java
New file @@ -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); } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/impl/HkEventServiceImpl.java
New file @@ -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)); } } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/HkEventVO.java
New file @@ -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; }