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/service/impl/GlobalAlarmServiceImpl.java | 280 +++++++++++++++++++++++++------------------------------ 1 files changed, 128 insertions(+), 152 deletions(-) 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 2fa6745..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 @@ -43,6 +43,7 @@ import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.PriorityBlockingQueue; import java.util.stream.Collectors; @@ -56,6 +57,7 @@ @Service @Slf4j(topic = "mqtt") public class GlobalAlarmServiceImpl implements IGlobalAlarmService { + //region 渚濊禆娉ㄥ叆 @Resource private ArdAlarmRadarMapper ardAlarmRadarMapper; @Resource @@ -78,6 +80,36 @@ private IHikClientService hikClientService; @Resource private RedisCache redisCache; + @Resource + private QueueManager queueManager; + //endregion + + /** + * @鎻忚堪 鏌ヨ鎵�鏈夋姤璀︾殑褰撳墠鏁伴噺 + * @鍙傛暟 [] + * @杩斿洖鍊� java.util.Map<java.lang.String, java.lang.Integer> + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/6/13 16:30 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + @Override + public Map<String, Object> selectAlarmLogsCount() { + Map<String, Object> map = new HashMap<>(); + Map<String, Integer> countMap = new HashMap<>(); + String refreshTime = configService.selectConfigByKey("refreshTime"); + int count1001 = ardAlarmStealelecMapper.selectCountByStartTime(refreshTime); + countMap.put("1001", count1001); + int count1002 = ardAlarmCameraMapper.selectCountByAlarmTime(refreshTime); + countMap.put("1002", count1002); + int count1003 = ardAlarmRadarMapper.selectCountByAlarmTime(refreshTime, "杩愬姩鐩爣妫�娴�"); + countMap.put("1003", count1003); + int count1004 = ardAlarmRadarMapper.selectCountByAlarmTime(refreshTime, "鐑簮妫�娴�"); + countMap.put("1004", count1004); + int count1014 = ardAlarmTubeMapper.selectCountByAlarmTime(refreshTime); + countMap.put("1014", count1014); + map.put("20000", countMap); + return map; + } /** * @鎻忚堪 鎸夋潯浠舵煡璇㈡姤璀� @@ -174,6 +206,61 @@ } /** + * @鎻忚堪 鍘嗗彶鎶ヨ鏌ヨ + * @鍙傛暟 [command, beginTime, endTime, pageNum, pageSize] + * @杩斿洖鍊� java.lang.Object + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/6/28 13:30 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + @Override + public Object selectAlarmList(Integer command, String beginTime, String endTime, Integer pageNum, Integer pageSize) { + Map<String, Object> params = new HashMap<>(); + params.put("beginTime", beginTime); + params.put("endTime", endTime); + switch (command) { + case 1001: + ArdAlarmStealelec aas = new ArdAlarmStealelec(); + aas.setParams(params); + aas.setPageNum(pageNum); + aas.setPageSize(pageSize); + List<ArdAlarmStealelec> ardAlarmStealelecs = ardAlarmStealelecMapper.selectArdAlarmStealelecList(aas); + return ardAlarmStealelecs; + case 1002: + ArdAlarmCamera aac = new ArdAlarmCamera(); + aac.setParams(params); + aac.setPageNum(pageNum); + aac.setPageSize(pageSize); + List<ArdAlarmCamera> ardAlarmCameras = ardAlarmCameraMapper.selectArdAlarmCameraList(aac); + return ardAlarmCameras; + case 1003: + ArdAlarmRadar aar = new ArdAlarmRadar(); + aar.setParams(params); + aar.setPageNum(pageNum); + aar.setPageSize(pageSize); + aar.setAlarmType("杩愬姩鐩爣妫�娴�"); + List<ArdAlarmRadar> ardAlarmRadar = ardAlarmRadarMapper.selectArdAlarmRadarList(aar); + return ardAlarmRadar; + case 1004: + ArdAlarmRadar aarr = new ArdAlarmRadar(); + aarr.setParams(params); + aarr.setPageNum(pageNum); + aarr.setPageSize(pageSize); + aarr.setAlarmType("鐑簮妫�娴�"); + List<ArdAlarmRadar> ardAlarmRadarr = ardAlarmRadarMapper.selectArdAlarmRadarList(aarr); + return ardAlarmRadarr; + case 1014: + ArdAlarmTube aat = new ArdAlarmTube(); + aat.setParams(params); + aat.setPageNum(pageNum); + aat.setPageSize(pageSize); + List<ArdAlarmTube> ardAlarmTubes = ardAlarmTubeMapper.selectArdAlarmTubeList(aat); + return ardAlarmTubes; + } + return null; + } + + /** * @鎻忚堪 鎸夋潯浠舵洿鏂版煡鐪嬫椂闂� * @鍙傛暟 [condition] * @杩斿洖鍊� java.lang.Object @@ -215,21 +302,19 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 */ @Override -// @Async("alarmExecutor") + @Async("alarmExecutor") public void receiveAlarm(String topic, String message) { try { switch (topic) { case "stealelec": //region 澶勭悊鐩楃數鎶ヨ ArdAlarmStealelec ardAlarmStealelec = JSONObject.parseObject(message, ArdAlarmStealelec.class); - - ArdAlarmStealelec existe = ardAlarmStealelecMapper.selectByPrimaryKey(ardAlarmStealelec.getId()); - if (StringUtils.isNotNull(existe)) { - return; - } - int aas = ardAlarmStealelecMapper.insertArdAlarmStealelec(ardAlarmStealelec); - if (aas > 0) { - log.info("stealelec鍏ュ簱鎴愬姛锛�" + ardAlarmStealelec); + ArdAlarmStealelec isExiste = ardAlarmStealelecMapper.selectByPrimaryKey(ardAlarmStealelec.getId()); + if (StringUtils.isNull(isExiste)) { + int aas = ardAlarmStealelecMapper.insertArdAlarmStealelec(ardAlarmStealelec); + if (aas > 0) { + log.info("stealelec鍏ュ簱鎴愬姛锛�" + ardAlarmStealelec); + } } //endregion break; @@ -258,8 +343,8 @@ if (aat > 0) { log.debug("tube鍏ュ簱鎴愬姛锛�" + ardAlarmTube); String nearbyCamera = getNearbyCamera(new double[]{ardAlarmTube.getLongitude(), ardAlarmTube.getLatitude()}); - if(StringUtils.isNotEmpty(nearbyCamera)) { - addTaskQueue(nearbyCamera, ardAlarmTube.getId(), "sys_tube_leak", ardAlarmTube.getAlarmTime(), 1); + if (StringUtils.isNotEmpty(nearbyCamera)) { + messagesEnqueued(nearbyCamera, ardAlarmTube.getId(), "sys_tube_leak", ardAlarmTube.getAlarmTime(), 1,1); } } //endregion @@ -272,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)) { - 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; @@ -325,82 +390,75 @@ String cameraIdWithTower = ardAlarmRadarMapper.getCameraByRadar(radarAlarmData.getRadarId()); if (StringUtils.isNotNull(cameraIdWithTower) && StringUtils.isNotEmpty(cameraIdWithTower)) { //鍏ラ槦鍒楀緟寮曞 - addTaskQueue(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)) { //濡傛灉闆疯揪濉斾笂鏈夊厜鐢� - addTaskQueue(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(); -// } - } - printPriorityQueue(); //endregion break; } - printPriorityQueue(); + GuidePriorityQueue.printPriorityQueue();//鎵撳嵃闃熷垪 } catch (Exception ex) { log.error("鎺ユ敹鎶ヨ寮傚父:" + ex.getMessage()); } } + /** - * 寮曞浠诲姟鍏ラ槦鏂规硶 + * 娑堟伅鍏ラ槦 */ - private void addTaskQueue(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); - - 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()); - } - - } + /*閰嶇疆褰曞儚瀛樺偍浣嶇疆*/ + guideTask.setRecordSn(recordSn); + /*娑堟伅鍏ラ槦*/ + queueManager.addTaskToQueue(cameraId, guideTask); +// PriorityBlockingQueue<GuideTask> priorityBlockingQueue = GuidePriorityQueue.cameraQueueMap.get(guideTask.getCameraId()); +// priorityBlockingQueue.add(guideTask); } /** @@ -475,7 +533,7 @@ * @鍒涘缓鏃堕棿 2023/6/28 16:33 * @淇敼浜哄拰鍏跺畠淇℃伅 */ - public String alarmToRecord(CameraCmd cmd) { + private String alarmToRecord(CameraCmd cmd) { String url = ""; try { log.debug("寮曞鎴愬姛锛屽皾璇曞綍鍍�"); @@ -497,88 +555,6 @@ log.error("褰曞儚寮傚父:" + ex.getMessage()); } return url; - } - - /** - * @鎻忚堪 鏌ヨ鎵�鏈夋姤璀︾殑褰撳墠鏁伴噺 - * @鍙傛暟 [] - * @杩斿洖鍊� java.util.Map<java.lang.String, java.lang.Integer> - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/6/13 16:30 - * @淇敼浜哄拰鍏跺畠淇℃伅 - */ - @Override - public Map<String, Object> selectAlarmLogsCount() { - Map<String, Object> map = new HashMap<>(); - Map<String, Integer> countMap = new HashMap<>(); - String refreshTime = configService.selectConfigByKey("refreshTime"); - int count1001 = ardAlarmStealelecMapper.selectCountByStartTime(refreshTime); - countMap.put("1001", count1001); - int count1002 = ardAlarmCameraMapper.selectCountByAlarmTime(refreshTime); - countMap.put("1002", count1002); - int count1003 = ardAlarmRadarMapper.selectCountByAlarmTime(refreshTime, "杩愬姩鐩爣妫�娴�"); - countMap.put("1003", count1003); - int count1004 = ardAlarmRadarMapper.selectCountByAlarmTime(refreshTime, "鐑簮妫�娴�"); - countMap.put("1004", count1004); - int count1014 = ardAlarmTubeMapper.selectCountByAlarmTime(refreshTime); - countMap.put("1014", count1014); - map.put("20000", countMap); - return map; - } - - /** - * @鎻忚堪 鍘嗗彶鎶ヨ鏌ヨ - * @鍙傛暟 [command, beginTime, endTime, pageNum, pageSize] - * @杩斿洖鍊� java.lang.Object - * @鍒涘缓浜� 鍒樿嫃涔� - * @鍒涘缓鏃堕棿 2023/6/28 13:30 - * @淇敼浜哄拰鍏跺畠淇℃伅 - */ - @Override - public Object selectAlarmList(Integer command, String beginTime, String endTime, Integer pageNum, Integer pageSize) { - Map<String, Object> params = new HashMap<>(); - params.put("beginTime", beginTime); - params.put("endTime", endTime); - switch (command) { - case 1001: - ArdAlarmStealelec aas = new ArdAlarmStealelec(); - aas.setParams(params); - aas.setPageNum(pageNum); - aas.setPageSize(pageSize); - List<ArdAlarmStealelec> ardAlarmStealelecs = ardAlarmStealelecMapper.selectArdAlarmStealelecList(aas); - return ardAlarmStealelecs; - case 1002: - ArdAlarmCamera aac = new ArdAlarmCamera(); - aac.setParams(params); - aac.setPageNum(pageNum); - aac.setPageSize(pageSize); - List<ArdAlarmCamera> ardAlarmCameras = ardAlarmCameraMapper.selectArdAlarmCameraList(aac); - return ardAlarmCameras; - case 1003: - ArdAlarmRadar aar = new ArdAlarmRadar(); - aar.setParams(params); - aar.setPageNum(pageNum); - aar.setPageSize(pageSize); - aar.setAlarmType("杩愬姩鐩爣妫�娴�"); - List<ArdAlarmRadar> ardAlarmRadar = ardAlarmRadarMapper.selectArdAlarmRadarList(aar); - return ardAlarmRadar; - case 1004: - ArdAlarmRadar aarr = new ArdAlarmRadar(); - aarr.setParams(params); - aarr.setPageNum(pageNum); - aarr.setPageSize(pageSize); - aarr.setAlarmType("鐑簮妫�娴�"); - List<ArdAlarmRadar> ardAlarmRadarr = ardAlarmRadarMapper.selectArdAlarmRadarList(aarr); - return ardAlarmRadarr; - case 1014: - ArdAlarmTube aat = new ArdAlarmTube(); - aat.setParams(params); - aat.setPageNum(pageNum); - aat.setPageSize(pageSize); - List<ArdAlarmTube> ardAlarmTubes = ardAlarmTubeMapper.selectArdAlarmTubeList(aat); - return ardAlarmTubes; - } - return null; } } -- Gitblit v1.9.3