From 85446b5b526ac53af9add7c83cfd72f39ec39611 Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期五, 07 七月 2023 10:51:13 +0800 Subject: [PATCH] 优化外联设备报警解析并上传mqtt --- src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java | 48 +++++ src/main/java/com/ard/utils/hiksdk/service/impl/LoginResultCallBack.java | 22 - src/main/java/com/ard/utils/hiksdk/domain/DeviceInfo.java | 41 ++++ src/main/java/com/ard/alarm/external/service/IArdEquipExternalService.java | 31 +++ src/main/java/com/ard/alarm/external/mapper/ArdEquipExternalMapper.java | 33 +++ src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java | 62 +++++- src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java | 3 src/main/java/com/ard/utils/hiksdk/domain/ExternalAlarmEventInfo.java | 25 -- src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java | 40 ++- src/main/resources/mapper/ArdEquipExternalMapper.xml | 55 ++++++ src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java | 28 ++ src/main/java/com/ard/utils/mqtt/MqttConsumer.java | 69 ++++--- src/main/java/com/ard/utils/tcp/ClientInitialize.java | 10 src/main/java/com/ard/alarm/external/domain/ArdEquipExternal.java | 55 ++++++ src/main/java/com/ard/alarm/tube/service/TubeAlarmService.java | 14 + 15 files changed, 426 insertions(+), 110 deletions(-) diff --git a/src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java b/src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java index 914fd59..71d9b4b 100644 --- a/src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java +++ b/src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java @@ -4,8 +4,13 @@ import com.ard.alarm.camera.domain.ArdCameras; import com.ard.alarm.camera.mapper.ArdCamerasMapper; import com.ard.alarm.camera.service.IArdCamerasService; +import com.ard.alarm.external.domain.ArdEquipExternal; +import com.ard.alarm.external.mapper.ArdEquipExternalMapper; import com.ard.utils.hiksdk.service.impl.HikClientUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.core.annotation.Order; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; @@ -19,17 +24,25 @@ */ @Service @Slf4j(topic = "camera") -public class ArdCamerasServiceImpl implements IArdCamerasService { +@Order(4) +public class ArdCamerasServiceImpl implements IArdCamerasService, ApplicationRunner { @Resource private ArdCamerasMapper ardCamerasMapper; + @Resource + private ArdEquipExternalMapper ardEquipExternalMapper; + @Override + public void run(ApplicationArguments args) throws Exception { - - @PostConstruct - public void init() - { - List<ArdCameras> ardCameras = ardCamerasMapper.selectArdCamerasList(new ArdCameras()); HikClientUtil.loadHCNetSDKLib(); - HikClientUtil.loginAll(ardCameras); + //鑾峰彇鍏ㄩ儴娴峰悍鍏夌數 + List<ArdCameras> ardCameras = ardCamerasMapper.selectArdCamerasList(new ArdCameras()); + HikClientUtil.loginAllCamera(ardCameras); + //鑾峰彇鍏ㄩ儴娴峰悍鎶ヨ涓绘満 + ArdEquipExternal ardEquipExternal= new ArdEquipExternal(); + ardEquipExternal.setFactory("1"); + ardEquipExternal.setType("1"); + List<ArdEquipExternal> ardEquipExternals = ardEquipExternalMapper.selectArdEquipExternalList(ardEquipExternal); + HikClientUtil.loginAllAlarmHost(ardEquipExternals); } /** * 鏌ヨ鐩告満璁惧 @@ -53,4 +66,5 @@ return ardCamerasMapper.selectArdCamerasList(ardCameras); } + } diff --git a/src/main/java/com/ard/alarm/external/domain/ArdEquipExternal.java b/src/main/java/com/ard/alarm/external/domain/ArdEquipExternal.java new file mode 100644 index 0000000..9d517e0 --- /dev/null +++ b/src/main/java/com/ard/alarm/external/domain/ArdEquipExternal.java @@ -0,0 +1,55 @@ +package com.ard.alarm.external.domain; + +import lombok.Data; + +/** + * 澶栬仈璁惧绠$悊瀵硅薄 ard_equip_external + * + * @author ard + * @date 2023-07-07 + */ +@Data +public class ArdEquipExternal +{ + private static final long serialVersionUID = 1L; + + /** id */ + private String id; + + /** 鍚嶇О */ + private String name; + + /** 璁惧绫诲瀷 */ + private String type; + + /** 鍘傚晢 */ + private String factory; + + /** ip */ + private String ip; + + /** 绔彛 */ + private Integer port; + + /** 鐢ㄦ埛鍚� */ + private String username; + + /** 瀵嗙爜 */ + private String password; + + /** 缁忓害 */ + private Double longitude; + + /** 绾害 */ + private Double latitude; + + /** 瀹夎楂樺害 */ + private Double altitude; + + /** 閮ㄩ棬id */ + private Integer deptId; + + /** 鐢ㄦ埛id */ + private String userId; + +} diff --git a/src/main/java/com/ard/alarm/external/mapper/ArdEquipExternalMapper.java b/src/main/java/com/ard/alarm/external/mapper/ArdEquipExternalMapper.java new file mode 100644 index 0000000..a93f6f1 --- /dev/null +++ b/src/main/java/com/ard/alarm/external/mapper/ArdEquipExternalMapper.java @@ -0,0 +1,33 @@ +package com.ard.alarm.external.mapper; + +import java.util.List; +import com.ard.alarm.external.domain.ArdEquipExternal; +import org.apache.ibatis.annotations.Mapper; + + +/** + * externalMapper鎺ュ彛 + * + * @author zj + * @date 2023-03-13 + */ +@Mapper +public interface ArdEquipExternalMapper +{ + /** + * 鏌ヨexternal + * + * @param id external涓婚敭 + * @return external + */ + public ArdEquipExternal selectArdEquipExternalById(String id); + + /** + * 鏌ヨexternal鍒楄〃 + * + * @param ardEquipExternal external + * @return external闆嗗悎 + */ + public List<ArdEquipExternal> selectArdEquipExternalList(ArdEquipExternal ardEquipExternal); + +} diff --git a/src/main/java/com/ard/alarm/external/service/IArdEquipExternalService.java b/src/main/java/com/ard/alarm/external/service/IArdEquipExternalService.java new file mode 100644 index 0000000..1c455a6 --- /dev/null +++ b/src/main/java/com/ard/alarm/external/service/IArdEquipExternalService.java @@ -0,0 +1,31 @@ +package com.ard.alarm.external.service; + +import java.util.List; +import com.ard.alarm.external.domain.ArdEquipExternal; + + +/** + * externalService鎺ュ彛 + * + * @author zj + * @date 2023-03-13 + */ +public interface IArdEquipExternalService +{ + /** + * 鏌ヨexternal + * + * @param id external涓婚敭 + * @return external + */ + public ArdEquipExternal selectArdEquipExternalById(String id); + + /** + * 鏌ヨexternal鍒楄〃 + * + * @param ardEquipExternal external + * @return external闆嗗悎 + */ + public List<ArdEquipExternal> selectArdEquipExternalList(ArdEquipExternal ardEquipExternal); + +} 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 new file mode 100644 index 0000000..4c05ebf --- /dev/null +++ b/src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java @@ -0,0 +1,48 @@ +package com.ard.alarm.external.service.impl; + +import java.util.List; + +import com.ard.alarm.external.domain.ArdEquipExternal; +import com.ard.alarm.external.mapper.ArdEquipExternalMapper; +import com.ard.alarm.external.service.IArdEquipExternalService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + + +/** + * externalService涓氬姟灞傚鐞� + * + * @author zj + * @date 2023-03-13 + */ +@Service +public class ArdEquipExternalServiceImpl implements IArdEquipExternalService +{ + @Autowired + private ArdEquipExternalMapper ardEquipExternalMapper; + + /** + * 鏌ヨexternal + * + * @param id external涓婚敭 + * @return external + */ + @Override + public ArdEquipExternal selectArdEquipExternalById(String id) + { + return ardEquipExternalMapper.selectArdEquipExternalById(id); + } + + /** + * 鏌ヨexternal鍒楄〃 + * + * @param ardEquipExternal external + * @return external + */ + @Override + public List<ArdEquipExternal> selectArdEquipExternalList(ArdEquipExternal ardEquipExternal) + { + return ardEquipExternalMapper.selectArdEquipExternalList(ardEquipExternal); + } + +} diff --git a/src/main/java/com/ard/alarm/tube/service/TubeAlarmService.java b/src/main/java/com/ard/alarm/tube/service/TubeAlarmService.java index ee7702e..ce6bd9c 100644 --- a/src/main/java/com/ard/alarm/tube/service/TubeAlarmService.java +++ b/src/main/java/com/ard/alarm/tube/service/TubeAlarmService.java @@ -7,6 +7,9 @@ import com.ard.utils.udp.NettyUdpServer; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.core.annotation.Order; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; @@ -24,7 +27,8 @@ **/ @Service @Slf4j(topic = "tube") -public class TubeAlarmService { +@Order(3) +public class TubeAlarmService implements ApplicationRunner { @Resource NettyUdpServer nettyUdpServer; @@ -32,15 +36,15 @@ private Integer udpPort; @Value("${spring.netty.udp.enabled}") private String UdpServerEnable; - - @PostConstruct - public void init() { + @Override + public void run(ApplicationArguments args) throws Exception { if (UdpServerEnable.equals("false")) { return; } nettyUdpServer.init(udpPort); log.info("绠$嚎娉勯湶UDP鏈嶅姟宸插惎鍔�"); } + @Async("alarm") public void alarmHandler(String message) { @@ -79,4 +83,6 @@ log.error("tube鎶ヨ鏁版嵁鎺ㄩ�佸紓甯革細" + ex.getMessage()); } } + + } diff --git a/src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java b/src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java index cf3cd15..6eee57f 100644 --- a/src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java +++ b/src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java @@ -1,6 +1,7 @@ package com.ard.utils.hiksdk.common; import com.ard.alarm.camera.domain.ArdCameras; +import com.ard.alarm.external.domain.ArdEquipExternal; import lombok.Data; import java.util.HashMap; import java.util.Map; @@ -16,6 +17,8 @@ public class GlobalVariable { //淇濆瓨鐩告満淇℃伅key:ip value:camera瀵硅薄 public static Map<String, ArdCameras> cameraMap = new HashMap<>(); + //淇濆瓨鐩告満淇℃伅key:ip value:鎶ヨ涓绘満瀵硅薄 + public static Map<String, ArdEquipExternal> alarmHostMap = new HashMap<>(); //淇濆瓨鐩告満鐧诲綍淇℃伅key:cameraId value:loginId public static Map<String, Integer> loginMap = new HashMap<>(); } diff --git a/src/main/java/com/ard/utils/hiksdk/domain/DeviceInfo.java b/src/main/java/com/ard/utils/hiksdk/domain/DeviceInfo.java new file mode 100644 index 0000000..c0da44c --- /dev/null +++ b/src/main/java/com/ard/utils/hiksdk/domain/DeviceInfo.java @@ -0,0 +1,41 @@ +package com.ard.utils.hiksdk.domain; + +import lombok.Data; + +/** + * @Description: + * @ClassName: DeviceInfo + * @Author: 鍒樿嫃涔� + * @Date: 2023骞�07鏈�07鏃�9:45 + * @Version: 1.0 + **/ +@Data +public class DeviceInfo { + /** + * 璁惧ID + */ + private String deviceId; + /** + * 璁惧绫诲瀷 + */ + private String deviceType; + /** + * ip + */ + private String ip; + + /** + * 绔彛 + */ + private Integer port; + + /** + * 鐢ㄦ埛鍚� + */ + private String username; + + /** + * 瀵嗙爜 + */ + private String password; +} diff --git a/src/main/java/com/ard/utils/hiksdk/domain/ExternalAlarmEventInfo.java b/src/main/java/com/ard/utils/hiksdk/domain/ExternalAlarmEventInfo.java index 6ae023e..6f768be 100644 --- a/src/main/java/com/ard/utils/hiksdk/domain/ExternalAlarmEventInfo.java +++ b/src/main/java/com/ard/utils/hiksdk/domain/ExternalAlarmEventInfo.java @@ -42,29 +42,8 @@ */ Integer subSysNo; /** - * 鍏宠仈鐩告満id + * 鍏宠仈鎶ヨ涓绘満id */ - String cameraId; - /** - * 鍏宠仈鐩告満鍚嶇О - */ - String cameraName; - /** - * 鍏宠仈鐩告満ip - */ - String cameraIp; - - /** - * 鍏宠仈鐩告満缁忓害 - */ - Double longitude; - /** - * 鍏宠仈鐩告満绾害 - */ - Double latitude; - /** - * 鍏宠仈鐩告満绫诲瀷 - */ - String cameraType; + String alarmHostId; } 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 a8a32c0..991e60a 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 @@ -3,7 +3,11 @@ import com.alibaba.fastjson2.JSON; import com.ard.alarm.camera.domain.ArdCameras; import com.ard.alarm.camera.domain.CameraCmd; +import com.ard.alarm.camera.service.IArdCamerasService; import com.ard.alarm.camera.service.impl.ArdCamerasServiceImpl; +import com.ard.alarm.external.domain.ArdEquipExternal; +import com.ard.alarm.external.service.IArdEquipExternalService; +import com.ard.alarm.external.service.impl.ArdEquipExternalServiceImpl; import com.ard.config.MinioClientSingleton; import com.ard.utils.ByteUtils; import com.ard.utils.hiksdk.common.GlobalVariable; @@ -45,13 +49,10 @@ */ @Override public boolean invoke(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) { - ArdCamerasServiceImpl ardCamerasService = SpringTool.getApplicationContext().getBean(ArdCamerasServiceImpl.class); + String sDeviceIP = ByteUtils.bytesToStringZh(pAlarmer.sDeviceIP); Integer wLinkPort = Integer.valueOf(pAlarmer.wLinkPort); - ArdCameras ardCameras = new ArdCameras(); - ardCameras.setIp(sDeviceIP); - ardCameras.setPort(wLinkPort); - ArdCameras ardcamere = ardCamerasService.selectArdCamerasList(ardCameras).get(0); + String sTime;//浜嬩欢鏃堕棿 String url;//浜嬩欢鍥剧墖 alarmEventInfo info;//浜嬩欢淇℃伅 @@ -60,6 +61,11 @@ switch (lCommand) { case HCNetSDK.COMM_ALARM_RULE: //region 琛屼负鍒嗘瀽淇℃伅 + ArdCameras ardCameras = new ArdCameras(); + ardCameras.setIp(sDeviceIP); + ardCameras.setPort(wLinkPort); + IArdCamerasService ardCamerasService = SpringTool.getApplicationContext().getBean(IArdCamerasService.class); + ArdCameras ardcamere = ardCamerasService.selectArdCamerasList(ardCameras).get(0); log.info("鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand)); HCNetSDK.NET_VCA_RULE_ALARM strVcaAlarm = new HCNetSDK.NET_VCA_RULE_ALARM(); strVcaAlarm.write(); @@ -146,6 +152,13 @@ break; case HCNetSDK.COMM_ALARMHOST_CID_ALARM: log.info("鎶ヨ涓绘満 CID 鎶ュ憡鎶ヨ涓婁紶"); + ArdEquipExternal ardEquipExternal = new ArdEquipExternal(); + ardEquipExternal.setIp(sDeviceIP); + ardEquipExternal.setPort(wLinkPort); + IArdEquipExternalService ardEquipExternalService = SpringTool.getApplicationContext().getBean(IArdEquipExternalService.class); + ardEquipExternal = ardEquipExternalService.selectArdEquipExternalList(ardEquipExternal).get(0); + + HCNetSDK.NET_DVR_CID_ALARM netDvrCidAlarm = new HCNetSDK.NET_DVR_CID_ALARM(); netDvrCidAlarm.write(); Pointer pCIDInfo = netDvrCidAlarm.getPointer(); @@ -202,7 +215,7 @@ String wDefenceName = ""; if (!bySubSysNo.equals(-1)) { CameraCmd cmd = new CameraCmd(); - cmd.setCameraId(ardcamere.getId()); + cmd.setCameraId(ardEquipExternal.getId()); cmd.setWZoneIndex(wDefenceNo); wDefenceName = HikClientUtil.getDefenseZoneName(cmd); } @@ -212,15 +225,12 @@ ExternalAlarmEventInfo externalAlarmEventInfo = new ExternalAlarmEventInfo(); externalAlarmEventInfo.setAlarmId(sCIDCode); externalAlarmEventInfo.setAlarmName(sCIDDescribe); - externalAlarmEventInfo.setDefenseId((wDefenceNo + 1) ); + externalAlarmEventInfo.setDefenseId((wDefenceNo + 1)); externalAlarmEventInfo.setDefenseName(wDefenceName); externalAlarmEventInfo.setSubSysNo(bySubSysNo); externalAlarmEventInfo.setAlarmType(byReportType); externalAlarmEventInfo.setAlarmTime(struTriggerTime); - externalAlarmEventInfo.setCameraId(ardcamere.getId()); - externalAlarmEventInfo.setCameraName(ardcamere.getName()); - externalAlarmEventInfo.setCameraIp(ardcamere.getIp()); - externalAlarmEventInfo.setCameraType(ardcamere.getGdtype()); + externalAlarmEventInfo.setAlarmHostId(ardEquipExternal.getId()); publishMqtt(externalAlarmEventInfo); break; default: @@ -291,14 +301,14 @@ "銆怚P銆�" + info.getCameraIp() + "銆愰�氶亾銆�" + info.getCameraChannel() + "銆愬瀷鍙枫��" + info.getCameraType() + "銆愬浘鐗囥��" + info.getPicUrl() + "銆愬潗鏍囥��" + info.getLongitude() + "," + info.getLatitude()); } + /** * 鎵撳嵃澶栬仈鎶ヨ鏃ュ織 */ private void printLog(ExternalAlarmEventInfo info) { log.info("銆愭姤璀D銆�" + info.getAlarmId() + "銆愭姤璀﹀悕绉般��" + info.getAlarmName() + "銆愰槻鍖篒D銆�" + info.getDefenseId() + "銆愰槻鍖哄悕绉般��" + info.getDefenseName() + "銆愮被鍨嬨��" + info.getAlarmType() + - "銆愭椂闂淬��" + info.getAlarmTime() + "銆愮浉鏈篒D銆�" + info.getCameraId() + "銆愮浉鏈恒��" + info.getCameraName() + - "銆怚P銆�" + info.getCameraIp() + "銆愬瀷鍙枫��" + info.getCameraType()); + "銆愭椂闂淬��" + info.getAlarmTime() + "銆愭姤璀︿富鏈篒D銆�" + info.getAlarmHostId()); } /** @@ -308,13 +318,15 @@ // printLog(info); MqttConsumer.publish(2, false, "camera", JSON.toJSONString(info)); } + /** * 澶栬仈鎶ヨ鎺ㄩ�乵qtt */ private void publishMqtt(ExternalAlarmEventInfo info) { printLog(info); - MqttConsumer.publish(2, false, "camera", JSON.toJSONString(info)); + MqttConsumer.publish(2, false, "external", JSON.toJSONString(info)); } + /** * 鏃堕棿鏍煎紡鍖� */ 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 62455b1..5e9590d 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 @@ -2,8 +2,10 @@ import com.ard.alarm.camera.domain.ArdCameras; import com.ard.alarm.camera.domain.CameraCmd; +import com.ard.alarm.external.domain.ArdEquipExternal; import com.ard.utils.ByteUtils; import com.ard.utils.hiksdk.common.GlobalVariable; +import com.ard.utils.hiksdk.domain.DeviceInfo; import com.ard.utils.hiksdk.util.hikSdkUtil.HCNetSDK; import com.ard.utils.hiksdk.util.minio.MinioUtils; import com.sun.jna.Native; @@ -11,12 +13,13 @@ import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; import java.io.*; import java.nio.ByteBuffer; import java.util.*; -import static com.ard.utils.hiksdk.common.GlobalVariable.cameraMap; /** @@ -126,7 +129,7 @@ * @鍒涘缓鏃堕棿 2023/1/17 16:12 * @淇敼浜哄拰鍏跺畠淇℃伅 */ - public static void login(ArdCameras camera) { + public static void login(DeviceInfo deviceInfo) { // 鍒濆鍖� if (!hCNetSDK.NET_DVR_Init()) { log.error("SDK鍒濆鍖栧け璐�"); @@ -138,10 +141,10 @@ } else { hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true); } - String m_sDeviceIP = camera.getIp(); - String m_sUsername = camera.getUsername(); - String m_sPassword = camera.getPassword(); - short m_sPort = camera.getPort().shortValue(); + String m_sDeviceIP = deviceInfo.getIp(); + String m_sUsername = deviceInfo.getUsername(); + String m_sPassword = deviceInfo.getPassword(); + short m_sPort = deviceInfo.getPort().shortValue(); //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂� hCNetSDK.NET_DVR_SetConnectTime(2000, 1); hCNetSDK.NET_DVR_SetReconnect(100000, true); @@ -162,7 +165,7 @@ //鏄惁寮傛鐧诲綍锛�0- 鍚︼紝1- 鏄� windowsSDK閲屾槸true鍜宖alse m_strLoginInfo.bUseAsynLogin = true; //寮傛鐧诲綍鍥炶皟 - m_strLoginInfo.cbLoginResult = new LoginResultCallBack(camera); + m_strLoginInfo.cbLoginResult = new LoginResultCallBack(deviceInfo); m_strLoginInfo.write(); int i = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); if (i < 0) { @@ -170,7 +173,6 @@ log.info("鐧诲綍寮傚父锛�" + errorCode); } } - /** * @鎻忚堪 鐧诲綍鎵�鏈夌浉鏈� * @鍙傛暟 [] @@ -179,18 +181,48 @@ * @鍒涘缓鏃堕棿 2023/2/3 10:10 * @淇敼浜哄拰鍏跺畠淇℃伅 */ - - public static void loginAll(List<ArdCameras> ardCameras) { + public static void loginAllCamera(List<ArdCameras> ardCameras) { try { - log.debug("鍔犺浇lib瀹屾垚锛�"); for (ArdCameras camera : ardCameras) { Thread.sleep(100); - login(camera); + DeviceInfo info=new DeviceInfo(); + info.setDeviceId(camera.getId()); + info.setIp(camera.getIp()); + info.setPort(camera.getPort()); + info.setUsername(camera.getUsername()); + info.setPassword(camera.getPassword()); + login(info); String ip = camera.getIp(); - cameraMap.put(ip, camera); + GlobalVariable.cameraMap.put(ip, camera); } } catch (Exception ex) { log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage()); + } + } + /** + * @鎻忚堪 鐧诲綍鎵�鏈夋姤璀︿富鏈� + * @鍙傛暟 [] + * @杩斿洖鍊� void + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/2/3 10:10 + * @淇敼浜哄拰鍏跺畠淇℃伅 + */ + public static void loginAllAlarmHost(List<ArdEquipExternal> ardEquipExternals) { + try { + for (ArdEquipExternal alarmHost : ardEquipExternals) { + Thread.sleep(100); + DeviceInfo info=new DeviceInfo(); + info.setDeviceId(alarmHost.getId()); + info.setIp(alarmHost.getIp()); + info.setPort(alarmHost.getPort()); + info.setUsername(alarmHost.getUsername()); + info.setPassword(alarmHost.getPassword()); + login(info); + String ip = alarmHost.getIp(); + GlobalVariable.alarmHostMap.put(ip, alarmHost); + } + } catch (Exception ex) { + log.error("鍒濆鍖栨姤璀︿富鏈哄紓甯革細" + ex.getMessage()); } } @@ -269,7 +301,7 @@ logout(lUserID); return lAlarmHandle; } else { - log.info("鐩告満甯冮槻鎴愬姛"); + log.info("璁惧甯冮槻鎴愬姛"); return lAlarmHandle; } } @@ -379,4 +411,6 @@ } return name; } + + } \ No newline at end of file diff --git a/src/main/java/com/ard/utils/hiksdk/service/impl/LoginResultCallBack.java b/src/main/java/com/ard/utils/hiksdk/service/impl/LoginResultCallBack.java index c5ec4a2..4ee2bf5 100644 --- a/src/main/java/com/ard/utils/hiksdk/service/impl/LoginResultCallBack.java +++ b/src/main/java/com/ard/utils/hiksdk/service/impl/LoginResultCallBack.java @@ -3,6 +3,7 @@ import com.ard.alarm.camera.domain.ArdCameras; import com.ard.alarm.camera.domain.CameraCmd; import com.ard.utils.hiksdk.common.GlobalVariable; +import com.ard.utils.hiksdk.domain.DeviceInfo; import com.ard.utils.hiksdk.util.hikSdkUtil.HCNetSDK; import com.sun.jna.Pointer; import lombok.extern.slf4j.Slf4j; @@ -17,27 +18,20 @@ @Slf4j(topic = "hikSdk") public class LoginResultCallBack implements HCNetSDK.FLoginResultCallBack { - private ArdCameras camera; - public LoginResultCallBack(ArdCameras camera) { - this.camera = camera; + private DeviceInfo deviceInfo; + public LoginResultCallBack(DeviceInfo deviceInfo) + { + this.deviceInfo=deviceInfo; } - @Override public int invoke(int lUserID, int dwResult, HCNetSDK.NET_DVR_DEVICEINFO_V30 lpDeviceinfo, Pointer pUser) { - if (GlobalVariable.loginMap.containsKey(camera.getId())) { - GlobalVariable.loginMap.remove(camera.getId()); - } if (dwResult == 1) { - GlobalVariable.loginMap.put(camera.getId(), lUserID); - log.info(camera.getIp() + ":" + camera.getPort() + "鐧诲綍鎴愬姛"); - camera.setLoginId(lUserID); - camera.setChannel((int) lpDeviceinfo.byChanNum); + GlobalVariable.loginMap.put(deviceInfo.getDeviceId(), lUserID); + log.info(deviceInfo.getIp() + ":" + deviceInfo.getPort() + "鐧诲綍鎴愬姛"); // 璁剧疆鎶ヨ鍥炶皟鍑芥暟锛屽缓绔嬫姤璀︿笂浼犻�氶亾锛堝惎鐢ㄥ竷闃诧級 HikClientUtil.setupAlarmChan(lUserID, -1); } else { - log.info(camera.getIp() + ":" + camera.getPort() + "鐧诲綍澶辫触"); - camera.setChannel(0); - camera.setLoginId(-1); + log.info(deviceInfo.getIp() + ":" + deviceInfo.getPort() + "鐧诲綍澶辫触"); } return 1; } diff --git a/src/main/java/com/ard/utils/mqtt/MqttConsumer.java b/src/main/java/com/ard/utils/mqtt/MqttConsumer.java index 144e233..55af6ec 100644 --- a/src/main/java/com/ard/utils/mqtt/MqttConsumer.java +++ b/src/main/java/com/ard/utils/mqtt/MqttConsumer.java @@ -1,12 +1,17 @@ package com.ard.utils.mqtt; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.eclipse.paho.client.mqttv3.*; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; +import org.springframework.core.annotation.Order; +import org.springframework.expression.spel.ast.NullLiteral; import org.springframework.stereotype.Component; + import java.io.UnsupportedEncodingException; + /** * @Description: mqtt娑堣垂瀹㈡埛绔� * @ClassName: MqttConsumer @@ -16,6 +21,7 @@ **/ @Component @Slf4j(topic = "mqtt") +@Order(1) public class MqttConsumer implements ApplicationRunner { private static MqttClient client; @@ -23,8 +29,7 @@ @Override public void run(ApplicationArguments args) { log.info("鍒濆鍖栧苟鍚姩mqtt......"); - if(PropertiesUtil.MQTT_ENABLED) - { + if (PropertiesUtil.MQTT_ENABLED) { this.connect(); } } @@ -49,7 +54,7 @@ } /** - * 鍒涘缓瀹㈡埛绔� --- 1 --- + * 鍒涘缓瀹㈡埛绔� --- 1 --- */ public void getClient() { try { @@ -63,7 +68,7 @@ } /** - * 鐢熸垚閰嶇疆瀵硅薄锛岀敤鎴峰悕锛屽瘑鐮佺瓑 --- 2 --- + * 鐢熸垚閰嶇疆瀵硅薄锛岀敤鎴峰悕锛屽瘑鐮佺瓑 --- 2 --- */ public MqttConnectOptions getOptions() { MqttConnectOptions options = new MqttConnectOptions(); @@ -81,7 +86,7 @@ } /** - * qos --- 3 --- + * qos --- 3 --- */ public int[] getQos(int length) { @@ -101,7 +106,7 @@ } /** - * 瑁呰浇鍚勭瀹炰緥鍜岃闃呬富棰� --- 4 --- + * 瑁呰浇鍚勭瀹炰緥鍜岃闃呬富棰� --- 4 --- */ public void create(MqttConnectOptions options, String[] topic, int[] qos) { try { @@ -130,8 +135,8 @@ /** * 鍙戝竷锛岄潪鎸佷箙鍖� - * - * qos鏍规嵁鏂囨。璁剧疆涓�1 + * <p> + * qos鏍规嵁鏂囨。璁剧疆涓�1 * * @param topic * @param msg @@ -144,30 +149,32 @@ * 鍙戝竷 */ public static void publish(int qos, boolean retained, String topic, String pushMessage) { - log.info("銆愪富棰樸��:" + topic + "銆恞os銆�:" + qos + "銆恜ushMessage銆�:" + pushMessage); - MqttMessage message = new MqttMessage(); - message.setQos(qos); - message.setRetained(retained); - try { - message.setPayload(pushMessage.getBytes("UTF-8")); - } catch (UnsupportedEncodingException e) { - log.error("mqtt缂栫爜寮傚父锛�" + e.getMessage()); - } - MqttTopic mTopic = client.getTopic(topic); - if (null == mTopic) { - log.error("topic锛�" + topic + " 涓嶅瓨鍦�"); - } - MqttDeliveryToken token; - try { - token = mTopic.publish(message); - token.waitForCompletion(); - if (token.isComplete()) { - log.info("娑堟伅鍙戦�佹垚鍔�"); + if (client != null) { + log.info("銆愪富棰樸��:" + topic + "銆恞os銆�:" + qos + "銆恜ushMessage銆�:" + pushMessage); + MqttMessage message = new MqttMessage(); + message.setQos(qos); + message.setRetained(retained); + try { + message.setPayload(pushMessage.getBytes("UTF-8")); + } catch (UnsupportedEncodingException e) { + log.error("mqtt缂栫爜寮傚父锛�" + e.getMessage()); } - } catch (MqttPersistenceException e) { - log.error("mqtt鎸佷箙寮傚父锛�" + e.getMessage()); - } catch (MqttException e) { - log.error("mqtt寮傚父锛�" + e.getMessage()); + MqttTopic mTopic = client.getTopic(topic); + if (null == mTopic) { + log.error("topic锛�" + topic + " 涓嶅瓨鍦�"); + } + MqttDeliveryToken token; + try { + token = mTopic.publish(message); + token.waitForCompletion(); + if (token.isComplete()) { + log.info("娑堟伅鍙戦�佹垚鍔�"); + } + } catch (MqttPersistenceException e) { + log.error("mqtt鎸佷箙寮傚父锛�" + e.getMessage()); + } catch (MqttException e) { + log.error("mqtt寮傚父锛�" + e.getMessage()); + } } } } diff --git a/src/main/java/com/ard/utils/tcp/ClientInitialize.java b/src/main/java/com/ard/utils/tcp/ClientInitialize.java index 0fa3d9e..674d095 100644 --- a/src/main/java/com/ard/utils/tcp/ClientInitialize.java +++ b/src/main/java/com/ard/utils/tcp/ClientInitialize.java @@ -17,6 +17,9 @@ import io.netty.channel.socket.nio.NioSocketChannel; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; @@ -34,7 +37,8 @@ */ @Component @Slf4j(topic = "netty") -public class ClientInitialize { +@Order(2) +public class ClientInitialize implements ApplicationRunner { @Resource IArdEquipRadarService ardEquipRadarService; @@ -119,8 +123,8 @@ /** * 鍒濆鍖栨柟娉� */ - @PostConstruct - public void initialize() { + @Override + public void run(ApplicationArguments args) throws Exception { if (!tcpClientEnable) { return; } diff --git a/src/main/resources/mapper/ArdEquipExternalMapper.xml b/src/main/resources/mapper/ArdEquipExternalMapper.xml new file mode 100644 index 0000000..646ba44 --- /dev/null +++ b/src/main/resources/mapper/ArdEquipExternalMapper.xml @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ard.alarm.external.mapper.ArdEquipExternalMapper"> + + <resultMap type="ArdEquipExternal" id="ArdEquipExternalResult"> + <result property="id" column="id"/> + <result property="name" column="name"/> + <result property="type" column="type"/> + <result property="factory" column="factory"/> + <result property="ip" column="ip"/> + <result property="port" column="port"/> + <result property="username" column="username"/> + <result property="password" column="password"/> + <result property="longitude" column="longitude"/> + <result property="latitude" column="latitude"/> + <result property="altitude" column="altitude"/> + <result property="deptId" column="dept_id"/> + <result property="userId" column="user_id"/> + </resultMap> + + <sql id="selectArdEquipExternalVo"> + select c.id, + c.name, + c.type, + c.factory, + c.ip, + c.port, + c.username, + c.password, + c.longitude, + c.latitude, + c.altitude + from ard_equip_external c + </sql> + + <select id="selectArdEquipExternalList" parameterType="ArdEquipExternal" resultMap="ArdEquipExternalResult"> + <include refid="selectArdEquipExternalVo"/> + <where> + <if test="name != null and name != ''">and c.name like '%'||#{name}||'%'</if> + <if test="type != null and type != ''">and c.type = #{type}</if> + <if test="factory != null and factory != ''">and c.factory = #{factory}</if> + <if test="deptId != null ">and (c.dept_id = #{deptId} OR c.dept_id IN ( SELECT t.dept_id FROM sys_dept t + WHERE cast(#{deptId} as varchar) = any(string_to_array(ancestors,',')) )) + </if> + <if test="userId != null and userId != ''">and c.user_id = #{userId}</if> + </where> + </select> + + <select id="selectArdEquipExternalById" parameterType="String" resultMap="ArdEquipExternalResult"> + <include refid="selectArdEquipExternalVo"/> + where id = #{id} + </select> +</mapper> \ No newline at end of file -- Gitblit v1.9.3