From 120d769fcca37cd5b372295fc69453f77a73cadd Mon Sep 17 00:00:00 2001 From: litao Date: Mon, 4 Sep 2023 17:58:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E4=B8=AA=E6=8A=A5=E8=AD=A6=E4=B8=BB?= =?UTF-8?q?=E6=9C=BA=E6=96=B9=E6=A1=88=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agent/service/HikAgentService.java | 65 ++++------ .../AlarmInformationController.java | 2 +- .../controller/AppDataController.java | 28 ++--- .../hospital/entity/AlarmInformation.java | 10 ++ .../springblade/hospital/entity/CornJob.java | 10 ++ .../hospital/hik/NetSDKDemo/HCNetSDK.java | 1 - .../springblade/hospital/hik/alarm/Alarm.java | 73 +++++++---- .../hospital/hik/alarm/AlarmDataParse.java | 47 ++++--- .../hospital/utils/CornJobUtil.java | 95 +++++++++------ .../hospital/utils/ExternalUtils.java | 115 +++++++++++------- .../hospital/websocket/WebSocketServer.java | 1 - 11 files changed, 269 insertions(+), 178 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 b50ef1e..f458dd1 100644 --- a/src/main/java/org/springblade/hospital/agent/service/HikAgentService.java +++ b/src/main/java/org/springblade/hospital/agent/service/HikAgentService.java @@ -180,7 +180,7 @@ public class HikAgentService extends AgentGrpc.AgentImplBase { int pagesize = request.getPagesize(); int devType = request.getDevType(); - List list = externalUtils.getList(page, pagesize, null, String.valueOf(devType)); + List list = externalUtils.getList(page, pagesize, null, String.valueOf(devType), "100", null); System.out.println("list======" + list); // List roadwayVoList = hikService.getTheDeviceInfo(); @@ -351,15 +351,11 @@ public class HikAgentService extends AgentGrpc.AgentImplBase { try { ByteString data = request.getPoint().getData(); - int dataType = request.getPoint().getDataType(); + int value = DataTrans.bytesToIntBigEndian(data.toByteArray()); int pntType = request.getPoint().getPntType(); - int pntTypeValue = request.getPoint().getPntTypeValue(); String roadwaySyscode = request.getPoint().getId(); + String[] spId = roadwaySyscode.split("_"); - Integer value = null; - if (dataType == 14) { - value = DataTrans.bytesToIntBigEndian(data.toByteArray()); - } log.info("command +++++++++++ {} ", value); @@ -368,54 +364,47 @@ public class HikAgentService extends AgentGrpc.AgentImplBase { // 防区控制 if (pntType == 8) { // 布防 - if (pntTypeValue == 1) { - result = Alarm.fqbf(Integer.parseInt(roadwaySyscode) - 1); + if (value == 1) { + System.out.println("shebeikongzhi:fqbf"); + result = Alarm.fqbf(spId[0], Integer.parseInt(spId[spId.length - 1]) - 1); } // 撤防 - else if (pntTypeValue == 2) { - result = Alarm.fqcf(Integer.parseInt(roadwaySyscode) - 1); + else if (value == 0) { + System.out.println("shebeikongzhi:fqcf"); + result = Alarm.fqcf(spId[0], Integer.parseInt(spId[spId.length - 1]) - 1); } // 旁路 - else if (pntTypeValue == 3) { - result = Alarm.fqpl(Integer.parseInt(roadwaySyscode) - 1); + else if (value == 2) { + System.out.println("shebeikongzhi:fqpl"); + result = Alarm.fqpl(spId[0], Integer.parseInt(spId[spId.length - 1]) - 1); } // 撤销旁路 - else if (pntTypeValue == 4) { - result = Alarm.fqcxpl(Integer.parseInt(roadwaySyscode) - 1); + else if (value == 3) { + System.out.println("shebeikongzhi:fqqxpl"); + result = Alarm.fqcxpl(spId[0], Integer.parseInt(spId[spId.length - 1]) - 1); } } // 子系统控制 else if (pntType == 10) { // 布防 - if (pntTypeValue == 1) { - result = Alarm.zibufang(Integer.parseInt(roadwaySyscode)); + if (value == 1) { + System.out.println("shebeikongzhi:zxtbf"); + result = Alarm.zibufang(spId[0], Integer.parseInt(spId[spId.length - 1])); } // 撤防 - else if (pntTypeValue == 2) { - result = Alarm.zichefang(Integer.parseInt(roadwaySyscode)); + else if (value == 0) { + System.out.println("shebeikongzhi:zxtcf"); + result = Alarm.zichefang(spId[0], Integer.parseInt(spId[spId.length - 1])); } + } else if (pntType == 11) { // 消警 - else if (pntTypeValue == 3) { - result = Alarm.xiaojing(Integer.parseInt(roadwaySyscode)); + if (value == 1) { + System.out.println("shebeikongzhi:zxtxj"); + result = Alarm.xiaojing(spId[0], Integer.parseInt(spId[spId.length - 1])); } } - - if (result) { - responseObserver.onNext(CommonResult.newBuilder().setCode(0).build()); - } else { - responseObserver.onNext(CommonResult.newBuilder().setCode(1).build()); - } -// if (null != value) { -// if (value == 0 || value == 1 || value == 3) { -// if (result) { -// responseObserver.onNext(CommonResult.newBuilder().setCode(0).build()); -// } else { -// responseObserver.onNext(CommonResult.newBuilder().setCode(1).build()); -// } -// } -// } else { -// responseObserver.onNext(CommonResult.newBuilder().setCode(1).build()); -// } + System.out.println("result:" + result); + responseObserver.onNext(CommonResult.newBuilder().setCode(result ? 0 : 1).build()); } catch (Exception e) { e.printStackTrace(); responseObserver.onNext(CommonResult.newBuilder().setCode(1).build()); diff --git a/src/main/java/org/springblade/hospital/controller/AlarmInformationController.java b/src/main/java/org/springblade/hospital/controller/AlarmInformationController.java index 1a5c383..20a8f99 100644 --- a/src/main/java/org/springblade/hospital/controller/AlarmInformationController.java +++ b/src/main/java/org/springblade/hospital/controller/AlarmInformationController.java @@ -132,7 +132,7 @@ public class AlarmInformationController extends BladeController { */ @PostMapping("/clear") public R clear(@RequestBody AlarmInformation alarmInformation) { - Alarm.xiaojing(alarmInformation.getSystemNum()); + Alarm.xiaojing(alarmInformation.getHostSerialNumber(), alarmInformation.getSystemNum()); 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 a1ebe78..e38ad4c 100644 --- a/src/main/java/org/springblade/hospital/controller/AppDataController.java +++ b/src/main/java/org/springblade/hospital/controller/AppDataController.java @@ -237,48 +237,48 @@ public class AppDataController extends BladeController { * 子系统布防 */ @PostMapping("/setup") - public R setup(@RequestParam String num) { - return R.status(Alarm.zibufang(Integer.parseInt(num))); + public R setup(@RequestParam String hostSerialNumber, @RequestParam String num) { + return R.status(Alarm.zibufang(hostSerialNumber, Integer.parseInt(num))); } /** * 子系统撤防 */ @PostMapping("/close") - public R close(@RequestParam String num) { - return R.status(Alarm.zichefang(Integer.parseInt(num))); + public R close(@RequestParam String hostSerialNumber, @RequestParam String num) { + return R.status(Alarm.zichefang(hostSerialNumber, Integer.parseInt(num))); } /** * 防区布防 */ @PostMapping("/setupAlarm") - public R setupAlarm(@RequestParam String num) { - return R.status(Alarm.fqbf(Integer.parseInt(num) - 1)); + public R setupAlarm(@RequestParam String hostSerialNumber, @RequestParam String num) { + return R.status(Alarm.fqbf(hostSerialNumber, Integer.parseInt(num) - 1)); } /** * 防区撤防 */ @PostMapping("/closeAlarm") - public R closeAlarm(@RequestParam String num) { - return R.status(Alarm.fqcf(Integer.parseInt(num) - 1)); + public R closeAlarm(@RequestParam String hostSerialNumber, @RequestParam String num) { + return R.status(Alarm.fqcf(hostSerialNumber, Integer.parseInt(num) - 1)); } /** * 防区旁路 */ @PostMapping("/bypass") - public R bypass(@RequestParam String num) { - return R.status(Alarm.fqpl(Integer.parseInt(num) - 1)); + public R bypass(@RequestParam String hostSerialNumber, @RequestParam String num) { + return R.status(Alarm.fqpl(hostSerialNumber, Integer.parseInt(num) - 1)); } /** * 防区撤销旁路 */ @PostMapping("/unBypass") - public R unBypass(@RequestParam String num) { - return R.status(Alarm.fqcxpl(Integer.parseInt(num) - 1)); + public R unBypass(@RequestParam String hostSerialNumber, @RequestParam String num) { + return R.status(Alarm.fqcxpl(hostSerialNumber, Integer.parseInt(num) - 1)); } @GetMapping("/test") @@ -290,12 +290,12 @@ public class AppDataController extends BladeController { } @GetMapping("/coordinateToWGS84") - public JoysuchCoordinate coordinateToWGS84_2D(int x, int y, double minX, double maxY) { + public R coordinateToWGS84_2D(int x, int y, double minX, double maxY) { double mX = minX + (double)x / 1000.0; double mY = maxY - (double)y / 1000.0; double lng = mX / 2.003750834E7 * 180.0; double lat = mY / 2.003750834E7 * 180.0; lat = 57.29577951308232 * (2.0 * Math.atan(Math.exp(lat * Math.PI / 180.0)) - 1.5707963267948966); - return new JoysuchCoordinate((double)x, (double)y, lng, lat); + return R.data(new JoysuchCoordinate((double) x, (double) y, lng, lat)); } } diff --git a/src/main/java/org/springblade/hospital/entity/AlarmInformation.java b/src/main/java/org/springblade/hospital/entity/AlarmInformation.java index d0f68e5..40bea04 100644 --- a/src/main/java/org/springblade/hospital/entity/AlarmInformation.java +++ b/src/main/java/org/springblade/hospital/entity/AlarmInformation.java @@ -135,6 +135,16 @@ public class AlarmInformation extends BaseEntity { */ private Integer isClear; + /** + * 报警主机序列号 + */ + private String hostSerialNumber; + + /** + * 报警主机IP + */ + private String hostIp; + // @TableField(exist = false) // private List statusDetailList; diff --git a/src/main/java/org/springblade/hospital/entity/CornJob.java b/src/main/java/org/springblade/hospital/entity/CornJob.java index b0ce179..0046805 100644 --- a/src/main/java/org/springblade/hospital/entity/CornJob.java +++ b/src/main/java/org/springblade/hospital/entity/CornJob.java @@ -69,4 +69,14 @@ public class CornJob extends BaseEntity { * 下次执行时间 */ private Date nextExecuteTime; + + /** + * 报警主机序列号 + */ + private String hostSerialNumber; + + /** + * 报警主机IP + */ + private String hostIp; } diff --git a/src/main/java/org/springblade/hospital/hik/NetSDKDemo/HCNetSDK.java b/src/main/java/org/springblade/hospital/hik/NetSDKDemo/HCNetSDK.java index aee24e1..05166f6 100644 --- a/src/main/java/org/springblade/hospital/hik/NetSDKDemo/HCNetSDK.java +++ b/src/main/java/org/springblade/hospital/hik/NetSDKDemo/HCNetSDK.java @@ -4074,7 +4074,6 @@ DVR实现巡航数据结构 public byte byIpProtocol; /* Ip协议 0-IPV4, 1-IPV6 */ public byte[] byRes2 = new byte[11]; - } //硬解码显示区域参数(子结构) 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 0c72c2d..8ba18a7 100644 --- a/src/main/java/org/springblade/hospital/hik/alarm/Alarm.java +++ b/src/main/java/org/springblade/hospital/hik/alarm/Alarm.java @@ -1,5 +1,8 @@ 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.sun.jna.Native; import com.sun.jna.NativeLong; import com.sun.jna.Pointer; @@ -10,11 +13,15 @@ import org.springblade.hospital.hik.NetSDKDemo.HCNetSDK; import org.springblade.hospital.mapper.AlarmInformationMapper; import org.springblade.hospital.service.IAlarmInformationService; import org.springblade.hospital.service.impl.AlarmInformationServiceImpl; +import org.springblade.hospital.utils.ExternalUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.Scanner; @Component @@ -27,7 +34,10 @@ public class Alarm implements CommandLineRunner { static int lListenHandle = -1;//报警监听句柄 static FMSGCallBack_V31 fMSFCallBack_V31 = null; static FMSGCallBack fMSFCallBack; + static Map numMap; + @Autowired + ExternalUtils externalUtils; /** * 动态库加载 @@ -45,7 +55,8 @@ public class Alarm implements CommandLineRunner { // strDllPath = "C:\\Users\\Administrator\\Desktop\\grpc-jar\\lib\\HCNetSDK.dll"; else if (osSelect.isLinux()) //Linux系统加载库路径 - strDllPath = System.getProperty("user.dir") + "/lib/libhcnetsdk.so"; +// strDllPath = System.getProperty("user.dir") + "/lib/libhcnetsdk.so"; + strDllPath = "/home/hospital/project/lib/libhcnetsdk.so"; hCNetSDK = (HCNetSDK) Native.loadLibrary(strDllPath, HCNetSDK.class); } catch (Exception ex) { System.out.println("loadLibrary: " + strDllPath + " Error: " + ex.getMessage()); @@ -92,7 +103,8 @@ public class Alarm implements CommandLineRunner { System.out.println("登录失败,错误码为" + hCNetSDK.NET_DVR_GetLastError()); return; } else { - System.out.println(ip + ":设备登录成功!"); + numMap.put(new String(m_strDeviceInfo.struDeviceV30.sSerialNumber).trim(), lUserID); + System.out.println(ip + ":设备登录成功!" + "设备序列号:" + new String(m_strDeviceInfo.struDeviceV30.sSerialNumber).trim()); return; } } @@ -127,7 +139,7 @@ public class Alarm implements CommandLineRunner { */ // 每天22点10分30秒执行一次 // @Scheduled(cron = "30 10 22 * * ?") - public static void setAlarm() { + public static void setAlarm(int userId) { if (lAlarmHandle < 0)//尚未布防,需要布防 { //报警布防参数设置 @@ -137,14 +149,13 @@ public class Alarm implements CommandLineRunner { m_strAlarmInfo.byAlarmInfoType = 1; // 智能交通报警信息上传类型:0- 老报警信息(NET_DVR_PLATE_RESULT),1- 新报警信息(NET_ITS_PLATE_RESULT) m_strAlarmInfo.byDeployType = 1; //布防类型:0-客户端布防,1-实时布防 m_strAlarmInfo.write(); - lAlarmHandle = hCNetSDK.NET_DVR_SetupAlarmChan_V41(lUserID, m_strAlarmInfo); + lAlarmHandle = hCNetSDK.NET_DVR_SetupAlarmChan_V41(userId, m_strAlarmInfo); System.out.println("lAlarmHandle: " + lAlarmHandle); if (lAlarmHandle == -1) { System.out.println("布防失败,错误码为" + hCNetSDK.NET_DVR_GetLastError()); return; } else { System.out.println("布防成功"); - } } else { System.out.println("设备已经布防,请先撤防!"); @@ -191,14 +202,13 @@ public class Alarm implements CommandLineRunner { /** * 获取设备状态信息 */ - public static HCNetSDK.NET_DVR_ALARMHOST_MAIN_STATUS_V40 getStatus() { + public static HCNetSDK.NET_DVR_ALARMHOST_MAIN_STATUS_V40 getStatus(String number) { IntByReference ibrBytesReturned = new IntByReference(0); HCNetSDK.NET_DVR_ALARMHOST_MAIN_STATUS_V40 statusV40 = new HCNetSDK.NET_DVR_ALARMHOST_MAIN_STATUS_V40(); statusV40.write(); Pointer pointer = statusV40.getPointer(); - boolean status = hCNetSDK.NET_DVR_GetDVRConfig(lUserID, HCNetSDK.NET_DVR_GET_ALARMHOST_MAIN_STATUS_V40, 0Xffffffff, pointer, statusV40.size(), ibrBytesReturned); + boolean status = hCNetSDK.NET_DVR_GetDVRConfig(numMap.get(number), HCNetSDK.NET_DVR_GET_ALARMHOST_MAIN_STATUS_V40, 0Xffffffff, pointer, statusV40.size(), ibrBytesReturned); -// boolean status = hCNetSDK.NET_DVR_RemoteControl(lUserID, HCNetSDK.NET_DVR_CHECK_USER_STATUS, null, 0); if (status) { System.out.println("设备在线"); statusV40.read(); @@ -271,8 +281,8 @@ public class Alarm implements CommandLineRunner { /** * 消警 */ - public static boolean xiaojing(int num) { - boolean b = hCNetSDK.NET_DVR_AlarmHostClearAlarm(lUserID, num); + public static boolean xiaojing(String hostSerialNumber, int num) { + boolean b = hCNetSDK.NET_DVR_AlarmHostClearAlarm(numMap.get(hostSerialNumber), num); if (b) { System.out.println("消警成功"); } else { @@ -284,8 +294,8 @@ public class Alarm implements CommandLineRunner { /** * 子系统布防 */ - public static boolean zibufang(int num) { - boolean b = hCNetSDK.NET_DVR_AlarmHostSubSystemSetupAlarmChan(lUserID, num); + public static boolean zibufang(String hostSerialNumber, int num) { + boolean b = hCNetSDK.NET_DVR_AlarmHostSubSystemSetupAlarmChan(numMap.get(hostSerialNumber), num); if (b) { System.out.println("布防成功"); } else { @@ -297,8 +307,8 @@ public class Alarm implements CommandLineRunner { /** * 子系统撤防 */ - public static boolean zichefang(int num) { - boolean b = hCNetSDK.NET_DVR_AlarmHostSubSystemCloseAlarmChan(lUserID, num); + public static boolean zichefang(String hostSerialNumber, int num) { + boolean b = hCNetSDK.NET_DVR_AlarmHostSubSystemCloseAlarmChan(numMap.get(hostSerialNumber), num); if (b) { System.out.println("撤防成功"); } else { @@ -310,11 +320,11 @@ public class Alarm implements CommandLineRunner { /** * 防区布防 */ - public static boolean fqbf(int num) { + public static boolean fqbf(String hostSerialNumber, int num) { HCNetSDK.NET_DVR_ALARMIN_SETUP setup = new HCNetSDK.NET_DVR_ALARMIN_SETUP(); setup.byAssiciateAlarmIn[num] = 1; setup.write(); - boolean b = hCNetSDK.NET_DVR_AlarmHostSetupAlarmChan(lUserID, setup); + boolean b = hCNetSDK.NET_DVR_AlarmHostSetupAlarmChan(numMap.get(hostSerialNumber), setup); if (b) { System.out.println("布防成功"); } else { @@ -326,11 +336,11 @@ public class Alarm implements CommandLineRunner { /** * 防区撤防 */ - public static boolean fqcf(int num) { + public static boolean fqcf(String hostSerialNumber, int num) { HCNetSDK.NET_DVR_ALARMIN_SETUP setup = new HCNetSDK.NET_DVR_ALARMIN_SETUP(); setup.byAssiciateAlarmIn[num] = 1; setup.write(); - boolean b = hCNetSDK.NET_DVR_AlarmHostCloseAlarmChan(lUserID, setup); + boolean b = hCNetSDK.NET_DVR_AlarmHostCloseAlarmChan(numMap.get(hostSerialNumber), setup); if (b) { System.out.println("撤防成功"); } else { @@ -342,11 +352,11 @@ public class Alarm implements CommandLineRunner { /** * 防区旁路 */ - public static boolean fqpl(int num) { + public static boolean fqpl(String hostSerialNumber, int num) { HCNetSDK.NET_DVR_ALARMIN_SETUP setup = new HCNetSDK.NET_DVR_ALARMIN_SETUP(); setup.byAssiciateAlarmIn[num] = 1; setup.write(); - boolean b = hCNetSDK.NET_DVR_BypassAlarmChan(lUserID, setup); + boolean b = hCNetSDK.NET_DVR_BypassAlarmChan(numMap.get(hostSerialNumber), setup); if (b) { System.out.println("旁路成功"); } else { @@ -358,11 +368,11 @@ public class Alarm implements CommandLineRunner { /** * 防区撤销旁路 */ - public static boolean fqcxpl(int num) { + public static boolean fqcxpl(String hostSerialNumber, int num) { HCNetSDK.NET_DVR_ALARMIN_SETUP setup = new HCNetSDK.NET_DVR_ALARMIN_SETUP(); setup.byAssiciateAlarmIn[num] = 1; setup.write(); - boolean b = hCNetSDK.NET_DVR_UnBypassAlarmChan(lUserID, setup); + boolean b = hCNetSDK.NET_DVR_UnBypassAlarmChan(numMap.get(hostSerialNumber), setup); if (b) { System.out.println("撤销旁路成功"); } else { @@ -437,9 +447,22 @@ public class Alarm implements CommandLineRunner { Pointer pStrNET_DVR_LOCAL_GENERAL_CFG = struNET_DVR_LOCAL_GENERAL_CFG.getPointer(); hCNetSDK.NET_DVR_SetSDKLocalCfg(17, pStrNET_DVR_LOCAL_GENERAL_CFG); - Alarm.login_V40("192.168.1.64", (short) 7200, "admin", "asd0514.."); //登录设备 - - Alarm.setAlarm();//报警布防,和报警监听二选一即可 + if (numMap == null) { + numMap = new HashMap<>(); + } + List list = externalUtils.getList(0, 0, null, null, "105", null); + if (CollectionUtils.isNotEmpty(list)) { + for (Map map : list) { + String s = JSON.toJSONString(map.get("tags")).replace("\\", ""); + s = s.substring(1, s.length() - 1); + Map tagsMap = JSONObject.parseObject(s, Map.class); + String number = tagsMap.get("hostNumber").toString(); + Alarm.login_V40(tagsMap.get("ip").toString(), Short.parseShort(tagsMap.get("port").toString()), "admin", "asd0514.."); //登录设备 + if (numMap.get(number) != null) { + Alarm.setAlarm(numMap.get(number));//报警布防,和报警监听二选一即可 + } + } + } // Alarm.startListen("192.168.1.100", (short) 7200);//报警监听,不需要登陆设备 while (true) { diff --git a/src/main/java/org/springblade/hospital/hik/alarm/AlarmDataParse.java b/src/main/java/org/springblade/hospital/hik/alarm/AlarmDataParse.java index a332353..9f89e82 100644 --- a/src/main/java/org/springblade/hospital/hik/alarm/AlarmDataParse.java +++ b/src/main/java/org/springblade/hospital/hik/alarm/AlarmDataParse.java @@ -285,6 +285,9 @@ public class AlarmDataParse { } break; case HCNetSDK.COMM_ALARMHOST_CID_ALARM://报警主机CID报告报警上传 + String sSerialNumber = new String(pAlarmer.sSerialNumber).trim(); + String ip = new String(pAlarmer.sDeviceIP).trim(); + System.out.println("序列号:" + sSerialNumber + "设备IP:" + ip); HCNetSDK.NET_DVR_CID_ALARM strCIDalarm = new HCNetSDK.NET_DVR_CID_ALARM(); strCIDalarm.write(); Pointer pstrCIDalarm = strCIDalarm.getPointer(); @@ -311,9 +314,9 @@ public class AlarmDataParse { externalUtils = SpringUtil.getBean(ExternalUtils.class); } if (sum > 0) { - list = externalUtils.getList(1, 10, "sector_" + sum, null); + list = externalUtils.getList(0, 0, "sector_" + sum, null, "100", sSerialNumber); } else { - list = externalUtils.getList(1, 10, "sys_" + bySubSysNo, null); + list = externalUtils.getList(0, 0, "sys_" + bySubSysNo, null, "100", sSerialNumber); } } System.out.println("【CID事件】" + "触发时间:" + TriggerTime + "CID事件号:" + sCIDCode + "CID事件名:" + sCIDDescribe + "子系统号:" + @@ -329,6 +332,8 @@ public class AlarmDataParse { alarmInformation.setType(sCIDCode); alarmInformation.setContent(DictBizCache.getValue("alarm_message_type", sCIDCode)); alarmInformation.setSystemNum((int) bySubSysNo); + alarmInformation.setHostSerialNumber(sSerialNumber); + alarmInformation.setHostIp(ip); if (CollectionUtils.isNotEmpty(list)) { Map map = list.get(0); @@ -360,21 +365,27 @@ public class AlarmDataParse { // 只保留“即时报警”、“设备防拆报警” if ("1103".equals(sCIDCode) || "1137".equals(sCIDCode)) { // 上报海信iot平台 -// if (queueUtils == null) { -// queueUtils = SpringUtil.getBean(QueueUtils.class); -// } -// byte[] byteValue = DataTrans.intToBytesBigEndian(1); -// ByteString byteString = ByteString.copyFrom(byteValue); -// Point point = Point.newBuilder() -// .setData(byteString) -// .setId("sector_" + Integer.sum(strCIDalarm.wDefenceNo, 1)) -// .setDevType(2) -// .setPntType(7) -//// .setPntTypeValue(1) -// .build(); -// boolean b = queueUtils.saveQueueDataStatus(point); -// queueUtils.saveQueueDataAlarm(point); -// System.out.println("===" + b); + if (queueUtils == null) { + queueUtils = SpringUtil.getBean(QueueUtils.class); + } + + List hostList = externalUtils.getList(0, 0, null, null, "105", sSerialNumber); + Map hostMap = hostList.get(0); + String s = JSON.toJSONString(hostMap.get("tags")).replace("\\", ""); + s = s.substring(1, s.length() - 1); + Map tagsMap = JSONObject.parseObject(s, Map.class); + + byte[] byteValue = DataTrans.intToBytesBigEndian(1); + ByteString byteString = ByteString.copyFrom(byteValue); + Point point = Point.newBuilder() + .setData(byteString) + .setId(tagsMap.get("mac").toString() + "_sector_" + Integer.sum(strCIDalarm.wDefenceNo, 1)) + .setDevType(2) + .setPntType(7) + .build(); + boolean b = queueUtils.saveQueueDataStatus(point); + queueUtils.saveQueueDataAlarm(point); + System.out.println("===" + b); // 报警信息发送到远程服务器 if (restTemplate == null) { @@ -385,7 +396,7 @@ public class AlarmDataParse { headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8")); Map map = new HashMap<>(); - map.put("id_", "sector_" + Integer.sum(strCIDalarm.wDefenceNo, 1)); + map.put("id_", tagsMap.get("mac").toString() + "_sector_" + Integer.sum(strCIDalarm.wDefenceNo, 1)); map.put("devType_", 2); map.put("pntType_", 7); map.put("pntTypeValue_", 1); diff --git a/src/main/java/org/springblade/hospital/utils/CornJobUtil.java b/src/main/java/org/springblade/hospital/utils/CornJobUtil.java index 3b98598..f18d7fe 100644 --- a/src/main/java/org/springblade/hospital/utils/CornJobUtil.java +++ b/src/main/java/org/springblade/hospital/utils/CornJobUtil.java @@ -1,13 +1,16 @@ package org.springblade.hospital.utils; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import org.springblade.hospital.entity.AlarmInformation; import org.springblade.hospital.entity.CornJob; import org.springblade.hospital.hik.NetSDKDemo.HCNetSDK; import org.springblade.hospital.hik.alarm.Alarm; import org.springblade.hospital.service.ICornJobService; +import org.springblade.hospital.websocket.WebSocketServer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.EnableAsync; @@ -39,46 +42,60 @@ public class CornJobUtil { * 定时布撤防,每3分钟执行一次 */ @Async - @Scheduled(initialDelay = 5000, fixedRate = 180000) + @Scheduled(initialDelay = 6000, fixedRate = 180000) public void task() { System.out.println("定时任务执行了2"); - List jobs = cornJobService.list(Wrappers.lambdaQuery().eq(CornJob::getStatus, 1)); - if (CollectionUtils.isNotEmpty(jobs)) { - List jobList = new ArrayList<>(); - for (CornJob job : jobs) { - Date nextExecuteTime = job.getNextExecuteTime(); - if (new Date().compareTo(nextExecuteTime) < 0) { - continue; - } - System.out.println("-----------------===================="); - try { - if (StringUtils.isNotBlank(job.getDeviceId())) { - String[] ids = job.getDeviceId().split(","); - // 布防 - if (job.getType() == 1) { - for (String id : ids) { - Alarm.fqbf(Integer.parseInt(id) - 1); - } - } - // 撤防 - else if (job.getType() == 2) { - for (String id : ids) { - Alarm.fqcf(Integer.parseInt(id) - 1); - } - } - // 修改下次执行时间 - Calendar calendar = new GregorianCalendar(); - calendar.setTime(nextExecuteTime); - // 把日期往后增加一天,整数 往后推,负数往前移动 - calendar.add(Calendar.DATE, 1); - job.setNextExecuteTime(calendar.getTime()); - jobList.add(job); - } - } catch (NumberFormatException e) { - e.printStackTrace(); - } - } - cornJobService.updateBatchById(jobList); - } +// List jobs = cornJobService.list(Wrappers.lambdaQuery().eq(CornJob::getStatus, 1)); +// if (CollectionUtils.isNotEmpty(jobs)) { +// List jobList = new ArrayList<>(); +// for (CornJob job : jobs) { +// Date nextExecuteTime = job.getNextExecuteTime(); +// if (new Date().compareTo(nextExecuteTime) < 0) { +// continue; +// } +// System.out.println("-----------------===================="); +// try { +// if (StringUtils.isNotBlank(job.getDeviceId())) { +// String[] ids = job.getDeviceId().split(","); +// // 布防 +// if (job.getType() == 1) { +// for (String id : ids) { +// Alarm.fqbf(job.getHostSerialNumber(), Integer.parseInt(id) - 1); +// } +// } +// // 撤防 +// else if (job.getType() == 2) { +// for (String id : ids) { +// Alarm.fqcf(job.getHostSerialNumber(), Integer.parseInt(id) - 1); +// } +// } +// // 修改下次执行时间 +// Calendar calendar = new GregorianCalendar(); +// calendar.setTime(nextExecuteTime); +// // 把日期往后增加一天,整数 往后推,负数往前移动 +// calendar.add(Calendar.DATE, 1); +// job.setNextExecuteTime(calendar.getTime()); +// jobList.add(job); +// } +// } catch (NumberFormatException e) { +// e.printStackTrace(); +// } +// } +// cornJobService.updateBatchById(jobList); +// } + } + + @Async + @Scheduled(initialDelay = 7000, fixedRate = 3600000) + public void testWebSocket(){ + System.out.println("定时任务执行了3"); + AlarmInformation alarmInformation = new AlarmInformation(); + alarmInformation.setReportTime(new Date()); + alarmInformation.setBuildId("2"); + alarmInformation.setFloorNo("2"); + alarmInformation.setContent("测试报警信息"); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("message", JSONObject.toJSONString(alarmInformation)); + WebSocketServer.sendInfo(jsonObject); } } diff --git a/src/main/java/org/springblade/hospital/utils/ExternalUtils.java b/src/main/java/org/springblade/hospital/utils/ExternalUtils.java index e10a8b7..2b5c835 100644 --- a/src/main/java/org/springblade/hospital/utils/ExternalUtils.java +++ b/src/main/java/org/springblade/hospital/utils/ExternalUtils.java @@ -66,17 +66,16 @@ public class ExternalUtils { /** * 获取物联网平台设备列表 */ - public List getList(int page, int pageSize, String id, String type) { - + public List getList(int page, int pageSize, String id, String type, String pid, String number) { String token = CacheUtil.get(SYS_CACHE, "token:id:", "wlwtoken", String.class); - Map map = getMap(token, page, pageSize, id, type); + Map map = getMap(token, page, pageSize, id, type, pid, number); int code = Integer.parseInt(map.get("code").toString()); if (code == 401) { token = getToken("Arf7bd4f26", "kb207044c8"); CacheUtil.put(SYS_CACHE, "token:id:", "wlwtoken", token); - map = getMap(token, page, pageSize, id, type); + map = getMap(token, page, pageSize, id, type, pid, number); } @@ -89,21 +88,23 @@ public class ExternalUtils { return mapList; } - private Map getMap(String token, int page, int pageSize, String id, String type) { - - String url = "http://182.139.182.190:60032/prod-api/api/bizDevice/list?"; - String pid = "pid=100"; + private Map getMap(String token, int page, int pageSize, String id, String type, String pid, String number) { + String url = "http://182.139.182.190:60032/prod-api/api/bizDevice/list?pid="; +// String pid = "pid=100"; if (StringUtils.isNotBlank(type)) { if ("4".equals(type)) { - pid = "pid=98"; + pid = "98"; url += pid; } else { url += pid + "¶ms[type]=" + type; } - }else { + } else { url += pid; } + if (StringUtils.isNotBlank(number)) { + url += "¶ms[hostNumber]=" + number; + } // 分页参数 if (page > 0 && pageSize > 0) { url += "&pageNum=" + page + "&pageSize=" + pageSize; @@ -131,33 +132,45 @@ public class ExternalUtils { */ public void updateStatus() { // 设备列表信息 - List list = getList(0, 0, null, null); + List hosts = getList(0, 0, null, null, "105", null); + List mapList = getList(0, 0, null, null, "100", null); // 遍历设备列表更新设备状态信息 - if (CollectionUtils.isNotEmpty(list)) { + if (CollectionUtils.isNotEmpty(hosts)) { // 报警主机在线状态:true在线 false离线 // boolean presence = Alarm.presence(); + for (Map hostMap : hosts) { + String tags = JSON.toJSONString(hostMap.get("tags")).replace("\\", ""); + tags = tags.substring(1, tags.length() - 1); + Map tagMap = JSONObject.parseObject(tags, Map.class); + String number = tagMap.get("hostNumber").toString(); + String mac = tagMap.get("mac").toString(); + + // 设备状态信息 + HCNetSDK.NET_DVR_ALARMHOST_MAIN_STATUS_V40 status = Alarm.getStatus(number); + // 如果查不到该报警主机的状态信息 + if (status == null) { + continue; + } - // 设备状态信息 - HCNetSDK.NET_DVR_ALARMHOST_MAIN_STATUS_V40 status = Alarm.getStatus(); - for (Map map : list) { - // 物联网设备状态 - int state = Integer.parseInt(String.valueOf(map.get("status"))); + List list = mapList.stream().filter(map -> JSON.toJSONString(map.get("tags")).contains(number)).collect(Collectors.toList()); + for (Map map : list) { + // 物联网设备状态 + int state = Integer.parseInt(String.valueOf(map.get("status"))); - String s = JSON.toJSONString(map.get("tags")).replace("\\", ""); - s = s.substring(1, s.length() - 1); - Map tagsMap = JSONObject.parseObject(s, Map.class); - String id = tagsMap.get("mac").toString(); - String type = tagsMap.get("type").toString(); + String s = JSON.toJSONString(map.get("tags")).replace("\\", ""); + s = s.substring(1, s.length() - 1); + Map tagsMap = JSONObject.parseObject(s, Map.class); + String id = mac + "_" + tagsMap.get("mac").toString(); + String type = tagsMap.get("type").toString(); - // 防区号/子系统号 - int sCIDCode = Integer.parseInt(tagsMap.get("buildingNo").toString()); + // 防区号/子系统号 + int sCIDCode = Integer.parseInt(tagsMap.get("buildingNo").toString()); - // 设备真实状态 - int fqStatus = 0; - int presence = 0; + // 设备真实状态 + int fqStatus = 0; + int presence = 0; - if (status != null) { if ("2".equals(type)) { presence = 1; // 防区布防状态 0-对应防区处于撤防状态,1-对应防区处于布防状态 @@ -166,7 +179,14 @@ public class ExternalUtils { byte byBypassStatus = status.byBypassStatus[sCIDCode - 1]; // 防区故障状态,0-对应防区处于正常状态,1-对应防区处于故障状态 byte byAlarmInFaultStatus = status.byAlarmInFaultStatus[sCIDCode - 1]; - + // 防区报警状态,0-对应防区当前无报警,1-对应防区当前有报警 + byte byAlarmInStatus = status.byAlarmInFaultStatus[sCIDCode - 1]; + // 上报防区报警状态 +// updateById(id, 7, byAlarmInStatus, 2); +// test1(id, 7, byAlarmInStatus, 2); + test1(id, 7, 1, 2); + + // 撤防-6 布防-5 旁路-7 if (byAlarmInFaultStatus == 0) { if (bySetupAlarmStatus == 1) { fqStatus = 5; @@ -188,18 +208,18 @@ public class ExternalUtils { fqStatus = 5; } } - } - // 海信iot + // 海信iot // updateById(id, fqStatus,presence,type); - test(id, fqStatus, presence, type); + test(id, fqStatus, presence, type); - if (fqStatus == state) { - continue; - } + if (fqStatus == state) { + continue; + } - // 物联网平台 - bizDevice(Integer.parseInt(String.valueOf(map.get("id"))), fqStatus); + // 物联网平台 + bizDevice(Integer.parseInt(String.valueOf(map.get("id"))), fqStatus); + } } } } @@ -242,7 +262,13 @@ public class ExternalUtils { queue(id, pntType, pntTypeValue, 2); pntType = 8; - pntTypeValue = byBypassStatus == 7 ? 1 : 0; + if (byBypassStatus == 5) { + pntTypeValue = 1; + } else if (byBypassStatus == 6) { + pntTypeValue = 0; + } else if (byBypassStatus == 7) { + pntTypeValue = 2; + } queue(id, pntType, pntTypeValue, 2); } } @@ -261,7 +287,8 @@ public class ExternalUtils { } byte[] byteValue = DataTrans.intToBytesBigEndian(pntTypeValue); ByteString byteString = ByteString.copyFrom(byteValue); - Point point = Point.newBuilder().setData(byteString) + Point point = Point.newBuilder() + .setData(byteString) .setId(id) .setDevType(devType) .setPntType(pntType) @@ -333,7 +360,7 @@ public class ExternalUtils { pntTypeValue = byBypassStatus == 5 ? 0 : 1; test1(id, pntType, pntTypeValue, 3); } - // 防区 + // 防区 撤防-6 布防-5 旁路-7 else { pntTypeValue = 1; test1(id, pntType, pntTypeValue, 2); @@ -350,7 +377,13 @@ public class ExternalUtils { test1(id, pntType, pntTypeValue, 2); pntType = 8; - pntTypeValue = byBypassStatus == 7 ? 1 : 0; + if (byBypassStatus == 5) { + pntTypeValue = 1; + } else if (byBypassStatus == 6) { + pntTypeValue = 0; + } else if (byBypassStatus == 7) { + pntTypeValue = 2; + } test1(id, pntType, pntTypeValue, 2); } } diff --git a/src/main/java/org/springblade/hospital/websocket/WebSocketServer.java b/src/main/java/org/springblade/hospital/websocket/WebSocketServer.java index d305457..e5c6db7 100644 --- a/src/main/java/org/springblade/hospital/websocket/WebSocketServer.java +++ b/src/main/java/org/springblade/hospital/websocket/WebSocketServer.java @@ -157,7 +157,6 @@ public class WebSocketServer { /** * 获取当前在线人数 - * * @return */ public static synchronized int getOnlineCount() {