| | |
| | | import com.ruoyi.alarm.cameraAlarm.mapper.ArdAlarmCameraMapper; |
| | | import com.ruoyi.alarm.globalAlarm.domain.GlobalAlarmCondition; |
| | | import com.ruoyi.alarm.globalAlarm.domain.GlobalAlarmData; |
| | | import com.ruoyi.alarm.globalAlarm.domain.GuidePriorityQueue; |
| | | import com.ruoyi.alarm.globalAlarm.domain.GuideTask; |
| | | import com.ruoyi.alarm.globalAlarm.service.IGlobalAlarmService; |
| | | import com.ruoyi.alarm.radarAlarm.domain.ArdAlarmRadar; |
| | | import com.ruoyi.alarm.radarAlarm.domain.RadarAlarmData; |
| | |
| | | import com.ruoyi.common.core.redis.RedisCache; |
| | | import com.ruoyi.common.utils.DateUtils; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.constant.CamPriority; |
| | | import com.ruoyi.utils.tools.ArdTool; |
| | | import com.ruoyi.utils.tools.GisTool; |
| | | import com.ruoyi.common.utils.uuid.IdUtils; |
| | |
| | | @Slf4j(topic = "mqtt") |
| | | public class GlobalAlarmServiceImpl implements IGlobalAlarmService { |
| | | @Resource |
| | | ArdAlarmRadarMapper ardAlarmRadarMapper; |
| | | private ArdAlarmRadarMapper ardAlarmRadarMapper; |
| | | @Resource |
| | | ArdAlarmStealelecMapper ardAlarmStealelecMapper; |
| | | private ArdAlarmStealelecMapper ardAlarmStealelecMapper; |
| | | @Resource |
| | | ArdAlarmTubeMapper ardAlarmTubeMapper; |
| | | private ArdAlarmTubeMapper ardAlarmTubeMapper; |
| | | @Resource |
| | | ArdAlarmCameraMapper ardAlarmCameraMapper; |
| | | private ArdAlarmCameraMapper ardAlarmCameraMapper; |
| | | @Resource |
| | | ArdTubesMapper ardTubesMapper; |
| | | private ArdTubesMapper ardTubesMapper; |
| | | @Resource |
| | | ArdAlarmpointsWellMapper ardAlarmpointsWellMapper; |
| | | private ArdAlarmpointsWellMapper ardAlarmpointsWellMapper; |
| | | @Resource |
| | | ArdTubesDetailsMapper ardTubesDetailsMapper; |
| | | private ArdTubesDetailsMapper ardTubesDetailsMapper; |
| | | @Resource |
| | | private ISysConfigService configService; |
| | | @Resource |
| | |
| | | * @ä¿®æ¹äººåå
¶å®ä¿¡æ¯ |
| | | */ |
| | | @Override |
| | | @Async("alarmExecutor") |
| | | // @Async("alarmExecutor") |
| | | public void receiveAlarm(String topic, String message) { |
| | | try { |
| | | switch (topic) { |
| | |
| | | int aas = ardAlarmStealelecMapper.insertArdAlarmStealelec(ardAlarmStealelec); |
| | | if (aas > 0) { |
| | | log.info("stealelecå
¥åºæåï¼" + ardAlarmStealelec); |
| | | ArdAlarmpointsWell well = ardAlarmpointsWellMapper.selectArdAlarmpointsWellByWellId(ardAlarmStealelec.getDescribe()); |
| | | if (well != null) { |
| | | ardAlarmStealelec.setLongitude(well.getLongitude()); |
| | | ardAlarmStealelec.setLatitude(well.getLatitude()); |
| | | ardAlarmStealelec.setAltitude(well.getAltitude()); |
| | | //å¼å¯¼å½å |
| | | 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()}); |
| | | boolean res = guideCamera(cmd); |
| | | if (res) { |
| | | String url = alarmToRecord(cmd); |
| | | if (StringUtils.isNotEmpty(url)) { |
| | | //æ´æ°å½å |
| | | ardAlarmStealelec.setRecordUrl(url); |
| | | ardAlarmStealelecMapper.updateArdAlarmStealelec(ardAlarmStealelec); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | //endregion |
| | | break; |
| | |
| | | int aat = ardAlarmTubeMapper.insertArdAlarmTube(ardAlarmTube); |
| | | if (aat > 0) { |
| | | log.debug("tubeå
¥åºæåï¼" + ardAlarmTube); |
| | | //å¼å¯¼å½å |
| | | CameraCmd cmd = new CameraCmd(); |
| | | cmd.setRecordBucketName("record"); |
| | | cmd.setRecordObjectName("tube"); |
| | | cmd.setOperator("sys_tube_leak"); |
| | | cmd.setExpired(30); |
| | | cmd.setTargetPosition(new double[]{ardAlarmTube.getLongitude(), ardAlarmTube.getLatitude(), ardAlarmTube.getAltitude()}); |
| | | boolean res = guideCamera(cmd); |
| | | if (res) { |
| | | String url = alarmToRecord(cmd); |
| | | if (StringUtils.isNotEmpty(url)) { |
| | | //æ´æ°å½å |
| | | ardAlarmTube.setRecordUrl(url); |
| | | ardAlarmTubeMapper.updateArdAlarmTube(ardAlarmTube); |
| | | } |
| | | String nearbyCamera = getNearbyCamera(new double[]{ardAlarmTube.getLongitude(), ardAlarmTube.getLatitude()}); |
| | | if(StringUtils.isNotEmpty(nearbyCamera)) { |
| | | addTaskQueue(nearbyCamera, ardAlarmTube.getId(), "sys_tube_leak", ardAlarmTube.getAlarmTime(), 1); |
| | | } |
| | | } |
| | | //endregion |
| | |
| | | //region å¤çéç¨å
çµæ¥è¦ |
| | | ArdAlarmCamera ardAlarmCamera = JSONObject.parseObject(message, ArdAlarmCamera.class); |
| | | ardAlarmCamera.setId(IdUtils.simpleUUID()); |
| | | |
| | | int aac = ardAlarmCameraMapper.insertArdAlarmCamera(ardAlarmCamera); |
| | | if (aac > 0) { |
| | | log.debug("cameraå
¥åºæåï¼" + ardAlarmCamera); |
| | | //å¼å¯¼å½å |
| | | CameraCmd cmd = new CameraCmd(); |
| | | cmd.setRecordBucketName("record"); |
| | | cmd.setRecordObjectName("camera"); |
| | | cmd.setOperator("sys_camera"); |
| | | cmd.setExpired(30); |
| | | cmd.setTargetPosition(new double[]{ardAlarmCamera.getLongitude(), ardAlarmCamera.getLatitude()}); |
| | | boolean res = guideCamera(cmd); |
| | | if (res) { |
| | | String url = alarmToRecord(cmd); |
| | | if (StringUtils.isNotEmpty(url)) { |
| | | //æ´æ°å½å |
| | | ardAlarmCamera.setRecordUrl(url); |
| | | ardAlarmCameraMapper.updateArdAlarmCamera(ardAlarmCamera); |
| | | } |
| | | String nearbyCamera = getNearbyCamera(new double[]{ardAlarmCamera.getLongitude(), ardAlarmCamera.getLatitude()}); |
| | | if(StringUtils.isNotEmpty(nearbyCamera)) { |
| | | addTaskQueue(nearbyCamera, ardAlarmCamera.getId(), "sys_camera", ardAlarmCamera.getAlarmTime(), 1); |
| | | } |
| | | //å¼å¯¼å½å |
| | | // CameraCmd cmd = new CameraCmd(); |
| | | // cmd.setRecordBucketName("record"); |
| | | // cmd.setRecordObjectName("camera"); |
| | | // cmd.setOperator("sys_camera"); |
| | | // cmd.setExpired(30); |
| | | // cmd.setTargetPosition(new double[]{ardAlarmCamera.getLongitude(), ardAlarmCamera.getLatitude()}); |
| | | // boolean res = guideCamera(cmd); |
| | | // if (res) { |
| | | // String url = alarmToRecord(cmd); |
| | | // if (StringUtils.isNotEmpty(url)) { |
| | | // //æ´æ°å½å |
| | | // ardAlarmCamera.setRecordUrl(url); |
| | | // ardAlarmCameraMapper.updateArdAlarmCamera(ardAlarmCamera); |
| | | // } |
| | | // } |
| | | } |
| | | //endregion |
| | | break; |
| | |
| | | //region å¤çé·è¾¾æ¥è¦ |
| | | RadarAlarmData radarAlarmData = JSONObject.parseObject(message, RadarAlarmData.class); |
| | | List<ArdAlarmRadar> ardAlarmRadars = radarAlarmData.getArdAlarmRadars(); |
| | | Map<String, Object> readyGuide = new HashMap<>(); |
| | | for (ArdAlarmRadar ardAlarmRadar : ardAlarmRadars) { |
| | | ardAlarmRadar.setId(IdUtils.simpleUUID()); |
| | | String uuid = IdUtils.simpleUUID(); |
| | | ardAlarmRadar.setId(uuid); |
| | | ardAlarmRadar.setAlarmTime(radarAlarmData.getAlarmTime()); |
| | | int aar = ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar); |
| | | if (aar > 0) { |
| | | log.debug("radarå
¥åºæåï¼" + ardAlarmRadar); |
| | | String name = ardAlarmRadar.getName() + "(" + radarAlarmData.getRadarName() + ")"; |
| | | ardAlarmRadar.setName(name); |
| | | ardAlarmRadar.setCreateTime(new Date()); |
| | | String alarmType = ""; |
| | | switch (ardAlarmRadar.getAlarmType()) { |
| | | case "è¿å¨ç®æ æ£æµ": |
| | | alarmType = "sys_radar_move"; |
| | | break; |
| | | case "çæºæ£æµ": |
| | | alarmType = "sys_radar_fire"; |
| | | break; |
| | | } |
| | | readyGuide.put(ardAlarmRadar.getName(), ardAlarmRadar);//æ¯ä¸ªæ¥è¦ç¹ååºä¸æ¡æ¥è¦ |
| | | //夿å½åæ¥è¦ç¹5åéå
æ¯å¦å·²å¼å¯¼ |
| | | ardAlarmRadar.setGuideFlag(1); |
| | | ArdAlarmRadar AlarmRadar = ardAlarmRadarMapper.getArdAlarmRadarWithGuide(ardAlarmRadar); |
| | | if (StringUtils.isNull(AlarmRadar)) { |
| | | //5åéå
æªå¼å¯¼ç´æ¥å
¥åº |
| | | ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar); |
| | | //è·åé·è¾¾æå¨å¡ä¸ç大å
çµ |
| | | String cameraIdWithTower = ardAlarmRadarMapper.getCameraByRadar(radarAlarmData.getRadarId()); |
| | | if (StringUtils.isNotNull(cameraIdWithTower) && StringUtils.isNotEmpty(cameraIdWithTower)) { |
| | | //å
¥éåå¾
å¼å¯¼ |
| | | addTaskQueue(cameraIdWithTower, uuid, alarmType, ardAlarmRadar.getAlarmTime(), 1); |
| | | } |
| | | } else { |
| | | //5åéå
æå¼å¯¼ |
| | | ardAlarmRadar.setGuideFlag(0); |
| | | int count = ardAlarmRadarMapper.getArdAlarmRadarWithNotGuide(ardAlarmRadar, AlarmRadar.getCreateTime()); |
| | | if (count >= 3) { |
| | | //æªå¼å¯¼è¶
è¿3次ï¼ç´æ¥å
¥åºå
¥é |
| | | //5åéå
æªå¼å¯¼ç´æ¥å
¥åº |
| | | ardAlarmRadar.setGuideFlag(1); |
| | | ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar); |
| | | //å
¥éåå¾
å¼å¯¼ |
| | | //è·åé·è¾¾æå¨å¡ä¸ç大å
çµ |
| | | String cameraIdWithTower = ardAlarmRadarMapper.getCameraByRadar(radarAlarmData.getRadarId()); |
| | | if (StringUtils.isNotNull(cameraIdWithTower) && StringUtils.isNotEmpty(cameraIdWithTower)) { |
| | | //妿é·è¾¾å¡ä¸æå
çµ |
| | | addTaskQueue(cameraIdWithTower, uuid, alarmType, ardAlarmRadar.getAlarmTime(), count); |
| | | } |
| | | } else { |
| | | //æªå¼å¯¼æªè¶
è¿3次ï¼ç´æ¥å
¥åº |
| | | ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | //è·åå
´è¶£ç¹å
³èç大å
çµ |
| | | // ArdAlarmpointsWell well=new ArdAlarmpointsWell(); |
| | | // well.setWellId(ardAlarmRadar.getName()); |
| | | // List<ArdAlarmpointsWell> ardAlarmpointsWells = ardAlarmpointsWellMapper.selectArdAlarmpointsWellList(well); |
| | | // if(ardAlarmpointsWells!=null&&ardAlarmpointsWells.size()>0) |
| | | // { |
| | | // String cameraIdWithWell = ardAlarmpointsWells.get(0).getCameraId(); |
| | | // } |
| | | |
| | | } |
| | | //è·åæ¯ä¸ªæ¥è¦ç¹å
³èçç¸æº |
| | | |
| | | //å
æ¾æ¥è¦é·è¾¾å¡ä¸çç¸æº |
| | | CameraCmd cmd = new CameraCmd(); |
| | | cmd.setCameraId("1"); |
| | | cmd.setChannelNum(1); |
| | | boolean b = guideCamera(cmd); |
| | | |
| | | //åæ¾æ¥è¦ç¹å
³èçç¸æº |
| | | cmd.setCameraId("2"); |
| | | cmd.setChannelNum(1); |
| | | boolean b1 = guideCamera(cmd); |
| | | |
| | | printPriorityQueue(); |
| | | //endregion |
| | | break; |
| | | } |
| | | printPriorityQueue(); |
| | | } catch (Exception ex) { |
| | | log.error("æ¥æ¶æ¥è¦å¼å¸¸:" + ex.getMessage()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å¼å¯¼ä»»å¡å
¥éæ¹æ³ |
| | | */ |
| | | private void addTaskQueue(String cameraId, String alarmId, String alarmType, Date alarmTime, Integer num) { |
| | | |
| | | GuideTask guideTask = new GuideTask(); |
| | | guideTask.setCameraId(cameraId); |
| | | guideTask.setAlarmId(alarmId); |
| | | SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | guideTask.setAlarmTime(fmt.format(alarmTime)); |
| | | Integer priority = CamPriority.priorityMap.get(alarmType); |
| | | guideTask.setPriority(priority); |
| | | guideTask.setNum(num); |
| | | |
| | | PriorityQueue<GuideTask> priorityQueue = GuidePriorityQueue.cameraQueueMap.get(guideTask.getCameraId()); |
| | | priorityQueue.add(guideTask); |
| | | } |
| | | |
| | | /** |
| | | * æå°éå |
| | | */ |
| | | private void printPriorityQueue() { |
| | | for (String cameraId : GuidePriorityQueue.cameraQueueMap.keySet()) { |
| | | log.info("cameraId" + cameraId); |
| | | PriorityQueue<GuideTask> priorityQueue = GuidePriorityQueue.cameraQueueMap.get(cameraId); |
| | | for (GuideTask task : priorityQueue) { |
| | | log.info("alarmId:" + task.getAlarmId() + " alarmTime:" + task.getAlarmTime() + " priority:" + task.getPriority() + " num:" + task.getNum() + " cameraId:" + task.getCameraId()); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ¥æ¾éè¿å¼å¯æ¥è¦å¼å¯¼åè½å
çµ |
| | | */ |
| | | private String getNearbyCamera(double[] targetPosition) { |
| | | String minDistanceCameraId = ""; |
| | | //è·åææå¤§å
çµ |
| | | List<ArdCameras> ardCamerasList = ardCamerasMapper.selectArdCamerasList(new ArdCameras("1")); |
| | | //ç»è®¡ææå¤§å
çµå¯è§èå´å
䏿¥è¦ç¹çè·ç¦» |
| | | Map<String, Double> distanceMap = new HashMap<>(); |
| | | Map<String, Integer> guideMap = new HashMap<>(); |
| | | for (ArdCameras camera : ardCamerasList) { |
| | | double[] camPosition = new double[]{camera.getLongitude(), camera.getLatitude()}; |
| | | double distance = GisTool.getDistance(targetPosition, camPosition); |
| | | if (distance != 0.0 && distance <= camera.getCamMaxVisibleDistance()) { |
| | | distanceMap.put(camera.getId(), distance); |
| | | if (StringUtils.isNull(camera.getCamAlarmGuideEnable())) { |
| | | camera.setCamAlarmGuideEnable(0); |
| | | } |
| | | guideMap.put(camera.getId(), camera.getCamAlarmGuideEnable()); |
| | | } |
| | | } |
| | | if (distanceMap.size() > 0) { |
| | | log.debug("å°è¯æ¥æ¾æè¿å
çµ"); |
| | | //è·åè·ç¦»åå
¸ä¸æè¿çä¸ä¸ªç¸æºID |
| | | minDistanceCameraId = ArdTool.getKeyByMinValue(distanceMap); |
| | | log.debug("æ¥æ¾å°æè¿å
çµ:" + minDistanceCameraId); |
| | | if (guideMap.get(minDistanceCameraId).equals(0)) { |
| | | log.debug("该å
çµæªå¼å¯æ¥è¦å¼å¯¼"); |
| | | return " "; |
| | | } |
| | | } |
| | | return minDistanceCameraId; |
| | | } |
| | | |
| | | /** |
| | |
| | | private boolean guideCamera(CameraCmd cmd) { |
| | | try { |
| | | String dayNightTime = redisCache.getCacheObject("sys_config:dayNightTime"); |
| | | //è·åææå¤§å
çµ |
| | | List<ArdCameras> ardCamerasList = ardCamerasMapper.selectArdCamerasList(new ArdCameras("1")); |
| | | //ç»è®¡ææå¤§å
çµå¯è§èå´å
䏿¥è¦ç¹çè·ç¦» |
| | | Map<String, Double> distanceMap = new HashMap<>(); |
| | | Map<String, Integer> guideMap = 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 (StringUtils.isNull(camera.getCamAlarmGuideEnable())) { |
| | | camera.setCamAlarmGuideEnable(0); |
| | | } |
| | | guideMap.put(camera.getId(), camera.getCamAlarmGuideEnable()); |
| | | } |
| | | } |
| | | if (distanceMap.size() > 0) { |
| | | log.debug("å°è¯æ¥æ¾æè¿å
çµ"); |
| | | //è·åè·ç¦»åå
¸ä¸æè¿çä¸ä¸ªç¸æºID |
| | | String minDistanceCameraId = ArdTool.getKeyByMinValue(distanceMap); |
| | | log.debug("æ¥æ¾å°æè¿å
çµ:" + minDistanceCameraId + "ï¼å°è¯å¼å¯¼"); |
| | | if (guideMap.get(minDistanceCameraId).equals(0)) { |
| | | log.debug("该å
çµæªå¼å¯æ¥è¦å¼å¯¼"); |
| | | return false; |
| | | } |
| | | String nearbyCamera = getNearbyCamera(cmd.getTargetPosition()); |
| | | if (StringUtils.isNotEmpty(nearbyCamera)) { |
| | | //å¼å¯¼å
çµ |
| | | cmd.setCameraId(minDistanceCameraId); |
| | | cmd.setCameraId(nearbyCamera); |
| | | cmd.setChannelNum(ArdTool.getChannelBydayNightTime(dayNightTime)); |
| | | boolean guideRes = hikClientService.guideTargetPosition(cmd); |
| | | return guideRes; |
| | | |
| | | } else { |
| | | log.debug("æªæ¥æ¾å°æè¿å
çµ"); |
| | | return false; |
| | | } |
| | | } catch (Exception ex) { |
| | | } catch ( |
| | | Exception ex) { |
| | | log.error("å¼å¯¼å¼å¸¸:" + ex.getMessage()); |
| | | return false; |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |