已添加6个文件
已重命名2个文件
已修改5个文件
已删除1个文件
1116 ■■■■ 文件已修改
ard-alarm.iml 151 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/alarm/digitization/model/CylbdBj.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/alarm/digitization/model/Gkbj.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/alarm/digitization/service/Digitization2Service.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/alarm/digitization/service/impl/Digitization2ServiceImpl.java 272 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/alarm/radar/controller/RadarController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/alarm/radar/service/impl/ArdEquipRadarServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/config/AsyncConfiguration.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/utils/netty/tcp/ClientInitialize.java 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/utils/netty/tcp/NettyInit.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/utils/netty/tcp/RadarNettyTcpClient.java 251 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/utils/netty/tcp/handler/ClientHandler.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/utils/netty/tcp/handler/MessageHandler.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-alarm.iml
@@ -25,78 +25,77 @@
    </content>
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.12" level="project" />
    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.12" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.5.14" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.5.14" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.20" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.5.14" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.5.14" level="project" />
    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.11" level="project" />
    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.11" level="project" />
    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.17.2" level="project" />
    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.17.2" level="project" />
    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.36" level="project" />
    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.30" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-all:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-dns:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-haproxy:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-memcache:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-mqtt:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-redis:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-smtp:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-stomp:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-xml:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-native-unix-common:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-handler-ssl-ocsp:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-resolver-dns:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-rxtx:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-sctp:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-udt:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-classes-epoll:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-classes-kqueue:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-resolver-dns-classes-macos:4.1.92.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-transport-native-epoll:linux-x86_64:4.1.92.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-transport-native-epoll:linux-aarch_64:4.1.92.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-transport-native-kqueue:osx-x86_64:4.1.92.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-transport-native-kqueue:osx-aarch_64:4.1.92.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-resolver-dns-native-macos:osx-x86_64:4.1.92.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-resolver-dns-native-macos:osx-aarch_64:4.1.92.Final" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.20" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.20" level="project" />
    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.28" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-all:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-dns:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-haproxy:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-memcache:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-mqtt:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-redis:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-smtp:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-stomp:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-xml:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-resolver-dns:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-rxtx:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-sctp:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-udt:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-classes-epoll:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-native-unix-common:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-classes-kqueue:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-resolver-dns-classes-macos:4.1.77.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-transport-native-epoll:linux-x86_64:4.1.77.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-transport-native-epoll:linux-aarch_64:4.1.77.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-transport-native-kqueue:osx-x86_64:4.1.77.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-transport-native-kqueue:osx-aarch_64:4.1.77.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-resolver-dns-native-macos:osx-x86_64:4.1.77.Final" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.netty:netty-resolver-dns-native-macos:osx-aarch_64:4.1.77.Final" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.integration:spring-integration-mqtt:6.0.3" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.integration:spring-integration-core:5.5.18" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-messaging:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.retry:spring-retry:1.3.4" level="project" />
    <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.4.29" level="project" />
    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.4" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.integration:spring-integration-core:5.5.12" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.20" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-messaging:5.3.20" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.3.20" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.retry:spring-retry:1.3.3" level="project" />
    <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.4.18" level="project" />
    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5" level="project" />
    <orderEntry type="library" name="Maven: com.alibaba.fastjson2:fastjson2:2.0.23" level="project" />
    <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.26" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.5" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.5" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.13.5" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.75" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.75" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.75" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.24" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.5.14" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.5.14" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.6" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.6" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.12.6" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.5.14" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.63" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.63" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.63" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.20" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.20" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.20" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.20" level="project" />
    <orderEntry type="library" name="Maven: net.java.dev.jna:jna:5.4.0" level="project" />
    <orderEntry type="library" name="Maven: net.java.examples:examples:1.0.0" level="project" />
    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-generator:3.5.3.1" level="project" />
@@ -118,6 +117,11 @@
    <orderEntry type="library" name="Maven: com.oracle.ojdbc:simplefan:19.3.0.0" level="project" />
    <orderEntry type="library" name="Maven: com.oracle.ojdbc:ons:19.3.0.0" level="project" />
    <orderEntry type="library" name="Maven: com.oracle.database.nls:orai18n:21.1.0.0" level="project" />
    <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:4.8.1" level="project" />
    <orderEntry type="library" name="Maven: com.squareup.okio:okio:2.7.0" level="project" />
    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-common:1.5.32" level="project" />
    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib:1.5.32" level="project" />
    <orderEntry type="library" name="Maven: org.jetbrains:annotations:13.0" level="project" />
    <orderEntry type="library" name="Maven: io.minio:minio:8.3.5" level="project" />
    <orderEntry type="library" name="Maven: com.carrotsearch.thirdparty:simple-xml-safe:2.7.1" level="project" />
    <orderEntry type="library" name="Maven: com.google.guava:guava:30.1.1-jre" level="project" />
@@ -126,14 +130,9 @@
    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.5.1" level="project" />
    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
    <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:4.9.3" level="project" />
    <orderEntry type="library" name="Maven: com.squareup.okio:okio:2.8.0" level="project" />
    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21" level="project" />
    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib:1.6.21" level="project" />
    <orderEntry type="library" name="Maven: org.jetbrains:annotations:13.0" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.13.5" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.13.5" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.13.5" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.12.6" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.12.6" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.12.6.1" level="project" />
    <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.69" level="project" />
    <orderEntry type="library" name="Maven: org.apache.commons:commons-compress:1.21" level="project" />
    <orderEntry type="library" name="Maven: org.xerial.snappy:snappy-java:1.1.8.4" level="project" />
