From a38cb5bb3898f8996321df8f8d537ea18f4af71f Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期五, 30 六月 2023 10:19:11 +0800 Subject: [PATCH] 优化 --- ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuideTask.java | 28 +++++++ ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java | 68 +++++++---------- ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SdkTask.java | 10 + ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueManager.java | 34 ++++++-- ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java | 76 ++++++++++++++++-- ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/domain/ArdAlarmRadar.java | 9 ++ 6 files changed, 163 insertions(+), 62 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuideTask.java b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuideTask.java index 7636988..25f1db5 100644 --- a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuideTask.java +++ b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuideTask.java @@ -16,9 +16,37 @@ @AllArgsConstructor public class GuideTask { + /** + * 鐩告満ID + */ String cameraId; + /** + * 鐩告満閫氶亾 + */ + Integer chanNum; + /** + * 鎶ヨID + */ String alarmId; + /** + * 鎶ヨ绫诲瀷 + */ + String alarmType; + /** + * 鎶ヨ浼樺厛绾� + */ Integer priority; + /** + * 鎶ヨ鏃堕棿 + */ String alarmTime; + /** + * 鎶ヨ娆℃暟 + */ Integer num; + /** + * 褰曞儚瀛樺偍浣嶇疆 + */ + Integer recordSn; + } diff --git a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java index 1a0e990..b90f567 100644 --- a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java +++ b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java @@ -344,7 +344,7 @@ log.debug("tube鍏ュ簱鎴愬姛锛�" + ardAlarmTube); String nearbyCamera = getNearbyCamera(new double[]{ardAlarmTube.getLongitude(), ardAlarmTube.getLatitude()}); if (StringUtils.isNotEmpty(nearbyCamera)) { - messagesEnqueued(nearbyCamera, ardAlarmTube.getId(), "sys_tube_leak", ardAlarmTube.getAlarmTime(), 1); + messagesEnqueued(nearbyCamera, ardAlarmTube.getId(), "sys_tube_leak", ardAlarmTube.getAlarmTime(), 1,1); } } //endregion @@ -357,26 +357,6 @@ int aac = ardAlarmCameraMapper.insertArdAlarmCamera(ardAlarmCamera); if (aac > 0) { log.debug("camera鍏ュ簱鎴愬姛锛�" + ardAlarmCamera); - String nearbyCamera = getNearbyCamera(new double[]{ardAlarmCamera.getLongitude(), ardAlarmCamera.getLatitude()}); - if (StringUtils.isNotEmpty(nearbyCamera)) { - messagesEnqueued(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; @@ -410,41 +390,36 @@ String cameraIdWithTower = ardAlarmRadarMapper.getCameraByRadar(radarAlarmData.getRadarId()); if (StringUtils.isNotNull(cameraIdWithTower) && StringUtils.isNotEmpty(cameraIdWithTower)) { //鍏ラ槦鍒楀緟寮曞 - messagesEnqueued(cameraIdWithTower, uuid, alarmType, ardAlarmRadar.getAlarmTime(), 1); + messagesEnqueued(cameraIdWithTower, uuid, alarmType, ardAlarmRadar.getAlarmTime(), 1,1); } } else { //5鍒嗛挓鍐呮湁寮曞 ardAlarmRadar.setGuideFlag(0); int count = ardAlarmRadarMapper.getArdAlarmRadarWithNotGuide(ardAlarmRadar, AlarmRadar.getCreateTime()); + //鏈紩瀵艰秴杩�3娆★紝鐩存帴鍏ュ簱鍏ラ槦 if (count >= 3) { - //鏈紩瀵艰秴杩�3娆★紝鐩存帴鍏ュ簱鍏ラ槦 - //5鍒嗛挓鍐呮湭寮曞鐩存帴鍏ュ簱 ardAlarmRadar.setGuideFlag(1); ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar); - //鍏ラ槦鍒楀緟寮曞 + //鑾峰彇闆疯揪鎵�鍦ㄥ涓婄殑澶у厜鐢� String cameraIdWithTower = ardAlarmRadarMapper.getCameraByRadar(radarAlarmData.getRadarId()); if (StringUtils.isNotNull(cameraIdWithTower) && StringUtils.isNotEmpty(cameraIdWithTower)) { //濡傛灉闆疯揪濉斾笂鏈夊厜鐢� - messagesEnqueued(cameraIdWithTower, uuid, alarmType, ardAlarmRadar.getAlarmTime(), count); + messagesEnqueued(cameraIdWithTower, uuid, alarmType, ardAlarmRadar.getAlarmTime(), count,1); + } + //鑾峰彇鎶ヨ鐐瑰叧鑱旂殑澶у厜鐢� + ArdAlarmpointsWell ardAlarmpointsWell = ardAlarmpointsWellMapper.selectArdAlarmpointsWellByWellId(ardAlarmRadar.getName()); + if(StringUtils.isNotNull(ardAlarmpointsWell) && StringUtils.isNotEmpty(ardAlarmpointsWell.getCameraId())) + { + String cameraId = ardAlarmpointsWell.getCameraId(); + //濡傛灉鎶ヨ鐐瑰叧鑱斾簡鍏夌數 + messagesEnqueued(cameraId, uuid, alarmType, ardAlarmRadar.getAlarmTime(), count,1); } } 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(); -// } - } //endregion break; @@ -459,16 +434,29 @@ /** * 娑堟伅鍏ラ槦 */ - private void messagesEnqueued (String cameraId, String alarmId, String alarmType, Date alarmTime, Integer num) { + private void messagesEnqueued(String cameraId, String alarmId, String alarmType, Date alarmTime, Integer num, Integer recordSn) { + GuideTask guideTask = new GuideTask(); + /*閰嶇疆鐩告満ID*/ guideTask.setCameraId(cameraId); + /*鏍规嵁閰嶇疆鏃堕棿閰嶇疆閫氶亾*/ + String dayNightTime = redisCache.getCacheObject("sys_config:dayNightTime"); + Integer channel = ArdTool.getChannelBydayNightTime(dayNightTime); + guideTask.setChanNum(channel); + /*閰嶇疆鎶ヨID*/ 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); - queueManager.addTaskToQueue(cameraId,guideTask); + /*閰嶇疆褰曞儚瀛樺偍浣嶇疆*/ + guideTask.setRecordSn(recordSn); + /*娑堟伅鍏ラ槦*/ + queueManager.addTaskToQueue(cameraId, guideTask); // PriorityBlockingQueue<GuideTask> priorityBlockingQueue = GuidePriorityQueue.cameraQueueMap.get(guideTask.getCameraId()); // priorityBlockingQueue.add(guideTask); } diff --git a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueManager.java b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueManager.java index 0703126..f9b3861 100644 --- a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueManager.java +++ b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueManager.java @@ -13,7 +13,7 @@ /** * @ClassName QueueManager - * @Description: + * @Description: 闃熷垪绠$悊 * @Author 鍒樿嫃涔� * @Date 2023/6/29 21:09 * @Version 1.0 @@ -26,6 +26,7 @@ private QueueTaskExecutor taskExecutor; private Map<String, TaskThread> threadMap = new ConcurrentHashMap<>(); + /*鍐呴儴闈欐�佺被*/ private static class TaskThread { private Thread thread; private GuideTask currentTask; @@ -48,36 +49,49 @@ } } - public void addTaskToQueue(String queueName, GuideTask task) { - PriorityBlockingQueue<GuideTask> guideTaskQueue = GuidePriorityQueue.cameraQueueMap.get(queueName); + /** + * 寮曞浠诲姟鍏ラ槦 + * 鍒樿嫃涔� + * 2023/6/30 8:57 + */ + public void addTaskToQueue(String cameraId, GuideTask task) { + /*閫氳繃鐩告満ID鑾峰彇寮曞闃熷垪锛屽苟灏嗗紩瀵间换鍔″姞鍏ラ槦鍒�*/ + PriorityBlockingQueue<GuideTask> guideTaskQueue = GuidePriorityQueue.cameraQueueMap.get(cameraId); guideTaskQueue.add(task); - TaskThread currentTaskThread = threadMap.get(queueName); + /*鑾峰彇璇ョ浉鏈虹殑褰撳墠鎵ц绾跨▼*/ + TaskThread currentTaskThread = threadMap.get(cameraId); + //濡傛灉闃熷垪褰撳墠绾跨▼姝e湪杩愯锛岃嫢鍏ラ槦浠诲姟浼樺厛绾уぇ浜庡綋鍓嶄换鍔′紭鍏堢骇锛屽垯缁堟褰撳墠绾跨▼ if (currentTaskThread != null && task.getPriority() > currentTaskThread.getCurrentTask().getPriority()) { currentTaskThread.getThread().interrupt(); } - - // Start a new thread if no thread is currently running for the queue + //濡傛灉闃熷垪褰撳墠娌℃湁绾跨▼姝e湪杩愯锛屽垯鍚姩鏂扮嚎绋� if (currentTaskThread == null || !currentTaskThread.getThread().isAlive()) { - Thread newThread = createThread(queueName, guideTaskQueue); - threadMap.put(queueName, new TaskThread(newThread, task)); + Thread newThread = createThread(cameraId, guideTaskQueue); + threadMap.put(cameraId, new TaskThread(newThread, task)); newThread.start(); } } + /** + * 鍒涘缓绾跨▼ + * 鍒樿嫃涔� + * 2023/6/30 9:04 + */ private Thread createThread(String queueName, PriorityBlockingQueue<GuideTask> queue) { + return new Thread(() -> { while (!Thread.currentThread().isInterrupted()) { try { GuideTask task = queue.take(); taskExecutor.processTask(task); GuidePriorityQueue.printPriorityQueue(); - // Update the current task for the thread + // 鏇存柊绾跨▼鐨勫綋鍓嶄换鍔� TaskThread currentTaskThread = threadMap.get(queueName); if (currentTaskThread != null) { currentTaskThread.setCurrentTask(task); } } catch (InterruptedException e) { - // Thread interrupted, exit the loop + //绾跨▼涓柇锛岄��鍑哄惊鐜� Thread.currentThread().interrupt(); } } diff --git a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java index 553da24..3f43366 100644 --- a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java +++ b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java @@ -1,25 +1,83 @@ package com.ruoyi.alarm.globalAlarm.service.impl; +import com.ruoyi.alarm.globalAlarm.domain.GuideTask; +import com.ruoyi.alarm.radarAlarm.domain.ArdAlarmRadar; +import com.ruoyi.alarm.radarAlarm.service.IArdAlarmRadarService; +import com.ruoyi.alarm.tubeAlarm.domain.ArdAlarmTube; +import com.ruoyi.alarm.tubeAlarm.service.IArdAlarmTubeService; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.device.camera.domain.CameraCmd; +import com.ruoyi.device.hiksdk.service.IHikClientService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + /** * @ClassName QueueTaskExecutor - * @Description: + * @Description: 闃熷垪浠诲姟鎵ц鍣� * @Author 鍒樿嫃涔� * @Date 2023/6/29 21:10 * @Version 1.0 */ -import com.ruoyi.alarm.globalAlarm.domain.GuideTask; -import org.springframework.stereotype.Component; - @Component +@Slf4j public class QueueTaskExecutor { + @Resource + IHikClientService hikClientService; + @Resource + IArdAlarmTubeService ardAlarmTubeService; + @Resource + IArdAlarmRadarService ardAlarmRadarService; + public void processTask(GuideTask guideTask) { - System.out.println("Executing task: " + guideTask.getAlarmId()); try { - Thread.sleep(30000); - } catch (InterruptedException e) { - e.printStackTrace(); + CameraCmd cmd = new CameraCmd(); + cmd.setCameraId(guideTask.getCameraId()); + cmd.setChannelNum(guideTask.getNum()); + boolean guideRes = hikClientService.guideTargetPosition(cmd); + if (guideRes) { + hikClientService.controlLock(cmd);//涓婇攣 + cmd.setEnable(true);//寮�濮嬪綍鍍� + hikClientService.recordToMinio(cmd);//寮�濮嬪綍鍍� + Thread.sleep(30000); + cmd.setEnable(false);//鍋滄褰曞儚 + cmd.setUploadMinio(true);//涓婁紶minio + String url = hikClientService.recordToMinio(cmd);//鍋滄褰曞儚杩斿洖url + if (StringUtils.isNotEmpty(url)) { + switch (guideTask.getAlarmType()) { + case "sys_tube_leak": + ArdAlarmTube ardAlarmTube = new ArdAlarmTube(); + ardAlarmTube.setId(guideTask.getAlarmId()); + ardAlarmTube.setRecordUrl(url); + ardAlarmTubeService.updateArdAlarmTube(ardAlarmTube); + break; + case "sys_radar_move": + ArdAlarmRadar ardAlarmRadar = new ArdAlarmRadar(); + ardAlarmRadar.setId(guideTask.getAlarmId()); + if (guideTask.getRecordSn().equals(1)) { + ardAlarmRadar.setRecordUrl1(url); + } else { + ardAlarmRadar.setRecordUrl2(url); + } + ardAlarmRadarService.updateArdAlarmRadar(ardAlarmRadar); + break; + case "sys_radar_fire": + ardAlarmRadar = new ArdAlarmRadar(); + ardAlarmRadar.setId(guideTask.getAlarmId()); + if (guideTask.getRecordSn().equals(1)) { + ardAlarmRadar.setRecordUrl1(url); + } else { + ardAlarmRadar.setRecordUrl2(url); + } + ardAlarmRadarService.updateArdAlarmRadar(ardAlarmRadar); + break; + } + } + } + } catch (Exception ex) { + log.info("鑷姩寮曞寮傚父:" + ex.getMessage()); } - System.out.println("finished task: " + guideTask.getAlarmId()); } } diff --git a/ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/domain/ArdAlarmRadar.java b/ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/domain/ArdAlarmRadar.java index 2a92045..b58c0fb 100644 --- a/ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/domain/ArdAlarmRadar.java +++ b/ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/domain/ArdAlarmRadar.java @@ -73,4 +73,13 @@ * 寮曞鏍囪 */ private Integer guideFlag; + /** + * 褰曞儚url1 + */ + private String recordUrl1; + /** + * 褰曞儚url2 + */ + private String recordUrl2; + } diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SdkTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SdkTask.java index 674c5bd..7a93710 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SdkTask.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SdkTask.java @@ -6,6 +6,7 @@ import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.service.IArdCamerasService; +import com.ruoyi.device.hiksdk.common.GlobalVariable; import com.ruoyi.device.hiksdk.service.IHikClientService; import org.springframework.stereotype.Component; @@ -46,14 +47,17 @@ CameraCmd cmd = new CameraCmd(); cmd.setCameraId(camera.getId()); cmd.setChannelNum(1); - Map<String, Object> ptz = hikClientService.getPtz(cmd); - if(StringUtils.isNull(ptz)) + if (!GlobalVariable.loginMap.containsKey(camera.getId()))//鍙帹閫佺櫥褰曟垚鍔熺殑鐩告満 { + continue; + } + Map<String, Object> ptz = hikClientService.getPtz(cmd); + if (StringUtils.isNull(ptz)) { continue; } if (ptz.size() > 0) { ptz.put("cameraId", camera.getId()); - ptz.put("operatorExpired",camera.getOperatorExpired()); + ptz.put("operatorExpired", camera.getOperatorExpired()); list.add(ptz); } } -- Gitblit v1.9.3