master #6
@@ -16,4 +16,8 @@ public class HikEqpConfig {
|
|||||||
|
|
||||||
private String host;
|
private String host;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 视频回放地址 需要以/结尾
|
||||||
|
*/
|
||||||
|
private String playBackUrl;
|
||||||
}
|
}
|
||||||
|
@@ -6,6 +6,7 @@ import jakarta.validation.constraints.NotEmpty;
|
|||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.dromara.common.core.domain.R;
|
import org.dromara.common.core.domain.R;
|
||||||
|
import org.dromara.common.core.domain.TreeNode;
|
||||||
import org.dromara.common.core.validate.AddGroup;
|
import org.dromara.common.core.validate.AddGroup;
|
||||||
import org.dromara.common.core.validate.EditGroup;
|
import org.dromara.common.core.validate.EditGroup;
|
||||||
import org.dromara.common.excel.utils.ExcelUtil;
|
import org.dromara.common.excel.utils.ExcelUtil;
|
||||||
@@ -183,4 +184,18 @@ public class SisAlarmEventsController extends BaseController {
|
|||||||
List<QueryStatisticsAlarmVo> vo = sisAlarmEventsService.queryStatistics();
|
List<QueryStatisticsAlarmVo> vo = sisAlarmEventsService.queryStatistics();
|
||||||
return R.ok(vo);
|
return R.ok(vo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询事件树
|
||||||
|
* 大类
|
||||||
|
* - 小类
|
||||||
|
*
|
||||||
|
* @param bigType 事件大类, -1 代表查询全部
|
||||||
|
* @return 返回事件树
|
||||||
|
*/
|
||||||
|
@GetMapping("/query/eventType/{bigType}")
|
||||||
|
public R<List<TreeNode<String>>> queryEventType(@PathVariable("bigType") String bigType) {
|
||||||
|
List<TreeNode<String>> tree = sisAlarmEventsService.queryEventType(bigType);
|
||||||
|
return R.ok(tree);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2,9 +2,11 @@ package org.dromara.sis.controller.zkmedia;
|
|||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.common.core.domain.R;
|
import org.dromara.common.core.domain.R;
|
||||||
import org.dromara.sis.sdk.zkmedia.ZLMediaKitService;
|
import org.dromara.sis.sdk.hik.PlayBackBo;
|
||||||
|
import org.dromara.sis.sdk.zkmedia.MediaService;
|
||||||
import org.dromara.sis.sdk.zkmedia.model.AddStreamProxy;
|
import org.dromara.sis.sdk.zkmedia.model.AddStreamProxy;
|
||||||
import org.dromara.sis.sdk.zkmedia.model.AddStreamProxyResp;
|
import org.dromara.sis.sdk.zkmedia.model.AddStreamProxyResp;
|
||||||
|
import org.dromara.sis.sdk.zkmedia.model.SdkPlayBackResp;
|
||||||
import org.dromara.sis.sdk.zkmedia.model.StreamPlay;
|
import org.dromara.sis.sdk.zkmedia.model.StreamPlay;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
@@ -26,7 +28,7 @@ import javax.annotation.Resource;
|
|||||||
public class ZKLmediaController {
|
public class ZKLmediaController {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private ZLMediaKitService zlMediaKitService;
|
private MediaService mediaService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建拉流任务,返回null代表创建拉流任务失败
|
* 创建拉流任务,返回null代表创建拉流任务失败
|
||||||
@@ -36,7 +38,7 @@ public class ZKLmediaController {
|
|||||||
*/
|
*/
|
||||||
@PostMapping("/realtime/add")
|
@PostMapping("/realtime/add")
|
||||||
public R<AddStreamProxyResp> addStreamProxy(@RequestBody @Validated AddStreamProxy data) {
|
public R<AddStreamProxyResp> addStreamProxy(@RequestBody @Validated AddStreamProxy data) {
|
||||||
AddStreamProxyResp addStreamProxyResp = zlMediaKitService.addStreamProxy(data);
|
AddStreamProxyResp addStreamProxyResp = mediaService.addStreamProxy(data);
|
||||||
if (addStreamProxyResp != null) {
|
if (addStreamProxyResp != null) {
|
||||||
return R.ok(addStreamProxyResp);
|
return R.ok(addStreamProxyResp);
|
||||||
}
|
}
|
||||||
@@ -52,7 +54,7 @@ public class ZKLmediaController {
|
|||||||
*/
|
*/
|
||||||
@PostMapping("/proxy")
|
@PostMapping("/proxy")
|
||||||
public R<AddStreamProxyResp> addStreamProxy(@RequestBody @Validated StreamPlay streamPlay) {
|
public R<AddStreamProxyResp> addStreamProxy(@RequestBody @Validated StreamPlay streamPlay) {
|
||||||
AddStreamProxyResp addStreamProxyResp = zlMediaKitService.addStreamProxy(streamPlay);
|
AddStreamProxyResp addStreamProxyResp = mediaService.addStreamProxy(streamPlay);
|
||||||
if (addStreamProxyResp != null) {
|
if (addStreamProxyResp != null) {
|
||||||
return R.ok(addStreamProxyResp);
|
return R.ok(addStreamProxyResp);
|
||||||
}
|
}
|
||||||
@@ -67,7 +69,7 @@ public class ZKLmediaController {
|
|||||||
*/
|
*/
|
||||||
@PostMapping("/FFmpeg/proxy")
|
@PostMapping("/FFmpeg/proxy")
|
||||||
public R<AddStreamProxyResp> addFfmpegStreamProxy(@RequestBody @Validated AddStreamProxy data) {
|
public R<AddStreamProxyResp> addFfmpegStreamProxy(@RequestBody @Validated AddStreamProxy data) {
|
||||||
AddStreamProxyResp addStreamProxyResp = zlMediaKitService.addFfmpegStreamProxy(data);
|
AddStreamProxyResp addStreamProxyResp = mediaService.addFfmpegStreamProxy(data);
|
||||||
if (addStreamProxyResp != null) {
|
if (addStreamProxyResp != null) {
|
||||||
return R.ok(addStreamProxyResp);
|
return R.ok(addStreamProxyResp);
|
||||||
}
|
}
|
||||||
@@ -83,10 +85,16 @@ public class ZKLmediaController {
|
|||||||
*/
|
*/
|
||||||
@PostMapping("/ffmpeg/proxy")
|
@PostMapping("/ffmpeg/proxy")
|
||||||
public R<AddStreamProxyResp> addFfmpegProxy(@RequestBody @Validated StreamPlay data) {
|
public R<AddStreamProxyResp> addFfmpegProxy(@RequestBody @Validated StreamPlay data) {
|
||||||
AddStreamProxyResp addStreamProxyResp = zlMediaKitService.addFfmpegStreamProxy(data);
|
AddStreamProxyResp addStreamProxyResp = mediaService.addFfmpegStreamProxy(data);
|
||||||
if (addStreamProxyResp != null) {
|
if (addStreamProxyResp != null) {
|
||||||
return R.ok(addStreamProxyResp);
|
return R.ok(addStreamProxyResp);
|
||||||
}
|
}
|
||||||
return R.fail();
|
return R.fail();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/sdk/plackBack")
|
||||||
|
public R<SdkPlayBackResp> playBack(@RequestBody @Validated PlayBackBo playBackBo) {
|
||||||
|
SdkPlayBackResp res = mediaService.playBack(playBackBo);
|
||||||
|
return R.ok(res);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -8,6 +8,7 @@ import org.dromara.common.core.validate.AddGroup;
|
|||||||
import org.dromara.common.core.validate.EditGroup;
|
import org.dromara.common.core.validate.EditGroup;
|
||||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||||
import org.dromara.sis.domain.SisAlarmEvents;
|
import org.dromara.sis.domain.SisAlarmEvents;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -69,6 +70,7 @@ public class SisAlarmEventsBo extends BaseEntity {
|
|||||||
* 设备告警时间
|
* 设备告警时间
|
||||||
*/
|
*/
|
||||||
@NotNull(message = "设备告警时间不能为空", groups = {AddGroup.class, EditGroup.class})
|
@NotNull(message = "设备告警时间不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||||
|
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
private Date reportTime;
|
private Date reportTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -1,8 +1,9 @@
|
|||||||
package org.dromara.sis.mapper;
|
package org.dromara.sis.mapper;
|
||||||
|
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||||
import org.dromara.sis.domain.SisDeviceChannel;
|
import org.dromara.sis.domain.SisDeviceChannel;
|
||||||
import org.dromara.sis.domain.vo.SisDeviceChannelVo;
|
import org.dromara.sis.domain.vo.SisDeviceChannelVo;
|
||||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设备通道管理Mapper接口
|
* 设备通道管理Mapper接口
|
||||||
@@ -12,4 +13,5 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
|||||||
*/
|
*/
|
||||||
public interface SisDeviceChannelMapper extends BaseMapperPlus<SisDeviceChannel, SisDeviceChannelVo> {
|
public interface SisDeviceChannelMapper extends BaseMapperPlus<SisDeviceChannel, SisDeviceChannelVo> {
|
||||||
|
|
||||||
|
SisDeviceChannel queryChannels(@Param("deviceIp") String deviceIp, @Param("channelNo") String channelNo);
|
||||||
}
|
}
|
||||||
|
@@ -40,7 +40,7 @@ public class HikDeviceApplicationRunner implements ApplicationRunner {
|
|||||||
// 梯控登录
|
// 梯控登录
|
||||||
// runner.hikElevatorInfoLogin();
|
// runner.hikElevatorInfoLogin();
|
||||||
// 网络摄像头登录
|
// 网络摄像头登录
|
||||||
runner.hikNetCameraLogin();
|
// runner.hikNetCameraLogin();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Async
|
@Async
|
||||||
|
@@ -26,6 +26,7 @@ public class HikApiService {
|
|||||||
private static final String LOGOUT_URI = "logout";
|
private static final String LOGOUT_URI = "logout";
|
||||||
private static final String CHANNEL_LIST = "channel/list";
|
private static final String CHANNEL_LIST = "channel/list";
|
||||||
private static final String FACE_UPLOAD = "flib/add";
|
private static final String FACE_UPLOAD = "flib/add";
|
||||||
|
private static final String PLAY_BACK = "stream/playback";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发起海康设备对接模块请求
|
* 发起海康设备对接模块请求
|
||||||
@@ -115,7 +116,11 @@ public class HikApiService {
|
|||||||
* @return 返回上传文件名称
|
* @return 返回上传文件名称
|
||||||
*/
|
*/
|
||||||
public String fdLibUpload(FlibFaceAddBo addBo) {
|
public String fdLibUpload(FlibFaceAddBo addBo) {
|
||||||
return request("FACE_UPLOAD", JSONObject.toJSONString(addBo), String.class);
|
return request(FACE_UPLOAD, JSONObject.toJSONString(addBo), String.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer playBack(PlayBackBo playBackBo) {
|
||||||
|
return request(PLAY_BACK, JSONObject.toJSONString(playBackBo), Integer.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,63 @@
|
|||||||
|
package org.dromara.sis.sdk.hik;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class PlayBackBo {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设备ip
|
||||||
|
*/
|
||||||
|
@NotEmpty(message = "设备ip不能为null")
|
||||||
|
private String deviceIp;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设备端口
|
||||||
|
*/
|
||||||
|
private short port = 554;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设备厂商编号
|
||||||
|
*/
|
||||||
|
private Integer factoryNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设备访问账号
|
||||||
|
*/
|
||||||
|
private String deviceAccount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设备访问密码
|
||||||
|
*/
|
||||||
|
private String devicePwd;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设备通道编码
|
||||||
|
*/
|
||||||
|
@NotNull(message = "通道编码不能为null")
|
||||||
|
private Integer channelNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 码流类型
|
||||||
|
* 1:主码流
|
||||||
|
* 2:辅码流
|
||||||
|
*/
|
||||||
|
private Byte streamType = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 开始时间
|
||||||
|
*/
|
||||||
|
@NotNull(message = "开始时间不能为null")
|
||||||
|
private Date startTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 结束时间
|
||||||
|
*/
|
||||||
|
@NotNull(message = "结束时间不能为null")
|
||||||
|
private Date endTime;
|
||||||
|
|
||||||
|
}
|
@@ -1,16 +1,14 @@
|
|||||||
package org.dromara.sis.sdk.zkmedia;
|
package org.dromara.sis.sdk.zkmedia;
|
||||||
|
|
||||||
|
|
||||||
import org.dromara.sis.sdk.zkmedia.model.AddStreamProxy;
|
import org.dromara.sis.sdk.hik.PlayBackBo;
|
||||||
import org.dromara.sis.sdk.zkmedia.model.AddStreamProxyResp;
|
import org.dromara.sis.sdk.zkmedia.model.*;
|
||||||
import org.dromara.sis.sdk.zkmedia.model.StartStreamProxy;
|
|
||||||
import org.dromara.sis.sdk.zkmedia.model.StreamPlay;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 拉流服务
|
* 拉流服务
|
||||||
* @author lxj
|
* @author lxj
|
||||||
*/
|
*/
|
||||||
public interface ZLMediaKitService {
|
public interface MediaService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建视频流拉流代理
|
* 创建视频流拉流代理
|
||||||
@@ -58,4 +56,10 @@ public interface ZLMediaKitService {
|
|||||||
Boolean delFfmpegSource(String key);
|
Boolean delFfmpegSource(String key);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过sdk进行视频回放
|
||||||
|
* @param playBackBo 回放参数
|
||||||
|
* @return 返回播放地址
|
||||||
|
*/
|
||||||
|
SdkPlayBackResp playBack(PlayBackBo playBackBo);
|
||||||
}
|
}
|
@@ -4,8 +4,11 @@ import cn.hutool.core.util.IdUtil;
|
|||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.sis.api.enums.FactoryNoEnum;
|
import org.dromara.sis.api.enums.FactoryNoEnum;
|
||||||
|
import org.dromara.sis.config.HikEqpConfig;
|
||||||
import org.dromara.sis.config.ZLMediaKitConfig;
|
import org.dromara.sis.config.ZLMediaKitConfig;
|
||||||
import org.dromara.sis.domain.SisDeviceChannel;
|
import org.dromara.sis.domain.SisDeviceChannel;
|
||||||
|
import org.dromara.sis.sdk.hik.HikApiService;
|
||||||
|
import org.dromara.sis.sdk.hik.PlayBackBo;
|
||||||
import org.dromara.sis.sdk.zkmedia.model.*;
|
import org.dromara.sis.sdk.zkmedia.model.*;
|
||||||
import org.dromara.sis.service.ISisDeviceChannelService;
|
import org.dromara.sis.service.ISisDeviceChannelService;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
@@ -22,12 +25,16 @@ import java.util.Map;
|
|||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class ZLMediaKitServiceImpl implements ZLMediaKitService {
|
public class MediaServiceImpl implements MediaService {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private ZLMediaKitConfig zlmConfig;
|
private ZLMediaKitConfig zlmConfig;
|
||||||
@Resource
|
@Resource
|
||||||
private ISisDeviceChannelService deviceChannelService;
|
private ISisDeviceChannelService deviceChannelService;
|
||||||
|
@Resource
|
||||||
|
private HikApiService hikApiService;
|
||||||
|
@Resource
|
||||||
|
private HikEqpConfig hikEqpConfig;
|
||||||
|
|
||||||
// 海康实时流取流模板
|
// 海康实时流取流模板
|
||||||
private static final String HIK_REALTIME_RTSP_TEMPLATE = "rtsp://%s:%s@%s:%s/Streaming/Channels/%s";
|
private static final String HIK_REALTIME_RTSP_TEMPLATE = "rtsp://%s:%s@%s:%s/Streaming/Channels/%s";
|
||||||
@@ -58,7 +65,7 @@ public class ZLMediaKitServiceImpl implements ZLMediaKitService {
|
|||||||
|
|
||||||
public String getRequestUrl(String uri) {
|
public String getRequestUrl(String uri) {
|
||||||
if (ZLM_REQUEST_PREFIX == null) {
|
if (ZLM_REQUEST_PREFIX == null) {
|
||||||
synchronized (ZLMediaKitServiceImpl.class) {
|
synchronized (this) {
|
||||||
if (ZLM_REQUEST_PREFIX == null) {
|
if (ZLM_REQUEST_PREFIX == null) {
|
||||||
ZLM_REQUEST_PREFIX = String.format(STREAM_REQUEST_TEMLATE, zlmConfig.getIp(), zlmConfig.getHttpPort());
|
ZLM_REQUEST_PREFIX = String.format(STREAM_REQUEST_TEMLATE, zlmConfig.getIp(), zlmConfig.getHttpPort());
|
||||||
}
|
}
|
||||||
@@ -331,4 +338,31 @@ public class ZLMediaKitServiceImpl implements ZLMediaKitService {
|
|||||||
return result != null && result.getCode() == 0;
|
return result != null && result.getCode() == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SdkPlayBackResp playBack(PlayBackBo playBackBo) {
|
||||||
|
// 根据设备ip + 通道编码查询通道信息
|
||||||
|
SisDeviceChannel deviceChannel = deviceChannelService.queryByNvrIpAndChannelNo(playBackBo.getDeviceIp(), playBackBo.getChannelNo());
|
||||||
|
// 回放默认走录像机拉流
|
||||||
|
playBackBo.setPort((short) 8000);
|
||||||
|
playBackBo.setDeviceIp(deviceChannel.getNvrIp());
|
||||||
|
playBackBo.setDeviceAccount(deviceChannel.getNvrAccount());
|
||||||
|
playBackBo.setDevicePwd(deviceChannel.getNvrPwd());
|
||||||
|
if (deviceChannel.getFactoryNo().equals(FactoryNoEnum.HIK.getCode())) {
|
||||||
|
// 海康通道编码在系统中为 通道编码 + 0 + 码流类型,所以需要去掉最后2为
|
||||||
|
if (StrUtil.isEmpty(deviceChannel.getChannelNo())) {
|
||||||
|
throw new RuntimeException("通道配置错误。");
|
||||||
|
} else {
|
||||||
|
String channelNo = deviceChannel.getNvrChannelNo();
|
||||||
|
channelNo = channelNo.substring(0, channelNo.length() - 2);
|
||||||
|
playBackBo.setChannelNo(Integer.valueOf(channelNo));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Integer i = hikApiService.playBack(playBackBo);
|
||||||
|
SdkPlayBackResp resp = new SdkPlayBackResp();
|
||||||
|
if (i != null && i > -1) {
|
||||||
|
resp.setWsUrl(hikEqpConfig.getPlayBackUrl() + i);
|
||||||
|
}
|
||||||
|
return resp;
|
||||||
|
}
|
||||||
}
|
}
|
@@ -0,0 +1,10 @@
|
|||||||
|
package org.dromara.sis.sdk.zkmedia.model;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class SdkPlayBackResp {
|
||||||
|
|
||||||
|
private String wsUrl;
|
||||||
|
|
||||||
|
}
|
@@ -1,5 +1,6 @@
|
|||||||
package org.dromara.sis.service;
|
package org.dromara.sis.service;
|
||||||
|
|
||||||
|
import org.dromara.common.core.domain.TreeNode;
|
||||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
import org.dromara.sis.domain.SisAlarmEvents;
|
import org.dromara.sis.domain.SisAlarmEvents;
|
||||||
@@ -121,5 +122,10 @@ public interface ISisAlarmEventsService {
|
|||||||
*/
|
*/
|
||||||
List<QueryStatisticsAlarmVo> queryStatistics();
|
List<QueryStatisticsAlarmVo> queryStatistics();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询事件树
|
||||||
|
* @param bigType 事件大类,-1 查询全部
|
||||||
|
* @return 返回事件树
|
||||||
|
*/
|
||||||
|
List<TreeNode<String>> queryEventType(String bigType);
|
||||||
}
|
}
|
||||||
|
@@ -4,7 +4,6 @@ import jakarta.validation.constraints.NotEmpty;
|
|||||||
import org.dromara.common.core.domain.TreeNode;
|
import org.dromara.common.core.domain.TreeNode;
|
||||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
import org.dromara.sis.api.domain.RemoteSisDeviceChannel;
|
|
||||||
import org.dromara.sis.domain.SisDeviceChannel;
|
import org.dromara.sis.domain.SisDeviceChannel;
|
||||||
import org.dromara.sis.domain.bo.SisDeviceChannelBo;
|
import org.dromara.sis.domain.bo.SisDeviceChannelBo;
|
||||||
import org.dromara.sis.domain.bo.SisDeviceManageBo;
|
import org.dromara.sis.domain.bo.SisDeviceManageBo;
|
||||||
@@ -140,4 +139,11 @@ public interface ISisDeviceChannelService {
|
|||||||
*/
|
*/
|
||||||
SisDeviceChannel queryChannels(@NotEmpty String deviceIp, @NotEmpty String channelNo);
|
SisDeviceChannel queryChannels(@NotEmpty String deviceIp, @NotEmpty String channelNo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过录像机ip和通道编码获取通道信息
|
||||||
|
* @param deviceIp 设备ip
|
||||||
|
* @param channelNo 通道编码
|
||||||
|
* @return 返回通道信息
|
||||||
|
*/
|
||||||
|
SisDeviceChannel queryByNvrIpAndChannelNo(String deviceIp, Integer channelNo);
|
||||||
}
|
}
|
||||||
|
@@ -9,11 +9,14 @@ import cn.hutool.core.date.DateUtil;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.dubbo.config.annotation.DubboReference;
|
import org.apache.dubbo.config.annotation.DubboReference;
|
||||||
|
import org.dromara.common.core.domain.TreeNode;
|
||||||
import org.dromara.common.core.utils.MapstructUtils;
|
import org.dromara.common.core.utils.MapstructUtils;
|
||||||
import org.dromara.common.core.utils.StringUtils;
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
|
import org.dromara.common.core.utils.TreeUtils;
|
||||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
import org.dromara.common.satoken.utils.LoginHelper;
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
@@ -38,14 +41,13 @@ import org.dromara.sis.service.ISisAlarmEventAttachmentsService;
|
|||||||
import org.dromara.sis.service.ISisAlarmEventProcessService;
|
import org.dromara.sis.service.ISisAlarmEventProcessService;
|
||||||
import org.dromara.sis.service.ISisAlarmEventsService;
|
import org.dromara.sis.service.ISisAlarmEventsService;
|
||||||
import org.dromara.sis.service.ISisDeviceManageService;
|
import org.dromara.sis.service.ISisDeviceManageService;
|
||||||
|
import org.dromara.system.api.RemoteDictService;
|
||||||
|
import org.dromara.system.api.domain.vo.RemoteDictDataVo;
|
||||||
import org.dromara.system.api.model.LoginUser;
|
import org.dromara.system.api.model.LoginUser;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 告警Service业务层处理
|
* 告警Service业务层处理
|
||||||
@@ -67,6 +69,8 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService {
|
|||||||
private RemoteFileService remoteFileService;
|
private RemoteFileService remoteFileService;
|
||||||
@DubboReference
|
@DubboReference
|
||||||
private RemoteAttendanceService remoteAttendanceService;
|
private RemoteAttendanceService remoteAttendanceService;
|
||||||
|
@DubboReference
|
||||||
|
private RemoteDictService remoteDictService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询告警
|
* 查询告警
|
||||||
@@ -124,7 +128,11 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService {
|
|||||||
lqw.like(StringUtils.isNotBlank(bo.getDeviceName()), SisAlarmEvents::getDeviceName, bo.getDeviceName());
|
lqw.like(StringUtils.isNotBlank(bo.getDeviceName()), SisAlarmEvents::getDeviceName, bo.getDeviceName());
|
||||||
lqw.eq(bo.getDeviceGroupId() != null, SisAlarmEvents::getDeviceGroupId, bo.getDeviceGroupId());
|
lqw.eq(bo.getDeviceGroupId() != null, SisAlarmEvents::getDeviceGroupId, bo.getDeviceGroupId());
|
||||||
lqw.like(StringUtils.isNotBlank(bo.getDeviceGroupName()), SisAlarmEvents::getDeviceGroupName, bo.getDeviceGroupName());
|
lqw.like(StringUtils.isNotBlank(bo.getDeviceGroupName()), SisAlarmEvents::getDeviceGroupName, bo.getDeviceGroupName());
|
||||||
lqw.eq(bo.getReportTime() != null, SisAlarmEvents::getReportTime, bo.getReportTime());
|
if (bo.getReportTime() != null) {
|
||||||
|
Date start = DateUtil.beginOfDay(bo.getReportTime());
|
||||||
|
Date end = DateUtil.endOfDay(bo.getReportTime());
|
||||||
|
lqw.between(SisAlarmEvents::getReportTime, start, end);
|
||||||
|
}
|
||||||
return lqw;
|
return lqw;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,7 +215,7 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService {
|
|||||||
// 默认服务时间为2个小时
|
// 默认服务时间为2个小时
|
||||||
alarmEvents.setServBeginTime(now);
|
alarmEvents.setServBeginTime(now);
|
||||||
alarmEvents.setServEndTime(DateUtil.offset(now, DateField.HOUR, 2));
|
alarmEvents.setServEndTime(DateUtil.offset(now, DateField.HOUR, 2));
|
||||||
alarmEvents.setDescription(EventSmallTypeEnum.SMART_REPORT_ZJCR.getDesc());
|
alarmEvents.setDescription(type.getDesc());
|
||||||
int insert = this.baseMapper.insert(alarmEvents);
|
int insert = this.baseMapper.insert(alarmEvents);
|
||||||
log.info("写入报警事件表完成,num={}", insert);
|
log.info("写入报警事件表完成,num={}", insert);
|
||||||
|
|
||||||
@@ -364,4 +372,46 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService {
|
|||||||
public List<QueryStatisticsAlarmVo> queryStatistics() {
|
public List<QueryStatisticsAlarmVo> queryStatistics() {
|
||||||
return this.baseMapper.queryStatistics();
|
return this.baseMapper.queryStatistics();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<TreeNode<String>> queryEventType(String bigType) {
|
||||||
|
// 查询事件大类
|
||||||
|
List<RemoteDictDataVo> eventBigType = remoteDictService.selectDictDataByType("event_big_type");
|
||||||
|
if (CollUtil.isEmpty(eventBigType)) {
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
// 查询事件小类
|
||||||
|
List<RemoteDictDataVo> eventSmallType = remoteDictService.selectDictDataByType("event_small_type");
|
||||||
|
if (CollUtil.isEmpty(eventSmallType)) {
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
List<TreeNode<String>> all = new ArrayList<>(eventBigType.size() + eventSmallType.size());
|
||||||
|
|
||||||
|
Map<String, TreeNode<String>> bigTypeCache = new HashMap<>();
|
||||||
|
eventSmallType.forEach(item -> {
|
||||||
|
TreeNode<String> node = new TreeNode<>();
|
||||||
|
node.setCode(item.getDictValue());
|
||||||
|
node.setParentCode("-1");
|
||||||
|
node.setLabel(item.getDictLabel());
|
||||||
|
node.setTitle(item.getDictLabel());
|
||||||
|
node.setChildren(Lists.newArrayList());
|
||||||
|
bigTypeCache.put(item.getDictValue(), node);
|
||||||
|
all.add(node);
|
||||||
|
});
|
||||||
|
|
||||||
|
eventBigType.forEach(item -> {
|
||||||
|
TreeNode<String> node = new TreeNode<>();
|
||||||
|
node.setCode(item.getDictValue());
|
||||||
|
node.setLabel(item.getDictLabel());
|
||||||
|
node.setTitle(item.getDictLabel());
|
||||||
|
node.setChildren(Lists.newArrayList());
|
||||||
|
bigTypeCache.keySet().forEach(key -> {
|
||||||
|
if (item.getDictValue().startsWith(key)) {
|
||||||
|
node.setParentCode(bigTypeCache.get(key).getCode());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
all.add(node);
|
||||||
|
});
|
||||||
|
return TreeUtils.build(all, bigType);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -50,7 +50,6 @@ public class SisDeviceChannelServiceImpl implements ISisDeviceChannelService {
|
|||||||
private final HikApiService hikApiService;
|
private final HikApiService hikApiService;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询设备通道管理
|
* 查询设备通道管理
|
||||||
*
|
*
|
||||||
@@ -336,10 +335,14 @@ public class SisDeviceChannelServiceImpl implements ISisDeviceChannelService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SisDeviceChannel queryChannels(String deviceIp, String channelNo) {
|
public SisDeviceChannel queryChannels(String deviceIp, String channelNo) {
|
||||||
LambdaQueryWrapper<SisDeviceChannel> lqw = new LambdaQueryWrapper<>();
|
return baseMapper.queryChannels(deviceIp, channelNo);
|
||||||
lqw.eq(SisDeviceChannel::getDeviceIp, deviceIp);
|
}
|
||||||
lqw.eq(SisDeviceChannel::getChannelNo, channelNo)
|
|
||||||
.or().eq(SisDeviceChannel::getNvrChannelNo, channelNo);
|
@Override
|
||||||
|
public SisDeviceChannel queryByNvrIpAndChannelNo(String deviceIp, Integer channelNo) {
|
||||||
|
LambdaUpdateWrapper<SisDeviceChannel> lqw = new LambdaUpdateWrapper<>();
|
||||||
|
lqw.eq(SisDeviceChannel::getNvrIp, deviceIp);
|
||||||
|
lqw.eq(SisDeviceChannel::getNvrChannelNo, channelNo);
|
||||||
return baseMapper.selectOne(lqw);
|
return baseMapper.selectOne(lqw);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -4,4 +4,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="org.dromara.sis.mapper.SisDeviceChannelMapper">
|
<mapper namespace="org.dromara.sis.mapper.SisDeviceChannelMapper">
|
||||||
|
|
||||||
|
<select id="queryChannels" resultType="org.dromara.sis.domain.SisDeviceChannel">
|
||||||
|
SELECT *
|
||||||
|
FROM sis_device_channel
|
||||||
|
WHERE device_ip = #{deviceIp}
|
||||||
|
AND (channel_no = #{channelNo} OR nvr_channel_no = #{channelNo})
|
||||||
|
|
||||||
|
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
Reference in New Issue
Block a user