@@ -141,10 +140,10 @@
    <orderEntry type="library" name="Maven: org.gavaghan:geodesy:1.1.3" level="project" />
    <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.14" level="project" />
    <orderEntry type="library" name="Maven: com.alibaba:druid:1.2.14" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.7.12" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.5.14" level="project" />
    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:4.0.3" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.3.27" level="project" />
    <orderEntry type="library" name="Maven: org.postgresql:postgresql:42.3.8" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.3.20" level="project" />
    <orderEntry type="library" name="Maven: org.postgresql:postgresql:42.2.25" level="project" />
    <orderEntry type="library" name="Maven: org.checkerframework:checker-qual:3.5.0" level="project" />
  </component>
</module>
pom.xml
@@ -5,7 +5,7 @@
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.12</version>
        <version>2.5.14</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ard</groupId>
@@ -90,11 +90,23 @@
            <artifactId>orai18n</artifactId>
            <version>21.1.0.0</version>
        </dependency>
        <!-- okhttp3-->
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.8.1</version>
        </dependency>
        <!--minio依赖-->
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.3.5</version>
            <exclusions>
                <exclusion>
                    <groupId>com.squareup.okhttp3</groupId><!--被排除的jar包-->
                    <artifactId>okhttp</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
@@ -120,6 +132,11 @@
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>
    <build>
