From c74c2be7aeed29413e73073788150d9ef1d0d982 Mon Sep 17 00:00:00 2001 From: litao Date: Mon, 30 Oct 2023 11:00:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B6=88=E8=AD=A6=E6=8C=87=E4=BB=A4=E4=B8=8A?= =?UTF-8?q?=E6=8A=A5=E6=B5=B7=E4=BF=A1iot?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agent/service/HikAgentService.java | 2 +- .../AlarmInformationController.java | 4 +- .../controller/AppDataController.java | 35 ++++++-- .../springblade/hospital/hik/alarm/Alarm.java | 82 +++++++++++++++---- .../service/impl/CornJobServiceImpl.java | 2 +- 5 files changed, 97 insertions(+), 28 deletions(-) diff --git a/src/main/java/org/springblade/hospital/agent/service/HikAgentService.java b/src/main/java/org/springblade/hospital/agent/service/HikAgentService.java index e56a867..d5bbe20 100644 --- a/src/main/java/org/springblade/hospital/agent/service/HikAgentService.java +++ b/src/main/java/org/springblade/hospital/agent/service/HikAgentService.java @@ -401,7 +401,7 @@ public class HikAgentService extends AgentGrpc.AgentImplBase { // 消警 if (value == 1) { System.out.println("shebeikongzhi:zxtxj"); - result = Alarm.xiaojing(Alarm.macMap.get(spId[0]), Integer.parseInt(spId[spId.length - 1])); + result = Alarm.xiaojing(Alarm.macMap.get(spId[0]), Integer.parseInt(spId[spId.length - 1]), roadwaySyscode); } } System.out.println("result:" + result); diff --git a/src/main/java/org/springblade/hospital/controller/AlarmInformationController.java b/src/main/java/org/springblade/hospital/controller/AlarmInformationController.java index 2f2cf15..aea135d 100644 --- a/src/main/java/org/springblade/hospital/controller/AlarmInformationController.java +++ b/src/main/java/org/springblade/hospital/controller/AlarmInformationController.java @@ -72,7 +72,7 @@ public class AlarmInformationController extends BladeController { // Point point = new Gson().fromJson(JSON.toJSONString(params), Point.class); int status = Integer.parseInt(String.valueOf(params.get("pntTypeValue_"))); - byte[] byteValue = DataTrans.shortToBytesBigEndian((short)status); + byte[] byteValue = DataTrans.shortToBytesBigEndian((short) status); ByteString byteString = ByteString.copyFrom(byteValue); Point point = Point.newBuilder() .setData(byteString) @@ -136,7 +136,7 @@ public class AlarmInformationController extends BladeController { */ @PostMapping("/clear") public R clear(@RequestBody AlarmInformation alarmInformation) { - Alarm.xiaojing(alarmInformation.getHostSerialNumber(), alarmInformation.getSystemNum()); + Alarm.xiaojing(alarmInformation.getHostSerialNumber(), alarmInformation.getSystemNum(), alarmInformation.getDeviceId()); alarmInformation.setIsClear(1); return R.status(alarmInformationService.updateById(alarmInformation)); } diff --git a/src/main/java/org/springblade/hospital/controller/AppDataController.java b/src/main/java/org/springblade/hospital/controller/AppDataController.java index dccfe86..7096ff1 100644 --- a/src/main/java/org/springblade/hospital/controller/AppDataController.java +++ b/src/main/java/org/springblade/hospital/controller/AppDataController.java @@ -246,9 +246,9 @@ public class AppDataController extends BladeController { for (int i = 0; i < splitHost.length; i++) { String[] split = splitNum[i].split("_"); if (Alarm.zibufang(splitHost[i], Integer.parseInt(split[split.length - 1]))) { - status += "主机:" + splitHost[i] + "的子系统" + num + "布防成功!"; + status += "子系统:" + split[split.length - 2] + "_" + split[split.length - 1] + "布防成功!"; } else { - status += "主机:" + splitHost[i] + "的子系统" + num + "布防失败!"; + status += "子系统:" + split[split.length - 2] + "_" + split[split.length - 1] + "布防失败!"; } } return R.success(status); @@ -265,9 +265,9 @@ public class AppDataController extends BladeController { for (int i = 0; i < splitHost.length; i++) { String[] split = splitNum[i].split("_"); if (Alarm.zichefang(splitHost[i], Integer.parseInt(split[split.length - 1]))) { - status += "主机:" + splitHost[i] + "的子系统" + num + "撤防成功!"; + status += "子系统:" + split[split.length - 2] + "_" + split[split.length - 1] + "撤防成功!"; } else { - status += "主机:" + splitHost[i] + "的子系统" + num + "撤防失败!"; + status += "子系统:" + split[split.length - 2] + "_" + split[split.length - 1] + "撤防失败!"; } } return R.success(status); @@ -294,7 +294,18 @@ public class AppDataController extends BladeController { */ @PostMapping("/bypass") public R bypass(@RequestParam String hostSerialNumber, @RequestParam String num) { - return R.status(Alarm.fqpl(hostSerialNumber, Integer.parseInt(num) - 1)); + String[] splitHost = hostSerialNumber.split(","); + String[] splitNum = num.split(","); + String status = ""; + for (int i = 0; i < splitHost.length; i++) { + String[] split = splitNum[i].split("_"); + if (Alarm.fqpl(splitHost[i], Integer.parseInt(split[split.length - 1]) - 1)) { + status += "防区:" + split[split.length - 2] + "_" + split[split.length - 1] + "旁路成功!"; + } else { + status += "防区:" + split[split.length - 2] + "_" + split[split.length - 1] + "旁路失败!"; + } + } + return R.success(status); } /** @@ -302,8 +313,18 @@ public class AppDataController extends BladeController { */ @PostMapping("/unBypass") public R unBypass(@RequestParam String hostSerialNumber, @RequestParam String num) { - return R.status(Alarm.fqcxpl(hostSerialNumber, Integer.parseInt(num) - 1)); -// return R.status(Alarm.xiaojing(hostSerialNumber, Integer.parseInt(num) - 1)); + String[] splitHost = hostSerialNumber.split(","); + String[] splitNum = num.split(","); + String status = ""; + for (int i = 0; i < splitHost.length; i++) { + String[] split = splitNum[i].split("_"); + if (Alarm.fqcxpl(splitHost[i], Integer.parseInt(split[split.length - 1]) - 1)) { + status += "防区:" + split[split.length - 2] + "_" + split[split.length - 1] + "撤销旁路成功!"; + } else { + status += "防区:" + split[split.length - 2] + "_" + split[split.length - 1] + "撤销旁路失败!"; + } + } + return R.success(status); } @GetMapping("/coordinateToWGS84") diff --git a/src/main/java/org/springblade/hospital/hik/alarm/Alarm.java b/src/main/java/org/springblade/hospital/hik/alarm/Alarm.java index 3141af3..f8a3bc7 100644 --- a/src/main/java/org/springblade/hospital/hik/alarm/Alarm.java +++ b/src/main/java/org/springblade/hospital/hik/alarm/Alarm.java @@ -3,11 +3,16 @@ package org.springblade.hospital.hik.alarm; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.google.protobuf.ByteString; +import com.hisense.device.agent.grpc.Point; import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; import lombok.extern.slf4j.Slf4j; import org.apache.commons.httpclient.HttpClient; +import org.springblade.core.tool.utils.SpringUtil; +import org.springblade.hospital.agent.utils.DataTrans; +import org.springblade.hospital.agent.utils.QueueUtils; import org.springblade.hospital.hik.CommonMethod.osSelect; import org.springblade.hospital.hik.NetSDKDemo.HCNetSDK; import org.springblade.hospital.newalarm.communicationCom.HTTPClientUtil; @@ -21,6 +26,11 @@ import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Scanner; +import java.util.stream.Collectors; /** * @author AAA @@ -41,6 +51,7 @@ public class Alarm implements CommandLineRunner { public static Map ipMap; public static Map portMap; public static Map macMap; + private static QueueUtils queueUtils; public static ScheduledThreadPoolExecutor scheduled = new ScheduledThreadPoolExecutor(10); @@ -290,18 +301,66 @@ public class Alarm implements CommandLineRunner { /** * 消警 */ - public static boolean xiaojing(String hostSerialNumber, int num) { + public static boolean xiaojing(String hostSerialNumber, int num, String deviceId) { try { + if (queueUtils == null) { + queueUtils = SpringUtil.getBean(QueueUtils.class); + } String rzUrl = "http://" + ipMap.get(hostSerialNumber) + ":" + portMap.get(hostSerialNumber) + "/ISAPI/System/deviceInfo"; String renzheng = HTTPClientUtil.renzheng(rzUrl, HTTPClientUtil.client); if (renzheng.contains(hostSerialNumber)) { + // 消警信息上报海信iot平台 + // 子系统消警上报iot + ByteString sysId = ByteString.copyFrom(DataTrans.shortToBytesBigEndian((short) 1)); + Point sysPoint = Point.newBuilder() + .setData(sysId) + .setId(deviceId) + .setDevType(3) + .setPntType(11) + .build(); + queueUtils.saveQueueDataStatus(sysPoint); + + // 获取该报警主机全部防区状态信息 + String status = "http://" + ipMap.get(hostSerialNumber) + ":" + portMap.get(hostSerialNumber) + "/ISAPI/SecurityCP/status/zones?format=json"; + String statusData = HTTPClientUtil.doGet(status, HTTPClientUtil.client); + System.out.println("statusData:" + statusData); + // 解析状态信息 + Map statusMap = JSONObject.parseObject(statusData, Map.class); + + // 防区状态列表 + List zoneList = JSONObject.parseObject(statusMap.get("ZoneList").toString(), List.class); + + // 过滤只剩该子系统下正在报警的防区 + List zones = zoneList.stream().filter(zone -> (boolean) JSONObject.parseObject(zone.get("Zone").toString(), Map.class).get("alarm") && String.valueOf(num).equals(JSONObject.parseObject(zone.get("Zone").toString(), Map.class).get("id").toString())).collect(Collectors.toList()); + + System.out.println("zones数量:" + zones); + if (CollectionUtils.isNotEmpty(zones)) { + for (Map zoneMap : zones) { + Map zone = JSONObject.parseObject(zoneMap.get("Zone").toString(), Map.class); + + // 封装上报iot + String[] split = deviceId.split("_"); + byte[] byteValue = DataTrans.shortToBytesBigEndian((short) 0); + ByteString byteString = ByteString.copyFrom(byteValue); + Point point = Point.newBuilder() + .setData(byteString) + .setId(split[0] + "_sector_" + (Integer.parseInt(zone.get("id").toString()) + 1)) + .setDevType(2) + .setPntType(7) + .build(); + queueUtils.saveQueueDataStatus(point); + } + } + + // 下发消警指令 String xjUrl = "http://" + ipMap.get(hostSerialNumber) + ":" + portMap.get(hostSerialNumber) + "/ISAPI/SecurityCP/control/clearAlarm/" + num; String respx = HTTPClientUtil.doPut(xjUrl, "", HTTPClientUtil.client); - System.out.println(respx); + System.out.println("respx:" + respx); return true; } } catch (Exception e) { e.printStackTrace(); + return false; } return false; // boolean b = hCNetSDK.NET_DVR_AlarmHostClearAlarm(numMap.get(hostSerialNumber), num); @@ -328,6 +387,7 @@ public class Alarm implements CommandLineRunner { } } catch (Exception e) { e.printStackTrace(); + return false; } return false; // boolean b = hCNetSDK.NET_DVR_AlarmHostSubSystemSetupAlarmChan(numMap.get(hostSerialNumber), num); @@ -354,6 +414,7 @@ public class Alarm implements CommandLineRunner { } } catch (Exception e) { e.printStackTrace(); + return false; } return false; // boolean b = hCNetSDK.NET_DVR_AlarmHostSubSystemCloseAlarmChan(numMap.get(hostSerialNumber), num); @@ -365,21 +426,6 @@ public class Alarm implements CommandLineRunner { // return b; } -// private static void jianting(String hostSerialNumber) { -// try { -// String jlUrl = "http://" + ipMap.get(hostSerialNumber) + ":" + portMap.get(hostSerialNumber) + "/ISAPI/Event/notification/subscribeEvent?deployID=1"; -// String xml = "\n" + -// "\n" + -// "\n" + -// " 1\n" + -// " all\n" + -// ""; -// System.out.println("jl:" + HTTPClientUtil.doPost(jlUrl, xml, hostSerialNumber, clientMap.get(hostSerialNumber))); -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } - /** * 防区布防 */ @@ -427,6 +473,7 @@ public class Alarm implements CommandLineRunner { } } catch (Exception e) { e.printStackTrace(); + return false; } return false; // HCNetSDK.NET_DVR_ALARMIN_SETUP setup = new HCNetSDK.NET_DVR_ALARMIN_SETUP(); @@ -456,6 +503,7 @@ public class Alarm implements CommandLineRunner { } } catch (Exception e) { e.printStackTrace(); + return false; } return false; // HCNetSDK.NET_DVR_ALARMIN_SETUP setup = new HCNetSDK.NET_DVR_ALARMIN_SETUP(); diff --git a/src/main/java/org/springblade/hospital/service/impl/CornJobServiceImpl.java b/src/main/java/org/springblade/hospital/service/impl/CornJobServiceImpl.java index 6761ee0..84bd687 100644 --- a/src/main/java/org/springblade/hospital/service/impl/CornJobServiceImpl.java +++ b/src/main/java/org/springblade/hospital/service/impl/CornJobServiceImpl.java @@ -91,7 +91,7 @@ public class CornJobServiceImpl extends BaseServiceImpl long count = this.count(wrapper); System.out.println("count数量" + count); if (count > 0) { - throw new ServiceException("数据重复!"); + throw new ServiceException("选择设备已有同类型任务存在!"); } }