ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java
@@ -17,7 +17,15 @@ import com.ruoyi.alarmpoints.well.mapper.ArdAlarmpointsWellMapper; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.tools.ArdTool; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.common.utils.uuid.UUID; import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.mapper.ArdCamerasMapper; import com.ruoyi.device.hiksdk.config.MinioClientSingleton; import com.ruoyi.device.hiksdk.service.IHikClientService; import com.ruoyi.device.hiksdk.util.hikSdkUtil.GisUtil; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.utils.tube.GeoPoint; import com.ruoyi.utils.tube.TubeTools; @@ -55,7 +63,10 @@ ArdTubesDetailsMapper ardTubesDetailsMapper; @Resource private ISysConfigService configService; @Resource private ArdCamerasMapper ardCamerasMapper; @Resource private IHikClientService hikClientService; @Override public List<GlobalAlarmData> selectAlarmLogs(GlobalAlarmCondition condition) { String refreshTime = configService.selectConfigByKey("refreshTime"); @@ -124,53 +135,97 @@ @Override @Async("alarmExecutor") public void receiveAlarm(String topic, String message) { String uuid = UUID.randomUUID().toString().replace("-", ""); switch (topic) { case "stealelec": ArdAlarmStealelec ardAlarmStealelec = JSONObject.parseObject(message, ArdAlarmStealelec.class); ArdAlarmpointsWell well = ardAlarmpointsWellMapper.selectArdAlarmpointsWellByWellId(ardAlarmStealelec.getDescribe()); if(well!=null) { ardAlarmStealelec.setLongitude(well.getLongitude()); ardAlarmStealelec.setLatitude(well.getLatitude()); ardAlarmStealelec.setDeptId(well.getDeptId()); } ArdAlarmStealelec existe = ardAlarmStealelecMapper.selectByPrimaryKey(ardAlarmStealelec.getId()); if(StringUtils.isNotNull(existe)) { return; } int aas = ardAlarmStealelecMapper.insert(ardAlarmStealelec); if(aas>0) { log.info("stealelecå ¥åºæåï¼" +ardAlarmStealelec); } break; case "tube": ArdAlarmTube ardAlarmTube = JSONObject.parseObject(message, ArdAlarmTube.class); ardAlarmTube.setId(uuid); ArdTubesDetails atd = new ArdTubesDetails(); atd.setReelNumber(ardAlarmTube.getTubeId()); List<ArdTubesDetails> ardTubesDetails = ardTubesDetailsMapper.selectArdTubesDetailsList(atd); if (ardTubesDetails.size() > 0) { String tubeId = ardTubesDetails.get(0).getTubeId(); ArdTubes ardTubes = ardTubesMapper.selectArdTubesById(tubeId); ardAlarmTube.setTubeName(ardTubes.getName()); ardAlarmTube.setColor(ardTubes.getColor()); ardAlarmTube.setPipeDiameter(ardTubes.getPipeDiameter()); ardAlarmTube.setTubeType(ardTubes.getType()); GeoPoint geoPoint = TubeTools.CalculateCoordinates(ardTubesDetails, ardAlarmTube.getPosition()); if (StringUtils.isNotNull(geoPoint)) { ardAlarmTube.setLongitude(geoPoint.getLongitude()); ardAlarmTube.setLatitude(geoPoint.getLatitude()); ardAlarmTube.setAltitude(geoPoint.getAltitude()); try { String simpleUUID = IdUtils.simpleUUID(); switch (topic) { case "stealelec": ArdAlarmStealelec ardAlarmStealelec = JSONObject.parseObject(message, ArdAlarmStealelec.class); ArdAlarmpointsWell well = ardAlarmpointsWellMapper.selectArdAlarmpointsWellByWellId(ardAlarmStealelec.getDescribe()); if (well != null) { ardAlarmStealelec.setLongitude(well.getLongitude()); ardAlarmStealelec.setLatitude(well.getLatitude()); ardAlarmStealelec.setDeptId(well.getDeptId()); } } int aat = ardAlarmTubeMapper.insertArdAlarmTube(ardAlarmTube); if (aat > 0) { log.info("tubeå ¥åºæåï¼" + ardAlarmTube); } break; ArdAlarmStealelec existe = ardAlarmStealelecMapper.selectByPrimaryKey(ardAlarmStealelec.getId()); if (StringUtils.isNotNull(existe)) { return; } int aas = ardAlarmStealelecMapper.insert(ardAlarmStealelec); if (aas > 0) { log.info("stealelecå ¥åºæåï¼" + ardAlarmStealelec); } break; case "tube": ArdAlarmTube ardAlarmTube = JSONObject.parseObject(message, ArdAlarmTube.class); ardAlarmTube.setId(simpleUUID); ArdTubesDetails atd = new ArdTubesDetails(); atd.setReelNumber(ardAlarmTube.getTubeId()); List<ArdTubesDetails> ardTubesDetails = ardTubesDetailsMapper.selectArdTubesDetailsList(atd); if (ardTubesDetails.size() > 0) { String tubeId = ardTubesDetails.get(0).getTubeId(); ArdTubes ardTubes = ardTubesMapper.selectArdTubesById(tubeId); ardAlarmTube.setTubeName(ardTubes.getName()); ardAlarmTube.setColor(ardTubes.getColor()); ardAlarmTube.setPipeDiameter(ardTubes.getPipeDiameter()); ardAlarmTube.setTubeType(ardTubes.getType()); GeoPoint geoPoint = TubeTools.CalculateCoordinates(ardTubesDetails, ardAlarmTube.getPosition()); if (StringUtils.isNotNull(geoPoint)) { ardAlarmTube.setLongitude(geoPoint.getLongitude()); ardAlarmTube.setLatitude(geoPoint.getLatitude()); ardAlarmTube.setAltitude(geoPoint.getAltitude()); } } int aat = ardAlarmTubeMapper.insertArdAlarmTube(ardAlarmTube); if (aat > 0) { log.info("tubeå ¥åºæåï¼" + ardAlarmTube); //æ¥è¯¢ææå¤§å çµ ArdCameras ardCamera = new ArdCameras(); ardCamera.setGdtype("1"); List<ArdCameras> ardCamerasList = ardCamerasMapper.selectArdCamerasList(ardCamera); //ç»è®¡ææå¤§å çµå¯è§èå´å 䏿¥è¦ç¹çè·ç¦» Map<String, Double> distanceMap = new HashMap<>(); for (ArdCameras camera : ardCamerasList) { double distance = GisUtil.getDistance(ardAlarmTube.getLongitude(), ardAlarmTube.getLatitude(), camera.getLongitude(), camera.getLatitude()); if (distance <= camera.getCamMaxVisibleDistance()) { distanceMap.put(camera.getId(), distance); } } if(distanceMap.size()<0) { return; } //è·åè·ç¦»åå ¸ä¸æè¿çä¸ä¸ªç¸æºID String minDistanceCameraId = ArdTool.getKeyByMinValue(distanceMap); //å¼å¯¼å çµ CameraCmd cmd = new CameraCmd(); cmd.setOperator("sys_tube_leak"); cmd.setCameraId(minDistanceCameraId); cmd.setChannelNum(1); cmd.setTargetPosition(new double[]{ardAlarmTube.getLongitude(), ardAlarmTube.getLatitude()}); boolean guideRes = hikClientService.setTargetPosition(cmd); if(guideRes) { cmd.setEnable(true); cmd.setRecordBucketName("record"); String time = new SimpleDateFormat("yyyyMMdd").format(new Date()); String recordName = minDistanceCameraId + "/" + time + "/" + simpleUUID + ".mp4"; cmd.setRecordObjectName(recordName); hikClientService.recordToMinio(cmd); Thread.sleep(30000); cmd.setEnable(false); cmd.setUploadMinio(true); hikClientService.recordToMinio(cmd); //æ´æ°å½å String url = MinioClientSingleton.domainUrl + "/" + cmd.getRecordBucketName() + "/" + recordName; ardAlarmTube.setRecordUrl(url); ardAlarmTubeMapper.updateArdAlarmTube(ardAlarmTube); } } break; } } catch (Exception ex) { log.error("æ¥æ¶æ¥è¦å¼å¸¸:"+ex.getMessage()); } } /** ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/domain/ArdAlarmTube.java
@@ -1,6 +1,7 @@ package com.ruoyi.alarm.tubeAlarm.domain; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import lombok.ToString; @@ -11,77 +12,108 @@ /** * 管线æ³é²æ¥è¦å¯¹è±¡ ard_alarm_tube * * * @author åèä¹ * @date 2023-06-06 */ @Data @ToString public class ArdAlarmTube extends BaseEntity { public class ArdAlarmTube extends BaseEntity { private static final long serialVersionUID = 1L; /** ä¸»é® */ /** * ä¸»é® */ private String id; /** æ¥è¦ä¸»æº */ /** * æ¥è¦ä¸»æº */ @Excel(name = "æ¥è¦ä¸»æº") private String host; /** 管线id */ /** * 管线id */ @Excel(name = "管线id") private String tubeId; /** 管线åç§° */ /** * 管线åç§° */ @Excel(name = "管线åç§°") private String tubeName; /** 管线类å-油管-水管 */ /** * 管线类å-油管-水管 */ @Excel(name = "管线类å-油管-水管") private String tubeType; /** ç®¡å¾ */ /** * ç®¡å¾ */ @Excel(name = "管å¾") private String pipeDiameter; /** é¢è² */ /** * é¢è² */ @Excel(name = "é¢è²") private String color; /** ä½ç½® */ /** * ä½ç½® */ @Excel(name = "ä½ç½®") private Integer position; /** ç»åº¦ */ /** * ç»åº¦ */ @Excel(name = "ç»åº¦") private Double longitude; /** 纬度 */ /** * 纬度 */ @Excel(name = "纬度") private Double latitude; /** é«å± */ /** * é«å± */ @Excel(name = "é«å±") private Double altitude; /** ç±»åGXALARM */ /** * ç±»åGXALARM */ @Excel(name = "ç±»åGXALARM") private String type; /** ç±»å䏿 */ /** * ç±»å䏿 */ @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 String watcher; /** æ¥çæ¶é´ */ /** * æ¥çæ¶é´ */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "æ¥çæ¶é´", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date viewTime; @@ -94,4 +126,10 @@ * æªè¯»æ¥è¦æ°é */ private Integer count; /** * å¼å¯¼å½åurl */ @Excel(name = "å¼å¯¼å½åurl") private String recordUrl; } ard-work/src/main/java/com/ruoyi/constant/Global.java
ÎļþÒÑɾ³ý ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java
@@ -157,7 +157,7 @@ * æå¤§å¯è§è·ç¦» */ @Excel(name = "æå¤§å¯è§è·ç¦»") private String camMaxVisibleDistance; private Double camMaxVisibleDistance; /** * æå±å¡ID ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java
@@ -27,7 +27,7 @@ Map<String,Double>ptzMap; /*ç¸æºç»çº¬åº¦*/ double[] camPosition; // double[] camPosition; /*ç®æ ç»çº¬åº¦*/ double[] targetPosition; ard-work/src/main/java/com/ruoyi/device/hiksdk/common/GlobalVariable.java
@@ -17,6 +17,6 @@ public class GlobalVariable { //ä¿åç¸æºç»å½ä¿¡æ¯ public static Map<String, Integer> loginMap = new HashMap<>(); //ä¿åå½åä¿¡æ¯ public static Map<Integer, recordInfo> user_real_Map = new HashMap<>(); //ç¸æºé¢è§åå ¸ public static Map<String, Integer> previewMap = new HashMap<>(); } ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
@@ -35,7 +35,6 @@ import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.*; import static com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK.*; /** @@ -184,7 +183,7 @@ System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length()); m_strLoginInfo.wPort = m_sPort; m_strLoginInfo.byVerifyMode = 0; m_strLoginInfo.byLoginMode=0; m_strLoginInfo.byLoginMode = 0; //æ¯å¦å¼æ¥ç»å½ï¼0- å¦ï¼1- æ¯ windowsSDK鿝trueåfalse m_strLoginInfo.bUseAsynLogin = true; //弿¥ç»å½åè° @@ -663,7 +662,8 @@ NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS(); m_ptzPosCurrent.wAction = 1; try { double[] cameraPositon = cmd.getCamPosition(); ArdCameras cameras = ardCamerasMapper.selectArdCamerasById(cameraId); double[] cameraPositon = new double[]{cameras.getLongitude(), cameras.getLatitude(), cameras.getAltitude()}; double[] targetPositions = cmd.getTargetPosition(); double[] cameraPTZ = GisUtil.getCameraPTZ(cameraPositon, targetPositions, 20, 150); String p = String.valueOf((int) (cameraPTZ[0] * 10)); @@ -681,7 +681,7 @@ } return bool; } catch (Exception ex) { log.error(ex.getMessage()); log.error("å¼å¯¼å¼å¸¸:" + ex.getMessage()); return false; } } @@ -1232,98 +1232,74 @@ * @ä¿®æ¹äººåå ¶å®ä¿¡æ¯ */ @Override @SdkOperate public String record(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChannelNum(); boolean enable = cmd.isEnable(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return ""; } Integer userId = GlobalVariable.loginMap.get(cameraId); String path = ""; //é¢è§åæ° NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO(); previewinfo.read(); previewinfo.lChannel = channelNum; previewinfo.dwStreamType = 0;//ç æµç±»åï¼0-ä¸»ç æµï¼1-åç æµï¼2-ä¸ç æµï¼3-èæç æµï¼ä»¥æ¤ç±»æ¨ previewinfo.dwLinkMode = 0;//è¿æ¥æ¹å¼ï¼0-TCPæ¹å¼ï¼1-UDPæ¹å¼ï¼2-夿æ¹å¼ï¼3-RTPæ¹å¼ï¼4-RTP/RTSPï¼5-RTP/HTTPï¼6-HRUDPï¼å¯é ä¼ è¾ï¼ï¼7-RTSP/HTTPSï¼8-NPQ previewinfo.hPlayWnd = null;//ææ¾çªå£ç奿ï¼ä¸ºNULL表示ä¸è§£ç æ¾ç¤ºã previewinfo.bBlocked = 0;//0- éé»å¡åæµï¼1-é»å¡åæµ previewinfo.byNPQMode = 0;//NPQ模å¼ï¼0-ç´è¿æ¨¡å¼ï¼1-è¿æµåªä½æ¨¡å¼ previewinfo.write(); int lRealHandle; if (enable) { if (!GlobalVariable.user_real_Map.containsKey(userId)) { lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null); if (lRealHandle == -1) { int iErr = hCNetSDK.NET_DVR_GetLastError(); log.error("åæµå¤±è´¥" + iErr); return ""; } log.info("åæµæå"); File file = new File("D:/record/temp.mp4"); if (!file.exists()) { try { File fileParent = file.getParentFile(); if (!fileParent.exists()) { fileParent.mkdirs(); } file.createNewFile(); } catch (Exception e) { e.printStackTrace(); } } try { path = file.getCanonicalPath(); } catch (IOException e) { e.printStackTrace(); } recordInfo info = new recordInfo(); info.setLRealHandle(lRealHandle); info.setRecordPath(path); GlobalVariable.user_real_Map.put(userId, info); } recordInfo info = GlobalVariable.user_real_Map.get(userId); if (!hCNetSDK.NET_DVR_SaveRealData_V30(info.getLRealHandle(), 1, info.getRecordPath())) { log.error("ä¿åè§é¢æä»¶å°ä¸´æ¶æä»¶å¤¹å¤±è´¥ é误ç 为: " + hCNetSDK.NET_DVR_GetLastError()); return "ä¿åè§é¢æä»¶å°ä¸´æ¶æä»¶å¤¹å¤±è´¥ é误ç 为:" + hCNetSDK.NET_DVR_GetLastError(); } log.info("å½åå¼å§"); //return info.getRecordPath(); return ""; } else { recordInfo info = GlobalVariable.user_real_Map.get(userId); if (StringUtils.isNull(info)) { try { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChannelNum(); String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); boolean enable = cmd.isEnable(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return ""; } hCNetSDK.NET_DVR_StopRealPlay(info.getLRealHandle()); log.info("å½å忢"); //åå ¥minio String BucketName = "record"; String uuid = UUID.randomUUID().toString().replace("-", ""); String time = new SimpleDateFormat("yyyyMMdd").format(new Date()); String ObjectName = cameraId + "/" + time + "/" + uuid + ".mp4"; String ContentType = "video/MP4"; FileInputStream stream = null; try { stream = new FileInputStream(info.getRecordPath()); } catch (FileNotFoundException e) { e.printStackTrace(); Integer userId = GlobalVariable.loginMap.get(cameraId); //强å¶Iå¸§ç»æä½å¯¹è±¡ HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //æ°å»ºç»æä½å¯¹è±¡ netDvrIFrame.read(); netDvrIFrame.dwChannel = channelNum;//å ä¸ºä¸æä»£ç ä¸è®¾ç½®äºééå·ï¼æç §ä¸æä¸ç设置 netDvrIFrame.byStreamType = 0; netDvrIFrame.dwSize = netDvrIFrame.size(); netDvrIFrame.write(); if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) { log.error("强å¶I帧 é误ç 为: " + hCNetSDK.NET_DVR_GetLastError()); } //é¢è§åæ° NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO(); previewinfo.read(); previewinfo.lChannel = channelNum; previewinfo.dwStreamType = 0;//ç æµç±»åï¼0-ä¸»ç æµï¼1-åç æµï¼2-ä¸ç æµï¼3-èæç æµï¼ä»¥æ¤ç±»æ¨ previewinfo.dwLinkMode = 0;//è¿æ¥æ¹å¼ï¼0-TCPæ¹å¼ï¼1-UDPæ¹å¼ï¼2-夿æ¹å¼ï¼3-RTPæ¹å¼ï¼4-RTP/RTSPï¼5-RTP/HTTPï¼6-HRUDPï¼å¯é ä¼ è¾ï¼ï¼7-RTSP/HTTPSï¼8-NPQ previewinfo.hPlayWnd = null;//ææ¾çªå£ç奿ï¼ä¸ºNULL表示ä¸è§£ç æ¾ç¤ºã previewinfo.bBlocked = 0;//0- éé»å¡åæµï¼1-é»å¡åæµ previewinfo.byNPQMode = 0;//NPQ模å¼ï¼0-ç´è¿æ¨¡å¼ï¼1-è¿æµåªä½æ¨¡å¼ previewinfo.write(); String url = ""; try { if (enable) { if (!GlobalVariable.previewMap.containsKey(cameraId)) { int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null); if (lRealHandle == -1) { log.error("åæµå¤±è´¥" + hCNetSDK.NET_DVR_GetLastError()); return ""; } log.info("åæµæå"); GlobalVariable.previewMap.put(cameraId, lRealHandle); } if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) { log.error("ä¿åè§é¢æä»¶å°ä¸´æ¶æä»¶å¤¹å¤±è´¥ é误ç 为: " + hCNetSDK.NET_DVR_GetLastError()); return ""; } log.info("å½åå¼å§"); } else { if (GlobalVariable.previewMap.containsKey(cameraId)) { Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); GlobalVariable.previewMap.remove(cameraId); } log.info("å½å忢"); //åå ¥minio String BucketName = cmd.getRecordBucketName(); String ObjectName = cmd.getRecordObjectName(); String ContentType = "video/MP4"; FileInputStream stream = new FileInputStream(path); boolean b = MinioUtils.uploadObject(BucketName, ObjectName, stream, stream.available(), ContentType); if (b) { url = MinioUtils.getBucketObjectUrl(BucketName, ObjectName); log.info("ä¸ä¼ æä»¶æå!" + url); log.info("ä¸ä¼ æä»¶æå!" + MinioClientSingleton.domainUrl + "/" + BucketName + "/" + ObjectName); } } catch (IOException ex) { log.error("ä¸ä¼ æä»¶å¼å¸¸ï¼" + ex.getMessage()); } GlobalVariable.user_real_Map.remove(userId); return url; } catch (Exception ex) { log.error("å½åå¼å¸¸" + ex.getMessage()); return ""; } } @@ -1332,6 +1308,7 @@ try { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChannelNum(); String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); boolean enable = cmd.isEnable(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return; @@ -1357,46 +1334,38 @@ previewinfo.bBlocked = 0;//0- éé»å¡åæµï¼1-é»å¡åæµ previewinfo.byNPQMode = 0;//NPQ模å¼ï¼0-ç´è¿æ¨¡å¼ï¼1-è¿æµåªä½æ¨¡å¼ previewinfo.write(); int lRealHandle; if (enable) { if (!GlobalVariable.user_real_Map.containsKey(userId)) { lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null); if (!GlobalVariable.previewMap.containsKey(cameraId)) { int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null); if (lRealHandle == -1) { log.error("åæµå¤±è´¥" + hCNetSDK.NET_DVR_GetLastError()); return; } log.info("åæµæå"); String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); recordInfo info = new recordInfo(); info.setLRealHandle(lRealHandle); info.setRecordPath(path); GlobalVariable.user_real_Map.put(userId, info); GlobalVariable.previewMap.put(cameraId, lRealHandle); } recordInfo info = GlobalVariable.user_real_Map.get(userId); if (!hCNetSDK.NET_DVR_SaveRealData_V30(info.getLRealHandle(), 2, info.getRecordPath())) { if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) { log.error("ä¿åè§é¢æä»¶å°ä¸´æ¶æä»¶å¤¹å¤±è´¥ é误ç 为: " + hCNetSDK.NET_DVR_GetLastError()); return; } log.info("å½åå¼å§"); } else { recordInfo info = GlobalVariable.user_real_Map.get(userId); if (StringUtils.isNull(info)) { return; if (GlobalVariable.previewMap.containsKey(cameraId)) { Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); GlobalVariable.previewMap.remove(cameraId); } hCNetSDK.NET_DVR_StopRealPlay(info.getLRealHandle()); log.info("å½å忢"); if (cmd.isUploadMinio()) { //åå ¥minio String BucketName = cmd.getRecordBucketName(); String ObjectName = cmd.getRecordObjectName(); String ContentType = "video/MP4"; FileInputStream stream = new FileInputStream(info.getRecordPath()); boolean b = MinioUtils.uploadObject(BucketName, ObjectName, stream, stream.available(), ContentType); if (b) { log.info("ä¸ä¼ æä»¶æå!" + MinioClientSingleton.domainUrl + "/" + BucketName + "/" + ObjectName); GlobalVariable.user_real_Map.remove(userId); } //åå ¥minio String BucketName = cmd.getRecordBucketName(); String ObjectName = cmd.getRecordObjectName(); String ContentType = "video/MP4"; FileInputStream stream = new FileInputStream(path); boolean b = MinioUtils.uploadObject(BucketName, ObjectName, stream, stream.available(), ContentType); if (b) { log.info("ä¸ä¼ æä»¶æå!" + MinioClientSingleton.domainUrl + "/" + BucketName + "/" + ObjectName); } } } catch (Exception ex) { ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java
@@ -6,7 +6,6 @@ import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell; import com.ruoyi.alarmpoints.well.mapper.ArdAlarmpointsWellMapper; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.constant.Global; import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.mapper.ArdCamerasMapper; @@ -15,7 +14,6 @@ import com.ruoyi.inspect.domain.ArdVideoInspectRecord; import com.ruoyi.inspect.mapper.ArdVideoInspectRecordMapper; import com.ruoyi.inspect.mapper.ArdVideoInspectTaskStepMapper; import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import com.ruoyi.common.utils.StringUtils; @@ -176,12 +174,12 @@ List<ArdVideoInspectTaskStep> ardVideoInspectTaskStepList = ardVideoInspectTask.getArdVideoInspectTaskStepList(); //è·åç¸æº ArdCameras camera = camerasMapper.selectArdCamerasById(ardVideoInspectTask.getCameraId()); Collections.sort(ardVideoInspectTaskStepList,new ArdVideoInspectTaskStepComparator(this.ardAlarmpointsWellMapper,camera.getLongitude(),camera.getLatitude())); Collections.sort(ardVideoInspectTaskStepList, new ArdVideoInspectTaskStepComparator(this.ardAlarmpointsWellMapper, camera.getLongitude(), camera.getLatitude())); String taskId = ardVideoInspectTask.getId(); for (int i = 0; i < ardVideoInspectTaskStepList.size(); i++) { ArdVideoInspectTaskStep step = ardVideoInspectTaskStepList.get(i); step.setTaskId(taskId); step.setOrderNumber(new Integer(i+1)); step.setOrderNumber(new Integer(i + 1)); } if (StringUtils.isNotNull(ardVideoInspectTaskStepList)) { for (ArdVideoInspectTaskStep ardVideoInspectTaskStep : ardVideoInspectTaskStepList) { @@ -343,22 +341,6 @@ } } } else { // if(Global.task_record.contains(videoInspectTask.getId())) // { // /*忢å½å*/ // CameraCmd cmd = new CameraCmd(); // cmd.setCameraId(videoInspectTask.getCameraId()); // cmd.setChannelNum(videoInspectTask.getChannel()); // cmd.setOperator("sys_patrol_inspect"); // cmd.setEnable(false);//忢å½å // String uuid = UUID.randomUUID().toString().replace("-", ""); // String time = new SimpleDateFormat("yyyyMMdd").format(new Date()); // String recordName = videoInspectTask.getCameraId() + "/" + time + "/" + uuid + ".mp4"; // cmd.setRecordBucketName("record"); // cmd.setRecordObjectName(recordName); // cmd.setUploadMinio(true); // hikClientService.recordToMinio(cmd); // } if (StringUtils.isNotEmpty(videoInspectTask.getCurrentStepId())) { videoInspectTask.setCurrentStepId(""); ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(videoInspectTask); @@ -462,18 +444,14 @@ CameraCmd cmd = new CameraCmd(); cmd.setCameraId(cameraId); cmd.setChannelNum(channel); cmd.setCamPosition(cameraPositon); cmd.setTargetPosition(targetPositon); cmd.setOperator("sys_patrol_inspect"); cmd.setExpired(step.getRecordingTime()); boolean setTargetPosition = hikClientService.setTargetPosition(cmd); if (setTargetPosition) { if (!Global.task_record.contains(ardVideoInspectTask.getId())) { /*æ§å¶ç¸æºå·¡æ£æåï¼å¼å§å½å*/ cmd.setEnable(true);//å¯å¨å½å hikClientService.recordToMinio(cmd); Global.task_record.add(ardVideoInspectTask.getId()); } /*æ§å¶ç¸æºå·¡æ£æåï¼å¼å§å½å*/ cmd.setEnable(true);//å¯å¨å½å hikClientService.recordToMinio(cmd); } else { cmd.setEnable(false);//忢å½å cmd.setUploadMinio(true); @@ -519,13 +497,11 @@ cmd.setRecordObjectName(recordName); cmd.setUploadMinio(true); hikClientService.recordToMinio(cmd); Global.task_record.remove(ardVideoInspectTask.getId()); /*æå ¥å·¡æ£è®°å½*/ ArdVideoInspectRecord ardVideoInspectRecord = new ArdVideoInspectRecord(); ardVideoInspectRecord.setStepId(step.getId()); ArdAlarmpointsWell ardAlarmpointsWell = ardAlarmpointsWellMapper.selectArdAlarmpointsWellById(step.getWellId()); if(StringUtils.isNotNull(ardAlarmpointsWell)) { if (StringUtils.isNotNull(ardAlarmpointsWell)) { ardVideoInspectRecord.setWellName(ardAlarmpointsWell.getWellId()); } Date currentStepStartDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, currentStepStartTime); ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java
@@ -1,14 +1,11 @@ package com.ruoyi.inspect.service.impl; import com.ruoyi.constant.Global; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.hiksdk.common.GlobalVariable; import com.ruoyi.device.hiksdk.service.IHikClientService; import com.ruoyi.device.hiksdk.service.impl.HikClientServiceImpl; import com.ruoyi.inspect.domain.ArdVideoInspectTask; import com.ruoyi.inspect.mapper.ArdVideoInspectTaskMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -50,12 +47,8 @@ log.info("æå¨å·¡æ£ä»»å¡å·²å¯å¨ï¼" + taskId); return; } // /*æ¯æ¬¡å¯å¨ä»»å¡æ¸ 空任å¡å½åæ¥éª¤ä¿¡æ¯*/ /*æ¯æ¬¡å¯å¨ä»»å¡æ¸ 空任å¡å½åæ¥éª¤ä¿¡æ¯*/ ArdVideoInspectTask ardVideoInspectTask = ardVideoInspectTaskMapper.selectArdVideoInspectTaskById(taskId); // ardVideoInspectTask.setCurrentStepId(""); // ardVideoInspectTask.setCurrentStepStartTime(""); // ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask); String cameraId = ardVideoInspectTask.getCameraId(); /*å°å½åç¸æºçææä»»å¡å½åæ¶é´ç½®ç©º*/ ardVideoInspectTask=new ArdVideoInspectTask(); @@ -65,11 +58,6 @@ for (ArdVideoInspectTask VideoInspectTask : ardVideoInspectTasks) { VideoInspectTask.setCurrentStepStartTime(""); ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(VideoInspectTask); /*æ¸ æ¥ä»»å¡å½åè®°å½*/ if(Global.task_record.contains(VideoInspectTask.getId())) { Global.task_record.remove(VideoInspectTask.getId()); } } } /*å¼å¯ä»»å¡*/ @@ -84,8 +72,7 @@ ArdVideoInspectTask ardVideoInspectTask = ardVideoInspectTaskMapper.selectArdVideoInspectTaskById(taskId); /*å°å ³èçç¸æºå½åå ³é*/ String cameraId = ardVideoInspectTask.getCameraId(); Integer userId = GlobalVariable.loginMap.get(cameraId);//è·åå½åç¸æºçç»å½ID if( GlobalVariable.user_real_Map.containsKey(userId)) if( GlobalVariable.previewMap.containsKey(cameraId)) { //å½åç¸æºæ£å¨å½åï¼å忢å½å CameraCmd cmd = new CameraCmd(); cmd.setCameraId(ardVideoInspectTask.getCameraId()); @@ -93,15 +80,13 @@ cmd.setEnable(false);//忢å½å cmd.setUploadMinio(false); hikClientService.recordToMinio(cmd); GlobalVariable.user_real_Map.remove(userId); GlobalVariable.previewMap.remove(cameraId); } /*忢任å¡*/ InspectionTask task = taskMap.get(taskId); if (task != null) { task.stop(); taskMap.remove(taskId); Global.task_record.remove(taskId); log.info("æå¨å·¡æ£ä»»å¡å·²åæ¢ï¼" + taskId); /*å°ä»»å¡æ¥éª¤ä¿¡æ¯æ¸ 空*/ ardVideoInspectTask.setCurrentStepId(""); ard-work/src/main/resources/mapper/alarm/ArdAlarmTubeMapper.xml
@@ -21,11 +21,12 @@ <result property="longitude" column="longitude" /> <result property="latitude" column="latitude" /> <result property="altitude" column="altitude" /> <result property="recordUrl" column="record_url" /> <result property="viewTime" column="view_time" /> </resultMap> <sql id="selectArdAlarmTubeVo"> select id, host, tube_id, tube_name, tube_type, pipe_diameter, color, position, type, alarm_type, alarm_time, watcher, create_time, longitude, latitude, altitude, view_time from ard_alarm_tube select id, host, tube_id, tube_name, tube_type, pipe_diameter, color, position, type, alarm_type, alarm_time, watcher, create_time, longitude, latitude, altitude,, record_url, view_time from ard_alarm_tube </sql> <select id="selectArdAlarmTubeList" parameterType="ArdAlarmTube" resultMap="ArdAlarmTubeResult"> @@ -45,6 +46,7 @@ <if test="longitude != null and longitude != ''"> and longitude = #{longitude}</if> <if test="latitude != null and latitude != ''"> and latitude = #{latitude}</if> <if test="altitude != null and altitude != ''"> and altitude = #{altitude}</if> <if test="recordUrl != null and recordUrl != ''"> and record_url = #{recordUrl}</if> <if test="viewTime != null "> and view_time = #{viewTime}</if> </where> </select> @@ -73,6 +75,7 @@ <if test="longitude != null">longitude,</if> <if test="latitude != null">latitude,</if> <if test="altitude != null">altitude,</if> <if test="recordUrl != null">record_url,</if> <if test="viewTime != null">view_time,</if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> @@ -92,6 +95,7 @@ <if test="longitude != null">#{longitude},</if> <if test="latitude != null">#{latitude},</if> <if test="altitude != null">#{altitude},</if> <if test="recordUrl != null">#{recordUrl},</if> <if test="viewTime != null">#{viewTime},</if> </trim> </insert> @@ -114,6 +118,7 @@ <if test="longitude != null">longitude = #{longitude},</if> <if test="latitude != null">latitude = #{latitude},</if> <if test="altitude != null">altitude = #{altitude},</if> <if test="recordUrl != null">record_url = #{recordUrl},</if> <if test="viewTime != null">view_time = #{viewTime},</if> </trim> where id = #{id} @@ -139,6 +144,7 @@ aat.longitude, aat.latitude, aat.altitude, aat.record_url, ROW_NUMBER() OVER ( PARTITION BY aat.tube_id ORDER BY aat.alarm_time DESC ) AS rn, COUNT(CASE WHEN aat.view_time IS NULL THEN 1 END) OVER ( PARTITION BY aat.tube_id ) AS COUNT, COUNT ( aat.alarm_time ) OVER ( PARTITION BY tube_id ) AS total ruoyi-admin/src/main/resources/application-ard.yml
@@ -17,7 +17,7 @@ #mqtt mqtt: host: tcp://192.168.1.15:1883 clientId: m3c clientId: m4c username: admin password: xzx12345 topic: tube,stealelec ruoyi-common/src/main/java/com/ruoyi/common/utils/tools/ArdTool.java
@@ -1,8 +1,7 @@ package com.ruoyi.common.utils.tools; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; import java.util.*; /** * @Description: å·¥å ·æ¹æ³ @@ -35,4 +34,18 @@ } return map; } /** * æ±Map<K,V>ä¸æå° Value 对åºçKeyå¼ * * @param map * @return */ public static String getKeyByMinValue(Map<String, Double> map) { if (map == null) return null; List<Map.Entry<String, Double>> list = new ArrayList(map.entrySet()); Collections.sort(list, (o1, o2) -> (o1.getValue().intValue() - o2.getValue().intValue())); String min = list.get(0).getKey(); // String max = list.get(list.size() - 1).getKey(); return min; } } ruoyi-common/src/main/java/com/ruoyi/common/websocket/service/ChatServerEndpoint.java
@@ -47,10 +47,10 @@ public void onClose( @PathParam("userId")String userId,Session session) { //å½åçSession ç§»é¤ ONLINE_USER_SESSIONS.remove(userId); //å¹¶ä¸éç¥å ¶ä»äººå½åç¨æ·å·²ç»ç¦»å¼èå¤©å®¤äº String message="ç¨æ·[" + userId + "] æå¼è¿æ¥ï¼"; sendMessage(session,message); log.info("åéæ¶æ¯ï¼"+message); // //å¹¶ä¸éç¥å ¶ä»äººå½åç¨æ·å·²ç»ç¦»å¼èå¤©å®¤äº // String message="ç¨æ·[" + userId + "] æå¼è¿æ¥ï¼"; // sendMessage(session,message); // log.info("åéæ¶æ¯ï¼"+message); try { session.close(); } catch (IOException e) {