src/main/java/com/ard/alarm/digitization/model/CylbdBj.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
package com.ard.alarm.digitization.model;
import lombok.Data;
import java.util.Date;
@Data
public class CylbdBj {
    private Integer id;
    private String orgName;
    private String km;
    private String dm;
    private String dmc;
    private String jh;
    private String wellCommonName;
    private Date fssj;
    private String bdbj;
    private String bjtz;
    private Float cyl1;
    private Float cyl2;
    private String hsqk;
    private String gxsj;
    private String xqkdm;
    private String qdfs;
    private String cyfs;
    private String czsj;
    private String czr;
    private String cznr;
    private String bz;
    private String alarmType;
}
src/main/java/com/ard/alarm/digitization/model/Gkbj.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
package com.ard.alarm.digitization.model;
import lombok.Data;
import java.util.Date;
@Data
public class Gkbj {
    private Integer id;
    private String orgName;
    private String km;
    private String dm;
    private String dmc;
    private String jh;
    private String wellCommonName;
    private Date fssj;
    private String bdbj;
    private String bjtz;
    private Float cyl1;
    private Float cyl2;
    private String hsqk;
    private String gxsj;
    private String xqkdm;
    private String qdfs;
    private String cyfs;
    private String czsj;
    private String czr;
    private String cznr;
    private String bz;
    private String alarmType;
}
src/main/java/com/ard/alarm/digitization/service/Digitization2Service.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,4 @@
package com.ard.alarm.digitization.service;
public interface Digitization2Service {
}
src/main/java/com/ard/alarm/digitization/service/impl/Digitization2ServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,272 @@
package com.ard.alarm.digitization.service.impl;
import com.alibaba.fastjson2.JSON;
import com.ard.alarm.digitization.model.CylbdBj;
import com.ard.alarm.digitization.model.Gkbj;
import com.ard.alarm.digitization.service.Digitization2Service;
import com.ard.utils.jdbc.Query;
import com.ard.utils.mqtt.MqttProducer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
@Service
@Slf4j(topic = "digitization2")
public class Digitization2ServiceImpl implements Digitization2Service {
    @Value("${digitization2.enabled}")
    private Boolean digitization2Enabled;
    @Value("${digitization2.mysql.dbIP}")
    private String digitization2MysqlIP;
    @Value("${digitization2.mysql.dbPort}")
    private Integer digitization2MysqlPort;
    @Value("${digitization2.mysql.dbName}")
    private String digitization2MysqlName;
    @Value("${digitization2.mysql.dbCount}")
    private String digitization2MysqlCount;
    @Value("${digitization2.mysql.dbPassword}")
    private String digitization2MysqlPassword;
    Connection connection = null;
    Statement statement = null;
    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    //public Date gkbjLastTime;
    public String gkbjLastTime;
    //public Date cylbdBjLastTime;
    public String cylbdBjLastTime;
    @Scheduled(cron = "*/5 * * * * ?")
    public void alarmHandler() {
        if(!digitization2Enabled){
            return;
        }
        Thread gkbjThread = new Thread(){
            @Override
            public void run() {
                try {
                    Class.forName("com.mysql.cj.jdbc.Driver");
                    Connection connection = DriverManager.getConnection("jdbc:mysql://" + digitization2MysqlIP + ":" + digitization2MysqlPort + "/" + digitization2MysqlName, digitization2MysqlCount, digitization2MysqlPassword);
                    Statement statement = (Statement) connection.createStatement();
                    if (gkbjLastTime == null) {
                        //初次查询,只获取10条最近数据。
                        String sql = "select * from gkbj order by fssj desc limit 0,10";
                        ResultSet resultSet = statement.executeQuery(sql);
                        while (resultSet.next()) {
                            if(resultSet.isFirst()){
                                gkbjLastTime = sdf.format(resultSet.getTimestamp("fssj"));
                            }
                            Gkbj gkbj = new Gkbj();
                            gkbj.setId(resultSet.getInt("id"));
                            gkbj.setOrgName(resultSet.getString("org_name"));
                            gkbj.setKm(resultSet.getString("km"));
                            gkbj.setDm(resultSet.getString("dm"));
                            gkbj.setDmc(resultSet.getString("dmc"));
                            gkbj.setJh(resultSet.getString("jh"));
                            gkbj.setWellCommonName(resultSet.getString("well_common_name"));
                            gkbj.setFssj(resultSet.getTimestamp("fssj"));
                            gkbj.setBdbj(resultSet.getString("bdbj"));
                            gkbj.setBjtz(resultSet.getString("bdbj"));
                            gkbj.setCyl1(resultSet.getFloat("cyl1"));
                            gkbj.setCyl2(resultSet.getFloat("cyl2"));
                            gkbj.setHsqk(resultSet.getString("hsqk"));
                            gkbj.setGxsj(resultSet.getString("gxsj"));
                            gkbj.setXqkdm(resultSet.getString("xqkdm"));
                            gkbj.setQdfs(resultSet.getString("qdfs"));
                            gkbj.setCyfs(resultSet.getString("cyfs"));
                            gkbj.setCzsj(resultSet.getString("czsj"));
                            gkbj.setCzr(resultSet.getString("czr"));
                            gkbj.setCznr(resultSet.getString("cznr"));
                            gkbj.setBz(resultSet.getString("bz"));
                            gkbj.setAlarmType("工况预警");
                            MqttProducer.publish(2, false, "digitization2", JSON.toJSONString(gkbj));
                        }
                        connection.close();
                        statement.close();
                        resultSet.close();
                    } else {
                        //查询大于上次查询最后一条数据的时间
                        String sql = "select * from gkbj where fssj >= \'" + gkbjLastTime + " \'order by fssj desc";
                        ResultSet resultSet = statement.executeQuery(sql);
                        while (resultSet.next()) {
                            if(resultSet.isFirst()){
                                gkbjLastTime = sdf.format(resultSet.getTimestamp("fssj"));
                            }
                            Gkbj gkbj = new Gkbj();
                            gkbj.setId(resultSet.getInt("id"));
                            gkbj.setOrgName(resultSet.getString("org_name"));
                            gkbj.setKm(resultSet.getString("km"));
                            gkbj.setDm(resultSet.getString("dm"));
                            gkbj.setDmc(resultSet.getString("dmc"));
                            gkbj.setJh(resultSet.getString("jh"));
                            gkbj.setWellCommonName(resultSet.getString("well_common_name"));
                            gkbj.setFssj(resultSet.getTimestamp("fssj"));
                            gkbj.setBdbj(resultSet.getString("bdbj"));
                            gkbj.setBjtz(resultSet.getString("bdbj"));
                            gkbj.setCyl1(resultSet.getFloat("cyl1"));
                            gkbj.setCyl2(resultSet.getFloat("cyl2"));
                            gkbj.setHsqk(resultSet.getString("hsqk"));
                            gkbj.setGxsj(resultSet.getString("gxsj"));
                            gkbj.setXqkdm(resultSet.getString("xqkdm"));
                            gkbj.setQdfs(resultSet.getString("qdfs"));
                            gkbj.setCyfs(resultSet.getString("cyfs"));
                            gkbj.setCzsj(resultSet.getString("czsj"));
                            gkbj.setCzr(resultSet.getString("czr"));
                            gkbj.setCznr(resultSet.getString("cznr"));
                            gkbj.setBz(resultSet.getString("bz"));
                            gkbj.setAlarmType("工况报警");
                            MqttProducer.publish(2, false, "digitization2", JSON.toJSONString(gkbj));
                        }
                        connection.close();
                        statement.close();
                        resultSet.close();
                    }
                } catch (Exception ex) {
                    ex.printStackTrace();
                    log.error("二厂数字化工况报警数据处理异常:" + ex.getMessage());
                }
            }
        };
        gkbjThread.start();
        Thread cylbdBjThread = new Thread(){
            @Override
            public void run() {
                try {
                    Class.forName("com.mysql.cj.jdbc.Driver");
                    Connection connection = DriverManager.getConnection("jdbc:mysql://" + digitization2MysqlIP + ":" + digitization2MysqlPort + "/" + digitization2MysqlName, digitization2MysqlCount, digitization2MysqlPassword);
                    Statement statement = (Statement) connection.createStatement();
                    if (cylbdBjLastTime == null) {
                        //初次查询,只获取10条最近数据。
                        String sql = "select * from cylbd_bj order by fssj desc limit 0,10";
                        ResultSet resultSet = statement.executeQuery(sql);
                        while (resultSet.next()) {
                            if(resultSet.isFirst()){
                                cylbdBjLastTime = sdf.format(resultSet.getTimestamp("fssj"));
                            }
                            CylbdBj cylbdBj = new CylbdBj();
                            cylbdBj.setId(resultSet.getInt("id"));
                            cylbdBj.setOrgName(resultSet.getString("org_name"));
                            cylbdBj.setKm(resultSet.getString("km"));
                            cylbdBj.setDm(resultSet.getString("dm"));
                            cylbdBj.setDmc(resultSet.getString("dmc"));
                            cylbdBj.setJh(resultSet.getString("jh"));
                            cylbdBj.setWellCommonName(resultSet.getString("well_common_name"));
                            cylbdBj.setFssj(resultSet.getTimestamp("fssj"));
                            cylbdBj.setBdbj(resultSet.getString("bdbj"));
                            cylbdBj.setBjtz(resultSet.getString("bdbj"));
                            cylbdBj.setCyl1(resultSet.getFloat("cyl1"));
                            cylbdBj.setCyl2(resultSet.getFloat("cyl2"));
                            cylbdBj.setHsqk(resultSet.getString("hsqk"));
                            cylbdBj.setGxsj(resultSet.getString("gxsj"));
                            cylbdBj.setXqkdm(resultSet.getString("xqkdm"));
                            cylbdBj.setQdfs(resultSet.getString("qdfs"));
                            cylbdBj.setCyfs(resultSet.getString("cyfs"));
                            cylbdBj.setCzsj(resultSet.getString("czsj"));
                            cylbdBj.setCzr(resultSet.getString("czr"));
                            cylbdBj.setCznr(resultSet.getString("cznr"));
                            cylbdBj.setBz(resultSet.getString("bz"));
                            cylbdBj.setAlarmType("停机报警");
                            MqttProducer.publish(2, false, "digitization2", JSON.toJSONString(cylbdBj));
                        }
                        connection.close();
                        statement.close();
                        resultSet.close();
                    } else {
                        //查询大于上次查询最后一条数据的时间
                        String sql = "select * from cylbd_bj where fssj >= \'" + cylbdBjLastTime + "\' order by fssj desc";
                        ResultSet resultSet = statement.executeQuery(sql);
                        while (resultSet.next()) {
                            if(resultSet.isFirst()){
                                cylbdBjLastTime = sdf.format(resultSet.getTimestamp("fssj"));
                            }
                            CylbdBj cylbdBj = new CylbdBj();
                            cylbdBj.setId(resultSet.getInt("id"));
                            cylbdBj.setOrgName(resultSet.getString("org_name"));
                            cylbdBj.setKm(resultSet.getString("km"));
                            cylbdBj.setDm(resultSet.getString("dm"));
                            cylbdBj.setDmc(resultSet.getString("dmc"));
                            cylbdBj.setJh(resultSet.getString("jh"));
                            cylbdBj.setWellCommonName(resultSet.getString("well_common_name"));
                            cylbdBj.setFssj(resultSet.getTimestamp("fssj"));
                            cylbdBj.setBdbj(resultSet.getString("bdbj"));
                            cylbdBj.setBjtz(resultSet.getString("bdbj"));
                            cylbdBj.setCyl1(resultSet.getFloat("cyl1"));
                            cylbdBj.setCyl2(resultSet.getFloat("cyl2"));
                            cylbdBj.setHsqk(resultSet.getString("hsqk"));
                            cylbdBj.setGxsj(resultSet.getString("gxsj"));
                            cylbdBj.setXqkdm(resultSet.getString("xqkdm"));
                            cylbdBj.setQdfs(resultSet.getString("qdfs"));
                            cylbdBj.setCyfs(resultSet.getString("cyfs"));
                            cylbdBj.setCzsj(resultSet.getString("czsj"));
                            cylbdBj.setCzr(resultSet.getString("czr"));
                            cylbdBj.setCznr(resultSet.getString("cznr"));
                            cylbdBj.setBz(resultSet.getString("bz"));
                            cylbdBj.setAlarmType("停机报警");
                            MqttProducer.publish(2, false, "digitization2", JSON.toJSONString(cylbdBj));
                        }
                        connection.close();
                        statement.close();
                        resultSet.close();
                    }
                } catch (Exception ex) {
                    ex.printStackTrace();
                    log.error("二厂数字化工况报警数据处理异常:" + ex.getMessage());
                }
            }
        };
        cylbdBjThread.start();
    }
    public void initMysql() throws ClassNotFoundException, SQLException {
        if(this.connection != null){
            if(!this.connection.isClosed()){
                try{
                    this.connection.close();
                    this.connection = null;
                }catch(Exception e){
                    this.connection = null;
                }
            }
        }
        if(this.statement != null){
            if(!this.statement.isClosed()){
                try{
                    this.statement.close();
                    this.statement = null;
                }catch(Exception e){
                    this.statement = null;
                }
            }
        }
        Class.forName("com.mysql.cj.jdbc.Driver");
        this.connection = DriverManager.getConnection("jdbc:mysql://" + digitization2MysqlIP + ":" + digitization2MysqlPort + "/" + digitization2MysqlName, digitization2MysqlCount, digitization2MysqlPassword);
        this.statement = (Statement) connection.createStatement();
    }
}
src/main/java/com/ard/alarm/radar/controller/RadarController.java
@@ -6,9 +6,10 @@
import com.ard.utils.http.AjaxResult;
import com.ard.utils.util.ByteUtils;
import com.ard.utils.util.GisUtils;
import com.ard.utils.netty.tcp.ClientInitialize;
import com.ard.utils.netty.tcp.RadarNettyTcpClient;
import io.netty.buffer.ByteBuf;
import io.netty.channel.Channel;
import io.netty.channel.ChannelFuture;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -43,7 +44,7 @@
        if (ardEquipRadar == null) {
            return AjaxResult.error("雷达不存在");
        }
        Channel channel = ClientInitialize.SucChannelMap.get(ardEquipRadar.getIp() + ":" + ardEquipRadar.getPort());
        Channel channel= RadarNettyTcpClient.SERVER_MAP.get(ardEquipRadar.getIp() + ":" + ardEquipRadar.getPort());
        if (channel == null) {
            return AjaxResult.error("雷达未连接");
        }
