ard-work/src/main/java/com/ruoyi/alarm/global/domain/GuideDataDto.java
New file @@ -0,0 +1,27 @@ package com.ruoyi.alarm.global.domain; import lombok.Data; import lombok.experimental.Accessors; import java.util.Date; /** * @Description: 引导数据实体 * @ClassName: GuideDataDto * @Author: 刘苏义 * @Date: 2023年12月09日11:37:58 **/ @Data @Accessors(chain = true) public class GuideDataDto { String radarId; String name; String cameraId; String alarmId; String alarmType; Date receiveTime; Integer num; Integer recordSn; double[] targetPosition; GuidePTZ guidePTZ; } ard-work/src/main/java/com/ruoyi/alarm/global/domain/GuidePTZ.java
New file @@ -0,0 +1,23 @@ package com.ruoyi.alarm.global.domain; import lombok.Data; import lombok.experimental.Accessors; /** * @Description: * @ClassName: GuidePTZ * @Author: 刘苏义 * @Date: 2023年12月09日10:13:28 **/ @Data @Accessors(chain = true) public class GuidePTZ { /** 引导P值 */ private Double P; /** 引导T值 */ private Double T; /** 引导Z值 */ private Double Z; } ard-work/src/main/java/com/ruoyi/alarm/global/domain/GuideTask.java
@@ -53,4 +53,8 @@ * 引导目标经纬度 */ double[] targetPosition; /** 引导PTZ值 */ private GuidePTZ guidePTZ; } ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java
@@ -11,10 +11,7 @@ import com.ruoyi.alarm.digitization3.mapper.ArdAlarmDigitization3Mapper; import com.ruoyi.alarm.external.domain.ArdAlarmExternal; import com.ruoyi.alarm.external.mapper.ArdAlarmExternalMapper; import com.ruoyi.alarm.global.domain.GlobalAlarmCondition; import com.ruoyi.alarm.global.domain.GlobalAlarmData; import com.ruoyi.alarm.global.domain.GuidePriorityQueue; import com.ruoyi.alarm.global.domain.GuideTask; import com.ruoyi.alarm.global.domain.*; import com.ruoyi.alarm.global.service.IGlobalAlarmService; import com.ruoyi.alarm.radar.domain.*; import com.ruoyi.alarm.radar.mapper.ArdAlarmRadarFireMapper; @@ -35,13 +32,11 @@ import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell; import com.ruoyi.alarmpoints.well.mapper.ArdAlarmpointsWellMapper; import com.ruoyi.common.constant.CacheConstants; import com.ruoyi.common.core.domain.entity.SysConfig; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.ConfigUtils; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DictUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.external.domain.ArdEquipExternal; import com.ruoyi.device.external.mapper.ArdEquipExternalMapper; import com.ruoyi.device.radar.mapper.ArdEquipRadarMapper; @@ -54,14 +49,12 @@ import com.ruoyi.utils.tube.GeoPoint; import com.ruoyi.utils.tube.TubeTools; import lombok.extern.slf4j.Slf4j; import org.gavaghan.geodesy.GlobalCoordinates; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -73,7 +66,7 @@ * @Version: 1.0 **/ @Service @Slf4j(topic = "mqtt") @Slf4j(topic = "alarm") public class GlobalAlarmServiceImpl implements IGlobalAlarmService { //region 依赖注入 @Resource @@ -1039,9 +1032,17 @@ return; } double[] coordinate = new double[]{longitude, latitude}; String nearbyCameraId = getNearbyCamera(new double[]{ardAlarmTube.getLongitude(), ardAlarmTube.getLatitude()}); if (StringUtils.isNotEmpty(nearbyCameraId)) { messagesEnqueued(nearbyCameraId, ardAlarmTube.getId(), "sys_tube_leak", ardAlarmTube.getCreateTime(), 1, 1, coordinate); String cameraId = getCameraByNear(new double[]{ardAlarmTube.getLongitude(), ardAlarmTube.getLatitude()}); if (StringUtils.isNotEmpty(cameraId)) { GuideDataDto guideDataDto = new GuideDataDto() .setAlarmId(cameraId) .setAlarmId(ardAlarmTube.getId()) .setAlarmType("sys_tube_leak") .setReceiveTime(ardAlarmTube.getCreateTime()) .setNum(1) .setRecordSn(1) .setTargetPosition(coordinate); messagesEnqueued(guideDataDto); } //endregion } @@ -1069,13 +1070,16 @@ String radarId = radarAlarmData.getRadarId(); String alarmpointName = ardAlarmRadar.getName();//兴趣点名称 ArdAlarmpointsWell well = ardAlarmpointsWellMapper.selectArdAlarmpointsWellByWellId(alarmpointName); if(well==null) { if (well == null) { return; } Double guideP = well.getGuideP(); Double guideT = well.getGuideT(); Double guideZ = well.getGuideZ(); Double longitude = well.getLongitude(); Double latitude = well.getLatitude(); String targetId = ardAlarmRadar.getTargetId(); GuidePTZ guidePTZ = new GuidePTZ(); switch (ardAlarmRadar.getAlarmType()) { case "运动目标检测": ArdAlarmRadarMove ardAlarmRadarMove = new ArdAlarmRadarMove(); @@ -1089,6 +1093,11 @@ ardAlarmRadarMove.setLatitude(latitude); ardAlarmRadarMove.setUpdateTime(radarAlarmData.getAlarmTime()); ardAlarmRadarMove.setRadarId(radarId); guidePTZ.setP(guideP); guidePTZ.setT(guideT); guidePTZ.setZ(guideZ); ardAlarmRadarMove.setGuidePTZ(guidePTZ); Date alarmTime = ardAlarmRadarMove.getAlarmTime(); //获取当前兴趣点当前雷达的上一条数据 ArdAlarmRadarMove lastMoveData = ardAlarmRadarMoveMapper.selectArdAlarmRadarLastData(ardAlarmRadarMove.getName()); @@ -1110,8 +1119,7 @@ //判断引导时间超过5分钟再次引导 long secDatePoorGuide = DateUtils.getSecDatePoor(alarmTime,lastGuideTime); if(secDatePoorGuide>=300) { if (secDatePoorGuide >= 300) { updateData.setGuideTime(alarmTime); radarMoveGuide(ardAlarmRadarMove);//引导 } @@ -1142,6 +1150,10 @@ ardAlarmRadarFire.setAlarmType("热源检测"); ardAlarmRadarFire.setLongitude(longitude); ardAlarmRadarFire.setLatitude(latitude); guidePTZ.setP(guideP); guidePTZ.setT(guideT); guidePTZ.setZ(guideZ); ardAlarmRadarFire.setGuidePTZ(guidePTZ); ardAlarmRadarFire.setRadarId(radarId); ardAlarmRadarFire.setUpdateTime(radarAlarmData.getAlarmTime()); // @@ -1155,7 +1167,6 @@ } else { //否则比对更新时间 Date lastUpdateTime = lastFireData.getUpdateTime(); Date lastGuideTime = lastFireData.getGuideTime(); long secDatePoor = DateUtils.getSecDatePoor(alarmTime,lastUpdateTime); if (secDatePoor <= radarMergeTime) { @@ -1166,8 +1177,7 @@ //判断引导时间超过5分钟再次引导 long secDatePoorGuide = DateUtils.getSecDatePoor(alarmTime,lastGuideTime); if(secDatePoorGuide>=300) { if (secDatePoorGuide >= 300) { updateData.setGuideTime(alarmTime); radarFireGuide(ardAlarmRadarFire);//引导 } @@ -1191,11 +1201,12 @@ ardAlarmRadarPump.setAlarmType("雷达抽油机停机"); ardAlarmRadarPump.setUpdateTime(radarAlarmData.getAlarmTime()); alarmTime = ardAlarmRadarPump.getAlarmTime(); ArdAlarmpointsWell ardAlarmpointsWell = ardAlarmpointsWellMapper.selectArdAlarmpointsWellByWellId(alarmpointName); if (StringUtils.isNotNull(ardAlarmpointsWell)) { ardAlarmRadarPump.setLongitude(ardAlarmpointsWell.getLongitude()); ardAlarmRadarPump.setLatitude(ardAlarmpointsWell.getLatitude()); } ardAlarmRadarPump.setLongitude(well.getLongitude()); ardAlarmRadarPump.setLatitude(well.getLatitude()); guidePTZ.setP(guideP); guidePTZ.setT(guideT); guidePTZ.setZ(guideZ); ardAlarmRadarPump.setGuidePTZ(guidePTZ); // ArdAlarmRadarPump lastPumpData = ardAlarmRadarPumpMapper.selectArdAlarmRadarLastData(ardAlarmRadarPump.getName()); if (lastPumpData == null) { @@ -1215,8 +1226,7 @@ updateData.setUpdateTime(alarmTime); //判断引导时间超过5分钟再次引导 long secDatePoorGuide = DateUtils.getSecDatePoor(alarmTime,lastGuideTime); if(secDatePoorGuide>=300) { if (secDatePoorGuide >= 300) { radarPumpGuide(ardAlarmRadarPump);//引导 updateData.setGuideTime(alarmTime); } @@ -1240,10 +1250,10 @@ ardAlarmExternal.setCreateTime(new Date());//接收时间 //外联防区名称就是兴趣点,查兴趣点坐标 String defenseName = ardAlarmExternal.getDefenseName(); ArdAlarmpointsWell ardAlarmpointsWell = ardAlarmpointsWellMapper.selectArdAlarmpointsWellByWellId(defenseName); if (StringUtils.isNotNull(ardAlarmpointsWell)) { ardAlarmExternal.setLongitude(ardAlarmpointsWell.getLongitude()); ardAlarmExternal.setLatitude(ardAlarmpointsWell.getLatitude()); ArdAlarmpointsWell well = ardAlarmpointsWellMapper.selectArdAlarmpointsWellByWellId(defenseName); if (StringUtils.isNotNull(well)) { ardAlarmExternal.setLongitude(well.getLongitude()); ardAlarmExternal.setLatitude(well.getLatitude()); } int aae = ardAlarmExternalMapper.insertArdAlarmExternal(ardAlarmExternal); if (aae > 0) { @@ -1252,10 +1262,23 @@ if (StringUtils.isNull(ardAlarmExternal.getLongitude()) || StringUtils.isNull(ardAlarmExternal.getLatitude())) { return; } double[] guideCoordinate = new double[]{ardAlarmExternal.getLongitude(), ardAlarmExternal.getLatitude()};//引导坐标 String nearbyCameraId = getNearbyCamera(guideCoordinate);//最近相机ID if (StringUtils.isNotEmpty(nearbyCameraId)) { messagesEnqueued(nearbyCameraId, ardAlarmExternal.getId(), "sys_external", ardAlarmExternal.getCreateTime(), 1, 1, guideCoordinate); double[] coordinate = new double[]{ardAlarmExternal.getLongitude(), ardAlarmExternal.getLatitude()};//引导坐标 GuidePTZ guidePTZ = new GuidePTZ() .setP(well.getGuideP()) .setT(well.getGuideT()) .setZ(well.getGuideZ()); String cameraId = getCameraByNear(coordinate);//最近相机ID if (StringUtils.isNotEmpty(cameraId)) { GuideDataDto guideDataDto = new GuideDataDto() .setAlarmId(cameraId) .setAlarmId(ardAlarmExternal.getId()) .setAlarmType("sys_external") .setReceiveTime(ardAlarmExternal.getCreateTime()) .setNum(1) .setRecordSn(1) .setTargetPosition(coordinate) .setGuidePTZ(guidePTZ); messagesEnqueued(guideDataDto); } //endregion } @@ -1283,10 +1306,18 @@ if (StringUtils.isNull(ardAlarmAccess.getLongitude()) || StringUtils.isNull(ardAlarmAccess.getLatitude())) { return; } double[] guideCoordinate = new double[]{ardAlarmAccess.getLongitude(), ardAlarmAccess.getLatitude()};//引导坐标 String nearbyCameraId = getNearbyCamera(guideCoordinate);//最近相机ID if (StringUtils.isNotEmpty(nearbyCameraId)) { messagesEnqueued(nearbyCameraId, ardAlarmAccess.getId(), "sys_access_control", ardAlarmAccess.getCreateTime(), 1, 1, guideCoordinate); double[] coordinate = new double[]{ardAlarmAccess.getLongitude(), ardAlarmAccess.getLatitude()};//引导坐标 String cameraId = getCameraByNear(coordinate);//最近相机ID if (StringUtils.isNotEmpty(cameraId)) { GuideDataDto guideDataDto = new GuideDataDto() .setAlarmId(cameraId) .setAlarmId(ardAlarmAccess.getId()) .setAlarmType("sys_external") .setReceiveTime(ardAlarmAccess.getCreateTime()) .setNum(1) .setRecordSn(1) .setTargetPosition(coordinate); messagesEnqueued(guideDataDto); } //endregion } @@ -1345,8 +1376,10 @@ * recordSn 录像存储位置 1-recordUrl1 2-recordUrl2 * targetPosition 报警点位置坐标 */ private void messagesEnqueued(String cameraId, String alarmId, String alarmType, Date receiveTime, Integer num, Integer recordSn, double[] targetPosition) { private void messagesEnqueued(GuideDataDto guideDataDto) { try { String cameraId = guideDataDto.getCameraId(); String alarmType = guideDataDto.getAlarmType(); if (!IsEnableGuide(cameraId)) { log.info("相机:" + cameraId + "未开启报警引导功能"); return; @@ -1356,43 +1389,43 @@ //相机ID guideTask.setCameraId(cameraId); //报警类型 String aType = ""; switch (alarmType) { case "运动目标检测": aType = "sys_radar_move"; alarmType = "sys_radar_move"; break; case "热源检测": aType = "sys_radar_fire"; alarmType = "sys_radar_fire"; break; case "雷达抽油机停机": aType = "sys_radar_pump"; break; default: aType = alarmType; alarmType = "sys_radar_pump"; break; } guideTask.setAlarmType(aType); guideTask.setAlarmType(alarmType); //通道(通过日夜时间研判) String dayNightTime = redisCache.getCacheObject("sys_config:dayNightTime"); Integer channel = ArdTool.getChannelBydayNightTime(dayNightTime); guideTask.setChanNum(channel); //报警ID guideTask.setAlarmId(alarmId); guideTask.setAlarmId(guideDataDto.getAlarmId()); //接收时间 guideTask.setReceiveTime(fmt.format(receiveTime)); guideTask.setReceiveTime(fmt.format(guideDataDto.getReceiveTime())); //报警优先级(通过优先级字典) String priority = DictUtils.getDictValue("cameras_priority", aType); String priority = DictUtils.getDictValue("cameras_priority", alarmType); if (StringUtils.isEmpty(priority)) { log.debug("未匹配到优先级,请检查优先级字典配置"); return; } guideTask.setPriority(Integer.valueOf(priority)); //报警次数 guideTask.setNum(num); guideTask.setNum(guideDataDto.getNum()); //录像存储位置 guideTask.setRecordSn(recordSn); guideTask.setRecordSn(guideDataDto.getRecordSn()); //目标经纬度 guideTask.setTargetPosition(targetPosition); guideTask.setTargetPosition(guideDataDto.getTargetPosition()); //目标PTZ if (guideDataDto.getGuidePTZ() != null) { guideTask.setGuidePTZ(guideDataDto.getGuidePTZ()); } //消息入队 queueManager.addTaskToQueue(cameraId, guideTask); //打印队列 @@ -1421,7 +1454,7 @@ /** * 获取附近开启报警引导功能光电 */ private String getNearbyCamera(double[] targetPosition) { private String getCameraByNear(double[] targetPosition) { String minDistanceCameraId = ""; try { //获取所有大光电 @@ -1459,16 +1492,17 @@ return minDistanceCameraId; } //雷达获取相机引导入队 private void radarGuideToQueue(String alarmId, String radarId, String name, String alarmType, Date createTime, double[] coordinate) { int index = name.indexOf("("); String alarmpointName = name.substring(0, index); //获取相机引导入队 private void getCameraGuideToQueue(GuideDataDto guideDataDto) { int index = guideDataDto.getName().indexOf("("); String alarmpointName = guideDataDto.getName().substring(0, index); //获取雷达所在塔上的大光电 ArdCameras cameraWithTower = ardEquipRadarMapper.getCameraByRadar(radarId); ArdCameras cameraWithTower = ardEquipRadarMapper.getCameraByRadar(guideDataDto.getRadarId()); if (StringUtils.isNotNull(cameraWithTower)) { log.debug("获取到雷达塔上的光电:" + cameraWithTower.getId()); //如果雷达塔上有光电 messagesEnqueued(cameraWithTower.getId(), alarmId, alarmType, createTime, 1, 1, coordinate); guideDataDto.setCameraId(cameraWithTower.getId()); messagesEnqueued(guideDataDto); } else { log.debug("未获取到雷达塔上的光电,无法引导"); } @@ -1479,13 +1513,16 @@ if (cameraId.equals(cameraWithTower.getId())) { return; } log.info("获取到报警点关联的光电:" + cameraId); log.debug("获取到报警点关联的光电:" + cameraId); //如果报警点关联了光电 messagesEnqueued(cameraId, alarmId, alarmType, createTime, 1, 2, coordinate); guideDataDto.setCameraId(cameraId); guideDataDto.setRecordSn(2);//兴趣点光电引导录像存储第二个路径 messagesEnqueued(guideDataDto); } else { log.debug("未获取到报警点关联的光电,无法引导"); } } //雷达移动引导 private void radarMoveGuide(ArdAlarmRadarMove ardAlarmRadarMove) { log.debug("雷达移动开始引导"); @@ -1495,8 +1532,19 @@ } double[] coordinate = new double[]{ardAlarmRadarMove.getLongitude(), ardAlarmRadarMove.getLatitude()};//报警坐标 //引导入队 radarGuideToQueue(ardAlarmRadarMove.getId(), ardAlarmRadarMove.getRadarId(), ardAlarmRadarMove.getName(), ardAlarmRadarMove.getAlarmType(), ardAlarmRadarMove.getCreateTime(), coordinate);//更新 GuideDataDto guideDataDto = new GuideDataDto() .setRadarId( ardAlarmRadarMove.getRadarId()) .setName(ardAlarmRadarMove.getName()) .setAlarmId(ardAlarmRadarMove.getId()) .setAlarmType(ardAlarmRadarMove.getAlarmType()) .setReceiveTime(ardAlarmRadarMove.getCreateTime()) .setNum(1) .setRecordSn(1) .setTargetPosition(coordinate) .setGuidePTZ(ardAlarmRadarMove.getGuidePTZ()); getCameraGuideToQueue(guideDataDto);//获取相机入队 } //雷达防火引导 private void radarFireGuide(ArdAlarmRadarFire ardAlarmRadarFire) { log.debug("雷达防火开始引导"); @@ -1506,8 +1554,19 @@ } double[] coordinate = new double[]{ardAlarmRadarFire.getLongitude(), ardAlarmRadarFire.getLatitude()};//报警坐标 //引导入队 radarGuideToQueue(ardAlarmRadarFire.getId(), ardAlarmRadarFire.getRadarId(), ardAlarmRadarFire.getName(), ardAlarmRadarFire.getAlarmType(), ardAlarmRadarFire.getCreateTime(), coordinate);//更新 GuideDataDto guideDataDto = new GuideDataDto() .setRadarId( ardAlarmRadarFire.getRadarId()) .setName(ardAlarmRadarFire.getName()) .setAlarmId(ardAlarmRadarFire.getId()) .setAlarmType(ardAlarmRadarFire.getAlarmType()) .setReceiveTime(ardAlarmRadarFire.getCreateTime()) .setNum(1) .setRecordSn(1) .setTargetPosition(coordinate) .setGuidePTZ(ardAlarmRadarFire.getGuidePTZ()); getCameraGuideToQueue(guideDataDto);//获取相机入队 } //雷达抽油机停机引导 private void radarPumpGuide(ArdAlarmRadarPump ardAlarmRadarPump) { log.debug("雷达抽油机停机开始引导"); @@ -1518,7 +1577,16 @@ } double[] coordinate = new double[]{ardAlarmRadarPump.getLongitude(), ardAlarmRadarPump.getLatitude()};//报警坐标 //引导入队 radarGuideToQueue(ardAlarmRadarPump.getId(), ardAlarmRadarPump.getRadarId(), ardAlarmRadarPump.getName(), ardAlarmRadarPump.getAlarmType(), ardAlarmRadarPump.getCreateTime(), coordinate);//更新 GuideDataDto guideDataDto = new GuideDataDto() .setRadarId( ardAlarmRadarPump.getRadarId()) .setName(ardAlarmRadarPump.getName()) .setAlarmId(ardAlarmRadarPump.getId()) .setAlarmType(ardAlarmRadarPump.getAlarmType()) .setReceiveTime(ardAlarmRadarPump.getCreateTime()) .setNum(1) .setRecordSn(1) .setTargetPosition(coordinate) .setGuidePTZ(ardAlarmRadarPump.getGuidePTZ()); getCameraGuideToQueue(guideDataDto);//获取相机入队 } } ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueTaskExecutor.java
@@ -20,6 +20,8 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.HashMap; import java.util.Map; /** * @ClassName QueueTaskExecutor @@ -57,6 +59,11 @@ cmd.setOperator(guideTask.getAlarmType()); cmd.setExpired(30); cmd.setRecordBucketName("record"); Map<String, Double> ptzMap = new HashMap<>(); ptzMap.put("p", guideTask.getGuidePTZ().getP()); ptzMap.put("t", guideTask.getGuidePTZ().getT()); ptzMap.put("z", guideTask.getGuidePTZ().getZ()); cmd.setPtzMap(ptzMap); if (guideTask.getRecordSn().equals(1)) { cmd.setRecordObjectName("alarm_" + guideTask.getAlarmId() + "_1"); } else { @@ -64,7 +71,13 @@ } log.debug("开始引导"); boolean guideRes = cameraSdkService.guideTargetPosition(cmd); boolean guideRes = false; if (cmd.getPtzMap().get("p") != null) { //p值存在 优先引导ptz guideRes = cameraSdkService.setPtz(cmd); } else { guideRes = cameraSdkService.guideTargetPosition(cmd); } if (guideRes) { log.debug("引导成功"); cameraSdkService.controlLock(cmd);//上锁 ard-work/src/main/java/com/ruoyi/alarm/radar/domain/ArdAlarmRadarFire.java
@@ -2,6 +2,7 @@ import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.alarm.global.domain.GuidePTZ; import lombok.Data; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; @@ -85,6 +86,8 @@ */ private String radarId; /** 引导PTZ值 */ private GuidePTZ guidePTZ; } ard-work/src/main/java/com/ruoyi/alarm/radar/domain/ArdAlarmRadarMove.java
@@ -2,6 +2,7 @@ import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.alarm.global.domain.GuidePTZ; import lombok.Data; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; @@ -85,5 +86,7 @@ private String RadarId; /** 引导PTZ值 */ private GuidePTZ guidePTZ; } ard-work/src/main/java/com/ruoyi/alarm/radar/domain/ArdAlarmRadarPump.java
@@ -1,7 +1,9 @@ package com.ruoyi.alarm.radar.domain; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.alarm.global.domain.GuidePTZ; import lombok.Data; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; @@ -15,58 +17,83 @@ * @date 2023-09-02 */ @Data public class ArdAlarmRadarPump extends BaseEntity { public class ArdAlarmRadarPump extends BaseEntity { private static final long serialVersionUID = 1L; /** 记录ID */ /** * 记录ID */ private String id; /** 兴趣点名称 */ /** * 兴趣点名称 */ @Excel(name = "兴趣点名称") private String name; /** 目标ID */ /** * 目标ID */ @Excel(name = "目标ID") private String targetId; /** 报警类型 */ /** * 报警类型 */ @Excel(name = "报警类型") private String alarmType; /** 报警时间 */ /** * 报警时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "报警时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date alarmTime; /** 经度 */ /** * 经度 */ @Excel(name = "经度") private Double longitude; /** 纬度 */ /** * 纬度 */ @Excel(name = "纬度") private Double latitude; /** 引导录像1 */ /** * 引导录像1 */ @Excel(name = "引导录像1") private String recordUrl1; /** 引导录像2 */ /** * 引导录像2 */ @Excel(name = "引导录像2") private String recordUrl2; /** 查看时间 */ /** * 查看时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "查看时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date viewTime; /** 用户ID */ /** * 用户ID */ @Excel(name = "用户ID") private String userId; /** 部门ID */ /** * 部门ID */ @Excel(name = "部门ID") private Long deptId; /** 引导时间 */ /** * 引导时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "引导时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date guideTime; @@ -84,4 +111,9 @@ * 雷达ID */ private String radarId; /** * 引导PTZ值 */ private GuidePTZ guidePTZ; } ard-work/src/main/java/com/ruoyi/alarm/steal/service/impl/IStealElecAlarmServiceImpl.java
@@ -25,7 +25,7 @@ * @Date 2022/12/26 16:34 * @Version 1.0 */ @Slf4j(topic = "stealAlarm") @Slf4j(topic = "alarm") @Service public class IStealElecAlarmServiceImpl implements IStealElecAlarmService { @Resource ard-work/src/main/java/com/ruoyi/alarmpoints/well/domain/ArdAlarmpointsWell.java
@@ -101,6 +101,17 @@ /** 关联相机ID */ private String cameraId; /** 引导P值 */ private Double guideP; /** 引导T值 */ private Double guideT; /** 引导Z值 */ private Double guideZ; @TableField(exist = false) private String type; } ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java
@@ -1,6 +1,7 @@ package com.ruoyi.inspect.service.impl; import java.util.*; import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell; import com.ruoyi.alarmpoints.well.mapper.ArdAlarmpointsWellMapper; import com.ruoyi.common.utils.DateUtils; @@ -21,6 +22,7 @@ import com.ruoyi.inspect.mapper.ArdVideoInspectTaskMapper; import com.ruoyi.inspect.domain.ArdVideoInspectTask; import com.ruoyi.inspect.service.IArdVideoInspectTaskService; import javax.annotation.PostConstruct; import javax.annotation.Resource; @@ -440,8 +442,7 @@ targetPositon[2] = ardAlarmpointsWell.getAltitude(); /*获取相机坐标*/ ArdCameras cameras = ardCamerasMapper.selectArdCamerasById(cameraId); if(StringUtils.isNull(cameras)) { if (StringUtils.isNull(cameras)) { log.debug("找不到相机:"+cameraId); return; } @@ -456,7 +457,17 @@ cmd.setTargetPosition(targetPositon); cmd.setOperator("sys_patrol_inspect"); cmd.setExpired(step.getRecordingTime() * 60); boolean setTargetPosition = cameraSdkService.guideTargetPosition(cmd); Map<String, Double> ptzMap = new HashMap<>(); ptzMap.put("p", ardAlarmpointsWell.getGuideP()); ptzMap.put("t", ardAlarmpointsWell.getGuideT()); ptzMap.put("z", ardAlarmpointsWell.getGuideZ()); cmd.setPtzMap(ptzMap); boolean setTargetPosition; if (cmd.getPtzMap().get("p") != null) { setTargetPosition = cameraSdkService.setPtz(cmd); } else { setTargetPosition = cameraSdkService.guideTargetPosition(cmd); } if (setTargetPosition) { /*控制相机巡检成功,开始录像*/ cameraSdkService.recordStart(cmd); @@ -498,8 +509,7 @@ targetPositon[2] = ardAlarmpointsWell.getAltitude(); /*获取相机坐标*/ ArdCameras cameras = ardCamerasMapper.selectArdCamerasById(cameraId); if(StringUtils.isNull(cameras)) { if (StringUtils.isNull(cameras)) { log.debug("找不到相机:"+cameraId); return; } @@ -514,7 +524,17 @@ cmd.setTargetPosition(targetPositon); cmd.setOperator("sys_patrol_inspect"); cmd.setExpired(step.getRecordingTime() * 60); boolean setTargetPosition = cameraSdkService.guideTargetPosition(cmd); Map<String, Double> ptzMap = new HashMap<>(); ptzMap.put("p", ardAlarmpointsWell.getGuideP()); ptzMap.put("t", ardAlarmpointsWell.getGuideT()); ptzMap.put("z", ardAlarmpointsWell.getGuideZ()); cmd.setPtzMap(ptzMap); boolean setTargetPosition; if (cmd.getPtzMap().get("p") != null) { setTargetPosition = cameraSdkService.setPtz(cmd); } else { setTargetPosition = cameraSdkService.guideTargetPosition(cmd); } if (!setTargetPosition) { /*控制失败,当前步骤启动时间置null*/ ardVideoInspectTask.setCurrentStepStartTime(""); @@ -649,6 +669,7 @@ /** * 获取相机的空闲时段 * * @param cameraId * @return */ ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
@@ -176,6 +176,7 @@ @Async("loginExecutor") public void asyncLogin(ArdCameras camera) { try { Thread.sleep(100); // 初始化 if (!hCNetSDK.NET_DVR_Init()) { log.error("SDK初始化失败"); @@ -214,7 +215,7 @@ //同步登录 int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); if (lUserID < 0) { log.debug("Login Failed [ " + camera.getIp() + ":" + camera.getPort() + " ],错误码:" + hCNetSDK.NET_DVR_GetLastError()); log.debug("Login Failed 【 " + camera.getIp() + ":" + camera.getPort() + " 】,Error Code:" + hCNetSDK.NET_DVR_GetLastError()); camera.setChanNum(0); camera.setLoginId(-1); camera.setState("0"); @@ -224,7 +225,7 @@ return; } log.debug("Login Success [ " + camera.getIp() + ":" + camera.getPort() + " ]"); log.debug("Login Success 【 " + camera.getIp() + ":" + camera.getPort() + " 】"); if (fExceptionCallBack == null) { fExceptionCallBack = new ExceptionCallBack();//异常回调 //设置异常回调函数(可在回调函数中获取设备上下线状态等) ard-work/src/main/resources/mapper/alarmpoints/ArdAlarmpointsWellMapper.xml
@@ -29,6 +29,9 @@ <result property="updateBy" column="update_by"/> <result property="updateTime" column="update_time"/> <result property="cameraId" column="camera_id"/> <result property="guideP" column="guide_p"/> <result property="guideT" column="guide_t"/> <result property="guideZ" column="guide_z"/> </resultMap> <resultMap type="ArdAlarmpointsWell" id="wellResult"> @@ -61,7 +64,10 @@ c.create_time, c.update_by, c.update_time, c.camera_id c.camera_id, c.guide_p, c.guide_t, c.guide_z from ard_alarmpoints_well c left join sys_dept d on d.dept_id = c.dept_id left join sys_user u on u.user_id = c.user_id @@ -127,6 +133,9 @@ <if test="updateBy != null">update_by,</if> <if test="updateTime != null">update_time,</if> <if test="cameraId != null">camera_id,</if> <if test="guideP != null">guide_p,</if> <if test="guideT != null">guide_t,</if> <if test="guideZ != null">guide_z,</if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="id != null">#{id},</if> @@ -153,6 +162,9 @@ <if test="updateBy != null">#{updateBy},</if> <if test="updateTime != null">#{updateTime},</if> <if test="cameraId != null">#{cameraId},</if> <if test="guideP != null">#{guideP},</if> <if test="guideT != null">#{guideT},</if> <if test="guideZ != null">#{guideZ},</if> </trim> </insert> @@ -182,6 +194,9 @@ <if test="updateBy != null">update_by = #{updateBy},</if> <if test="updateTime != null">update_time = #{updateTime},</if> <if test="cameraId != null">camera_id = #{cameraId},</if> <if test="guideP != null">guide_p = #{guideP},</if> <if test="guideT != null">guide_t = #{guideT},</if> <if test="guideZ != null">guide_z = #{guideZ},</if> </trim> where id = #{id} </update> @@ -211,6 +226,9 @@ <if test="updateBy != null">update_by = #{updateBy},</if> <if test="updateTime != null">update_time = #{updateTime},</if> <if test="cameraId != null">camera_id = #{cameraId},</if> <if test="guideP != null">guide_p = #{guideP},</if> <if test="guideT != null">guide_t = #{guideT},</if> <if test="guideZ != null">guide_z = #{guideZ},</if> </trim> where well_id = #{wellId} </update> ruoyi-admin/src/main/resources/logback.xml
@@ -133,19 +133,6 @@ <pattern>${log.pattern}</pattern> </encoder> </appender> <!--盗电报警日志输出--> <appender name="stealAlarm" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/stealAlarm.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--按天回滚daily--> <fileNamePattern>${log.path}/stealAlarm.%d{yyyy-MM-dd}.log</fileNamePattern> <!--日志最大的历史60天--> <maxHistory>60</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> </appender> <!--websocket报警日志输出--> <appender name="websocket" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/websocket.log</file> @@ -263,6 +250,19 @@ <pattern>${log.pattern}</pattern> </encoder> </appender> <!--报警日志输出--> <appender name="alarm" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/alarm.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--按天回滚daily--> <fileNamePattern>${log.path}/alarm.%d{yyyy-MM-dd}.log</fileNamePattern> <!--日志最大的历史60天--> <maxHistory>60</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> </appender> <!-- 系统模块日志级别控制 --> <logger name="com.ruoyi" level="info"/> <!-- Spring日志级别控制 --> @@ -332,12 +332,12 @@ <logger name="guideQueue" level="INFO"> <appender-ref ref="guideQueue"/> </logger> <!--stealAlarm日志--> <logger name="stealAlarm" level="INFO"> <appender-ref ref="stealAlarm"/> </logger> <!--stealAlarm日志--> <!--websocket日志--> <logger name="websocket" level="INFO"> <appender-ref ref="websocket"/> </logger> <!--alarm日志--> <logger name="alarm" level="INFO"> <appender-ref ref="alarm"/> </logger> </configuration> ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java
@@ -12,19 +12,14 @@ * * @author ruoyi */ public class SecurityUtils { public class SecurityUtils { /** * 用户ID **/ public static String getUserId() { try { public static String getUserId() { try { return getLoginUser().getUserId(); } catch (Exception e) { } catch (Exception e) { throw new ServiceException("获取用户ID异常", HttpStatus.UNAUTHORIZED); } } @@ -32,14 +27,10 @@ /** * 获取部门ID **/ public static Long getDeptId() { try { public static Long getDeptId() { try { return getLoginUser().getDeptId(); } catch (Exception e) { } catch (Exception e) { throw new ServiceException("获取部门ID异常", HttpStatus.UNAUTHORIZED); } } @@ -47,14 +38,10 @@ /** * 获取用户账户 **/ public static String getUsername() { try { public static String getUsername() { try { return getLoginUser().getUsername(); } catch (Exception e) { } catch (Exception e) { throw new ServiceException("获取用户账户异常", HttpStatus.UNAUTHORIZED); } } @@ -62,14 +49,10 @@ /** * 获取用户 **/ public static LoginUser getLoginUser() { try { public static LoginUser getLoginUser() { try { return (LoginUser) getAuthentication().getPrincipal(); } catch (Exception e) { } catch (Exception e) { throw new ServiceException("获取用户信息异常", HttpStatus.UNAUTHORIZED); } } @@ -77,8 +60,7 @@ /** * 获取Authentication */ public static Authentication getAuthentication() { public static Authentication getAuthentication() { Authentication authentication= SecurityContextHolder.getContext().getAuthentication(); return authentication; } @@ -89,8 +71,7 @@ * @param password 密码 * @return 加密字符串 */ public static String encryptPassword(String password) { public static String encryptPassword(String password) { BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); return passwordEncoder.encode(password); } @@ -102,8 +83,7 @@ * @param encodedPassword 加密后字符 * @return 结果 */ public static boolean matchesPassword(String rawPassword, String encodedPassword) { public static boolean matchesPassword(String rawPassword, String encodedPassword) { BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); return passwordEncoder.matches(rawPassword, encodedPassword); } @@ -114,8 +94,7 @@ * @param userId 用户ID * @return 结果 */ public static boolean isAdmin(String userId) { public static boolean isAdmin(String userId) { boolean k= userId != null && userId.equals("1"); return k; }