|
|
|
|
@ -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<String, String> ipMap; |
|
|
|
|
public static Map<String, String> portMap; |
|
|
|
|
public static Map<String, String> 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<Map> zoneList = JSONObject.parseObject(statusMap.get("ZoneList").toString(), List.class); |
|
|
|
|
|
|
|
|
|
// 过滤只剩该子系统下正在报警的防区
|
|
|
|
|
List<Map> 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 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
|
|
|
|
|
// "\n" +
|
|
|
|
|
// "<SubscribeEvent xmlns=\"http://www.isapi.org/ver20/XMLSchema\" version=\"2.0\">\n" +
|
|
|
|
|
// " <heartbeat>1</heartbeat>\n" +
|
|
|
|
|
// " <eventMode>all</eventMode>\n" +
|
|
|
|
|
// "</SubscribeEvent>";
|
|
|
|
|
// 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();
|
|
|
|
|
|