src/main/java/com/ard/alarm/radar/service/impl/ArdEquipRadarServiceImpl.java
@@ -20,6 +20,7 @@
 */
@Service
public class ArdEquipRadarServiceImpl implements IArdEquipRadarService {
    @Resource
    private ArdEquipRadarMapper ardEquipRadarMapper;
src/main/java/com/ard/config/AsyncConfiguration.java
@@ -25,6 +25,27 @@
        //配置队列大小
        executor.setQueueCapacity(1000);
        //线程的名称前缀
        executor.setThreadNamePrefix("alarmExecutor-");
        //线程活跃时间(秒)
        //executor.setKeepAliveSeconds(60);
        //等待所有任务结束后再关闭线程池
        executor.setWaitForTasksToCompleteOnShutdown(true);
        //设置拒绝策略
        //executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        //执行初始化
        executor.initialize();
        return executor;
    }
    @Bean("exec")
    public ThreadPoolTaskExecutor executor(){
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        //配置核心线程数
        executor.setCorePoolSize(15);
        //配置最大线程数
        executor.setMaxPoolSize(30);
        //配置队列大小
        executor.setQueueCapacity(1000);
        //线程的名称前缀
        executor.setThreadNamePrefix("Executor-");
        //线程活跃时间(秒)
        //executor.setKeepAliveSeconds(60);
@@ -36,4 +57,4 @@
        executor.initialize();
        return executor;
    }
}
}
src/main/java/com/ard/utils/netty/tcp/ClientInitialize.java
ÎļþÒÑɾ³ý
src/main/java/com/ard/utils/netty/tcp/NettyInit.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
package com.ard.utils.netty.tcp;
import com.ard.alarm.radar.domain.ArdEquipRadar;
import com.ard.alarm.radar.service.IArdEquipRadarService;
import com.ard.utils.netty.config.NettyTcpConfiguration;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.ard.utils.netty.tcp.RadarNettyTcpClient.RADAR_MAP;
@Component
@Slf4j(topic = "netty")
public class NettyInit {
    @Resource
    NettyTcpConfiguration nettyTcpConfig;
    @Resource
    private RadarNettyTcpClient radarNettyTcpClient;
    @Resource
    IArdEquipRadarService ardEquipRadarService;
    @PostConstruct
    public void createRadarConnect() {
        try {
            if (!nettyTcpConfig.getEnabled()) {
                return;
            }
            List<Map<String, Object>> list = new ArrayList<>();
            List<ArdEquipRadar> ardEquipRadars = ardEquipRadarService.selectArdEquipRadarList(new ArdEquipRadar());
            for (ArdEquipRadar ardEquipRadar : ardEquipRadars) {
                String host = ardEquipRadar.getIp();
                Integer port = Integer.valueOf(ardEquipRadar.getPort());
                Map<String,Object> mapParam =new HashMap<String, Object>();
                mapParam.put("IP",host);
                mapParam.put("PORT",port);
                list.add(mapParam);
                RADAR_MAP.put(host+":"+port,ardEquipRadar);
            }
            radarNettyTcpClient.initAllChannel(list);
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}
src/main/java/com/ard/utils/netty/tcp/RadarNettyTcpClient.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,251 @@
package com.ard.utils.netty.tcp;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import com.ard.alarm.radar.domain.ArdEquipRadar;
import com.ard.alarm.radar.service.IArdEquipRadarService;
import com.ard.utils.netty.tcp.handler.*;
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.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
/**
 * å®¢æˆ·ç«¯åˆå§‹åŒ–
 *
 * @author lijiamin
 */
@Component
@Slf4j(topic = "netty")
public class RadarNettyTcpClient {
    @Resource
    IArdEquipRadarService ardEquipRadarService;
    @Autowired
    @Qualifier("exec")
    ThreadPoolTaskExecutor executorService;
    EventLoopGroup eventLoopGroup = new NioEventLoopGroup();
    public static ConcurrentHashMap<String, MessageHandler> SucMessageHandlerMap = new ConcurrentHashMap();//成功连接的ip端口对应的报文解析器
    public static ConcurrentHashMap<String, Integer> aroundScanfMap = new ConcurrentHashMap();//是否启动周视
    public static final Map<String, Channel> SERVER_MAP = new ConcurrentHashMap();
    public static final Map<String, ArdEquipRadar> RADAR_MAP = new ConcurrentHashMap();
    /**
     * åˆå§‹åŒ–方法
     */
    public void initAllChannel(List<Map<String, Object>> portHosts) {
        for (Map<String, Object> map : portHosts) {
            String host = (String) map.get("IP");
            Integer port = (Integer) map.get("PORT");
            try {
                connectServer(host, port);
            } catch (Exception ex) {
                log.error(ex.getMessage());
            }
        }
    }
    /**
     * åˆå§‹åŒ–Bootstrap
     * åˆ˜è‹ä¹‰
     * 2024/3/25 9:53:57
     */
    public Bootstrap getBootstrap(EventLoopGroup group) {
        if (null == group) {
            group = eventLoopGroup;
        }
        Bootstrap bootstrap = new Bootstrap();
        bootstrap.group(group)
                .channel(NioSocketChannel.class)
                .option(ChannelOption.TCP_NODELAY, true)
                .option(ChannelOption.SO_KEEPALIVE, true)
                .handler(new ChannelInitializer<SocketChannel>() {
                    @Override
                    protected void initChannel(SocketChannel socketChannel) throws Exception {
                        ChannelPipeline pipeline = socketChannel.pipeline();
                        pipeline.addLast("handler", new ClientHandler());
                    }
                });
        return bootstrap;
    }
    /**
     * æœåŠ¡è¿žæŽ¥
     * åˆ˜è‹ä¹‰
     * 2024/3/25 9:52:28
     */
    public void connectServer(String host, Integer port) {
        try {
            //异步连接tcp服务端
            Bootstrap bootstrap = getBootstrap(null);
            bootstrap.remoteAddress(host, port);
            ChannelFuture channelFuture = bootstrap.connect().sync();
            if (channelFuture.isSuccess()) {
                log.info("雷达【" + host + ":" + port + "】连接成功");
                String serverKey = String.format("%s:%d", host, port);
                SERVER_MAP.put(serverKey, channelFuture.channel());
                SucMessageHandlerMap.put(serverKey, new MessageHandler());
            }
            channelFuture.channel().closeFuture().addListener(new ChannelFutureListener() {
                public void operationComplete(ChannelFuture future) throws Exception {
                    String serverKey = String.format("%s:%d", host, port);
                    SERVER_MAP.remove(serverKey);
                    //服务端离线,触发重连操作
                    reconnect(host, port);
                }
            });
        } catch (Exception e) {
            reconnect(host, port);
            throw new RuntimeException("雷达【" + host + ":" + port + "】连接异常:" + e.getMessage());
        }
    }
    /**
     * é‡è¿žæœåŠ¡ç«¯
     * åˆ˜è‹ä¹‰
     * 2024/3/25 9:52:15
     */
    public void reconnect(final String host, final int port) {
        log.debug("雷达【" + host + ":" + port + "】连接失败,进行重连...");
        executorService.submit(new Runnable() {
            public void run() {
                for (; ; ) {
                    try {
                        TimeUnit.SECONDS.sleep(3);
                        connectServer(host, port);
                        if (SERVER_MAP.containsKey(String.format("%s:%d", host, port))) {
                            break;
                        }
                    } catch (Exception e) {
                        log.error(e.getMessage());
                        break;
                    }
                }
            }
        });
    }
    /**
     * ç›‘测雷达连接状态
     */
//    @Scheduled(cron = "0/5 * * * * ?")
    public void monitorConnectStatus1() {
        try {
            log.debug("实时监测雷达连接状态...");
            List<ArdEquipRadar> ardEquipRadars = ardEquipRadarService.selectArdEquipRadarList(new ArdEquipRadar());
            ardEquipRadars.stream().forEach(ardEquipRadar -> {
                //判断与雷达客户端连接状态
                boolean online = SERVER_MAP.containsKey(ardEquipRadar.getIp() + ":" + ardEquipRadar.getPort());
                if (online) {
                    //连接雷达客户端成功 åˆ¤æ–­å‘¨æ‰«çŠ¶æ€
                    if (aroundScanfMap.containsKey(ardEquipRadar.getIp() + ":" + ardEquipRadar.getPort())) {
                        Integer state = aroundScanfMap.get(ardEquipRadar.getIp() + ":" + ardEquipRadar.getPort());
                        if (state == 1) {//1-周扫打开-连接成功
                            if (ardEquipRadar.getState() == null || !ardEquipRadar.getState().equals("1")) {
                                ardEquipRadar.setState("1");
                                ardEquipRadarService.updateArdEquipRadar(ardEquipRadar);
                            }
                        } else {
                            if (ardEquipRadar.getState() == null || !ardEquipRadar.getState().equals("2")) {
                                //2-周扫未开
                                ardEquipRadar.setState("2");
                                ardEquipRadarService.updateArdEquipRadar(ardEquipRadar);
                            }
                        }
                    } else {
                        if (ardEquipRadar.getState() == null || !ardEquipRadar.getState().equals("2")) {
                            //2-周扫未开
                            ardEquipRadar.setState("2");
                            ardEquipRadarService.updateArdEquipRadar(ardEquipRadar);
                        }
                    }
                } else {
                    //连接雷达客户端失败
                    if (ardEquipRadar.getState() == null || !ardEquipRadar.getState().equals("0")) {
                        //0-客户端不通
                        ardEquipRadar.setState("0");
                        ardEquipRadarService.updateArdEquipRadar(ardEquipRadar);
                    }
                }
            });
        } catch (Exception e) {
            log.error("定时监测雷达连接状态异常:" + e.getMessage());
        }
    }
    @PostConstruct
    public void monitorConnectStatus() {
        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
        Runnable task = () -> {
            try {
                // å®šæ—¶ä»»åŠ¡çš„é€»è¾‘
                log.debug("实时监测雷达连接状态...");
                List<ArdEquipRadar> ardEquipRadars = ardEquipRadarService.selectArdEquipRadarList(new ArdEquipRadar());
                ardEquipRadars.stream().forEach(ardEquipRadar -> {
                    // åˆ¤æ–­ä¸Žé›·è¾¾å®¢æˆ·ç«¯è¿žæŽ¥çŠ¶æ€
                    boolean online = SERVER_MAP.containsKey(ardEquipRadar.getIp() + ":" + ardEquipRadar.getPort());
                    if (online) {
                        log.debug("雷达【" + ardEquipRadar.getIp() + ":" + ardEquipRadar.getPort() + "】状态:在线");
                        // è¿žæŽ¥é›·è¾¾å®¢æˆ·ç«¯æˆåŠŸ åˆ¤æ–­å‘¨æ‰«çŠ¶æ€
                        if (aroundScanfMap.containsKey(ardEquipRadar.getIp() + ":" + ardEquipRadar.getPort())) {
                            Integer state = aroundScanfMap.get(ardEquipRadar.getIp() + ":" + ardEquipRadar.getPort());
                            log.debug("雷达【" + ardEquipRadar.getIp() + ":" + ardEquipRadar.getPort() + "】获取到周扫状态:" + state);
                            if (state == 1) { // 1-周扫打开-连接成功
                                log.debug("雷达【" + ardEquipRadar.getIp() + ":" + ardEquipRadar.getPort() + "】周扫状态开");
                                if (ardEquipRadar.getState() == null || !ardEquipRadar.getState().equals("1")) {
                                    ardEquipRadar.setState("1");
                                    ardEquipRadarService.updateArdEquipRadar(ardEquipRadar);
                                }
                            } else {
                                log.debug("雷达【" + ardEquipRadar.getIp() + ":" + ardEquipRadar.getPort() + "】周扫状态关");
                                if (ardEquipRadar.getState() == null || !ardEquipRadar.getState().equals("2")) {
                                    // 2-周扫未开
                                    ardEquipRadar.setState("2");
                                    ardEquipRadarService.updateArdEquipRadar(ardEquipRadar);
                                }
                            }
                        } else {
                            log.debug("雷达【" + ardEquipRadar.getIp() + ":" + ardEquipRadar.getPort() + "】未获取到周扫状态");
                            if (ardEquipRadar.getState() == null || !ardEquipRadar.getState().equals("2")) {
                                // 2-周扫未开
                                ardEquipRadar.setState("2");
                                ardEquipRadarService.updateArdEquipRadar(ardEquipRadar);
                            }
                        }
                    } else {
                        log.debug("雷达【" + ardEquipRadar.getIp() + ":" + ardEquipRadar.getPort() + "】状态:离线");
                        // è¿žæŽ¥é›·è¾¾å®¢æˆ·ç«¯å¤±è´¥
                        if (ardEquipRadar.getState() == null || !ardEquipRadar.getState().equals("0")) {
                            // 0-客户端不通
                            ardEquipRadar.setState("0");
                            ardEquipRadarService.updateArdEquipRadar(ardEquipRadar);
                        }
                    }
                });
            } catch (Exception e) {
                log.error("定时监测雷达连接状态异常:" + e.getMessage());
            }
        };
        scheduler.scheduleAtFixedRate(task, 0, 5, TimeUnit.SECONDS);
    }
}
src/main/java/com/ard/utils/netty/tcp/handler/ClientHandler.java
ÎļþÃû´Ó src/main/java/com/ard/utils/netty/tcp/ClientHandler.java ÐÞ¸Ä
@@ -1,26 +1,26 @@
package com.ard.utils.netty.tcp;
package com.ard.utils.netty.tcp.handler;
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.netty.tcp.RadarNettyTcpClient;
import com.ard.utils.util.ByteUtils;
import com.ard.utils.util.GisUtils;
import com.ard.utils.mqtt.MqttProducer;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelId;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.channel.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import javax.xml.bind.DatatypeConverter;
import java.net.InetSocketAddress;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.*;
import static com.ard.utils.netty.tcp.RadarNettyTcpClient.aroundScanfMap;
import static com.ard.utils.util.ByteUtils.toLittleEndian;
/**
@@ -30,7 +30,8 @@
 * @Date: 2023å¹´07月05日13:13
 * @Version: 1.0
 **/
@Component
//@ChannelHandler.Sharable
@Slf4j(topic = "netty")
public class ClientHandler extends SimpleChannelInboundHandler<ByteBuf> {
    private ChannelHandlerContext context;
@@ -57,18 +58,9 @@
    @Override
    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
        InetSocketAddress ipSocket = (InetSocketAddress) ctx.channel().remoteAddress();
        String ipPort = ipSocket.getHostString() + ":" + ipSocket.getPort();
        log.error("与设备" + ipPort + "连接断开!");
        // è¿žæŽ¥æ–­å¼€åŽçš„æœ€åŽå¤„理
        ctx.pipeline().remove(this);
        ctx.deregister();
        ctx.close();
        // å°†å¤±è´¥ä¿¡æ¯æ’å…¥Set集合
        ArdEquipRadar radar = ClientInitialize.trueConnectMap.get(ipPort);
        if (radar != null) {
            ClientInitialize.falseConnectSet.add(radar);
            ClientInitialize.trueConnectMap.remove(ipPort);
        }
        String ip = ipSocket.getHostString();
        int port = ipSocket.getPort();
        log.error("与雷达设备【" + ip + ":" + port + "】连接断开!");
        super.channelInactive(ctx);
    }
@@ -84,11 +76,11 @@
    public void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) {
        InetSocketAddress ipSocket = (InetSocketAddress) ctx.channel().remoteAddress();
        String ipPort = ipSocket.getHostString() + ":" + ipSocket.getPort();
        ArdEquipRadar radar = ClientInitialize.trueConnectMap.get(ipPort);
        ArdEquipRadar radar = RadarNettyTcpClient.RADAR_MAP.get(ipPort);
        if (radar == null) {
            return;
        }
        MessageHandler messageHandler = ClientInitialize.SucMessageHandlerMap.get(ipPort);
        MessageHandler messageHandler = RadarNettyTcpClient.SucMessageHandlerMap.get(ipPort);
        if (messageHandler == null) {
            return;
        }
@@ -158,7 +150,7 @@
            message.writeBytes(heart);
            context.writeAndFlush(message);
        }, 0, 5, TimeUnit.SECONDS);
        }, 0, 2, TimeUnit.SECONDS);
    }
    /**
@@ -211,6 +203,36 @@
            String alarmTime = "";
            Integer targetNum = 0;
            log.debug("处理雷达" + radarName + "数据-->命令ID:" + cmdIdStr);
            //前端工作状态反馈
            if (Arrays.equals(cmdId, new byte[]{0x00})) {
                //region å‘Šè­¦ä¿¡æ¯åé¦ˆ
                byte[] dfScanAngV = Arrays.copyOfRange(data, 4, 12);
                dfScanAngV = toLittleEndian(dfScanAngV);
                double ScanAngV = ByteUtils.bytesToDouble(dfScanAngV);
                //log.info("设备扫描的俯仰角度:" + ScanAngV);
                byte[] dfAngDy = Arrays.copyOfRange(data, 12, 20);
                dfAngDy = toLittleEndian(dfAngDy);
                double AngDy = ByteUtils.bytesToDouble(dfAngDy);
                //log.info("周视图像的垂直视场角度:" + AngDy);
                byte[] iImgW = Arrays.copyOfRange(data, 20, 24);
                iImgW = toLittleEndian(iImgW);
                int ImgW = ByteUtils.bytesToDecimal(iImgW);
                //log.info("周视图像的宽:" + ImgW);
                byte[] iImgH = Arrays.copyOfRange(data, 24, 28);
                iImgH = toLittleEndian(iImgH);
                int ImgH = ByteUtils.bytesToDecimal(iImgH);
                //log.info("周视图像的高:" + ImgH);
                byte[] cStat = Arrays.copyOfRange(data, 28, 29);
                // æå–第4位至第6位的值
                cStat = toLittleEndian(cStat);
                int Stat = cStat[0] & 0b00000001;
                log.info("设备当前工作状态:" + Stat);
                aroundScanfMap.put(radar.getIp() + ":" + radar.getPort(), Stat);
            }
            //雷达移动防火报警
            if (Arrays.equals(cmdId, new byte[]{0x01})) {
                //region å‘Šè­¦ä¿¡æ¯åé¦ˆ
@@ -508,4 +530,4 @@
            log.error("雷达报文解析异常:" + ex.getMessage());
        }
    }
}
}
src/main/java/com/ard/utils/netty/tcp/handler/MessageHandler.java
ÎļþÃû´Ó src/main/java/com/ard/utils/netty/tcp/MessageHandler.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.ard.utils.netty.tcp;
package com.ard.utils.netty.tcp.handler;
import com.ard.utils.util.ByteUtils;
@@ -60,12 +60,13 @@
        //System.out.println(DatatypeConverter.printHexBinary(payloadCrc32));
        //获取到数据携带的crc32值
        byte[] oldCrc32 = ByteUtils.getLastBytes(payloadCrc32, crcLength);
        //System.out.println(DatatypeConverter.printHexBinary(oldCrc32));
        //去掉包头包尾crc32字节,仅保留负载
        byte[] payload = ByteUtils.removeHeaderFooterAndCRC(packet, headerLength, footerLength, crcLength);
       // System.out.println(DatatypeConverter.printHexBinary(payload));
        //System.out.println(DatatypeConverter.printHexBinary(payload));
        //计算负载的crc32值
        byte[] NewCrc32 = ByteUtils.parseCrc32(payload);
        //System.out.println(DatatypeConverter.printHexBinary(NewCrc32));
        //判断数据的crc32校验值和计算值是否相同
        if (Arrays.equals(oldCrc32, NewCrc32)) {
            return true;