From 1fd64b07ddb99c2d9cc8a358b71aceb6a2c81492 Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期三, 05 七月 2023 15:58:31 +0800 Subject: [PATCH] 修改nettyTCP客户端断开重连 增加数据库连接池 修改日志打印 --- src/main/java/com/ard/alarm/radar/service/impl/ArdEquipRadarServiceImpl.java | 23 - src/main/java/com/ard/utils/tcp/ClientHandler.java | 444 +++++++++++++++++++++++ src/main/java/com/ard/config/DruidConfig.java | 49 ++ src/main/java/com/ard/utils/hiksdk/domain/alarmEventInfo.java | 2 pom.xml | 19 src/main/java/com/ard/utils/ByteUtils.java | 108 +++++ src/main/java/com/ard/utils/hiksdk/util/hikSdkUtil/HIKSDKStructure.java | 2 src/main/java/com/ard/utils/hiksdk/domain/recordInfo.java | 2 src/main/java/com/ard/utils/hiksdk/util/minio/MinioUtils.java | 2 src/main/java/com/ard/utils/SpringTool.java | 18 src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java | 2 src/main/java/com/ard/utils/hiksdk/util/hikSdkUtil/HCNetSDK.java | 3 src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java | 2 src/main/java/com/ard/utils/mqtt/MqttConsumer.java | 4 src/main/java/com/ard/utils/tcp/MessageParsing.java | 38 + src/main/java/com/ard/alarm/tube/service/TubeAlarmService.java | 2 src/main/java/com/ard/utils/hiksdk/util/imageUtil/waterMarkUtil.java | 2 src/main/java/com/ard/utils/hiksdk/service/impl/LoginResultCallBack.java | 6 src/main/resources/logback-spring.xml | 50 ++ src/main/java/com/ard/config/AsyncConfiguration.java | 4 src/main/java/com/ard/utils/udp/NettyUdpServer.java | 5 src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java | 10 src/main/java/com/ard/utils/tcp/NettyTcpClient.java | 7 src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java | 15 src/main/java/com/ard/utils/tcp/NettyTcpClientHandler.java | 79 ++- src/main/java/com/ard/utils/tcp/ClientInitialize.java | 136 +++++++ src/main/resources/application.yml | 35 + src/main/java/com/ard/config/MinioClientSingleton.java | 32 28 files changed, 962 insertions(+), 139 deletions(-) diff --git a/pom.xml b/pom.xml index 0244e01..419f554 100644 --- a/pom.xml +++ b/pom.xml @@ -47,10 +47,7 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> - <dependency> - <groupId>org.postgresql</groupId> - <artifactId>postgresql</artifactId> - </dependency> + <!--娴峰悍褰曞儚鏈轰簩娆″紑鍙戜緷璧杍ar鍖�--> <dependency> <groupId>net.java.jna</groupId> @@ -84,6 +81,20 @@ <artifactId>geodesy</artifactId> <version>1.1.3</version> </dependency> + <!--druid渚濊禆--> + <dependency> + <groupId>com.alibaba</groupId> + <artifactId>druid-spring-boot-starter</artifactId> + <version>1.2.14</version> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-jdbc</artifactId> + </dependency> + <dependency> + <groupId>org.postgresql</groupId> + <artifactId>postgresql</artifactId> + </dependency> </dependencies> <build> 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 1726943..914fd59 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,7 +4,7 @@ import com.ard.alarm.camera.domain.ArdCameras; import com.ard.alarm.camera.mapper.ArdCamerasMapper; import com.ard.alarm.camera.service.IArdCamerasService; -import com.ard.hiksdk.service.impl.HikClientUtil; +import com.ard.utils.hiksdk.service.impl.HikClientUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/ard/alarm/radar/service/impl/ArdEquipRadarServiceImpl.java b/src/main/java/com/ard/alarm/radar/service/impl/ArdEquipRadarServiceImpl.java index 2613750..a096f37 100644 --- a/src/main/java/com/ard/alarm/radar/service/impl/ArdEquipRadarServiceImpl.java +++ b/src/main/java/com/ard/alarm/radar/service/impl/ArdEquipRadarServiceImpl.java @@ -4,6 +4,7 @@ import com.ard.alarm.radar.domain.ArdEquipRadar; import com.ard.alarm.radar.mapper.ArdEquipRadarMapper; import com.ard.alarm.radar.service.IArdEquipRadarService; +import com.ard.utils.tcp.ClientInitialize; import com.ard.utils.tcp.NettyTcpClient; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -19,32 +20,10 @@ * @date 2023-03-11 */ @Service -@Slf4j(topic = "radar") public class ArdEquipRadarServiceImpl implements IArdEquipRadarService { @Autowired private ArdEquipRadarMapper ardEquipRadarMapper; - - - @Resource - NettyTcpClient nettyTcpClient; - @Value("${spring.netty.tcp.enabled}") - private Boolean tcpClientEnable; - @PostConstruct - public void init() { - if(!tcpClientEnable) - { - return; - } - List<ArdEquipRadar> ardEquipRadars = selectArdEquipRadarList(new ArdEquipRadar()); - for (ArdEquipRadar ardEquipRadar:ardEquipRadars) - { - String host = ardEquipRadar.getIp(); - Integer port = Integer.valueOf(ardEquipRadar.getPort()); - log.info("TCP瀹㈡埛绔皾璇曡繛鎺ワ細"+host+":"+port); - nettyTcpClient.init(ardEquipRadar); - } - } /** * 鏌ヨradar 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 a8243d9..3689447 100644 --- a/src/main/java/com/ard/alarm/tube/service/TubeAlarmService.java +++ b/src/main/java/com/ard/alarm/tube/service/TubeAlarmService.java @@ -39,7 +39,7 @@ return; } nettyUdpServer.init(udpPort); - log.info("UDP鏈嶅姟宸插惎鍔�"); + log.info("绠$嚎娉勯湶UDP鏈嶅姟宸插惎鍔�"); } @Async("alarm") diff --git a/src/main/java/com/ard/async/AsyncConfiguration.java b/src/main/java/com/ard/config/AsyncConfiguration.java similarity index 94% rename from src/main/java/com/ard/async/AsyncConfiguration.java rename to src/main/java/com/ard/config/AsyncConfiguration.java index 0d5c5ec..186acc5 100644 --- a/src/main/java/com/ard/async/AsyncConfiguration.java +++ b/src/main/java/com/ard/config/AsyncConfiguration.java @@ -1,4 +1,4 @@ -package com.ard.async; +package com.ard.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -16,7 +16,7 @@ @EnableAsync(proxyTargetClass = true) public class AsyncConfiguration { @Bean("alarm") - public ThreadPoolTaskExecutor executor(){ + public ThreadPoolTaskExecutor alarmExecutor(){ ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); //閰嶇疆鏍稿績绾跨▼鏁� executor.setCorePoolSize(15); diff --git a/src/main/java/com/ard/config/DruidConfig.java b/src/main/java/com/ard/config/DruidConfig.java new file mode 100644 index 0000000..d1df6c6 --- /dev/null +++ b/src/main/java/com/ard/config/DruidConfig.java @@ -0,0 +1,49 @@ +package com.ard.config; +import com.alibaba.druid.filter.Filter; +import com.alibaba.druid.filter.stat.StatFilter; +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.support.http.StatViewServlet; +import com.google.common.collect.Lists; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.web.servlet.ServletRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +/** + * @Description: druid杩炴帴姹犵殑閰嶇疆,閰嶇疆濡備綍澶勭悊鎱ql锛� + * @ClassName: DruidConfig + * @Author: 鍒樿嫃涔� + * @Date: 2023骞�07鏈�04鏃�15:29 + * @Version: 1.0 + **/ +@Configuration +public class DruidConfig { + //杩欎釜娉ㄨВ璇诲彇閰嶇疆鏂囦欢鍓嶇紑涓簆refix鐨勯厤缃紝灏嗗閮ㄧ殑閰嶇疆鏂囦欢涓庤繖閲岀粦瀹� + @ConfigurationProperties(prefix = "spring.datasource.druid") + //瀹瑰櫒鐨勫紑鍚笌鍏抽棴 + @Bean(initMethod = "init",destroyMethod = "close") + public DruidDataSource dataSource(){ + DruidDataSource dataSource=new DruidDataSource(); + dataSource.setProxyFilters(Lists.newArrayList(statFilter())); + return dataSource; + } + //bean娉ㄨВ锛屾垚涓簊pring鐨刡ean锛屽埄鐢╢ilter灏嗘參sql鐨勬棩蹇楁墦鍗板嚭鏉� + @Bean + public Filter statFilter(){ + StatFilter statFilter=new StatFilter(); + //澶氶暱鏃堕棿瀹氫箟涓烘參sql锛岃繖閲屽畾涔変负5s + statFilter.setSlowSqlMillis(5000); + //鏄惁鎵撳嵃鍑烘參鏃ュ織 + statFilter.setLogSlowSql(true); + //鏄惁灏嗘棩蹇楀悎骞惰捣鏉� + statFilter.setMergeSql(true); + return statFilter; + } + //杩欐槸閰嶇疆druid鐨勭洃鎺� + //杩欐槸閰嶇疆druid鐨勭洃鎺т笌閰嶇疆鏂囦欢涓姛鑳戒竴鏍� + //#stat-view-servlet: + // #enabled:true +// @Bean +// public ServletRegistrationBean servletRegistrationBean(){ +// return new ServletRegistrationBean(new StatViewServlet(),"/druid/*"); +// } +} \ No newline at end of file diff --git a/src/main/java/com/ard/config/MinioClientSingleton.java b/src/main/java/com/ard/config/MinioClientSingleton.java index eaf92cf..713af81 100644 --- a/src/main/java/com/ard/config/MinioClientSingleton.java +++ b/src/main/java/com/ard/config/MinioClientSingleton.java @@ -1,12 +1,16 @@ package com.ard.config; +import com.ard.utils.SpringTool; import io.minio.MinioClient; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; +import org.springframework.context.annotation.Bean; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; +import org.springframework.integration.channel.DefaultHeaderChannelRegistry; +import org.springframework.integration.channel.PublishSubscribeChannel; import org.springframework.stereotype.Component; import java.io.IOException; @@ -31,9 +35,9 @@ private volatile static MinioClient minioClient; static { - domainUrl = getYmlNew("minio.endpoint"); - accessKey = getYmlNew("minio.accessKey"); - secretKey = getYmlNew("minio.secretKey"); + domainUrl = SpringTool.getYmlInfo("minio.endpoint"); + accessKey = SpringTool.getYmlInfo("minio.accessKey"); + secretKey = SpringTool.getYmlInfo("minio.secretKey"); log.info("minio淇℃伅锛�" + domainUrl + "(" + accessKey + "/" + secretKey + ")"); } @@ -56,20 +60,14 @@ return minioClient; } - /*yml閰嶇疆淇℃伅鑾峰彇*/ - public static String getYmlNew(String key) { - Resource resource = new ClassPathResource("application.yml"); - Properties properties = null; - try { - YamlPropertiesFactoryBean yamlFactory = new YamlPropertiesFactoryBean(); - yamlFactory.setResources(resource); - properties = yamlFactory.getObject(); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - return properties.get(key).toString(); - } + @Bean + public PublishSubscribeChannel errorChannel() { + return new PublishSubscribeChannel(); + } + @Bean + public DefaultHeaderChannelRegistry integrationHeaderChannelRegistry() { + return new DefaultHeaderChannelRegistry(); + } } diff --git a/src/main/java/com/ard/utils/ByteUtils.java b/src/main/java/com/ard/utils/ByteUtils.java index 507ddcc..33c7856 100644 --- a/src/main/java/com/ard/utils/ByteUtils.java +++ b/src/main/java/com/ard/utils/ByteUtils.java @@ -1,10 +1,9 @@ package com.ard.utils; import javax.xml.bind.DatatypeConverter; +import java.io.ByteArrayOutputStream; import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.zip.CRC32; /** * @Description: 瀛楄妭宸ュ叿绫� @@ -16,20 +15,20 @@ public class ByteUtils { /** * Byte瀛楄妭杞琀ex + * * @param b 瀛楄妭 * @return Hex */ - public static String byteToHex(byte b) - { + public static String byteToHex(byte b) { String hexString = Integer.toHexString(b & 0xFF); //鐢变簬鍗佸叚杩涘埗鏄敱0~9銆丄~F鏉ヨ〃绀�1~16锛屾墍浠ュ鏋淏yte杞崲鎴怘ex鍚庡鏋滄槸<16,灏变細鏄竴涓瓧绗︼紙姣斿A=10锛夛紝閫氬父鏄娇鐢ㄤ袱涓瓧绗︽潵琛ㄧず16杩涘埗浣嶇殑, //鍋囧涓�涓瓧绗︾殑璇濓紝閬囧埌瀛楃涓�11锛岃繖鍒板簳鏄�1涓瓧鑺傦紝杩樻槸1鍜�1涓や釜瀛楄妭锛屽鏄撴贩娣嗭紝濡傛灉鏄ˉ0锛岄偅涔�1鍜�1琛ュ厖鍚庡氨鏄�0101锛�11灏辫〃绀虹函绮圭殑11 - if (hexString.length() < 2) - { + if (hexString.length() < 2) { hexString = new StringBuilder(String.valueOf(0)).append(hexString).toString(); } return hexString.toUpperCase(); } + /** * byte鏁扮粍杞琭loat */ @@ -37,6 +36,7 @@ ByteBuffer buffer = ByteBuffer.wrap(bytes); return buffer.getFloat(); } + /** * byte鏁扮粍杞暣鍨� */ @@ -79,4 +79,98 @@ return littleEndianBytes; } + /** + * 灏忕杞ぇ绔� + */ + public static byte[] toBigEndian(byte[] littleEndianBytes) { + byte[] bigEndianBytes = new byte[littleEndianBytes.length]; + for (int i = 0; i < littleEndianBytes.length; i++) { + bigEndianBytes[i] = littleEndianBytes[littleEndianBytes.length - 1 - i]; + } + return bigEndianBytes; + } + + /** + * int杞琤yte鏁扮粍 + */ + public static byte[] decimalToBytes(int decimalValue) { + ByteBuffer buffer = ByteBuffer.allocate(Integer.BYTES); + buffer.putInt(decimalValue); + return buffer.array(); + } + + /** + * byte鏁扮粍鎷兼帴 + */ + public static byte[] appendArrays(byte[]... arrays) { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + try { + for (byte[] array : arrays) { + outputStream.write(array); + } + } catch (Exception e) { + e.printStackTrace(); + } + return outputStream.toByteArray(); + } + + /** + * byte鏁扮粍CRC32鏍¢獙 + */ + public static byte[] parseCrc32(byte[] bytes) { + CRC32 crc32 = new CRC32(); + crc32.update(bytes); + bytes = ByteUtils.decimalToBytes((int) crc32.getValue()); + bytes = ByteUtils.toBigEndian(bytes); + // System.out.print("鏍¢獙:"+DatatypeConverter.printHexBinary(bytes));//鎵撳嵃crc32鐨勬牎楠屽�� + return bytes; + } + + /** + * 鍘婚櫎鍖呭ご鍖呭熬 + * 鍒樿嫃涔� + * 2023/7/4 11:24 + */ + public static byte[] removeHeaderAndFooter(byte[] data, int headerLength, int footerLength) { + int payloadLength = data.length - headerLength - footerLength; + byte[] payload = new byte[payloadLength]; + System.arraycopy(data, headerLength, payload, 0, payloadLength); + return payload; + } + + /** + * 鍘婚櫎鍖呭ご鍖呭熬crc鏍¢獙 + * 鍒樿嫃涔� + * 2023/7/4 11:24 + */ + public static byte[] removeHeaderFooterAndCRC(byte[] data, int headerLength, int footerLength, int crcLength) { + int payloadLength = data.length - headerLength - footerLength - crcLength; + byte[] payload = new byte[payloadLength]; + System.arraycopy(data, headerLength, payload, 0, payloadLength); + return payload; + } + + /** + * 鑾峰彇鍚庨潰鐨勫瓧鑺傛暟缁� + * 鍒樿嫃涔� + * 2023/7/4 11:24 + */ + public static byte[] getLastBytes(byte[] data, int count) { + int startIndex = data.length - count; + byte[] lastBytes = new byte[count]; + System.arraycopy(data, startIndex, lastBytes, 0, count); + return lastBytes; + } + + /** + * 鎵惧埌00鐨勭储寮曚綅缃� + */ + public static int findIndexOfDoubleZero(byte[] bytes) { + for (int i = 0; i < bytes.length - 1; i++) { + if (bytes[i] == 0x00) { + return i; + } + } + return -1; + } } diff --git a/src/main/java/com/ard/utils/SpringTool.java b/src/main/java/com/ard/utils/SpringTool.java index 0a7acfb..123317b 100644 --- a/src/main/java/com/ard/utils/SpringTool.java +++ b/src/main/java/com/ard/utils/SpringTool.java @@ -1,11 +1,15 @@ package com.ard.utils; import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; import org.springframework.stereotype.Component; import java.nio.ByteBuffer; +import java.util.Properties; /** * @Description: @@ -36,4 +40,18 @@ return getApplicationContext().getBean(name); } + /*yml閰嶇疆淇℃伅鑾峰彇*/ + public static String getYmlInfo(String key) { + Resource resource = new ClassPathResource("application.yml"); + Properties properties = null; + try { + YamlPropertiesFactoryBean yamlFactory = new YamlPropertiesFactoryBean(); + yamlFactory.setResources(resource); + properties = yamlFactory.getObject(); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return properties.get(key).toString(); + } } \ No newline at end of file diff --git a/src/main/java/com/ard/hiksdk/common/GlobalVariable.java b/src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java similarity index 93% rename from src/main/java/com/ard/hiksdk/common/GlobalVariable.java rename to src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java index c45d12b..cf3cd15 100644 --- a/src/main/java/com/ard/hiksdk/common/GlobalVariable.java +++ b/src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java @@ -1,4 +1,4 @@ -package com.ard.hiksdk.common; +package com.ard.utils.hiksdk.common; import com.ard.alarm.camera.domain.ArdCameras; import lombok.Data; diff --git a/src/main/java/com/ard/hiksdk/domain/alarmEventInfo.java b/src/main/java/com/ard/utils/hiksdk/domain/alarmEventInfo.java similarity index 96% rename from src/main/java/com/ard/hiksdk/domain/alarmEventInfo.java rename to src/main/java/com/ard/utils/hiksdk/domain/alarmEventInfo.java index 12ee93f..ff6a06c 100644 --- a/src/main/java/com/ard/hiksdk/domain/alarmEventInfo.java +++ b/src/main/java/com/ard/utils/hiksdk/domain/alarmEventInfo.java @@ -1,4 +1,4 @@ -package com.ard.hiksdk.domain; +package com.ard.utils.hiksdk.domain; import lombok.Data; diff --git a/src/main/java/com/ard/hiksdk/domain/recordInfo.java b/src/main/java/com/ard/utils/hiksdk/domain/recordInfo.java similarity index 90% rename from src/main/java/com/ard/hiksdk/domain/recordInfo.java rename to src/main/java/com/ard/utils/hiksdk/domain/recordInfo.java index 1f5c021..044032c 100644 --- a/src/main/java/com/ard/hiksdk/domain/recordInfo.java +++ b/src/main/java/com/ard/utils/hiksdk/domain/recordInfo.java @@ -1,4 +1,4 @@ -package com.ard.hiksdk.domain; +package com.ard.utils.hiksdk.domain; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/main/java/com/ard/hiksdk/service/impl/FMSGCallBack.java b/src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java similarity index 95% rename from src/main/java/com/ard/hiksdk/service/impl/FMSGCallBack.java rename to src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java index 2803831..b2e594c 100644 --- a/src/main/java/com/ard/hiksdk/service/impl/FMSGCallBack.java +++ b/src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java @@ -1,14 +1,14 @@ -package com.ard.hiksdk.service.impl; +package com.ard.utils.hiksdk.service.impl; 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.impl.ArdCamerasServiceImpl; import com.ard.config.MinioClientSingleton; -import com.ard.hiksdk.common.GlobalVariable; -import com.ard.hiksdk.domain.alarmEventInfo; -import com.ard.hiksdk.util.hikSdkUtil.HCNetSDK; -import com.ard.hiksdk.util.minio.MinioUtils; +import com.ard.utils.hiksdk.common.GlobalVariable; +import com.ard.utils.hiksdk.domain.alarmEventInfo; +import com.ard.utils.hiksdk.util.hikSdkUtil.HCNetSDK; +import com.ard.utils.hiksdk.util.minio.MinioUtils; import com.ard.utils.DateUtils; import com.ard.utils.SpringTool; import com.ard.utils.mqtt.MqttConsumer; @@ -133,7 +133,10 @@ publishMqtt(info); break; case HCNetSDK.COMM_UPLOAD_FACESNAP_RESULT: - log.info("浜鸿劯妫�娴嬩簨浠�"); + log.info("浜鸿劯妫�娴嬩簨浠朵笂鎶�"); + break; + case HCNetSDK.COMM_GISINFO_UPLOAD: + log.info("GPS鎶ヨ淇℃伅涓婃姤"); break; default: log.info("鏈煡鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand)); diff --git a/src/main/java/com/ard/hiksdk/service/impl/HikClientUtil.java b/src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java similarity index 97% rename from src/main/java/com/ard/hiksdk/service/impl/HikClientUtil.java rename to src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java index d0fb7f6..7ace4c1 100644 --- a/src/main/java/com/ard/hiksdk/service/impl/HikClientUtil.java +++ b/src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java @@ -1,10 +1,10 @@ -package com.ard.hiksdk.service.impl; +package com.ard.utils.hiksdk.service.impl; import com.ard.alarm.camera.domain.ArdCameras; import com.ard.alarm.camera.domain.CameraCmd; -import com.ard.hiksdk.common.GlobalVariable; -import com.ard.hiksdk.util.hikSdkUtil.HCNetSDK; -import com.ard.hiksdk.util.minio.MinioUtils; +import com.ard.utils.hiksdk.common.GlobalVariable; +import com.ard.utils.hiksdk.util.hikSdkUtil.HCNetSDK; +import com.ard.utils.hiksdk.util.minio.MinioUtils; import com.sun.jna.Native; import com.sun.jna.Platform; import com.sun.jna.ptr.IntByReference; @@ -14,7 +14,7 @@ import java.nio.ByteBuffer; import java.util.*; -import static com.ard.hiksdk.common.GlobalVariable.cameraMap; +import static com.ard.utils.hiksdk.common.GlobalVariable.cameraMap; /** diff --git a/src/main/java/com/ard/hiksdk/service/impl/LoginResultCallBack.java b/src/main/java/com/ard/utils/hiksdk/service/impl/LoginResultCallBack.java similarity index 90% rename from src/main/java/com/ard/hiksdk/service/impl/LoginResultCallBack.java rename to src/main/java/com/ard/utils/hiksdk/service/impl/LoginResultCallBack.java index 589391a..6f52be7 100644 --- a/src/main/java/com/ard/hiksdk/service/impl/LoginResultCallBack.java +++ b/src/main/java/com/ard/utils/hiksdk/service/impl/LoginResultCallBack.java @@ -1,8 +1,8 @@ -package com.ard.hiksdk.service.impl; +package com.ard.utils.hiksdk.service.impl; import com.ard.alarm.camera.domain.ArdCameras; -import com.ard.hiksdk.common.GlobalVariable; -import com.ard.hiksdk.util.hikSdkUtil.HCNetSDK; +import com.ard.utils.hiksdk.common.GlobalVariable; +import com.ard.utils.hiksdk.util.hikSdkUtil.HCNetSDK; import com.sun.jna.Pointer; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/com/ard/hiksdk/util/hikSdkUtil/HCNetSDK.java b/src/main/java/com/ard/utils/hiksdk/util/hikSdkUtil/HCNetSDK.java similarity index 99% rename from src/main/java/com/ard/hiksdk/util/hikSdkUtil/HCNetSDK.java rename to src/main/java/com/ard/utils/hiksdk/util/hikSdkUtil/HCNetSDK.java index bc27556..23a6961 100644 --- a/src/main/java/com/ard/hiksdk/util/hikSdkUtil/HCNetSDK.java +++ b/src/main/java/com/ard/utils/hiksdk/util/hikSdkUtil/HCNetSDK.java @@ -1,4 +1,4 @@ -package com.ard.hiksdk.util.hikSdkUtil; +package com.ard.utils.hiksdk.util.hikSdkUtil; import com.sun.jna.*; import com.sun.jna.examples.win32.W32API; @@ -899,6 +899,7 @@ public static final int COMM_ALARM_V30 = 0x4000;//9000鎶ヨ淇℃伅涓诲姩涓婁紶 public static final int COMM_ALARM_V40 = 0x4007; public static final int COMM_ALARM_RULE = 0x1102;//琛屼负鍒嗘瀽淇℃伅涓婁紶 + public static final int COMM_GISINFO_UPLOAD = 0x4012;//GIS淇℃伅涓婁紶 public static final int COMM_ALARM_PDC = 0x1103;//瀹㈡祦閲忕粺璁℃姤璀︿笂浼� public static final int COMM_UPLOAD_PLATE_RESULT = 0x2800;//浜ら�氭姄鎷嶇粨鏋滀笂浼� public static final int COMM_ITS_PLATE_RESULT = 0x3050;//浜ら�氭姄鎷嶇殑缁堢鍥剧墖涓婁紶 diff --git a/src/main/java/com/ard/hiksdk/util/hikSdkUtil/HIKSDKStructure.java b/src/main/java/com/ard/utils/hiksdk/util/hikSdkUtil/HIKSDKStructure.java similarity index 95% rename from src/main/java/com/ard/hiksdk/util/hikSdkUtil/HIKSDKStructure.java rename to src/main/java/com/ard/utils/hiksdk/util/hikSdkUtil/HIKSDKStructure.java index 0b853fb..087728e 100644 --- a/src/main/java/com/ard/hiksdk/util/hikSdkUtil/HIKSDKStructure.java +++ b/src/main/java/com/ard/utils/hiksdk/util/hikSdkUtil/HIKSDKStructure.java @@ -1,4 +1,4 @@ -package com.ard.hiksdk.util.hikSdkUtil; +package com.ard.utils.hiksdk.util.hikSdkUtil; import com.sun.jna.Structure; diff --git a/src/main/java/com/ard/hiksdk/util/imageUtil/waterMarkUtil.java b/src/main/java/com/ard/utils/hiksdk/util/imageUtil/waterMarkUtil.java similarity index 98% rename from src/main/java/com/ard/hiksdk/util/imageUtil/waterMarkUtil.java rename to src/main/java/com/ard/utils/hiksdk/util/imageUtil/waterMarkUtil.java index bc6263f..6d8dedb 100644 --- a/src/main/java/com/ard/hiksdk/util/imageUtil/waterMarkUtil.java +++ b/src/main/java/com/ard/utils/hiksdk/util/imageUtil/waterMarkUtil.java @@ -1,4 +1,4 @@ -package com.ard.hiksdk.util.imageUtil; +package com.ard.utils.hiksdk.util.imageUtil; /** * @ClassName WaterMarkUtil diff --git a/src/main/java/com/ard/hiksdk/util/minio/MinioUtils.java b/src/main/java/com/ard/utils/hiksdk/util/minio/MinioUtils.java similarity index 99% rename from src/main/java/com/ard/hiksdk/util/minio/MinioUtils.java rename to src/main/java/com/ard/utils/hiksdk/util/minio/MinioUtils.java index e64662c..9e96035 100644 --- a/src/main/java/com/ard/hiksdk/util/minio/MinioUtils.java +++ b/src/main/java/com/ard/utils/hiksdk/util/minio/MinioUtils.java @@ -1,4 +1,4 @@ -package com.ard.hiksdk.util.minio; +package com.ard.utils.hiksdk.util.minio; import com.ard.config.MinioClientSingleton; import io.minio.*; diff --git a/src/main/java/com/ard/utils/mqtt/MqttConsumer.java b/src/main/java/com/ard/utils/mqtt/MqttConsumer.java index ea2b31a..144e233 100644 --- a/src/main/java/com/ard/utils/mqtt/MqttConsumer.java +++ b/src/main/java/com/ard/utils/mqtt/MqttConsumer.java @@ -165,9 +165,9 @@ log.info("娑堟伅鍙戦�佹垚鍔�"); } } catch (MqttPersistenceException e) { - e.printStackTrace(); + log.error("mqtt鎸佷箙寮傚父锛�" + e.getMessage()); } catch (MqttException e) { - e.printStackTrace(); + log.error("mqtt寮傚父锛�" + e.getMessage()); } } } diff --git a/src/main/java/com/ard/utils/tcp/ClientHandler.java b/src/main/java/com/ard/utils/tcp/ClientHandler.java new file mode 100644 index 0000000..c79496d --- /dev/null +++ b/src/main/java/com/ard/utils/tcp/ClientHandler.java @@ -0,0 +1,444 @@ +package com.ard.utils.tcp; + +/** + * @Description: + * @ClassName: ClientHandler + * @Author: 鍒樿嫃涔� + * @Date: 2023骞�07鏈�05鏃�13:13 + * @Version: 1.0 + **/ + +import com.alibaba.fastjson2.JSON; +import com.ard.alarm.radar.domain.ArdAlarmRadar; +import com.ard.alarm.radar.domain.ArdEquipRadar; +import com.ard.alarm.radar.domain.RadarAlarmData; +import com.ard.utils.ByteUtils; +import com.ard.utils.GisUtils; +import com.ard.utils.mqtt.MqttConsumer; +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelId; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.SimpleChannelInboundHandler; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import javax.xml.bind.DatatypeConverter; +import java.net.InetSocketAddress; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; + +/** + * 瀹㈡埛绔鐞嗗櫒 + * + * @author lijiamin + */ +@Slf4j(topic = "netty") +public class ClientHandler extends SimpleChannelInboundHandler<ByteBuf> { + private ChannelHandlerContext context; + private ScheduledFuture<?> heartbeatTask; + + /** + * 杩炴帴寤虹珛 + * + * @param ctx + * @throws Exception + */ + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + context = ctx; + startHeartbeatTask();//寮�濮嬪彂閫佸績璺� + } + + /** + * 杩炴帴鏂紑 + * + * @param ctx + * @throws Exception + */ + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + ChannelId id = ctx.channel().id(); + InetSocketAddress ipSocket = (InetSocketAddress) ctx.channel().remoteAddress(); + int port = ipSocket.getPort(); + String host = ipSocket.getHostString(); + log.error("涓庤澶�" + host + ":" + port + "杩炴帴鏂紑!"); + ArdEquipRadar ardEquipRadar = ClientInitialize.tureConnectMap.get(id); + // 杩炴帴鏂紑鍚庣殑鏈�鍚庡鐞� + ctx.pipeline().remove(this); + ctx.deregister(); + ctx.close(); + + // 灏嗗け璐ヤ俊鎭彃鍏et闆嗗悎 + ClientInitialize.falseConnectSet.add(ardEquipRadar); + super.channelInactive(ctx); + } + + /** + * 閫氶亾鏁版嵁璇诲彇 + * 涓氬姟鎿嶄綔 + * + * @param ctx + * @param msg + * @throws Exception + */ + @Override + public void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) throws Exception { + ChannelId id = ctx.channel().id(); + ArdEquipRadar ardEquipRadar = ClientInitialize.tureConnectMap.get(id); + // 澶勭悊鎺ユ敹鍒扮殑娑堟伅 + byte[] byteArray = new byte[msg.readableBytes()]; + msg.getBytes(msg.readerIndex(), byteArray); + byte[] bytes = MessageParsing.receiveCompletePacket(byteArray); + if (bytes != null) { + processData(ardEquipRadar, bytes); + } + } + + /** + * 閫氶亾鏁版嵁澶勭悊瀹屾垚 + * + * @param ctx + * @throws Exception + */ + @Override + public void channelReadComplete(ChannelHandlerContext ctx) throws Exception { + super.channelReadComplete(ctx); + } + + /** + * 浜嬩欢瑙﹀彂 + * + * @param ctx + * @param evt + * @throws Exception + */ + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { + super.userEventTriggered(ctx, evt); + } + + /** + * 寮傚父瑙﹀彂 + * + * @param ctx + * @param cause + * @throws Exception + */ + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + // 鍙戠敓寮傚父鏃剁殑澶勭悊 + cause.printStackTrace(); + ctx.close(); + stopHeartbeatTask();//鍋滄蹇冭烦鍙戦�� + } + + /** + * 寮�濮嬪績璺充换鍔� + */ + private void startHeartbeatTask() { + heartbeatTask = context.executor().scheduleAtFixedRate(() -> { + // 鍙戦�佸績璺虫秷鎭� + ByteBuf message = context.alloc().buffer(); + byte[] header = {0x01, 0x02, 0x01}; + byte[] payload = {0x10, 0x00, 0x00, 0x00}; + byte[] payloadCrc32 = ByteUtils.parseCrc32(payload); + byte[] footer = {0x01, 0x02, 0x00}; + byte[] heart = ByteUtils.appendArrays(header, payload, payloadCrc32, footer); +// byte[] heart = {0x01, 0x02, 0x01, 0x10, 0x00, 0x00, 0x00, (byte) 0x83, (byte) 0x88, 0x5d, 0x71, 0x01, 0x02, 0x00}; + String hexString = DatatypeConverter.printHexBinary(heart); + log.info("鍙戦�佸績璺�:" + hexString); + message.writeBytes(heart); + context.writeAndFlush(message); + + }, 0, 5, TimeUnit.SECONDS); + } + + /** + * 鍋滄蹇冭烦浠诲姟 + */ + private void stopHeartbeatTask() { + if (heartbeatTask != null) { + heartbeatTask.cancel(false); + heartbeatTask = null; + } + } + + /** + * 瑙f瀽鎶ヨ鏁版嵁 + */ + public void processData(ArdEquipRadar ardEquipRadarbyte, byte[] data) { + try { + String radarId = ardEquipRadarbyte.getId(); + String radarName = ardEquipRadarbyte.getName(); + Double radarLongitude = ardEquipRadarbyte.getLongitude(); + Double radarLagitude = ardEquipRadarbyte.getLatitude(); + //region crc鏍¢獙-鐩墠浠呯敤浜庢樉绀烘牎楠岀粨鏋� + Boolean crc32Check = MessageParsing.CRC32Check(data); + if (!crc32Check) { + log.info("CRC32鏍¢獙涓嶉�氳繃"); + } else { + log.info("CRC32鏍¢獙閫氳繃"); + } + //endregion + //log.info("鍘熷鏁版嵁:" + DatatypeConverter.printHexBinary(data)); + //log.info("闆疯揪淇℃伅锛�" + host + "銆恜ort銆�" + port + "銆怷銆�" + longitude + "銆怸銆�" + lagitude + "銆怹銆�" + altitude); + data = MessageParsing.transferData(data);//鍘绘帀鍖呭ご鍜屽寘灏俱�佹牎楠屽強杞箟 + //region 璐熻浇澶磋В鏋� + byte[] type = Arrays.copyOfRange(data, 0, 1);//鍛戒护绫诲瀷 + // log.info("鍛戒护绫诲瀷:" + DatatypeConverter.printHexBinary(type)); + byte[] cmdId = Arrays.copyOfRange(data, 1, 2);//鍛戒护ID + // log.info("鍛戒护ID:" + DatatypeConverter.printHexBinary(cmdId)); + byte[] payloadSize = Arrays.copyOfRange(data, 2, 4);//鏈夋晥璐熻浇澶у皬 + payloadSize = ByteUtils.toLittleEndian(payloadSize); + int payloadSizeToDecimal = ByteUtils.bytesToDecimal(payloadSize); + // log.info("鏈夋晥璐熻浇澶у皬(杞暣鍨�):" + payloadSizeToDecimal); + //endregion + List<ArdAlarmRadar> radarAlarmInfos = new ArrayList<>(); + String alarmTime = ""; + Integer targetNum = 0; + if (Arrays.equals(cmdId, new byte[]{0x01})) { + //region 鍛婅淇℃伅鍙嶉 + byte[] dwTim = Arrays.copyOfRange(data, 4, 8); + dwTim = ByteUtils.toLittleEndian(dwTim); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + long l = ByteUtils.bytesToDecimal(dwTim); + alarmTime = sdf.format(l * 1000); + // log.info("鍛ㄨ鍥惧儚鐨勫嚭鐜版椂闂�(杞琩ate):" + alarmTime); + + byte[] wTargetNum = Arrays.copyOfRange(data, 8, 10); + wTargetNum = ByteUtils.toLittleEndian(wTargetNum); + targetNum = ByteUtils.bytesToDecimal(wTargetNum); + if (targetNum == 0) { + return; + } + log.info("鐩爣鎬荤偣鏁�(杞暣鍨�):" + targetNum); + + //瑙f瀽NET_TARGET_UNIT(64鏄疦ET_TARGET_HEAD鐨勫瓧鑺傛暟) + int uintSize = (payloadSizeToDecimal - 64) / targetNum; + // log.info("鍗曟潯鎶ヨ澶у皬:" + uintSize); + + for (int i = 0; i < targetNum; i++) { + + Integer index = 68 + uintSize * i; + byte[] dwID = Arrays.copyOfRange(data, index, index + 4); + // log.info("鐩爣ID:" + DatatypeConverter.printHexBinary(cmdId)); + dwID = ByteUtils.toLittleEndian(dwID); + int id = ByteUtils.bytesToDecimal(dwID); + + // log.info("鐩爣ID鍙凤細" + id); + + byte[] iDistance = Arrays.copyOfRange(data, index + 8, index + 12); + iDistance = ByteUtils.toLittleEndian(iDistance); + Double Distance = ByteUtils.bytesToDouble(iDistance); + // log.info("鐩爣褰撳墠璺濈(m):" + Distance); + //region 涓嶉渶瑕佺殑瀛楁 +// byte[] dwGSum = Arrays.copyOfRange(data, index + 4, index + 8); +// dwGSum = toLittleEndian(dwGSum); +// int GSum = byteArrayToDecimal(dwGSum); +// log.info("鐩爣褰撳墠鍍忕礌鐏板害鍜岋細" + GSum); +// byte[] iTw = Arrays.copyOfRange(data, index + 12, index + 16); +// iTw = toLittleEndian(iTw); +// int Tw = byteArrayToDecimal(iTw); +// log.info("鐩爣褰撳墠鐨勫儚绱犲搴�:" + Tw); +// +// byte[] iTh = Arrays.copyOfRange(data, index + 16, index + 20); +// iTh = toLittleEndian(iTh); +// int Th = byteArrayToDecimal(iTh); +// log.info("鐩爣褰撳墠鐨勫儚绱犻珮搴�:" + Th); +// +// byte[] wPxlArea = Arrays.copyOfRange(data, index + 20, index + 22); +// wPxlArea = toLittleEndian(wPxlArea); +// int PxlArea = byteArrayToDecimal(wPxlArea); +// log.info("鐩爣褰撳墠鍍忕礌闈㈢Н:" + PxlArea); +// +// byte[] cTrkNum = Arrays.copyOfRange(data, index + 22, index + 23); +// cTrkNum = toLittleEndian(cTrkNum); +// int TrkNum = byteArrayToDecimal(cTrkNum); +// log.info("杞ㄨ抗鐐规暟:" + TrkNum); + +// byte[] sVx = Arrays.copyOfRange(data, index + 24, index + 26); +// sVx = toLittleEndian(sVx); +// int Vx = byteArrayToDecimal(sVx); +// log.info("鐩爣褰撳墠閫熷害鐭㈤噺(鍍忕礌璺濈)X:" + Vx); +// +// byte[] sVy = Arrays.copyOfRange(data, index + 26, index + 28); +// sVy = toLittleEndian(sVy); +// int Vy = byteArrayToDecimal(sVy); +// log.info("鐩爣褰撳墠閫熷害鐭㈤噺(鍍忕礌璺濈)Y:" + Vy); +// +// byte[] sAreaNo = Arrays.copyOfRange(data, index + 28, index + 30); +// sAreaNo = toLittleEndian(sAreaNo); +// int AreaNo = byteArrayToDecimal(sAreaNo); +// log.info("鐩爣褰掑睘鐨勫憡璀﹀尯鍩熷彿:" + AreaNo); +// +// byte[] cGrp = Arrays.copyOfRange(data, index + 30, index + 31); +// cGrp = toLittleEndian(cGrp); +// int Grp = byteArrayToDecimal(cGrp); +// log.info("鎵�灞炵粍:" + Grp); + //endregion + String alarmType = ""; + byte[] cStat = Arrays.copyOfRange(data, index + 23, index + 24); + cStat = ByteUtils.toLittleEndian(cStat); + String binaryString = String.format("%8s", Integer.toBinaryString(cStat[0] & 0xFF)).replace(' ', '0'); + // log.info("鐩爣褰撳墠鐘舵��:" + binaryString); + // 鎻愬彇绗�4浣嶈嚦绗�6浣嶇殑鍊� + int extractedValue = (cStat[0] >> 4) & 0b00001111; + // 鍒ゆ柇鎻愬彇鐨勫�� + if (extractedValue == 0b0000) { + alarmType = "杩愬姩鐩爣妫�娴�"; + } else if (extractedValue == 0b0001) { + alarmType = "鐑簮妫�娴�"; + } + // log.info("鎶ヨ绫诲瀷:" + alarmType); + + byte[] szName = Arrays.copyOfRange(data, index + 64, index + 96); + int position = ByteUtils.findIndexOfDoubleZero(szName); + String alarmPointName; + if (position != -1) { + byte[] result = new byte[position]; + System.arraycopy(szName, 0, result, 0, position); + alarmPointName = new String(result, "GBK"); + } else { + alarmPointName = new String(szName, "GBK"); + } + // log.info("鎵�灞炲憡璀﹀尯鍩熷悕绉�:" + alarmPointName); + byte[] afTx = Arrays.copyOfRange(data, index + 96, index + 100); + afTx = ByteUtils.toLittleEndian(afTx); + float fTx = ByteUtils.bytesToFloat(afTx); + // log.info("姘村钩瑙掑害:" + fTx); + byte[] afTy = Arrays.copyOfRange(data, index + 112, index + 116); + afTy = ByteUtils.toLittleEndian(afTy); + float fTy = ByteUtils.bytesToFloat(afTy); + // log.info("鍨傜洿瑙掑害:" + fTy); + Double[] radarXY = {radarLagitude, radarLagitude}; + Double[] alarmXY = GisUtils.CalculateCoordinates(radarXY, Distance, (double) fTx); + // log.info("鎶ヨ淇℃伅锛�" + "銆恑d銆�" + id + "銆恘ame銆�" + alarmPointName + "銆恆larmType銆�" + alarmType + "銆恆larmTime銆�" + alarmTime + "銆恉istance銆�" + Distance + "銆怭銆�" + fTx + "銆怲銆�" + fTy + "銆怷銆�" + alarmXY[0] + "銆怸銆�" + alarmXY[1]); + ArdAlarmRadar ardAlarmRadar = new ArdAlarmRadar(); + ardAlarmRadar.setTargetId(id); + ardAlarmRadar.setName(alarmPointName); + ardAlarmRadar.setLongitude(alarmXY[0]); + ardAlarmRadar.setLatitude(alarmXY[1]); + ardAlarmRadar.setAlarmType(alarmType); + radarAlarmInfos.add(ardAlarmRadar); + } + //endregion + } + if (Arrays.equals(cmdId, new byte[]{0x04})) { + //region鎶芥补鏈篈I鐘舵�佸弽棣� + String hexString = DatatypeConverter.printHexBinary(data); + //log.info(hexString); + + byte[] dwTim = Arrays.copyOfRange(data, 4, 8); + dwTim = ByteUtils.toLittleEndian(dwTim); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + long l = ByteUtils.bytesToDecimal(dwTim); + alarmTime = sdf.format(l * 1000); + //log.info("鍛ㄨ鍥惧儚鐨勫嚭鐜版椂闂�(杞琩ate):" + alarmTime); + + byte[] wTargetNum = Arrays.copyOfRange(data, 8, 10); + wTargetNum = ByteUtils.toLittleEndian(wTargetNum); + targetNum = ByteUtils.bytesToDecimal(wTargetNum); + log.info("鐩爣鎬荤偣鏁�(杞暣鍨�):" + targetNum); + if (targetNum == 0) { + return; + } + //瑙f瀽NET_TARGET_UNIT(64鏄疦ET_TARGET_HEAD鐨勫瓧鑺傛暟) + int uintSize = (payloadSizeToDecimal - 64) / targetNum; + //log.info("鍗曟潯鎶ヨ澶у皬:" + uintSize); + for (int i = 0; i < targetNum; i++) { + Integer index = 68 + uintSize * i; + byte[] dwID = Arrays.copyOfRange(data, index, index + 4); + //log.info("鐩爣ID:" + DatatypeConverter.printHexBinary(dwID)); + dwID = ByteUtils.toLittleEndian(dwID); + int id = ByteUtils.bytesToDecimal(dwID); + //log.info("鐩爣ID鍙凤細" + id); + //region 涓嶉渶瑕佺殑瀛楁 + byte[] iTw = Arrays.copyOfRange(data, index + 4, index + 8); + iTw = ByteUtils.toLittleEndian(iTw); + int Tw = ByteUtils.bytesToDecimal(iTw); + // log.info("鐩爣褰撳墠鐨勫儚绱犲搴�:" + Tw); + + byte[] iTh = Arrays.copyOfRange(data, index + 8, index + 12); + iTh = ByteUtils.toLittleEndian(iTh); + int Th = ByteUtils.bytesToDecimal(iTh); + //log.info("鐩爣褰撳墠鐨勫儚绱犻珮搴�:" + Th); + + byte[] fTx = Arrays.copyOfRange(data, index + 12, index + 16); + fTx = ByteUtils.toLittleEndian(fTx); + float fTxAngle = ByteUtils.bytesToFloat(fTx); + //log.info("p瑙掑害:" + fTxAngle); + byte[] fTy = Arrays.copyOfRange(data, index + 16, index + 20); + fTy = ByteUtils.toLittleEndian(fTy); + float fTyAngle = ByteUtils.bytesToFloat(fTy); + //log.info("t瑙掑害:" + fTyAngle); + + byte[] sAreaNo = Arrays.copyOfRange(data, index + 20, index + 22); + sAreaNo = ByteUtils.toLittleEndian(sAreaNo); + int AreaNo = ByteUtils.bytesToDecimal(sAreaNo); + //log.info("鐩爣褰掑睘鐨勫憡璀﹀尯鍩熷彿:" + AreaNo); + + byte[] cGrp = Arrays.copyOfRange(data, index + 22, index + 23); + cGrp = ByteUtils.toLittleEndian(cGrp); + int Grp = ByteUtils.bytesToDecimal(cGrp); + //log.info("鎵�灞炵粍:" + Grp); + //endregion + String alarmType; + byte[] cStat = Arrays.copyOfRange(data, index + 23, index + 24); + cStat = ByteUtils.toLittleEndian(cStat); + //String binaryString = String.format("%8s", Integer.toBinaryString(cStat[0] & 0xFF)).replace(' ', '0'); + //log.info("鐩爣褰撳墠鐘舵��:" + binaryString); + // 鎻愬彇绗�0浣嶅�� + // 浣跨敤浣嶈繍绠楁搷浣滃垽鏂0浣嶆槸鍚︿负1 + boolean isB0 = (cStat[0] & 0x01) == 0x00; + // 鍒ゆ柇鎻愬彇鐨勫�� + if (isB0) { + alarmType = "闆疯揪鎶芥补鏈哄仠鏈�"; + } else { + continue; + } + //log.info("鎶ヨ绫诲瀷:" + alarmType); + + byte[] szName = Arrays.copyOfRange(data, index + 32, index + 64); + //log.info("鎵�灞炲憡璀﹀尯鍩熷悕绉�:" + DatatypeConverter.printHexBinary(szName)); + int position = ByteUtils.findIndexOfDoubleZero(szName); + String alarmPointName; + if (position != -1) { + byte[] result = new byte[position]; + System.arraycopy(szName, 0, result, 0, position); + alarmPointName = new String(result, "GBK"); + } else { + alarmPointName = new String(szName, "GBK"); + } + // log.info("鎵�灞炲憡璀﹀尯鍩熷悕绉�:" + alarmPointName); + //log.info("鎶ヨ淇℃伅锛�" + "銆恑d銆�" + id + "銆恘ame銆�" + alarmPointName + "銆恆larmType銆�" + alarmType + "銆恆larmTime銆�" + alarmTime); + ArdAlarmRadar ardAlarmRadar = new ArdAlarmRadar(); + ardAlarmRadar.setTargetId(id); + ardAlarmRadar.setName(alarmPointName); + ardAlarmRadar.setAlarmType(alarmType); + radarAlarmInfos.add(ardAlarmRadar); + } + //endregion + } + if (StringUtils.isEmpty(alarmTime)) { + return; + } + if (targetNum == 0) { + return; + } + RadarAlarmData radarAlarmData = new RadarAlarmData(); + radarAlarmData.setRadarId(radarId); + radarAlarmData.setRadarName(radarName); + radarAlarmData.setAlarmTime(alarmTime); + radarAlarmData.setArdAlarmRadars(radarAlarmInfos); + MqttConsumer.publish(2, false, "radar", JSON.toJSONString(radarAlarmData)); + } catch (Exception ex) { + log.error("闆疯揪鎶ユ枃瑙f瀽寮傚父:" + ex.getMessage()); + } + } + +} diff --git a/src/main/java/com/ard/utils/tcp/ClientInitialize.java b/src/main/java/com/ard/utils/tcp/ClientInitialize.java new file mode 100644 index 0000000..0fa3d9e --- /dev/null +++ b/src/main/java/com/ard/utils/tcp/ClientInitialize.java @@ -0,0 +1,136 @@ +package com.ard.utils.tcp; + +/** + * @Description: + * @ClassName: init + * @Author: 鍒樿嫃涔� + * @Date: 2023骞�07鏈�05鏃�13:11 + * @Version: 1.0 + **/ + +import com.ard.alarm.radar.domain.ArdEquipRadar; +import com.ard.alarm.radar.service.IArdEquipRadarService; +import io.netty.bootstrap.Bootstrap; +import io.netty.channel.*; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.SocketChannel; +import io.netty.channel.socket.nio.NioSocketChannel; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArraySet; +import java.util.function.Consumer; + +/** + * 瀹㈡埛绔垵濮嬪寲 + * + * @author lijiamin + */ +@Component +@Slf4j(topic = "netty") +public class ClientInitialize { + + @Resource + IArdEquipRadarService ardEquipRadarService; + + @Value("${spring.netty.tcp.enabled}") + private Boolean tcpClientEnable; + + private Bootstrap bootstrap; + public static CopyOnWriteArraySet<ArdEquipRadar> falseConnectSet = new CopyOnWriteArraySet(); + public static ConcurrentHashMap<ChannelId, ArdEquipRadar> tureConnectMap = new ConcurrentHashMap(); + + /** + * Netty鍒濆鍖栭厤缃� + */ + public void initNettyTcp() { + EventLoopGroup eventLoopGroup = new NioEventLoopGroup(); + bootstrap = new Bootstrap(); + bootstrap.group(eventLoopGroup) + .channel(NioSocketChannel.class) + .option(ChannelOption.TCP_NODELAY, true) + .option(ChannelOption.SO_KEEPALIVE, true) + .handler(new ChannelInitializer<SocketChannel>() { + @Override + protected void initChannel(SocketChannel socketChannel) { + socketChannel.pipeline().addLast(new ClientHandler()); + } + }); + + // 寮傛鎸佺画鐩戝惉杩炴帴澶辫触鐨勫湴鍧� + CompletableFuture.runAsync(new Runnable() { + @Override + public void run() { + while (true) { + try { + if (falseConnectSet.size() != 0) { + // 寰幆闆嗗悎鍐呭厓绱� + falseConnectSet.forEach(new Consumer<ArdEquipRadar>() { + @Override + public void accept(ArdEquipRadar ardEquipRadar) { + connectServer(ardEquipRadar); + } + }); + } + Thread.sleep(3000); + } catch (Exception e) { + log.error("Netty鍒濆鍖栭厤缃洃鍚湴鍧�鍑虹幇寮傚父"); + e.printStackTrace(); + } + } + } + }); + } + + /** + * 鏈嶅姟杩炴帴 + * + * @param ardEquipRadar + */ + public void connectServer(ArdEquipRadar ardEquipRadar) { + // 鑾峰彇鍦板潃鍙婄鍙� + String host = ardEquipRadar.getIp(); + Integer port = ardEquipRadar.getPort(); + // 寮傛杩炴帴tcp鏈嶅姟绔� + bootstrap.remoteAddress(host, port).connect().addListener((ChannelFuture futureListener) -> { + if (!futureListener.isSuccess()) { + log.error(host + ":" + port + "闆疯揪TCP鏈嶅姟绔繛鎺ュけ璐�"); + futureListener.channel().close(); + // 杩炴帴澶辫触淇℃伅鎻掑叆Set + falseConnectSet.add(ardEquipRadar); + // 杩炴帴澶辫触淇℃伅浠巑ap绉婚櫎 + tureConnectMap.remove(futureListener.channel().id()); + } else { + log.info(host + ":" + port + "闆疯揪TCP鏈嶅姟绔繛鎺ユ垚鍔�"); + // 杩炴帴鎴愬姛淇℃伅浠嶴et鎷旈櫎 + falseConnectSet.remove(ardEquipRadar); + // 杩炴帴鎴愬姛淇℃伅鍐欏叆map + tureConnectMap.put(futureListener.channel().id(), ardEquipRadar); + } + }); + } + + /** + * 鍒濆鍖栨柟娉� + */ + @PostConstruct + public void initialize() { + if (!tcpClientEnable) { + return; + } + initNettyTcp();//鍒濆鍖杗ettyTcp + List<ArdEquipRadar> ardEquipRadars = ardEquipRadarService.selectArdEquipRadarList(new ArdEquipRadar()); + for (ArdEquipRadar ardEquipRadar : ardEquipRadars) { + String host = ardEquipRadar.getIp(); + Integer port = Integer.valueOf(ardEquipRadar.getPort()); + log.info("TCP瀹㈡埛绔皾璇曡繛鎺ワ細" + host + ":" + port); + connectServer(ardEquipRadar);//杩炴帴姣忎竴涓浄杈炬湇鍔� + } + } +} diff --git a/src/main/java/com/ard/utils/tcp/MessageParsing.java b/src/main/java/com/ard/utils/tcp/MessageParsing.java index 14aa3c5..e468e9d 100644 --- a/src/main/java/com/ard/utils/tcp/MessageParsing.java +++ b/src/main/java/com/ard/utils/tcp/MessageParsing.java @@ -1,5 +1,7 @@ package com.ard.utils.tcp; +import com.ard.utils.ByteUtils; + import javax.xml.bind.DatatypeConverter; import java.util.ArrayList; import java.util.Arrays; @@ -44,6 +46,36 @@ } /** + * crc32鏍¢獙妫�鏌� + * 鍒樿嫃涔� + * 2023/7/4 11:24 + */ + public static Boolean CRC32Check(byte[] packet) { + //System.out.println(DatatypeConverter.printHexBinary(packet)); + int headerLength = 3;//鍖呭ご3涓瓧鑺� + int footerLength = 3;//鍖呭熬3涓瓧鑺� + int crcLength = 4;//crc鏍¢獙4涓瓧鑺� + //鍘绘帀鍖呭ご鍖呭熬 + byte[] payloadCrc32 = ByteUtils.removeHeaderAndFooter(packet, headerLength, footerLength); + //System.out.println(DatatypeConverter.printHexBinary(payloadCrc32)); + //鑾峰彇鍒版暟鎹惡甯︾殑crc32鍊� + byte[] oldCrc32 = ByteUtils.getLastBytes(payloadCrc32, crcLength); + //鍘绘帀鍖呭ご鍖呭熬crc32瀛楄妭锛屼粎淇濈暀璐熻浇 + byte[] payload = ByteUtils.removeHeaderFooterAndCRC(packet, headerLength, footerLength, crcLength); + // System.out.println(DatatypeConverter.printHexBinary(payload)); + //璁$畻璐熻浇鐨刢rc32鍊� + byte[] NewCrc32 = ByteUtils.parseCrc32(payload); + System.out.println("old:"+DatatypeConverter.printHexBinary(oldCrc32)); + System.out.println("new:"+DatatypeConverter.printHexBinary(NewCrc32)); + //鍒ゆ柇鏁版嵁鐨刢rc32鏍¢獙鍊煎拰璁$畻鍊兼槸鍚︾浉鍚� + if (Arrays.equals(oldCrc32, NewCrc32)) { + return true; + } else { + return false; + } + } + + /** * 鑾峰彇鍖呯粨鏉熺储寮� */ public static int findPacketEndIndex(List<Byte> buffer, byte[] packetEnd) { @@ -78,8 +110,10 @@ * 鍘绘帀鍖呭ご鍜屽寘灏炬牎楠屽強杞箟 */ public static byte[] transferData(byte[] data) { - data = Arrays.copyOfRange(data, 3, data.length); - data = Arrays.copyOfRange(data, 0, data.length - 7); + int headerLength = 3;//鍖呭ご3涓瓧鑺� + int footerLength = 3;//鍖呭熬3涓瓧鑺� + int crcLength = 4;//crc鏍¢獙4涓瓧鑺� + data= ByteUtils.removeHeaderFooterAndCRC(data,headerLength,footerLength,crcLength); String dataStr = DatatypeConverter.printHexBinary(data); if (dataStr.contains("01020201")) {//杞箟01020201 dataStr = dataStr.replaceAll("01020201", "010201"); diff --git a/src/main/java/com/ard/utils/tcp/NettyTcpClient.java b/src/main/java/com/ard/utils/tcp/NettyTcpClient.java index 2eab8e2..464bba5 100644 --- a/src/main/java/com/ard/utils/tcp/NettyTcpClient.java +++ b/src/main/java/com/ard/utils/tcp/NettyTcpClient.java @@ -16,7 +16,7 @@ import java.util.concurrent.TimeUnit; /** - * @Description: + * @Description: 鍙︿竴绉峵cp瀹㈡埛绔� 鐩墠寮冪敤 * @ClassName: NettyTcpClient * @Author: 鍒樿嫃涔� * @Date: 2023骞�06鏈�25鏃�17:00 @@ -24,11 +24,10 @@ **/ @EnableAsync @Component -@Slf4j(topic = "radar") +@Slf4j(topic = "netty") public class NettyTcpClient { - @Async + @Async("alarm") public void init(ArdEquipRadar ardEquipRadar) { - while (true) { NioEventLoopGroup group = new NioEventLoopGroup(); try { diff --git a/src/main/java/com/ard/utils/tcp/NettyTcpClientHandler.java b/src/main/java/com/ard/utils/tcp/NettyTcpClientHandler.java index fa6016c..37d339e 100644 --- a/src/main/java/com/ard/utils/tcp/NettyTcpClientHandler.java +++ b/src/main/java/com/ard/utils/tcp/NettyTcpClientHandler.java @@ -11,20 +11,22 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import javax.xml.bind.DatatypeConverter; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; + /** - * @Description: tcp瀹㈡埛绔鐞� + * @Description: tcp瀹㈡埛绔鐞�-寮冪敤 * @ClassName: NettyTcpClientHandler * @Author: 鍒樿嫃涔� * @Date: 2023骞�06鏈�25鏃�17:02 * @Version: 1.0 **/ -@Slf4j(topic = "radar") +@Slf4j(topic = "netty") public class NettyTcpClientHandler extends SimpleChannelInboundHandler<ByteBuf> { private String host; @@ -72,7 +74,12 @@ heartbeatTask = context.executor().scheduleAtFixedRate(() -> { // 鍙戦�佸績璺虫秷鎭� ByteBuf message = context.alloc().buffer(); - byte[] heart = {0x01, 0x02, 0x01, 0x10, 0x00, 0x00, 0x00, (byte) 0x83, (byte) 0x88, 0x5d, 0x71, 0x01, 0x02, 0x00}; + byte[] header = {0x01, 0x02, 0x01}; + byte[] payload = {0x10, 0x00, 0x00, 0x00}; + byte[] payloadCrc32 = ByteUtils.parseCrc32(payload); + byte[] footer = {0x01, 0x02, 0x00}; + byte[] heart = ByteUtils.appendArrays(header, payload, payloadCrc32, footer); +// byte[] heart = {0x01, 0x02, 0x01, 0x10, 0x00, 0x00, 0x00, (byte) 0x83, (byte) 0x88, 0x5d, 0x71, 0x01, 0x02, 0x00}; String hexString = DatatypeConverter.printHexBinary(heart); log.info("鍙戦�佸績璺�:" + hexString); message.writeBytes(heart); @@ -105,23 +112,32 @@ */ public void processData(byte[] data) { try { + //region crc鏍¢獙-鐩墠浠呯敤浜庢樉绀烘牎楠岀粨鏋� + Boolean crc32Check = MessageParsing.CRC32Check(data); + if (!crc32Check) { + log.info("CRC32鏍¢獙涓嶉�氳繃"); + } else { + log.info("CRC32鏍¢獙閫氳繃"); + } + //endregion //log.info("鍘熷鏁版嵁:" + DatatypeConverter.printHexBinary(data)); - log.info("闆疯揪淇℃伅锛�" + host + "銆恜ort銆�" + port + "銆怷銆�" + longitude + "銆怸銆�" + lagitude + "銆怹銆�" + altitude); + //log.info("闆疯揪淇℃伅锛�" + host + "銆恜ort銆�" + port + "銆怷銆�" + longitude + "銆怸銆�" + lagitude + "銆怹銆�" + altitude); data = MessageParsing.transferData(data);//鍘绘帀鍖呭ご鍜屽寘灏俱�佹牎楠屽強杞箟 - + //region 璐熻浇澶磋В鏋� byte[] type = Arrays.copyOfRange(data, 0, 1);//鍛戒护绫诲瀷 // log.info("鍛戒护绫诲瀷:" + DatatypeConverter.printHexBinary(type)); - byte[] cmdId = Arrays.copyOfRange(data, 1, 2);//鍛戒护ID // log.info("鍛戒护ID:" + DatatypeConverter.printHexBinary(cmdId)); - byte[] payloadSize = Arrays.copyOfRange(data, 2, 4);//鏈夋晥璐熻浇澶у皬 payloadSize = ByteUtils.toLittleEndian(payloadSize); int payloadSizeToDecimal = ByteUtils.bytesToDecimal(payloadSize); // log.info("鏈夋晥璐熻浇澶у皬(杞暣鍨�):" + payloadSizeToDecimal); + //endregion List<ArdAlarmRadar> radarAlarmInfos = new ArrayList<>(); - String alarmTime=""; + String alarmTime = ""; + Integer targetNum = 0; if (Arrays.equals(cmdId, new byte[]{0x01})) { + //region 鍛婅淇℃伅鍙嶉 byte[] dwTim = Arrays.copyOfRange(data, 4, 8); dwTim = ByteUtils.toLittleEndian(dwTim); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -131,8 +147,11 @@ byte[] wTargetNum = Arrays.copyOfRange(data, 8, 10); wTargetNum = ByteUtils.toLittleEndian(wTargetNum); - int targetNum = ByteUtils.bytesToDecimal(wTargetNum); - //log.info("鐩爣鎬荤偣鏁�(杞暣鍨�):" + targetNum); + targetNum = ByteUtils.bytesToDecimal(wTargetNum); + if (targetNum == 0) { + return; + } + log.info("鐩爣鎬荤偣鏁�(杞暣鍨�):" + targetNum); //瑙f瀽NET_TARGET_UNIT(64鏄疦ET_TARGET_HEAD鐨勫瓧鑺傛暟) int uintSize = (payloadSizeToDecimal - 64) / targetNum; @@ -213,7 +232,7 @@ // log.info("鎶ヨ绫诲瀷:" + alarmType); byte[] szName = Arrays.copyOfRange(data, index + 64, index + 96); - int position = findIndexOfDoubleZero(szName); + int position = ByteUtils.findIndexOfDoubleZero(szName); String alarmPointName; if (position != -1) { byte[] result = new byte[position]; @@ -242,10 +261,11 @@ ardAlarmRadar.setAlarmType(alarmType); radarAlarmInfos.add(ardAlarmRadar); } - + //endregion } if (Arrays.equals(cmdId, new byte[]{0x04})) { - //String hexString = DatatypeConverter.printHexBinary(data); + //region鎶芥补鏈篈I鐘舵�佸弽棣� + String hexString = DatatypeConverter.printHexBinary(data); //log.info(hexString); byte[] dwTim = Arrays.copyOfRange(data, 4, 8); @@ -257,9 +277,11 @@ byte[] wTargetNum = Arrays.copyOfRange(data, 8, 10); wTargetNum = ByteUtils.toLittleEndian(wTargetNum); - int targetNum = ByteUtils.bytesToDecimal(wTargetNum); - //log.info("鐩爣鎬荤偣鏁�(杞暣鍨�):" + targetNum); - + targetNum = ByteUtils.bytesToDecimal(wTargetNum); + log.info("鐩爣鎬荤偣鏁�(杞暣鍨�):" + targetNum); + if (targetNum == 0) { + return; + } //瑙f瀽NET_TARGET_UNIT(64鏄疦ET_TARGET_HEAD鐨勫瓧鑺傛暟) int uintSize = (payloadSizeToDecimal - 64) / targetNum; //log.info("鍗曟潯鎶ヨ澶у皬:" + uintSize); @@ -307,9 +329,9 @@ //log.info("鐩爣褰撳墠鐘舵��:" + binaryString); // 鎻愬彇绗�0浣嶅�� // 浣跨敤浣嶈繍绠楁搷浣滃垽鏂0浣嶆槸鍚︿负1 - boolean isBitSet = (cStat[0] & 0x01) == 0x00; + boolean isB0 = (cStat[0] & 0x01) == 0x00; // 鍒ゆ柇鎻愬彇鐨勫�� - if (isBitSet) { + if (isB0) { alarmType = "闆疯揪鎶芥补鏈哄仠鏈�"; } else { continue; @@ -318,7 +340,7 @@ byte[] szName = Arrays.copyOfRange(data, index + 32, index + 64); //log.info("鎵�灞炲憡璀﹀尯鍩熷悕绉�:" + DatatypeConverter.printHexBinary(szName)); - int position = findIndexOfDoubleZero(szName); + int position = ByteUtils.findIndexOfDoubleZero(szName); String alarmPointName; if (position != -1) { byte[] result = new byte[position]; @@ -335,6 +357,13 @@ ardAlarmRadar.setAlarmType(alarmType); radarAlarmInfos.add(ardAlarmRadar); } + //endregion + } + if (StringUtils.isEmpty(alarmTime)) { + return; + } + if (targetNum == 0) { + return; } RadarAlarmData radarAlarmData = new RadarAlarmData(); radarAlarmData.setRadarId(id); @@ -345,18 +374,6 @@ } catch (Exception ex) { log.error("闆疯揪鎶ユ枃瑙f瀽寮傚父:" + ex.getMessage()); } - } - - /** - * 鎵惧埌00鐨勭储寮曚綅缃� - */ - private int findIndexOfDoubleZero(byte[] bytes) { - for (int i = 0; i < bytes.length - 1; i++) { - if (bytes[i] == 0x00) { - return i; - } - } - return -1; } } diff --git a/src/main/java/com/ard/utils/udp/NettyUdpServer.java b/src/main/java/com/ard/utils/udp/NettyUdpServer.java index 724458d..caa5a8e 100644 --- a/src/main/java/com/ard/utils/udp/NettyUdpServer.java +++ b/src/main/java/com/ard/utils/udp/NettyUdpServer.java @@ -18,9 +18,8 @@ /** * 鍚姩鏈嶅姟 */ - @Async + @Async("alarm") public void init(int port) { - //琛ㄧず鏈嶅姟鍣ㄨ繛鎺ョ洃鍚嚎绋嬬粍锛屼笓闂ㄦ帴鍙� accept 鏂扮殑瀹㈡埛绔痗lient 杩炴帴 EventLoopGroup bossLoopGroup = new NioEventLoopGroup(); try { @@ -40,7 +39,7 @@ //7銆佺洃鍚�氶亾鍏抽棴浜嬩欢锛屽簲鐢ㄧ▼搴忎細涓�鐩寸瓑寰咃紝鐩村埌channel鍏抽棴 channelFuture.channel().closeFuture().sync(); } catch (Exception e) { - log.error("error:"+e.getMessage()); + log.error("error:" + e.getMessage()); } finally { log.info("netty udp close!"); //8 鍏抽棴EventLoopGroup锛� diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 50a9b71..2f6c991 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,11 +1,34 @@ spring: + datasource: + # 浣跨敤druid鏁版嵁搴撹繛鎺ユ睜 + druid: + #寮�鍚痙ruid鐩戞帶web + stat-view-servlet: + enabled: true + driver-class-name: org.postgresql.Driver + # url: jdbc:postgresql://111.40.46.199:15432/ry-vue?stringtype=unspecified + # username: postgres + # password: Yykj.2021 + url: jdbc:postgresql://192.168.1.15:5432/ry-vue?stringtype=unspecified + username: postgres + password: postgres + #鏈�澶ц繛鎺ユ暟 + maxActive: 30 + #鏈�灏忚繛鎺ユ暟 + minIdle: 5 + #鑾峰彇杩炴帴鐨勬渶澶х瓑寰呮椂闂� + maxWait: 10000 + #瑙e喅mysql8灏忔椂鐨勯棶棰� + validation-query: SELECT 'X' + #绌洪棽杩炴帴鐨勬鏌ユ椂闂撮棿闅� + timeBetweenEvictionRunsMillis: 60000 + #绌洪棽杩炴帴鏈�灏忕┖闂叉椂闂� + minEvictableIdleTimeMillis: 300000 netty: udp: port: 40000 enabled: true tcp: - host: 112.98.126.2 - port: 1200 enabled: true mqtt: host: tcp://192.168.1.15:1883 @@ -18,14 +41,6 @@ enabled: true stealelec: url: http://iot.zhdk.net:8090/Warning/GetWarning?userName=cy4oil - datasource: - driver-class-name: org.postgresql.Driver -# url: jdbc:postgresql://111.40.46.199:15432/ry-vue?stringtype=unspecified -# username: postgres -# password: Yykj.2021 - url: jdbc:postgresql://192.168.1.15:5432/ry-vue?stringtype=unspecified - username: postgres - password: postgres mybatis: typeAliasesPackage: com.ard.alarm.**.domain mapperLocations: classpath:/mapper/*.xml diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml index 390b765..02e95f2 100644 --- a/src/main/resources/logback-spring.xml +++ b/src/main/resources/logback-spring.xml @@ -76,13 +76,35 @@ <onMismatch>DENY</onMismatch> </filter> </appender> - <!--闆疯揪鎶ヨ鏃ュ織杈撳嚭--> - <appender name="radar" class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${log.path}/radar.log</file> + <!--Netty鏃ュ織杈撳嚭--> + <appender name="netty" class="ch.qos.logback.core.rolling.RollingFileAppender"> + <file>${log.path}/netty.log</file> <!--寰幆鏀跨瓥锛氬熀浜庢椂闂村垱寤烘棩蹇楁枃浠�--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--鏃ュ織鏂囦欢鍚嶆牸寮�--> - <fileNamePattern>${log.path}/radar.%d{yyyy-MM-dd}.log</fileNamePattern> + <fileNamePattern>${log.path}/netty.%d{yyyy-MM-dd}.log</fileNamePattern> + <!--鏃ュ織鏈�澶х殑鍘嗗彶60澶�--> + <maxHistory>60</maxHistory> + </rollingPolicy> + <encoder> + <pattern>${log.pattern}</pattern> + </encoder> + <filter class="ch.qos.logback.classic.filter.LevelFilter"> + <!--杩囨护鐨勭骇鍒�--> + <level>INFO</level> + <!--鍖归厤鏃剁殑鎿嶄綔锛氭帴鏀讹紙璁板綍锛�--> + <onMatch>ACCEPT</onMatch> + <!--涓嶅尮閰嶆椂鐨勬搷浣滐細鎷掔粷锛堜笉璁板綍锛�--> + <onMismatch>DENY</onMismatch> + </filter> + </appender> + <!--Mqtt鏃ュ織杈撳嚭--> + <appender name="mqtt" class="ch.qos.logback.core.rolling.RollingFileAppender"> + <file>${log.path}/mqtt.log</file> + <!--寰幆鏀跨瓥锛氬熀浜庢椂闂村垱寤烘棩蹇楁枃浠�--> + <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> + <!--鏃ュ織鏂囦欢鍚嶆牸寮�--> + <fileNamePattern>${log.path}/mqtt.%d{yyyy-MM-dd}.log</fileNamePattern> <!--鏃ュ織鏈�澶х殑鍘嗗彶60澶�--> <maxHistory>60</maxHistory> </rollingPolicy> @@ -106,16 +128,20 @@ <appender-ref ref="sys-info"/> </root> <!--绠$嚎娉勯湶鎶ヨ鎿嶄綔鏃ュ織--> - <root level="INFO"> + <logger name="tube" level="INFO"> <appender-ref ref="tube"/> - </root> + </logger> <!--閫氱敤鍏夌數鎶ヨ鎿嶄綔鏃ュ織--> - <root level="INFO"> + <logger name="camera" level="INFO"> <appender-ref ref="camera"/> - </root> - <!--闆疯揪鎶ヨ鏃ュ織--> - <root level="INFO"> - <appender-ref ref="radar"/> - </root> + </logger> + <!--Netty鏃ュ織--> + <logger name="netty" level="INFO"> + <appender-ref ref="netty"/> + </logger> + <!--Mqtt鏃ュ織--> + <logger name="mqtt" level="INFO"> + <appender-ref ref="mqtt"/> + </logger> </configuration> -- Gitblit v1.9.3