消警指令上报海信iot

main
litao 2 years ago
parent fe73cae165
commit c74c2be7ae
  1. 2
      src/main/java/org/springblade/hospital/agent/service/HikAgentService.java
  2. 4
      src/main/java/org/springblade/hospital/controller/AlarmInformationController.java
  3. 35
      src/main/java/org/springblade/hospital/controller/AppDataController.java
  4. 82
      src/main/java/org/springblade/hospital/hik/alarm/Alarm.java
  5. 2
      src/main/java/org/springblade/hospital/service/impl/CornJobServiceImpl.java

@ -401,7 +401,7 @@ public class HikAgentService extends AgentGrpc.AgentImplBase {
// 消警 // 消警
if (value == 1) { if (value == 1) {
System.out.println("shebeikongzhi:zxtxj"); 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); System.out.println("result:" + result);

@ -72,7 +72,7 @@ public class AlarmInformationController extends BladeController {
// Point point = new Gson().fromJson(JSON.toJSONString(params), Point.class); // Point point = new Gson().fromJson(JSON.toJSONString(params), Point.class);
int status = Integer.parseInt(String.valueOf(params.get("pntTypeValue_"))); 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); ByteString byteString = ByteString.copyFrom(byteValue);
Point point = Point.newBuilder() Point point = Point.newBuilder()
.setData(byteString) .setData(byteString)
@ -136,7 +136,7 @@ public class AlarmInformationController extends BladeController {
*/ */
@PostMapping("/clear") @PostMapping("/clear")
public R clear(@RequestBody AlarmInformation alarmInformation) { public R clear(@RequestBody AlarmInformation alarmInformation) {
Alarm.xiaojing(alarmInformation.getHostSerialNumber(), alarmInformation.getSystemNum()); Alarm.xiaojing(alarmInformation.getHostSerialNumber(), alarmInformation.getSystemNum(), alarmInformation.getDeviceId());
alarmInformation.setIsClear(1); alarmInformation.setIsClear(1);
return R.status(alarmInformationService.updateById(alarmInformation)); return R.status(alarmInformationService.updateById(alarmInformation));
} }

@ -246,9 +246,9 @@ public class AppDataController extends BladeController {
for (int i = 0; i < splitHost.length; i++) { for (int i = 0; i < splitHost.length; i++) {
String[] split = splitNum[i].split("_"); String[] split = splitNum[i].split("_");
if (Alarm.zibufang(splitHost[i], Integer.parseInt(split[split.length - 1]))) { 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 { } else {
status += "主机:" + splitHost[i] + "的子系统" + num + "布防失败!"; status += "子系统:" + split[split.length - 2] + "_" + split[split.length - 1] + "布防失败!";
} }
} }
return R.success(status); return R.success(status);
@ -265,9 +265,9 @@ public class AppDataController extends BladeController {
for (int i = 0; i < splitHost.length; i++) { for (int i = 0; i < splitHost.length; i++) {
String[] split = splitNum[i].split("_"); String[] split = splitNum[i].split("_");
if (Alarm.zichefang(splitHost[i], Integer.parseInt(split[split.length - 1]))) { 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 { } else {
status += "主机:" + splitHost[i] + "的子系统" + num + "撤防失败!"; status += "子系统:" + split[split.length - 2] + "_" + split[split.length - 1] + "撤防失败!";
} }
} }
return R.success(status); return R.success(status);
@ -294,7 +294,18 @@ public class AppDataController extends BladeController {
*/ */
@PostMapping("/bypass") @PostMapping("/bypass")
public R bypass(@RequestParam String hostSerialNumber, @RequestParam String num) { 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") @PostMapping("/unBypass")
public R unBypass(@RequestParam String hostSerialNumber, @RequestParam String num) { public R unBypass(@RequestParam String hostSerialNumber, @RequestParam String num) {
return R.status(Alarm.fqcxpl(hostSerialNumber, Integer.parseInt(num) - 1)); String[] splitHost = hostSerialNumber.split(",");
// return R.status(Alarm.xiaojing(hostSerialNumber, Integer.parseInt(num) - 1)); 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") @GetMapping("/coordinateToWGS84")

@ -3,11 +3,16 @@ package org.springblade.hospital.hik.alarm;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; 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.Native;
import com.sun.jna.Pointer; import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference; import com.sun.jna.ptr.IntByReference;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.httpclient.HttpClient; 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.CommonMethod.osSelect;
import org.springblade.hospital.hik.NetSDKDemo.HCNetSDK; import org.springblade.hospital.hik.NetSDKDemo.HCNetSDK;
import org.springblade.hospital.newalarm.communicationCom.HTTPClientUtil; 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.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger; 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 * @author AAA
@ -41,6 +51,7 @@ public class Alarm implements CommandLineRunner {
public static Map<String, String> ipMap; public static Map<String, String> ipMap;
public static Map<String, String> portMap; public static Map<String, String> portMap;
public static Map<String, String> macMap; public static Map<String, String> macMap;
private static QueueUtils queueUtils;
public static ScheduledThreadPoolExecutor scheduled = new ScheduledThreadPoolExecutor(10); 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 { try {
if (queueUtils == null) {
queueUtils = SpringUtil.getBean(QueueUtils.class);
}
String rzUrl = "http://" + ipMap.get(hostSerialNumber) + ":" + portMap.get(hostSerialNumber) + "/ISAPI/System/deviceInfo"; String rzUrl = "http://" + ipMap.get(hostSerialNumber) + ":" + portMap.get(hostSerialNumber) + "/ISAPI/System/deviceInfo";
String renzheng = HTTPClientUtil.renzheng(rzUrl, HTTPClientUtil.client); String renzheng = HTTPClientUtil.renzheng(rzUrl, HTTPClientUtil.client);
if (renzheng.contains(hostSerialNumber)) { 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 xjUrl = "http://" + ipMap.get(hostSerialNumber) + ":" + portMap.get(hostSerialNumber) + "/ISAPI/SecurityCP/control/clearAlarm/" + num;
String respx = HTTPClientUtil.doPut(xjUrl, "", HTTPClientUtil.client); String respx = HTTPClientUtil.doPut(xjUrl, "", HTTPClientUtil.client);
System.out.println(respx); System.out.println("respx:" + respx);
return true; return true;
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return false;
} }
return false; return false;
// boolean b = hCNetSDK.NET_DVR_AlarmHostClearAlarm(numMap.get(hostSerialNumber), num); // boolean b = hCNetSDK.NET_DVR_AlarmHostClearAlarm(numMap.get(hostSerialNumber), num);
@ -328,6 +387,7 @@ public class Alarm implements CommandLineRunner {
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return false;
} }
return false; return false;
// boolean b = hCNetSDK.NET_DVR_AlarmHostSubSystemSetupAlarmChan(numMap.get(hostSerialNumber), num); // boolean b = hCNetSDK.NET_DVR_AlarmHostSubSystemSetupAlarmChan(numMap.get(hostSerialNumber), num);
@ -354,6 +414,7 @@ public class Alarm implements CommandLineRunner {
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return false;
} }
return false; return false;
// boolean b = hCNetSDK.NET_DVR_AlarmHostSubSystemCloseAlarmChan(numMap.get(hostSerialNumber), num); // boolean b = hCNetSDK.NET_DVR_AlarmHostSubSystemCloseAlarmChan(numMap.get(hostSerialNumber), num);
@ -365,21 +426,6 @@ public class Alarm implements CommandLineRunner {
// return b; // 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) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return false;
} }
return false; return false;
// HCNetSDK.NET_DVR_ALARMIN_SETUP setup = new HCNetSDK.NET_DVR_ALARMIN_SETUP(); // HCNetSDK.NET_DVR_ALARMIN_SETUP setup = new HCNetSDK.NET_DVR_ALARMIN_SETUP();
@ -456,6 +503,7 @@ public class Alarm implements CommandLineRunner {
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return false;
} }
return false; return false;
// HCNetSDK.NET_DVR_ALARMIN_SETUP setup = new HCNetSDK.NET_DVR_ALARMIN_SETUP(); // HCNetSDK.NET_DVR_ALARMIN_SETUP setup = new HCNetSDK.NET_DVR_ALARMIN_SETUP();

@ -91,7 +91,7 @@ public class CornJobServiceImpl extends BaseServiceImpl<CornJobMapper, CornJob>
long count = this.count(wrapper); long count = this.count(wrapper);
System.out.println("count数量" + count); System.out.println("count数量" + count);
if (count > 0) { if (count > 0) {
throw new ServiceException("数据重复!"); throw new ServiceException("选择设备已有同类型任务存在!");
} }
} }

Loading…
Cancel
Save