ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java
@@ -16,21 +16,21 @@ 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.utils.tools.ArdTool; import com.ruoyi.utils.tools.GisTool; import com.ruoyi.common.utils.uuid.IdUtils; 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.common.GlobalVariable; 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; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.util.*; @@ -63,6 +63,14 @@ private ArdCamerasMapper ardCamerasMapper; @Resource private IHikClientService hikClientService; /** * @æè¿° ææ¡ä»¶æ¥è¯¢æ¥è¦ * @åæ° [condition] * @è¿åå¼ java.util.List<com.ruoyi.alarm.globalAlarm.domain.GlobalAlarmData> * @å建人 åèä¹ * @å建æ¶é´ 2023/6/15 15:48 * @ä¿®æ¹äººåå ¶å®ä¿¡æ¯ */ @Override public List<GlobalAlarmData> selectAlarmLogs(GlobalAlarmCondition condition) { String refreshTime = configService.selectConfigByKey("refreshTime"); @@ -103,14 +111,21 @@ return null; } } /** * @æè¿° ææ¡ä»¶æ´æ°æ¥çæ¶é´ * @åæ° [condition] * @è¿åå¼ java.lang.Object * @å建人 åèä¹ * @å建æ¶é´ 2023/6/15 15:48 * @ä¿®æ¹äººåå ¶å®ä¿¡æ¯ */ @Override public Object updateAlarmViewTime(GlobalAlarmCondition condition) { SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); switch (condition.getCommand()) { case 1001: ArdAlarmStealelec ardAlarmStealelec = ardAlarmStealelecMapper.selectByPrimaryKey(condition.getId()); if(StringUtils.isNotNull(ardAlarmStealelec)) { if (StringUtils.isNotNull(ardAlarmStealelec)) { String describe = ardAlarmStealelec.getDescribe(); String startTime = fmt.format(ardAlarmStealelec.getStartTime()); int i = ardAlarmStealelecMapper.updateViewTimeByDescribe(describe, startTime, DateUtils.getTime()); @@ -118,16 +133,24 @@ } case 1014: ArdAlarmTube ardAlarmTube = ardAlarmTubeMapper.selectArdAlarmTubeById(condition.getId()); if(StringUtils.isNotNull(ardAlarmTube)) { if (StringUtils.isNotNull(ardAlarmTube)) { String tubeId = ardAlarmTube.getTubeId(); String alarmTime = fmt.format(ardAlarmTube.getAlarmTime()); int i = ardAlarmTubeMapper.updateViewTimeByTubeId(tubeId, alarmTime, DateUtils.getTime()); return ardAlarmTube; } default: return null; default: return null; } } /** * @æè¿° 弿¥å¤çæ¥æ¶çæ¥è¦ * @åæ° [topic, message] * @è¿åå¼ void * @å建人 åèä¹ * @å建æ¶é´ 2023/6/15 15:46 * @ä¿®æ¹äººåå ¶å®ä¿¡æ¯ */ @Override @Async("alarmExecutor") public void receiveAlarm(String topic, String message) { @@ -135,23 +158,39 @@ String simpleUUID = IdUtils.simpleUUID(); switch (topic) { case "stealelec": //region å¤çççµæ¥è¦ 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.setAltitude(well.getAltitude()); } ArdAlarmStealelec existe = ardAlarmStealelecMapper.selectByPrimaryKey(ardAlarmStealelec.getId()); if (StringUtils.isNotNull(existe)) { return; } int aas = ardAlarmStealelecMapper.insert(ardAlarmStealelec); int aas = ardAlarmStealelecMapper.insertArdAlarmStealelec(ardAlarmStealelec); if (aas > 0) { log.info("stealelecå ¥åºæåï¼" + ardAlarmStealelec); //å¼å¯¼å½å CameraCmd cmd = new CameraCmd(); cmd.setRecordBucketName("record"); cmd.setRecordObjectName("stealelec"); cmd.setOperator("sys_steal_elec"); cmd.setExpired(30); cmd.setTargetPosition(new double[]{well.getLongitude(), well.getLatitude(), well.getAltitude()}); String url = guideCamera(cmd); if (StringUtils.isNotEmpty(url)) { //æ´æ°å½å ardAlarmStealelec.setRecordUrl(url); ardAlarmStealelecMapper.updateArdAlarmStealelec(ardAlarmStealelec); } } //endregion break; case "tube": //region å¤ç管线æ³é²æ¥è¦ ArdAlarmTube ardAlarmTube = JSONObject.parseObject(message, ArdAlarmTube.class); ardAlarmTube.setId(simpleUUID); ArdTubesDetails atd = new ArdTubesDetails(); @@ -173,81 +212,101 @@ } 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); //å¼å¯¼å çµ log.debug("tubeå ¥åºæåï¼" + ardAlarmTube); //å¼å¯¼å½å CameraCmd cmd = new CameraCmd(); cmd.setCameraId(minDistanceCameraId); cmd.setChannelNum(1); cmd.setTargetPosition(new double[]{ardAlarmTube.getLongitude(), ardAlarmTube.getLatitude()}); cmd.setRecordBucketName("record"); cmd.setRecordObjectName("tube"); cmd.setOperator("sys_tube_leak"); cmd.setExpired(30); boolean guideRes = hikClientService.setTargetPosition(cmd); if(guideRes) { hikClientService.controlLock(cmd); 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); GlobalVariable.threadMap.put(minDistanceCameraId,Thread.currentThread().getName());//å°ç¸æºidä¸å½åå¤ç线ç¨åç§°ç»å® Thread.sleep(30000); String thread = GlobalVariable.threadMap.get(minDistanceCameraId); String currentThread = Thread.currentThread().getName(); //å¤æç¸æºç»å®çº¿ç¨æ¯å¦æ¯å½å线ç¨ï¼å¦ææ¯ï¼åæ¢å½åï¼å¦æä¸æ¯ï¼è¯´æç¸æºè¢«å ¶ä»çº¿ç¨æ¢å ï¼ä¸åæ¢å½å if(thread.equals(currentThread)) { cmd.setEnable(false); cmd.setUploadMinio(true); hikClientService.recordToMinio(cmd); //æ´æ°å½å String url = MinioClientSingleton.domainUrl + "/" + cmd.getRecordBucketName() + "/" + recordName; ardAlarmTube.setRecordUrl(url); ardAlarmTubeMapper.updateArdAlarmTube(ardAlarmTube); } cmd.setTargetPosition(new double[]{ardAlarmTube.getLongitude(), ardAlarmTube.getLatitude(), ardAlarmTube.getAltitude()}); String url = guideCamera(cmd); //æ´æ°å½å if (StringUtils.isNotEmpty(url)) { ardAlarmTube.setRecordUrl(url); ardAlarmTubeMapper.updateArdAlarmTube(ardAlarmTube); } } //endregion break; } } catch (Exception ex) { log.error("æ¥æ¶æ¥è¦å¼å¸¸:"+ex.getMessage()); } catch (Exception ex) { log.error("æ¥æ¶æ¥è¦å¼å¸¸:" + ex.getMessage()); } } /** * @æè¿° å¼å¯¼æè¿ç大å çµæåç®æ * @åæ° [targetPosition] * @è¿åå¼ java.lang.String * @å建人 åèä¹ * @å建æ¶é´ 2023/6/15 11:55 * @ä¿®æ¹äººåå ¶å®ä¿¡æ¯ */ private String guideCamera(CameraCmd cmd) { String url = ""; try { //è·åææå¤§å çµ List<ArdCameras> ardCamerasList = ardCamerasMapper.selectArdCamerasList(new ArdCameras("1")); //ç»è®¡ææå¤§å çµå¯è§èå´å 䏿¥è¦ç¹çè·ç¦» Map<String, Double> distanceMap = new HashMap<>(); for (ArdCameras camera : ardCamerasList) { double[] camPosition = new double[]{camera.getLongitude(), camera.getLatitude()}; double distance = GisTool.getDistance(cmd.getTargetPosition(), camPosition); if (distance != 0.0 && distance <= camera.getCamMaxVisibleDistance()) { distanceMap.put(camera.getId(), distance); } } if (distanceMap.size() > 0) { log.debug("å°è¯æ¥æ¾æè¿å çµ"); //è·åè·ç¦»åå ¸ä¸æè¿çä¸ä¸ªç¸æºID String minDistanceCameraId = ArdTool.getKeyByMinValue(distanceMap); log.debug("æ¥æ¾å°æè¿å çµ:"+minDistanceCameraId+"ï¼å°è¯å¼å¯¼"); //å¼å¯¼å çµ cmd.setCameraId(minDistanceCameraId); cmd.setChannelNum(1); boolean guideRes = hikClientService.guideTargetPosition(cmd); if (guideRes) { log.debug("å¼å¯¼æåï¼å°è¯å½å"); hikClientService.controlLock(cmd);//ä¸é cmd.setEnable(true);//å¼å§å½å hikClientService.recordToMinio(cmd);//å¼å§å½å GlobalVariable.threadMap.put(minDistanceCameraId, Thread.currentThread().getName());//å°ç¸æºidä¸å½åå¤ç线ç¨åç§°ç»å® Thread.sleep(cmd.getExpired() * 1000);//å½åæ¶é¿ String thread = GlobalVariable.threadMap.get(minDistanceCameraId); String currentThread = Thread.currentThread().getName(); //å¤æç¸æºç»å®çº¿ç¨æ¯å¦æ¯å½å线ç¨ï¼å¦ææ¯ï¼åæ¢å½åï¼å¦æä¸æ¯ï¼è¯´æç¸æºè¢«å ¶ä»çº¿ç¨æ¢å ï¼ä¸åæ¢å½å if (thread.equals(currentThread)) { cmd.setEnable(false);//忢å½å cmd.setUploadMinio(true);//ä¸ä¼ minio url = hikClientService.recordToMinio(cmd);//忢å½åè¿åurl } } } else { log.debug("æªæ¥æ¾å°æè¿å çµ"); } } catch (Exception ex) { log.error("å¼å¯¼å¼å¸¸:" + ex.getMessage()); } return url; } /** * @æè¿° æ¥è¯¢æææ¥è¦çå½åæ°é * @åæ° [] * @è¿åå¼ java.util.Map<java.lang.String,java.lang.Integer> * @è¿åå¼ java.util.Map<java.lang.String, java.lang.Integer> * @å建人 åèä¹ * @å建æ¶é´ 2023/6/13 16:30 * @ä¿®æ¹äººåå ¶å®ä¿¡æ¯ */ @Override public Map<String, Integer> selectAlarmLogsCount() { Map<String, Integer> countMap=new HashMap<>(); Map<String, Integer> countMap = new HashMap<>(); String refreshTime = configService.selectConfigByKey("refreshTime"); int count1001 = ardAlarmStealelecMapper.selectCountByStartTime(refreshTime); countMap.put("1001",count1001); countMap.put("1001", count1001); int count1014 = ardAlarmTubeMapper.selectCountByStartTime(refreshTime); countMap.put("1014 ",count1014); countMap.put("1014 ", count1014); return countMap; } } ard-work/src/main/java/com/ruoyi/alarm/stealAlarm/domain/ArdAlarmStealelec.java
@@ -94,4 +94,9 @@ * æªè¯»æ¥è¦æ°é */ private Integer count; /** * å¼å¯¼å½åurl */ @Excel(name = "å¼å¯¼å½åurl") private String recordUrl; } ard-work/src/main/java/com/ruoyi/alarm/stealAlarm/mapper/ArdAlarmStealelecMapper.java
@@ -2,6 +2,7 @@ import com.ruoyi.alarm.globalAlarm.domain.GlobalAlarmCondition; import com.ruoyi.alarm.stealAlarm.domain.ArdAlarmStealelec; import com.ruoyi.alarm.tubeAlarm.domain.ArdAlarmTube; import org.apache.ibatis.annotations.Param; import java.util.Date; @@ -9,11 +10,18 @@ public interface ArdAlarmStealelecMapper{ int insert(ArdAlarmStealelec record); int insertArdAlarmStealelec(ArdAlarmStealelec record); ArdAlarmStealelec selectByPrimaryKey(String id); List<ArdAlarmStealelec> selectRealByCondition(@Param("refreshTime")String refreshTime,@Param("deptId")Long deptId); List<ArdAlarmStealelec> selectHistoryByCondition(GlobalAlarmCondition condition); List<ArdAlarmStealelec> selectListAllByCommand(@Param("refreshTime")String refreshTime); int selectCountByStartTime(@Param("refreshTime")String refreshTime); int updateViewTimeByDescribe(@Param("describe")String describe,@Param("alarmTime") String alarmTime,@Param("viewTime") String viewTime); /** * ä¿®æ¹é²ççµæ¥è¦ * * @param ardAlarmStealelec é²ççµæ¥è¦ * @return ç»æ */ public int updateArdAlarmStealelec(ArdAlarmStealelec ardAlarmStealelec); } ard-work/src/main/java/com/ruoyi/alarm/stealAlarm/service/impl/IStealElecAlarmServiceImpl.java
@@ -80,7 +80,7 @@ wd.setLatitude(well.getLatitude()); wd.setDeptId(well.getDeptId()); } int insert = ardAlarmStealelecMapper.insert(wd); int insert = ardAlarmStealelecMapper.insertArdAlarmStealelec(wd); if (insert > 0) { log.info("æ°æ®æå ¥æåï¼" + wd.getId()); } else { ard-work/src/main/java/com/ruoyi/constant/CamPriority.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package com.ruoyi.constant; import java.util.HashMap; import java.util.Map; /** * @Description: ç¸æºæ§å¶ä¼å 级 * @ClassName: sdkPriority * @Author: åèä¹ * @Date: 2023å¹´05æ23æ¥11:25 * @Version: 1.0 **/ public class CamPriority { public static Map<String,Object> priorityMap=new HashMap<>(); static { priorityMap.put("sys_radar_fire",999);//é·è¾¾é²ç«æ¥è¦ priorityMap.put("sys_tube_leak",998);//管线æ³é²æ¥è¦ priorityMap.put("sys_steal_elec",997);//ççµæ¥è¦ priorityMap.put("sys_patrol_inspect",1);//å·¡æ£ } } ard-work/src/main/java/com/ruoyi/constant/sdkPriority.java
ÎļþÒÑɾ³ý ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java
@@ -20,7 +20,10 @@ @NoArgsConstructor public class ArdCameras extends BaseEntity { private static final long serialVersionUID = 1L; public ArdCameras(String gdtype) { this.gdtype=gdtype; } /** * id */ ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java
@@ -26,8 +26,6 @@ /*PTZå¼*/ Map<String,Double>ptzMap; /*ç¸æºç»çº¬åº¦*/ // double[] camPosition; /*ç®æ ç»çº¬åº¦*/ double[] targetPosition; ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
@@ -1,7 +1,5 @@ package com.ruoyi.device.camera.service.impl; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -10,9 +8,7 @@ import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.common.utils.tools.ArdTool; import com.ruoyi.utils.tools.ArdTool; import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.mapper.ArdCamerasMapper; import com.ruoyi.device.camera.service.IArdCamerasService; ard-work/src/main/java/com/ruoyi/device/hiksdk/controller/SdkController.java
@@ -170,7 +170,7 @@ @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.channelNum", "cmd.targetPosition"}) public @ResponseBody AjaxResult setTargetPosition(@RequestBody CameraCmd cmd) { return toAjax(sdk.setTargetPosition(cmd)); return toAjax(sdk.guideTargetPosition(cmd)); } ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java
@@ -88,8 +88,8 @@ String record(CameraCmd cmd); //æå¨å½å void recordToMinio(CameraCmd cmd); String recordToMinio(CameraCmd cmd); //å¼å¯¼ç®æ ä½ç½® boolean setTargetPosition(CameraCmd cmd); boolean guideTargetPosition(CameraCmd cmd); } ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
@@ -6,13 +6,13 @@ import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.constant.sdkPriority; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.constant.CamPriority; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.mapper.ArdCamerasMapper; import com.ruoyi.device.hiksdk.common.GlobalVariable; import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.hiksdk.config.MinioClientSingleton; import com.ruoyi.device.hiksdk.domain.recordInfo; import com.ruoyi.device.hiksdk.util.hikSdkUtil.GisUtil; import com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK; import com.ruoyi.device.hiksdk.service.IHikClientService; @@ -24,7 +24,6 @@ import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import sun.misc.BASE64Encoder; @@ -36,7 +35,6 @@ import java.text.SimpleDateFormat; import java.util.*; import static com.ruoyi.device.hiksdk.common.GlobalVariable.threadMap; import static com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK.*; /** @@ -655,7 +653,7 @@ @Override @SdkOperate public boolean setTargetPosition(CameraCmd cmd) { public boolean guideTargetPosition(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChannelNum(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { @@ -728,18 +726,18 @@ } else { //å¦æéæ¬äººæ¯è¾ä¼å 级 Integer currentLevel = 0;//å½åæä½è çä¼å 级 if (sdkPriority.priorityMap.containsKey(currentOperator)) { if (CamPriority.priorityMap.containsKey(currentOperator)) { /*å½åæ§å¶è ä¸ºç³»ç»æ¥è¦ç¨æ·*/ currentLevel = (Integer) sdkPriority.priorityMap.get(currentOperator); currentLevel = (Integer) CamPriority.priorityMap.get(currentOperator); } else { /*å½åæ§å¶è 为æ®éç¨æ·*/ SysUser sysUser = sysUserMapper.selectUserById(currentOperator); currentLevel = sysUser.getCameraPriority(); } Integer operatorLevel = 0;//è·åç³è¯·è çä¼å 级 if (sdkPriority.priorityMap.containsKey(operator)) { if (CamPriority.priorityMap.containsKey(operator)) { /*å å«è¯´æå½åç³è¯·æ§å¶è ä¸ºç³»ç»æ¥è¦ç¨æ·*/ operatorLevel = (Integer) sdkPriority.priorityMap.get(operator); operatorLevel = (Integer) CamPriority.priorityMap.get(operator); } else { /*å¦åç³è¯·æ§å¶è 为å½åç»å½ç¨æ·*/ LoginUser loginUser = SecurityUtils.getLoginUser(); @@ -1307,14 +1305,14 @@ } @Override public void recordToMinio(CameraCmd cmd) { public String recordToMinio(CameraCmd cmd) { 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; return ""; } Integer userId = GlobalVariable.loginMap.get(cameraId); //强å¶Iå¸§ç»æä½å¯¹è±¡ @@ -1342,40 +1340,47 @@ Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); GlobalVariable.previewMap.remove(cameraId); log.info("å½å忢"); log.debug("忢å½åå½å"); } int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null); if (lRealHandle == -1) { log.error("åæµå¤±è´¥" + hCNetSDK.NET_DVR_GetLastError()); return; return ""; } log.info("åæµæå"); GlobalVariable.threadMap.put(cameraId,Thread.currentThread().getName()); log.debug("åæµæå"); GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName()); GlobalVariable.previewMap.put(cameraId, lRealHandle); if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) { log.error("ä¿åè§é¢æä»¶å°ä¸´æ¶æä»¶å¤¹å¤±è´¥ é误ç 为: " + hCNetSDK.NET_DVR_GetLastError()); return; return ""; } log.info("å½åå¼å§"); log.debug("å½åå¼å§"); } else { if (GlobalVariable.previewMap.containsKey(cameraId)) { Integer lRealHandle = GlobalVariable.previewMap.get(cameraId); hCNetSDK.NET_DVR_StopRealPlay(lRealHandle); GlobalVariable.previewMap.remove(cameraId); } log.info("å½å忢"); log.debug("å½å忢"); //åå ¥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); String simpleUUID = IdUtils.simpleUUID(); String time = new SimpleDateFormat("yyyyMMdd").format(new Date()); String recordName = cameraId + "/" + time + "/" + ObjectName +"_"+ simpleUUID + ".mp4"; boolean b = MinioUtils.uploadObject(BucketName, recordName, stream, stream.available(), ContentType); if (b) { log.info("ä¸ä¼ æä»¶æå!" + MinioClientSingleton.domainUrl + "/" + BucketName + "/" + ObjectName); String url = MinioClientSingleton.domainUrl + "/" + BucketName + "/" + recordName; log.debug("ä¸ä¼ æä»¶æå!" + url); return url; } } return ""; } catch (Exception ex) { log.error("å½åå¼å¸¸" + ex.getMessage()); return ""; } } } ard-work/src/main/java/com/ruoyi/inspect/controller/ArdVideoInspectTaskController.java
@@ -3,6 +3,7 @@ import java.util.List; import javax.servlet.http.HttpServletResponse; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.common.utils.uuid.UUID; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; @@ -87,7 +88,7 @@ @Log(title = "è§é¢å·¡æ£ä»»å¡", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody ArdVideoInspectTask ardVideoInspectTask) { ardVideoInspectTask.setId(UUID.randomUUID().toString()); ardVideoInspectTask.setId(IdUtils.simpleUUID()); return toAjax(ardVideoInspectTaskService.insertArdVideoInspectTask(ardVideoInspectTask)); } ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java
@@ -450,7 +450,7 @@ cmd.setTargetPosition(targetPositon); cmd.setOperator("sys_patrol_inspect"); cmd.setExpired(step.getRecordingTime()*60); boolean setTargetPosition = hikClientService.setTargetPosition(cmd); boolean setTargetPosition = hikClientService.guideTargetPosition(cmd); if (setTargetPosition) { /*æ§å¶ç¸æºå·¡æ£æåï¼å¼å§å½å*/ cmd.setEnable(true);//å¯å¨å½å @@ -503,7 +503,7 @@ cmd.setTargetPosition(targetPositon); cmd.setOperator("sys_patrol_inspect"); cmd.setExpired(step.getRecordingTime()*60); boolean setTargetPosition = hikClientService.setTargetPosition(cmd); boolean setTargetPosition = hikClientService.guideTargetPosition(cmd); if (!setTargetPosition) { /*æ§å¶å¤±è´¥,å½åæ¥éª¤å¯å¨æ¶é´ç½®null*/ ardVideoInspectTask.setCurrentStepStartTime(""); @@ -538,13 +538,10 @@ cmd.setChannelNum(channel); cmd.setOperator("sys_patrol_inspect"); cmd.setEnable(false);//忢å½å String uuid = UUID.randomUUID().toString().replace("-", ""); String time = new SimpleDateFormat("yyyyMMdd").format(new Date()); String recordName = cameraId + "/" + time + "/" + uuid + ".mp4"; cmd.setRecordBucketName("record"); cmd.setRecordObjectName(recordName); cmd.setRecordObjectName("inspect"); cmd.setUploadMinio(true); hikClientService.recordToMinio(cmd); String url= hikClientService.recordToMinio(cmd); /*æå ¥å·¡æ£è®°å½*/ ArdVideoInspectRecord ardVideoInspectRecord = new ArdVideoInspectRecord(); ardVideoInspectRecord.setStepId(step.getId()); @@ -556,7 +553,6 @@ Date currentStepStopDate = DateUtils.addMinutes(currentStepStartDate, step.getRecordingTime()); ardVideoInspectRecord.setStartTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, currentStepStartDate)); ardVideoInspectRecord.setEndTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, currentStepStopDate)); String url = MinioClientSingleton.domainUrl + "/" + cmd.getRecordBucketName() + "/" + recordName; ardVideoInspectRecord.setRecordFilePath(url); ardVideoInspectRecordMapper.insertArdVideoInspectRecord(ardVideoInspectRecord); } ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTask.java
@@ -37,7 +37,7 @@ public void run() { while (isRunning) { // å·¡æ£ä»»å¡çå ·ä½é»è¾ log.debug("å·¡æ£ä»»å¡æ§è¡ä¸ï¼" + taskId); log.debug("æå¨å·¡æ£ä»»å¡æ§è¡ä¸ï¼" + taskId); ArdVideoInspectTaskServiceImpl ardVideoInspectTaskService = SpringUtils.getBean(ArdVideoInspectTaskServiceImpl.class); ardVideoInspectTaskService.manualTaskRun(taskId); try { ard-work/src/main/java/com/ruoyi/utils/tools/ArdTool.java
ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/utils/tools/ArdTool.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.ruoyi.common.utils.tools; package com.ruoyi.utils.tools; import java.lang.reflect.Field; import java.util.*; ard-work/src/main/java/com/ruoyi/utils/tools/GisTool.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,32 @@ package com.ruoyi.utils.tools; import org.gavaghan.geodesy.Ellipsoid; import org.gavaghan.geodesy.GeodeticCalculator; import org.gavaghan.geodesy.GlobalCoordinates; /** * @Description: * @ClassName: GisTool * @Author: åèä¹ * @Date: 2023å¹´06æ15æ¥13:26 * @Version: 1.0 **/ public class GisTool { public static GeodeticCalculator geodeticCalculator = new GeodeticCalculator(); /** * æ ¹æ®ç»çº¬åº¦ï¼è®¡ç®ä¸¤ç¹é´çè·ç¦» * * @param From 第ä¸ä¸ªç¹çç»çº¬åº¦ * @param To 第äºä¸ªç¹çç»çº¬åº¦ * @return è¿åè·ç¦» åä½ç±³ */ public static double getDistance(double[] From, double[] To) { double longitudeFrom = From[0]; double latitudeFrom = From[1]; double longitudeTo = To[0]; double latitudeTo = To[1]; GlobalCoordinates source = new GlobalCoordinates(latitudeFrom, longitudeFrom); GlobalCoordinates target = new GlobalCoordinates(latitudeTo, longitudeTo); return geodeticCalculator.calculateGeodeticCurve(Ellipsoid.WGS84, source, target).getEllipsoidalDistance(); } } ard-work/src/main/java/com/ruoyi/utils/tube/TubeTools.java
@@ -1,6 +1,7 @@ package com.ruoyi.utils.tube; import com.ruoyi.alarmpoints.tube.domain.ArdTubesDetails; import com.ruoyi.common.utils.StringUtils; import lombok.extern.slf4j.Slf4j; import org.gavaghan.geodesy.Ellipsoid; import org.gavaghan.geodesy.GeodeticCalculator; @@ -61,6 +62,11 @@ */ public static GeoPoint CalculateCoordinates(List<ArdTubesDetails> ardTubesDetails, Integer alarmPointDistance) { try { if(StringUtils.isNull(alarmPointDistance)) { log.debug("æ¥è¦ç¹è·ç¦»ä¸ºç©ºï¼æ æ³è®¡ç®åæ "); return null; } Comparator<ArdTubesDetails> comparator = Comparator.comparingInt(person -> Integer.parseInt(person.getInflectionPointNumber())); // 使ç¨Collections.sortæ¹æ³è¿è¡æåº Collections.sort(ardTubesDetails, comparator); GeoPoint point0 = new GeoPoint(ardTubesDetails.get(0).getLongitude(), ardTubesDetails.get(0).getLatitude(), ardTubesDetails.get(0).getAltitude() - ardTubesDetails.get(0).getDepth()); ard-work/src/main/resources/mapper/alarm/ArdAlarmStealelecMapper.xml
@@ -16,7 +16,7 @@ <result column="dept_id" property="deptId"/> </resultMap> <sql id="Base_Column_List"> id, name, describe, catalog_text, description, start_time, end_time,view_time,longitude,latitude,create_by,create_time,user_id,dept_id id, name, describe, catalog_text, description, start_time, end_time,view_time,longitude,latitude,altitude,create_by,create_time,user_id,dept_id </sql> <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap"> select @@ -88,9 +88,26 @@ and start_time<=#{alarmTime} and view_time is null </update> <insert id="insert" parameterType="ArdAlarmStealelec"> <update id="updateArdAlarmStealelec" parameterType="ArdAlarmStealelec"> update ard_alarm_stealelec <trim prefix="SET" suffixOverrides=","> <if test="name != null">name = #{name},</if> <if test="describe != null">describe = #{describe},</if> <if test="catalogText != null">catalog_text = #{catalogText},</if> <if test="description != null">description = #{description},</if> <if test="startTime != null">start_time = #{startTime},</if> <if test="endTime != null">end_time = #{endTime},</if> <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} </update> <insert id="insertArdAlarmStealelec" parameterType="ArdAlarmStealelec"> insert into ard_alarm_stealelec(<include refid="Base_Column_List"/>) values (#{id}, #{name},#{describe},#{catalogText},#{description}, #{startTime}, #{endTime}, #{viewTime},#{longitude},#{latitude},#{createBy},#{createTime},#{userId},#{deptId}) #{viewTime},#{longitude},#{latitude},#{altitude},#{createBy},#{createTime},#{userId},#{deptId}) </insert> </mapper> ruoyi-admin/src/main/resources/logback.xml
@@ -188,7 +188,7 @@ <appender-ref ref="minio"/> </logger> <!--hiksdkæ¥å¿æå°ç级--> <logger name="hikSdk" level="INFO"> <logger name="hikSdk" level="DEBUG"> <appender-ref ref="hikSdk"/> </logger> <!--ççµæ¥è¦æ¥å¿æå°ç级--> @@ -204,7 +204,7 @@ <appender-ref ref="PatrolInspectionTask"/> </logger> <!--mqttæ¥å¿æå°ç级--> <logger name="mqtt" level="INFO"> <logger name="mqtt" level="DEBUG"> <appender-ref ref="mqtt"/> </logger> </configuration> ruoyi-common/pom.xml
@@ -146,6 +146,12 @@ <version>1.6.2</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.gavaghan</groupId> <artifactId>geodesy</artifactId> <version>1.1.3</version> <scope>compile</scope> </dependency> </dependencies> </project> ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/SdkOperateAspect.java
@@ -4,12 +4,11 @@ import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.constant.sdkPriority; import com.ruoyi.constant.CamPriority; import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.service.IArdCamerasService; import com.ruoyi.system.service.ISysUserService; import org.apache.ibatis.jdbc.Null; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; @@ -40,8 +39,8 @@ @Around("dsPointCut()") public Object around(ProceedingJoinPoint point) throws Throwable { Boolean resultMap = dataScopeFilter(point); if (resultMap) { Boolean result = controlScopeFilter(point); if (result) { return point.proceed(); } else { return false;//代æ¿ç®æ æ¹æ³çè¿åå¼ @@ -53,7 +52,7 @@ * * @param joinPoint åç¹ */ public Boolean dataScopeFilter(ProceedingJoinPoint joinPoint) { public Boolean controlScopeFilter(ProceedingJoinPoint joinPoint) { //è·åè¯·æ±æ§å¶ç¸æºçå½ä»¤ä¿¡æ¯ CameraCmd cmd = (CameraCmd) joinPoint.getArgs()[0]; String operator = cmd.getOperator();//ç³è¯·è @@ -84,18 +83,18 @@ } else { /*å½åç¸æºæäººæ§å¶å¹¶ä¸é ç½®äºè¿ææ¶é´ï¼å 夿ä¼å 级ï¼ä¼å 级é«å 许æ§å¶*/ Integer currentLevel = 0;//å½åç¸æºçæä½è çä¼å 级 if (sdkPriority.priorityMap.containsKey(currentOperator)) { if (CamPriority.priorityMap.containsKey(currentOperator)) { /*å½åæ§å¶è ä¸ºç³»ç»æ¥è¦ç¨æ·*/ currentLevel = (Integer) sdkPriority.priorityMap.get(currentOperator); currentLevel = (Integer) CamPriority.priorityMap.get(currentOperator); } else { /*å½åæ§å¶è 为æ®éç¨æ·*/ SysUser sysUser = sysUserService.selectUserById(currentOperator); currentLevel = sysUser.getCameraPriority(); } Integer operatorLevel = 0;//è·åç³è¯·è çä¼å 级 if (sdkPriority.priorityMap.containsKey(operator)) { if (CamPriority.priorityMap.containsKey(operator)) { /*å å«è¯´æå½åç³è¯·æ§å¶è ä¸ºç³»ç»æ¥è¦ç¨æ·*/ operatorLevel = (Integer) sdkPriority.priorityMap.get(operator); operatorLevel = (Integer) CamPriority.priorityMap.get(operator); } else { /*å¦åç³è¯·æ§å¶è 为å½åç»å½ç¨æ·*/ LoginUser loginUser = SecurityUtils.getLoginUser(); @@ -111,7 +110,6 @@ return true; } else { /*妿ç³è¯·è ä¼å 级ä½ï¼åå¤æè¿ææ¶é´*/ Date now = new Date(); if (currentExpired == null) { /*å½åç¸æºæªé ç½®è¿ææ¶é´ï¼å¯æ§*/ ardCameras.setOperatorId(operator); @@ -119,7 +117,7 @@ ardCamerasService.updateArdCameras(ardCameras);//æ´æ°ç¸æºå½åæ§å¶è return true; } else { if (now.before(currentExpired)) { if (new Date().before(currentExpired)) { /*æ¶é´æªè¿æï¼ä¸å¯æ§*/ return false; } else { ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/AlarmTask.java
@@ -28,98 +28,15 @@ public class AlarmTask { @Resource IStealElecAlarmService IStealElecAlarmService; @Resource ISysUserService sysUserService; @Resource IGlobalAlarmService globalAlarmService; /** * @æè¿° ççµæ¥è¦å®æ¶æ¨éä»»å¡ * @æè¿° 宿¶æ¨éæææ¥è¦çç¹ä½æ°é * @åæ° [] * @è¿åå¼ void * @å建人 åèä¹ * @å建æ¶é´ 2023/3/6 15:10 * @å建æ¶é´ 2023/6/15 15:43 * @ä¿®æ¹äººåå ¶å®ä¿¡æ¯ */ public void stealElecAlarmPush() { log.info("ççµæ¥è¦æ¨éå¼å§"); // å¼å§æ¶é´ long stime = System.currentTimeMillis(); try { for (String userId : ONLINE_USER_SESSIONS.keySet()) { SysUser sysUser = sysUserService.selectUserById(userId); List<ArdAlarmStealelec> alarms = IStealElecAlarmService.getRealAlarm(sysUser.getDeptId()); Map<String, Object> map = new HashMap<>(); List<ArdAlarmStealelec> objs = new ArrayList<>(); for (ArdAlarmStealelec data : alarms) { //ç»çº¬åº¦ç«æè½¬84 if (data.getLongitude() != 0 && data.getLatitude() != 0) { double[] wgs84 = LonlatConver.gcj02_To_Wgs84(data.getLongitude(), data.getLatitude());//ç«æè½¬84 data.setLongitude(wgs84[0]); data.setLatitude(wgs84[1]); } //夿å½åæ°æ®æ¯å¦10Så Date startTime = data.getStartTime(); SimpleDateFormat formatTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//HHæ¯24å°æ¶å¶ï¼12å°æ¶ç¨hh Calendar calendar = Calendar.getInstance(); //ä»å½åæ¶é´åå»10ç§ calendar.add(Calendar.MINUTE, -30); String currentTime = formatTime.format(calendar.getTime()); int dateFlag = formatTime.format(startTime).compareTo(currentTime); if (dateFlag > 0) { objs.add(data); } data.setId(data.getDescribe() + "&" + data.getCommand()); } if (objs.size() > 0) { map.put("obj", objs); } else { map.put("obj", -1); } map.put("Command", 8000); map.put("count", objs.size()); map.put("total", alarms.size()); map.put("data", alarms); if (alarms.size() > 0) { WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(userId), map); } } } catch (Exception ex) { log.error("ççµæ¥è¦æ¨éå¼å¸¸ï¼" + ex.getMessage()); } // ç»ææ¶é´ long etime = System.currentTimeMillis(); // è®¡ç®æ§è¡æ¶é´ log.info("ççµæ¥è¦æ¨éç»æï¼" + (etime - stime) + " 毫ç§"); } /** * @æè¿° ççµæ¥è¦apiæåä»»å¡ * @åæ° [] * @è¿åå¼ void * @å建人 åèä¹ * @å建æ¶é´ 2023/2/28 11:51 * @ä¿®æ¹äººåå ¶å®ä¿¡æ¯ */ public void stealElecAlarmPull() { log.info("ççµæ°æ®æåå¼å§"); // å¼å§æ¶é´ long stime = System.currentTimeMillis(); try { // String url = "http://iot.zhdk.net:8090/Warning/GetWarning?userName=cy4oil"; IStealElecAlarmService.getAlarmByApi(); } catch (Exception ex) { log.error("ççµæ°æ®æåå¼å¸¸ï¼" + ex.getMessage()); } // ç»ææ¶é´ long etime = System.currentTimeMillis(); // è®¡ç®æ§è¡æ¶é´ log.info("ççµæ°æ®æåç»æï¼" + (etime - stime) + " 毫ç§"); } public void globalAlarmCountPush() { Map<String, Integer> stringIntegerMap = globalAlarmService.selectAlarmLogsCount(); if (ONLINE_USER_SESSIONS.size() > 0) {