From 092d7c56bb8653075b8f4b27220e69e6bb8e5d37 Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期四, 09 十一月 2023 16:49:26 +0800 Subject: [PATCH] 增加超脑业务 --- src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java | 59 ++++ src/main/java/com/ard/utils/tcp/ClientHandler.java | 22 + src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java | 57 ++++ src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java | 467 +++++++++++++++++++++-------------------- src/main/java/com/ard/alarm/radar/controller/RadarController.java | 15 + src/main/java/com/ard/utils/other/ByteUtils.java | 29 ++ 6 files changed, 387 insertions(+), 262 deletions(-) diff --git a/src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java b/src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java index 723ab35..411eaf2 100644 --- a/src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java +++ b/src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java @@ -19,6 +19,8 @@ import org.springframework.core.annotation.Order; import org.springframework.stereotype.Service; +import javax.annotation.Resource; + /** * externalService涓氬姟灞傚鐞� @@ -35,12 +37,12 @@ public static List<ArdEquipExternal> ardAlarmHostList = new ArrayList<>(); public static List<ArdEquipExternal> ardAccessHostList = new ArrayList<>(); - - @Autowired + public static List<ArdEquipExternal> ardSuperBrainHostList = new ArrayList<>(); + @Resource private ArdEquipExternalMapper ardEquipExternalMapper; @Override - public void run(ApplicationArguments args){ + public void run(ApplicationArguments args) { //鑾峰彇鍏ㄩ儴娴峰悍鎶ヨ涓绘満灏濊瘯鐧诲綍 ArdEquipExternal alarmHost = new ArdEquipExternal(); alarmHost.setFactory("1"); @@ -55,6 +57,13 @@ ardAccessHostList = selectArdEquipExternalList(accessControlHost); HikClientUtil.loginAllAccessControlHost(ardAccessHostList); log.debug("闂ㄧ涓绘満灏濊瘯鐧诲綍"); + //鑾峰彇鍏ㄩ儴瓒呰剳灏濊瘯鐧诲綍 + ArdEquipExternal superBrainHost = new ArdEquipExternal(); + superBrainHost.setFactory("1"); + superBrainHost.setType("5"); + ardSuperBrainHostList = selectArdEquipExternalList(superBrainHost); + HikClientUtil.loginAllSuperBrainHost(ardSuperBrainHostList); + log.debug("瓒呰剳灏濊瘯鐧诲綍"); //鍚屾浠诲姟 syncTask(); } @@ -99,10 +108,10 @@ //endregion //region 瀹氭椂鍚屾闂ㄧ涓绘満 - alarmHost = new ArdEquipExternal(); - alarmHost.setFactory("1"); - alarmHost.setType("6"); - List<ArdEquipExternal> newAccessHostList = selectArdEquipExternalList(alarmHost); + ArdEquipExternal accessHost = new ArdEquipExternal(); + accessHost.setFactory("1"); + accessHost.setType("6"); + List<ArdEquipExternal> newAccessHostList = selectArdEquipExternalList(accessHost); //闇�瑕佹洿鏂扮殑鏁版嵁 updateList = sameListWithDifferent(ardAccessHostList, newAccessHostList); if (updateList.size() > 0) { @@ -128,6 +137,36 @@ } } //endregion + //region 瀹氭椂鍚屾瓒呰剳 + ArdEquipExternal superBrainHost = new ArdEquipExternal(); + superBrainHost.setFactory("1"); + superBrainHost.setType("5"); + List<ArdEquipExternal> newSuperBrainList = selectArdEquipExternalList(superBrainHost); + //闇�瑕佹洿鏂扮殑鏁版嵁 + updateList = sameListWithDifferent(ardSuperBrainHostList, newSuperBrainList); + if (updateList.size() > 0) { + HikClientUtil.logoutAllSuperBrainHost(updateList); + HikClientUtil.loginAllSuperBrainHost(updateList); + ardSuperBrainHostList.clear(); + ardSuperBrainHostList.addAll(newSuperBrainList); + } + //闇�瑕佸垹闄ょ殑鏁版嵁 + delList = diffList(ardSuperBrainHostList, newSuperBrainList); + if (delList.size() > 0) { + HikClientUtil.logoutAllSuperBrainHost(delList); + for (ArdEquipExternal ardEquipExternal : delList) { + ardSuperBrainHostList.remove(ardEquipExternal); + } + } + //闇�瑕佹柊澧炵殑鏁版嵁 + inserList = diffList(newSuperBrainList, ardSuperBrainHostList); + if (inserList.size() > 0) { + HikClientUtil.loginAllSuperBrainHost(inserList); + for (ArdEquipExternal ardEquipExternal : inserList) { + ardSuperBrainHostList.add(ardEquipExternal); + } + } + //endregion } catch (Exception e) { log.error("鍚屾澶栬仈浠诲姟鎵ц鍑洪敊" + e.getMessage()); } @@ -148,7 +187,7 @@ @Override public ArdEquipExternal selectArdEquipExternal(ArdEquipExternal ardEquipExternal) { - QueryWrapper<ArdEquipExternal> queryWrapper=new QueryWrapper<>(ardEquipExternal); + QueryWrapper<ArdEquipExternal> queryWrapper = new QueryWrapper<>(ardEquipExternal); return ardEquipExternalMapper.selectOne(queryWrapper); } @@ -160,7 +199,7 @@ */ @Override public List<ArdEquipExternal> selectArdEquipExternalList(ArdEquipExternal ardEquipExternal) { - QueryWrapper<ArdEquipExternal> queryWrapper=new QueryWrapper<>(ardEquipExternal); + QueryWrapper<ArdEquipExternal> queryWrapper = new QueryWrapper<>(ardEquipExternal); return ardEquipExternalMapper.selectList(queryWrapper); } diff --git a/src/main/java/com/ard/alarm/radar/controller/RadarController.java b/src/main/java/com/ard/alarm/radar/controller/RadarController.java index e4dfbad..72f02fb 100644 --- a/src/main/java/com/ard/alarm/radar/controller/RadarController.java +++ b/src/main/java/com/ard/alarm/radar/controller/RadarController.java @@ -9,12 +9,15 @@ import com.ard.utils.tcp.ClientInitialize; import io.netty.buffer.ByteBuf; import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; + +import static jdk.nashorn.internal.runtime.regexp.joni.Config.log; /** * @Description: 闆疯揪鎺ュ彛 @@ -24,6 +27,7 @@ **/ @RestController @RequestMapping("/radar") +@Slf4j(topic = "netty") public class RadarController { @Resource @@ -55,14 +59,19 @@ radarPosition[1] = latitude; double distance = GisUtils.getDistance(radarPosition, targetPosition); float angleInRadians = (float)Math.atan(distance / altitude); - float t = 90-(float)Math.toDegrees(angleInRadians); - + float t = (90-(float)Math.toDegrees(angleInRadians))*-1; + log.debug("distance锛�"+distance); + log.debug("p锛�"+p); + log.debug("t锛�"+t); //鍙戦�佸憡璀﹀墠绔殑瑙掑害鎻愮ず byte[] header = {0x01, 0x02, 0x01};//鍖呭ご - byte[] payloadHeader = {0x10, 0x03, 0x40, 0x00};//璐熻浇澶� + byte[] payloadHeader = {0x10, 0x03, 0x20, 0x00};//璐熻浇澶� byte[] distanceBytes = ByteUtils.decimalToBytes((int)distance); + distanceBytes=ByteUtils.toLittleEndian(distanceBytes); byte[] pBytes = ByteUtils.floatToBytes(p); + pBytes=ByteUtils.toLittleEndian(pBytes); byte[] tBytes = ByteUtils.floatToBytes(t); + tBytes=ByteUtils.toLittleEndian(tBytes); byte[] resBytes=new byte[20]; byte[] payloadBody = ByteUtils.appendArrays(distanceBytes,pBytes,tBytes,resBytes);//璐熻浇 diff --git a/src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java b/src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java index aea22b1..6e3ca3c 100644 --- a/src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java +++ b/src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java @@ -54,22 +54,23 @@ String sTime;//浜嬩欢鏃堕棿 String url = "";//浜嬩欢鍥剧墖 //lCommand鏄紶鐨勬姤璀︾被鍨� - //log.debug("鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand)); + log.debug("鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand)); ArdCameras ardCameras = new ArdCameras(); ardCameras.setIp(sDeviceIP); ardCameras.setPort(wLinkPort); IArdCamerasService ardCamerasService = SpringUtils.getBean(IArdCamerasService.class); List<ArdCameras> ardCamerasList = ardCamerasService.selectArdCamerasList(ardCameras); - if (ardCamerasList.size() > 0) { - ArdCameras camera = ardCamerasService.selectArdCamerasList(ardCameras).get(0); - switch (lCommand) { - case HCNetSDK.COMM_ALARM_V30: - //log.debug("绉诲姩渚︽祴"); - HCNetSDK.NET_DVR_ALARMINFO_V30 netDvrAlarminfoV30 = new HCNetSDK.NET_DVR_ALARMINFO_V30(); - netDvrAlarminfoV30.write(); - Pointer pNDAInfo = netDvrAlarminfoV30.getPointer(); - pNDAInfo.write(0, pAlarmInfo.getByteArray(0, netDvrAlarminfoV30.size()), 0, netDvrAlarminfoV30.size()); - netDvrAlarminfoV30.read(); + switch (lCommand) { + //region 绉诲姩渚︽祴銆佽棰戜涪澶便�侀伄鎸°�両O淇″彿閲忕瓑鎶ヨ淇℃伅(V3.0浠ヤ笂鐗堟湰鏀寔鐨勮澶�) + case HCNetSDK.COMM_ALARM_V30: + //region 绉诲姩渚︽祴銆佽棰戜涪澶便�侀伄鎸°�両O淇″彿閲忕瓑鎶ヨ淇℃伅(V3.0浠ヤ笂鐗堟湰鏀寔鐨勮澶�) + HCNetSDK.NET_DVR_ALARMINFO_V30 netDvrAlarminfoV30 = new HCNetSDK.NET_DVR_ALARMINFO_V30(); + netDvrAlarminfoV30.write(); + Pointer pNDAInfo = netDvrAlarminfoV30.getPointer(); + pNDAInfo.write(0, pAlarmInfo.getByteArray(0, netDvrAlarminfoV30.size()), 0, netDvrAlarminfoV30.size()); + netDvrAlarminfoV30.read(); + if (ardCamerasList.size() > 0) { + ArdCameras camera = ardCamerasService.selectArdCamerasList(ardCameras).get(0); switch (netDvrAlarminfoV30.dwAlarmType) { case 3: info = new CameraEventInfo(); @@ -90,21 +91,26 @@ publishMqtt(info); break; } - case HCNetSDK.COMM_ALARM_RULE: - //log.debug("琛屼负鍒嗘瀽淇℃伅鎶ヨ淇℃伅涓婃姤"); - //region 琛屼负鍒嗘瀽淇℃伅 - HCNetSDK.NET_VCA_RULE_ALARM strVcaAlarm = new HCNetSDK.NET_VCA_RULE_ALARM(); - strVcaAlarm.write(); - Pointer pVCAInfo = strVcaAlarm.getPointer(); - pVCAInfo.write(0, pAlarmInfo.getByteArray(0, strVcaAlarm.size()), 0, strVcaAlarm.size()); - strVcaAlarm.read(); - Integer ruleID = Integer.valueOf(strVcaAlarm.struRuleInfo.byRuleID); - sTime = DateUtils.parseTime(strVcaAlarm.dwAbsTime);//浜嬩欢鏃堕棿 - String ipaddr = new String(strVcaAlarm.struDevInfo.struDevIP.sIpV4).trim();//璁惧ip - Integer channel = Integer.valueOf(strVcaAlarm.struDevInfo.byChannel);//閫氶亾 - info = new CameraEventInfo(); - info.setAlarmName("浜哄憳琛屼负鍒嗘瀽"); - info.setAlarmTime(sTime); + } + //endregion + break; + case HCNetSDK.COMM_ALARM_RULE: + //log.debug("琛屼负鍒嗘瀽淇℃伅鎶ヨ淇℃伅涓婃姤"); + //region 寮傚父琛屼负璇嗗埆淇℃伅 + HCNetSDK.NET_VCA_RULE_ALARM strVcaAlarm = new HCNetSDK.NET_VCA_RULE_ALARM(); + strVcaAlarm.write(); + Pointer pVCAInfo = strVcaAlarm.getPointer(); + pVCAInfo.write(0, pAlarmInfo.getByteArray(0, strVcaAlarm.size()), 0, strVcaAlarm.size()); + strVcaAlarm.read(); + Integer ruleID = Integer.valueOf(strVcaAlarm.struRuleInfo.byRuleID); + sTime = DateUtils.parseTime(strVcaAlarm.dwAbsTime);//浜嬩欢鏃堕棿 + String ipaddr = new String(strVcaAlarm.struDevInfo.struDevIP.sIpV4).trim();//璁惧ip + Integer channel = Integer.valueOf(strVcaAlarm.struDevInfo.byChannel);//閫氶亾 + info = new CameraEventInfo(); + info.setAlarmName("浜哄憳琛屼负鍒嗘瀽"); + info.setAlarmTime(sTime); + if (ardCamerasList.size() > 0) { + ArdCameras camera = ardCamerasService.selectArdCamerasList(ardCameras).get(0); info.setCameraName(camera.getName()); info.setCameraId(camera.getId()); info.setCameraIp(camera.getIp()); @@ -171,217 +177,218 @@ // log.debug("鏈煡琛屼负浜嬩欢绫诲瀷:" + strVcaAlarm.struRuleInfo.wEventTypeEx); break; } - //endregion - break; - case HCNetSDK.COMM_UPLOAD_FACESNAP_RESULT: - //log.debug("浜鸿劯妫�娴嬩簨浠朵笂鎶�(鏆備笉瑙f瀽)"); - break; - case HCNetSDK.COMM_GISINFO_UPLOAD: - //log.debug("GPS鎶ヨ淇℃伅涓婃姤(鏆備笉瑙f瀽)"); - break; - case HCNetSDK.COMM_ALARMHOST_CID_ALARM: - //log.debug("鎶ヨ涓绘満CID鎶ュ憡鎶ヨ涓婃姤"); - //region 鎶ヨ涓绘満鎶ヨ澶勭悊 - ArdEquipExternal ardEquipExternal = new ArdEquipExternal(); - ardEquipExternal.setIp(sDeviceIP); - ardEquipExternal.setPort(wLinkPort); - IArdEquipExternalService ardEquipExternalService = SpringUtils.getBean(IArdEquipExternalService.class); - ardEquipExternal = ardEquipExternalService.selectArdEquipExternal(ardEquipExternal); + } + //endregion + break; + case HCNetSDK.COMM_UPLOAD_FACESNAP_RESULT: + //log.debug("浜鸿劯妫�娴嬩簨浠朵笂鎶�(鏆備笉瑙f瀽)"); + break; + case HCNetSDK.COMM_GISINFO_UPLOAD: + //log.debug("GPS鎶ヨ淇℃伅涓婃姤(鏆備笉瑙f瀽)"); + break; + case HCNetSDK.COMM_ALARMHOST_CID_ALARM: + log.debug("鎶ヨ涓绘満CID鎶ュ憡鎶ヨ涓婃姤"); + //region 鎶ヨ涓绘満鎶ヨ澶勭悊 + ArdEquipExternal ardEquipExternal = new ArdEquipExternal(); + ardEquipExternal.setIp(sDeviceIP); + ardEquipExternal.setPort(wLinkPort); + IArdEquipExternalService ardEquipExternalService = SpringUtils.getBean(IArdEquipExternalService.class); + ardEquipExternal = ardEquipExternalService.selectArdEquipExternal(ardEquipExternal); - HCNetSDK.NET_DVR_CID_ALARM netDvrCidAlarm = new HCNetSDK.NET_DVR_CID_ALARM(); - netDvrCidAlarm.write(); - Pointer pCIDInfo = netDvrCidAlarm.getPointer(); - pCIDInfo.write(0, pAlarmInfo.getByteArray(0, netDvrCidAlarm.size()), 0, netDvrCidAlarm.size()); - netDvrCidAlarm.read(); - //CID浜嬩欢鍚� - String sCIDCode = ByteUtils.bytesToStringZh(netDvrCidAlarm.sCIDCode);//CID浜嬩欢鍚� - //CID浜嬩欢鍚� - //String sCIDDescribe = ByteUtils.bytesToStringZh(netDvrCidAlarm.sCIDDescribe);//CID浜嬩欢鍚� - int position = ByteUtils.findIndexOfDoubleZero(netDvrCidAlarm.sCIDDescribe); - String sCIDDescribe; - if (position != -1) { - byte[] result = new byte[position]; - System.arraycopy(netDvrCidAlarm.sCIDDescribe, 0, result, 0, position); - sCIDDescribe = ByteUtils.bytesToStringZh(result); - } else { - sCIDDescribe = ByteUtils.bytesToStringZh(netDvrCidAlarm.sCIDDescribe); - } - //瑙﹀彂鎶ヨ鐨勬椂闂寸偣 - String struTriggerTime = DateUtils.convertDate(parseAlarmTime(netDvrCidAlarm.struTriggerTime), "yyyy-M-d H:m:s"); - //涓婁紶鎶ヨ鐨勬椂闂寸偣 - String struUploadTime = DateUtils.convertDate(parseAlarmTime(netDvrCidAlarm.struUploadTime), "yyyy-M-d H:m:s"); - //鎶ュ憡绫诲瀷 - String byReportType = ""; - switch (netDvrCidAlarm.byReportType) { - case 1: - byReportType = "闃插尯鎶ヨ"; - break; - case 2: - byReportType = "瑙嗛鎶ヨ"; - break; - case 3: - byReportType = "杞槻鍖烘姤璀�"; - break; - case 4: - byReportType = "鎸熸寔鎶ヨ"; - break; - case 5: - byReportType = "闃叉媶鎶ヨ "; - break; - case 6: - byReportType = "鎿嶄綔鎶ュ憡 "; - break; - case 7: - byReportType = "寮傚父鎶ュ憡 "; - break; - } - //瀛愮郴缁熷彿 - Integer bySubSysNo = Integer.valueOf(netDvrCidAlarm.bySubSysNo); - //闃插尯鍙� 璧峰0 - Integer wDefenceNo = Integer.valueOf(netDvrCidAlarm.wDefenceNo); - //闃插尯鍚嶇О - String wDefenceName = ""; - if (!bySubSysNo.equals(-1)) { - CameraCmd cmd = new CameraCmd(); - cmd.setCameraId(ardEquipExternal.getId()); - cmd.setWZoneIndex(wDefenceNo); - wDefenceName = HikClientUtil.getDefenseZoneName(cmd); - } - if (sCIDDescribe.contains("鎭㈠")) { - return true; - } - - ExternalAlarmEventInfo externalAlarmEventInfo = new ExternalAlarmEventInfo(); - externalAlarmEventInfo.setAlarmId(sCIDCode); - externalAlarmEventInfo.setAlarmName(sCIDDescribe); - externalAlarmEventInfo.setDefenseId((wDefenceNo + 1)); - externalAlarmEventInfo.setDefenseName(wDefenceName); - externalAlarmEventInfo.setSubSysNo(bySubSysNo); - externalAlarmEventInfo.setAlarmType(byReportType); - externalAlarmEventInfo.setAlarmTime(struTriggerTime); - externalAlarmEventInfo.setAlarmHostId(ardEquipExternal.getId()); - publishMqtt(externalAlarmEventInfo); - //endregion - break; - case HCNetSDK.COMM_ALARM_ACS: - //region 闂ㄧ涓绘満鎶ヨ澶勭悊 - ArdEquipExternal accessControlHost = new ArdEquipExternal(); - accessControlHost.setIp(sDeviceIP); - accessControlHost.setPort(wLinkPort); - ardEquipExternalService = SpringUtils.getBean(IArdEquipExternalService.class); - accessControlHost = ardEquipExternalService.selectArdEquipExternal(accessControlHost); - HCNetSDK.NET_DVR_ACS_ALARM_INFO strACSInfo = new HCNetSDK.NET_DVR_ACS_ALARM_INFO(); - strACSInfo.write(); - Pointer acsInfo = strACSInfo.getPointer(); - acsInfo.write(0, pAlarmInfo.getByteArray(0, strACSInfo.size()), 0, strACSInfo.size()); - strACSInfo.read(); - int dwMajor = strACSInfo.dwMajor; - - if (dwMajor != 5) { - //鍙幏鍙栦簨浠� - // log.debug("闈炰簨浠舵姤璀︽暟鎹笂鎶�(鏆備笉瑙f瀽)"); + HCNetSDK.NET_DVR_CID_ALARM netDvrCidAlarm = new HCNetSDK.NET_DVR_CID_ALARM(); + netDvrCidAlarm.write(); + Pointer pCIDInfo = netDvrCidAlarm.getPointer(); + pCIDInfo.write(0, pAlarmInfo.getByteArray(0, netDvrCidAlarm.size()), 0, netDvrCidAlarm.size()); + netDvrCidAlarm.read(); + //CID浜嬩欢鍚� + String sCIDCode = ByteUtils.bytesToStringZh(netDvrCidAlarm.sCIDCode);//CID浜嬩欢鍚� + //CID浜嬩欢鍚� + //String sCIDDescribe = ByteUtils.bytesToStringZh(netDvrCidAlarm.sCIDDescribe);//CID浜嬩欢鍚� + int position = ByteUtils.findIndexOfDoubleZero(netDvrCidAlarm.sCIDDescribe); + String sCIDDescribe; + if (position != -1) { + byte[] result = new byte[position]; + System.arraycopy(netDvrCidAlarm.sCIDDescribe, 0, result, 0, position); + sCIDDescribe = ByteUtils.bytesToStringZh(result); + } else { + sCIDDescribe = ByteUtils.bytesToStringZh(netDvrCidAlarm.sCIDDescribe); + } + //瑙﹀彂鎶ヨ鐨勬椂闂寸偣 + String struTriggerTime = DateUtils.convertDate(parseAlarmTime(netDvrCidAlarm.struTriggerTime), "yyyy-M-d H:m:s"); + //涓婁紶鎶ヨ鐨勬椂闂寸偣 + String struUploadTime = DateUtils.convertDate(parseAlarmTime(netDvrCidAlarm.struUploadTime), "yyyy-M-d H:m:s"); + //鎶ュ憡绫诲瀷 + String byReportType = ""; + switch (netDvrCidAlarm.byReportType) { + case 1: + byReportType = "闃插尯鎶ヨ"; break; - } - - int dwMinor = strACSInfo.dwMinor; - if (dwMinor != 80 && dwMinor != 104) { - //鍙В鏋愮湡浜烘娴嬪け璐ュ拰浜鸿劯鎶撴媿澶辫触鐨勬绫诲瀷浜嬩欢 + case 2: + byReportType = "瑙嗛鎶ヨ"; break; - } - String alarmType = ""; - switch (dwMinor) { - case 104: - alarmType = "鐪熶汉妫�娴嬪け璐�"; - break; - case 80: - alarmType = "浜鸿劯鎶撴媿澶辫触"; - break; - } - log.debug("闂ㄧ涓绘満鎶ヨ涓婁紶:" + alarmType); - String alarmTime = DateUtils.convertDate(parseAlarmTime(strACSInfo.struTime), "yyyy-M-d H:m:s"); + case 3: + byReportType = "杞槻鍖烘姤璀�"; + break; + case 4: + byReportType = "鎸熸寔鎶ヨ"; + break; + case 5: + byReportType = "闃叉媶鎶ヨ "; + break; + case 6: + byReportType = "鎿嶄綔鎶ュ憡 "; + break; + case 7: + byReportType = "寮傚父鎶ュ憡 "; + break; + } + //瀛愮郴缁熷彿 + Integer bySubSysNo = Integer.valueOf(netDvrCidAlarm.bySubSysNo); + //闃插尯鍙� 璧峰0 + Integer wDefenceNo = Integer.valueOf(netDvrCidAlarm.wDefenceNo); + //闃插尯鍚嶇О + String wDefenceName = ""; + if (!bySubSysNo.equals(-1)) { + CameraCmd cmd = new CameraCmd(); + cmd.setCameraId(ardEquipExternal.getId()); + cmd.setWZoneIndex(wDefenceNo); + wDefenceName = HikClientUtil.getDefenseZoneName(cmd); + } + if (sCIDDescribe.contains("鎭㈠")) { + return true; + } - //浜嬩欢鍥剧墖澶勭悊 - int dwPicDataLen = strACSInfo.dwPicDataLen; - if (dwPicDataLen > 0) { - try { - //灏嗗瓧鑺傚啓鍏ユ枃浠� - long offset = 0; - ByteBuffer buffers = strACSInfo.pPicData.getByteBuffer(offset, strACSInfo.dwPicDataLen); - byte[] bytes = new byte[strACSInfo.dwPicDataLen]; - buffers.rewind(); - buffers.get(bytes); - InputStream input = new ByteArrayInputStream(bytes); - String bucketName = "pic"; - String objectName = "alarm/" + IdUtils.simpleUUID() + ".jpeg"; - boolean uploadObject = MinioUtil.uploadObject(bucketName, objectName, input, input.available(), "image/JPEG"); - if (uploadObject) { - url = MinioUtil.getBucketObjectUrl(bucketName, objectName); - //log.debug("涓婁紶鏂囦欢鎴愬姛!" + url); - } - } catch (Exception e) { - log.error("鍥剧墖淇濆瓨澶辫触"); + ExternalAlarmEventInfo externalAlarmEventInfo = new ExternalAlarmEventInfo(); + externalAlarmEventInfo.setAlarmId(sCIDCode); + externalAlarmEventInfo.setAlarmName(sCIDDescribe); + externalAlarmEventInfo.setDefenseId((wDefenceNo + 1)); + externalAlarmEventInfo.setDefenseName(wDefenceName); + externalAlarmEventInfo.setSubSysNo(bySubSysNo); + externalAlarmEventInfo.setAlarmType(byReportType); + externalAlarmEventInfo.setAlarmTime(struTriggerTime); + externalAlarmEventInfo.setAlarmHostId(ardEquipExternal.getId()); + publishMqtt(externalAlarmEventInfo); + //endregion + break; + case HCNetSDK.COMM_ALARM_ACS: + log.debug("闂ㄧ涓绘満鎶ヨ涓婃姤"); + //region 闂ㄧ涓绘満鎶ヨ澶勭悊 + ArdEquipExternal accessControlHost = new ArdEquipExternal(); + accessControlHost.setIp(sDeviceIP); + accessControlHost.setPort(wLinkPort); + ardEquipExternalService = SpringUtils.getBean(IArdEquipExternalService.class); + accessControlHost = ardEquipExternalService.selectArdEquipExternal(accessControlHost); + HCNetSDK.NET_DVR_ACS_ALARM_INFO strACSInfo = new HCNetSDK.NET_DVR_ACS_ALARM_INFO(); + strACSInfo.write(); + Pointer acsInfo = strACSInfo.getPointer(); + acsInfo.write(0, pAlarmInfo.getByteArray(0, strACSInfo.size()), 0, strACSInfo.size()); + strACSInfo.read(); + int dwMajor = strACSInfo.dwMajor; + + if (dwMajor != 5) { + //鍙幏鍙栦簨浠� + // log.debug("闈炰簨浠舵姤璀︽暟鎹笂鎶�(鏆備笉瑙f瀽)"); + break; + } + + int dwMinor = strACSInfo.dwMinor; + if (dwMinor != 80 && dwMinor != 104) { + //鍙В鏋愮湡浜烘娴嬪け璐ュ拰浜鸿劯鎶撴媿澶辫触鐨勬绫诲瀷浜嬩欢 + break; + } + String alarmType = ""; + switch (dwMinor) { + case 104: + alarmType = "鐪熶汉妫�娴嬪け璐�"; + break; + case 80: + alarmType = "浜鸿劯鎶撴媿澶辫触"; + break; + } + log.debug("闂ㄧ涓绘満鎶ヨ涓婁紶:" + alarmType); + String alarmTime = DateUtils.convertDate(parseAlarmTime(strACSInfo.struTime), "yyyy-M-d H:m:s"); + + //浜嬩欢鍥剧墖澶勭悊 + int dwPicDataLen = strACSInfo.dwPicDataLen; + if (dwPicDataLen > 0) { + try { + //灏嗗瓧鑺傚啓鍏ユ枃浠� + long offset = 0; + ByteBuffer buffers = strACSInfo.pPicData.getByteBuffer(offset, strACSInfo.dwPicDataLen); + byte[] bytes = new byte[strACSInfo.dwPicDataLen]; + buffers.rewind(); + buffers.get(bytes); + InputStream input = new ByteArrayInputStream(bytes); + String bucketName = "pic"; + String objectName = "alarm/" + IdUtils.simpleUUID() + ".jpeg"; + boolean uploadObject = MinioUtil.uploadObject(bucketName, objectName, input, input.available(), "image/JPEG"); + if (uploadObject) { + url = MinioUtil.getBucketObjectUrl(bucketName, objectName); + //log.debug("涓婁紶鏂囦欢鎴愬姛!" + url); } + } catch (Exception e) { + log.error("鍥剧墖淇濆瓨澶辫触"); } - HCNetSDK.NET_DVR_ACS_EVENT_INFO struAcsEventInfo = strACSInfo.struAcsEventInfo; - int byType = struAcsEventInfo.byType; - String defenseType = ""; - switch (byType) { - case 0: - defenseType = "鍗虫椂闃插尯"; - break; - case 1: - defenseType = "24灏忔椂闃插尯"; - break; - case 2: - defenseType = "寤舵椂闃插尯"; - break; - case 3: - defenseType = "鍐呴儴闃插尯"; - break; - case 4: - defenseType = "閽ュ寵闃插尯"; - break; - case 5: - defenseType = "鐏闃插尯"; - break; - case 6: - defenseType = "鍛ㄧ晫闃插尯"; - break; - case 7: - defenseType = "24灏忔椂鏃犲0闃插尯"; - break; - case 8: - defenseType = "24灏忔椂杈呭姪闃插尯"; - break; - case 9: - defenseType = "24灏忔椂闇囧姩闃插尯"; - break; - case 10: - defenseType = "闂ㄧ绱ф�ュ紑闂ㄩ槻鍖�"; - break; - case 11: - defenseType = "闂ㄧ绱ф�ュ叧闂ㄩ槻鍖�"; - break; - default: - defenseType = "鏃�"; - break; - } - AccessControlHostEventInfo accessControlHostEventInfo = new AccessControlHostEventInfo(); - accessControlHostEventInfo.setSerialNo(struAcsEventInfo.dwSerialNo); - accessControlHostEventInfo.setAlarmType(alarmType); - accessControlHostEventInfo.setDoorNo(struAcsEventInfo.dwDoorNo); - accessControlHostEventInfo.setDefenseType(defenseType); - accessControlHostEventInfo.setAlarmTime(alarmTime); - accessControlHostEventInfo.setPicUrl(url); - accessControlHostEventInfo.setAcsId(accessControlHost.getId()); - publishMqtt(accessControlHostEventInfo); - //endregion - break; - default: - // log.debug("鏈煡鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand)); - break; + } + HCNetSDK.NET_DVR_ACS_EVENT_INFO struAcsEventInfo = strACSInfo.struAcsEventInfo; + int byType = struAcsEventInfo.byType; + String defenseType = ""; + switch (byType) { + case 0: + defenseType = "鍗虫椂闃插尯"; + break; + case 1: + defenseType = "24灏忔椂闃插尯"; + break; + case 2: + defenseType = "寤舵椂闃插尯"; + break; + case 3: + defenseType = "鍐呴儴闃插尯"; + break; + case 4: + defenseType = "閽ュ寵闃插尯"; + break; + case 5: + defenseType = "鐏闃插尯"; + break; + case 6: + defenseType = "鍛ㄧ晫闃插尯"; + break; + case 7: + defenseType = "24灏忔椂鏃犲0闃插尯"; + break; + case 8: + defenseType = "24灏忔椂杈呭姪闃插尯"; + break; + case 9: + defenseType = "24灏忔椂闇囧姩闃插尯"; + break; + case 10: + defenseType = "闂ㄧ绱ф�ュ紑闂ㄩ槻鍖�"; + break; + case 11: + defenseType = "闂ㄧ绱ф�ュ叧闂ㄩ槻鍖�"; + break; + default: + defenseType = "鏃�"; + break; + } + AccessControlHostEventInfo accessControlHostEventInfo = new AccessControlHostEventInfo(); + accessControlHostEventInfo.setSerialNo(struAcsEventInfo.dwSerialNo); + accessControlHostEventInfo.setAlarmType(alarmType); + accessControlHostEventInfo.setDoorNo(struAcsEventInfo.dwDoorNo); + accessControlHostEventInfo.setDefenseType(defenseType); + accessControlHostEventInfo.setAlarmTime(alarmTime); + accessControlHostEventInfo.setPicUrl(url); + accessControlHostEventInfo.setAcsId(accessControlHost.getId()); + publishMqtt(accessControlHostEventInfo); + //endregion + break; + default: + log.debug("鏈煡鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand)); + break; - } } return true; } diff --git a/src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java b/src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java index ee4b07d..24e4662 100644 --- a/src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java +++ b/src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java @@ -124,7 +124,7 @@ int i = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); if (i < 0) { int errorCode = hCNetSDK.NET_DVR_GetLastError(); - log.info("鐧诲綍寮傚父锛�" + errorCode); + log.error("鐧诲綍寮傚父锛�" + errorCode); } } @@ -221,7 +221,7 @@ // GlobalVariable.alarmHostMap.put(key, alarmHost); } } catch (Exception ex) { - log.error("鍒濆鍖栨姤璀︿富鏈哄紓甯革細" + ex.getMessage()); + log.error("鐧诲綍鎵�鏈夋姤璀︿富鏈哄紓甯革細" + ex.getMessage()); } } @@ -245,7 +245,7 @@ // GlobalVariable.alarmHostMap.remove(key); } } catch (Exception ex) { - log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage()); + log.error("鐧诲嚭鎵�鏈夋姤璀︿富鏈哄紓甯革細" + ex.getMessage()); } } @@ -270,7 +270,7 @@ // GlobalVariable.accessHostMap.put(key, accessControlHost); } } catch (Exception ex) { - log.error("鍒濆鍖栨姤璀︿富鏈哄紓甯革細" + ex.getMessage()); + log.error("鐧诲綍鎵�鏈夐棬绂佷富鏈哄紓甯革細" + ex.getMessage()); } } @@ -294,10 +294,57 @@ // GlobalVariable.accessHostMap.remove(key); } } catch (Exception ex) { - log.error("鍒濆鍖栨姤璀︿富鏈哄紓甯革細" + ex.getMessage()); + log.error("鐧诲嚭鎵�鏈夐棬绂佷富鏈哄紓甯革細" + ex.getMessage()); + } + } + /** + * @鎻忚堪 鐧诲綍鎵�鏈夎秴鑴� + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/2/3 10:10 + */ + public static void loginAllSuperBrainHost(List<ArdEquipExternal> ardEquipExternals) { + try { + for (ArdEquipExternal superBrainHost : ardEquipExternals) { + Thread.sleep(100); + DeviceInfo info = new DeviceInfo(); + info.setDeviceId(superBrainHost.getId()); + info.setIp(superBrainHost.getIp()); + info.setPort(superBrainHost.getPort()); + info.setUsername(superBrainHost.getUsername()); + info.setPassword(superBrainHost.getPassword()); + login(info); +// +// String key=accessControlHost.getIp()+":"+accessControlHost.getPort(); +// GlobalVariable.accessHostMap.put(key, accessControlHost); + } + } catch (Exception ex) { + log.error("鐧诲綍鎵�鏈夎秴鑴戝紓甯革細" + ex.getMessage()); } } + /** + * @鎻忚堪 鐧诲嚭鎵�鏈夎秴鑴� + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/2/3 10:10 + */ + public static void logoutAllSuperBrainHost(List<ArdEquipExternal> ardEquipExternals) { + try { + for (ArdEquipExternal superBrainHost : ardEquipExternals) { + Thread.sleep(100); + DeviceInfo info = new DeviceInfo(); + info.setDeviceId(superBrainHost.getId()); + info.setIp(superBrainHost.getIp()); + info.setPort(superBrainHost.getPort()); + info.setUsername(superBrainHost.getUsername()); + info.setPassword(superBrainHost.getPassword()); + logout(info); +// String key=accessControlHost.getIp()+":"+accessControlHost.getPort(); +// GlobalVariable.accessHostMap.remove(key); + } + } catch (Exception ex) { + log.error("鐧诲嚭鎵�鏈夎秴鑴戝紓甯革細" + ex.getMessage()); + } + } /** * 寤虹珛甯冮槻涓婁紶閫氶亾锛岀敤浜庝紶杈撴暟鎹� @@ -323,7 +370,7 @@ HCNetSDK.NET_DVR_SETUPALARM_PARAM m_strAlarmInfo = new HCNetSDK.NET_DVR_SETUPALARM_PARAM(); m_strAlarmInfo.dwSize = m_strAlarmInfo.size(); // 鏅鸿兘浜ら�氬竷闃蹭紭鍏堢骇锛�0 - 涓�绛夌骇锛堥珮锛夛紝1 - 浜岀瓑绾э紙涓級锛�2 - 涓夌瓑绾э紙浣庯級 - m_strAlarmInfo.byLevel = 2; + m_strAlarmInfo.byLevel = 0; // 鏅鸿兘浜ら�氭姤璀︿俊鎭笂浼犵被鍨嬶細0 - 鑰佹姤璀︿俊鎭紙NET_DVR_PLATE_RESULT锛�, 1 - 鏂版姤璀︿俊鎭�(NET_ITS_PLATE_RESULT) m_strAlarmInfo.byAlarmInfoType = 1; // 甯冮槻绫诲瀷(浠呴拡瀵归棬绂佷富鏈恒�佷汉璇佽澶�)锛�0 - 瀹㈡埛绔竷闃�(浼氭柇缃戠画浼�)锛�1 - 瀹炴椂甯冮槻(鍙笂浼犲疄鏃舵暟鎹�) diff --git a/src/main/java/com/ard/utils/other/ByteUtils.java b/src/main/java/com/ard/utils/other/ByteUtils.java index bda4b8c..0c11f68 100644 --- a/src/main/java/com/ard/utils/other/ByteUtils.java +++ b/src/main/java/com/ard/utils/other/ByteUtils.java @@ -30,13 +30,27 @@ * byte鏁扮粍杞腑鏂囧瓧绗︿覆 */ public static String bytesToStringZh(byte[] bytes) { - ByteBuffer buffer = ByteBuffer.wrap(bytes); // byteArray 鏄寘鍚瓧鑺傛暟缁勭殑鍙橀噺 + //ByteBuffer buffer = ByteBuffer.wrap(bytes); // byteArray 鏄寘鍚瓧鑺傛暟缁勭殑鍙橀噺 + //try { + // return new String(buffer.array(), "GBK"); + //} catch (UnsupportedEncodingException e) { + // e.printStackTrace(); + //} + //return ""; + String zhStr = ""; try { - return new String(buffer.array(), "GBK"); + int position = ByteUtils.findIndexOfDoubleZero(bytes); + if (position != -1) { + byte[] result = new byte[position]; + System.arraycopy(bytes, 0, result, 0, position); + zhStr = new String(result, "GBK"); + } else { + zhStr = new String(bytes, "GBK"); + } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } - return ""; + return zhStr; } /** @@ -67,8 +81,13 @@ * byte鏁扮粍杞暣鍨� */ public static int bytesToDecimal(byte[] byteArray) { - ByteBuffer buffer = ByteBuffer.wrap(byteArray); // byteArray 鏄寘鍚瓧鑺傛暟缁勭殑鍙橀噺 - return buffer.getInt(); + //ByteBuffer buffer = ByteBuffer.wrap(byteArray); // byteArray 鏄寘鍚瓧鑺傛暟缁勭殑鍙橀噺 + //return buffer.getInt(); + int decimalValue = 0; + for (int i = 0; i < byteArray.length; i++) { + decimalValue = (decimalValue << 8) | (byteArray[i] & 0xFF); + } + return decimalValue; } diff --git a/src/main/java/com/ard/utils/tcp/ClientHandler.java b/src/main/java/com/ard/utils/tcp/ClientHandler.java index 15258ce..0063611 100644 --- a/src/main/java/com/ard/utils/tcp/ClientHandler.java +++ b/src/main/java/com/ard/utils/tcp/ClientHandler.java @@ -175,7 +175,7 @@ if (!crc32Check) { log.debug("CRC32鏍¢獙涓嶉�氳繃"); } else { - log.debug("CRC32鏍¢獙閫氳繃"); + //log.debug("CRC32鏍¢獙閫氳繃"); } //endregion //log.info("鍘熷鏁版嵁:" + DatatypeConverter.printHexBinary(data)); @@ -188,6 +188,7 @@ // log.info("鍛戒护ID:" + DatatypeConverter.printHexBinary(cmdId)); byte[] payloadSize = Arrays.copyOfRange(data, 2, 4);//鏈夋晥璐熻浇澶у皬 payloadSize = ByteUtils.toLittleEndian(payloadSize); + //log.info("payloadSize:" + DatatypeConverter.printHexBinary(payloadSize)); int payloadSizeToDecimal = ByteUtils.bytesToDecimal(payloadSize); // log.info("鏈夋晥璐熻浇澶у皬(杞暣鍨�):" + payloadSizeToDecimal); //endregion @@ -461,13 +462,17 @@ log.debug("鏂逛綅:" + tx); byte[] fTy = Arrays.copyOfRange(data, 12, 16); fTy = ByteUtils.toLittleEndian(fTy); - float ty= ByteUtils.bytesToFloat(fTy); + float ty = ByteUtils.bytesToFloat(fTy); + if (ty < 0) { + ty += 360; + } log.debug("淇话:" + ty); - Map<String,Object>forceGuideMap=new HashMap<>(); - forceGuideMap.put("p",tx); - forceGuideMap.put("t",ty); - forceGuideMap.put("z",1); - forceGuideMap.put("radarId",radarId); + Map<String, Object> forceGuideMap = new HashMap<>(); + forceGuideMap.put("distance", distance); + forceGuideMap.put("p", tx); + forceGuideMap.put("t", ty); + forceGuideMap.put("radarId", radarId); + log.debug("寮哄埗寮曞淇℃伅" + forceGuideMap); //endregion MqttProducer.publish(2, false, "radarForceGuide", JSON.toJSONString(forceGuideMap)); } @@ -475,5 +480,4 @@ log.error("闆疯揪鎶ユ枃瑙f瀽寮傚父:" + ex.getMessage()); } } - -} +} \ No newline at end of file -- Gitblit v1.9.3