diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
- if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
-// log.info(" String : " + msg.toString(Charset.defaultCharset()));
-// if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
- pareDeviceHex(msg);
-// out.add(msg);
-// }
- }
- }
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
- String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
- log.info(" devcode : " + devcode);
- byteBuf.resetReaderIndex();//重置位判断
- String valueStr=byteBuf.slice(26, 4).toString(Charset.defaultCharset());
- log.info(" valueStr : " + valueStr);
- long defaultValue = Long.valueOf(valueStr);
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverDomain.java b/src/main/java/com/casic/handler/ReceiverDomain.java
deleted file mode 100644
index f0a89b6..0000000
--- a/src/main/java/com/casic/handler/ReceiverDomain.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import lombok.Data;
-
-/**
- * @description: 环境数据实体类
- * @author: Stone
- * @create: 2019-01-10 22:38
- **/
-@Data
-public class ReceiverDomain {
- private String head;
- private int len;
- private String key;
- private String value;
-
- public ReceiverDomain(ByteBuf bf) {
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServer.java b/src/main/java/com/casic/handler/ReceiverServer.java
deleted file mode 100644
index 6894a00..0000000
--- a/src/main/java/com/casic/handler/ReceiverServer.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.casic.handler;
-
-import io.netty.bootstrap.ServerBootstrap;
-import io.netty.channel.ChannelFuture;
-import io.netty.channel.ChannelInitializer;
-import io.netty.channel.ChannelOption;
-import io.netty.channel.EventLoopGroup;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.channel.socket.SocketChannel;
-import io.netty.channel.socket.nio.NioServerSocketChannel;
-import io.netty.handler.codec.LineBasedFrameDecoder;
-import io.netty.handler.codec.string.StringDecoder;
-import io.netty.handler.logging.LogLevel;
-import io.netty.handler.logging.LoggingHandler;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-
-/**
- * @description: 接收客户端传过来的数据,只做打印处理
- * @author: Stone
- * @create: 2019-01-10 19:52
- **/
-@Slf4j
-@Component
-public class ReceiverServer {
-
- @Autowired
- private ReceiverServerHandler receiverServerHandler;
-
- @Value("${xgd.server-port}")
- private int port;
-
-
-
- @PostConstruct
- public void init() {
- this.start();
- }
-
- public void start() {
- EventLoopGroup bossGroup = new NioEventLoopGroup();
- EventLoopGroup workerGroup = new NioEventLoopGroup();
- log.info("server bind port = {}", port);
-
- ServerBootstrap serverBootstrap = new ServerBootstrap();
- serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
- serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
- serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
-
- serverBootstrap.childHandler(new ChannelInitializer() {
- @Override
- protected void initChannel(SocketChannel socketChannel) {
-// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
- socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
- socketChannel.pipeline().addLast(new ReceiverDecoder());
- socketChannel.pipeline().addLast(new StringDecoder());
- socketChannel.pipeline().addLast(receiverServerHandler);
- }
- });
-
- serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
- try {
- ChannelFuture channelFuture = serverBootstrap.bind(port).sync();
- channelFuture.channel().closeFuture().sync();
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- workerGroup.shutdownGracefully();
- bossGroup.shutdownGracefully();
- }
- }
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServerHandler.java b/src/main/java/com/casic/handler/ReceiverServerHandler.java
deleted file mode 100644
index f432e06..0000000
--- a/src/main/java/com/casic/handler/ReceiverServerHandler.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.casic.handler;
-
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelInboundHandlerAdapter;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.javassist.bytecode.ByteArray;
-import org.springframework.stereotype.Component;
-
-/**
- * @description: 消息处理handler
- * @author: Stone
- * @create: 2019-01-10 20:01
- **/
-@Slf4j
-@Component
-@ChannelHandler.Sharable
-public class ReceiverServerHandler extends ChannelInboundHandlerAdapter {
-
- public ReceiverServerHandler() {
- }
-
- @Override
- public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
- super.channelRegistered(ctx);
- }
-
- @Override
- public void channelActive(ChannelHandlerContext ctx) throws Exception {
- super.channelActive(ctx);
- }
-
- @Override
- public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
- super.channelRead(ctx, msg);
-// log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME,(String)msg);
- log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
- String msgStr = msg.toString();
- // 以固定行分隔符结尾分割,头部可能有不符合接口协议的字段, 去掉
- int idx = msgStr.indexOf("##");
- if (idx >= 0) {
- msgStr = msgStr.substring(idx);
- }
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME, msgStr);
- }
-
-// //ByteBuf byteBuf
- public static void main(String[] main) {
- byte[] hexBytes = {(byte) 0x86, 0x53, 0x28, 0x06, (byte) 0x84, 0x19, (byte) 0x94,
- 0x30, (byte) 0xAA, (byte) 0xAA, 0x01, 0x03, (byte) 0x02, 0x02, 0x00, (byte) 0xB8, 0x44};
- ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
- out.writeBytes(hexBytes);
-
- if (ByteBufUtil.hexDump(out).toLowerCase().contains("aaaa")) {
- pareDeviceHex(out);
- }
- }
-
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- String devcode = ByteBufUtil.hexDump(byteBuf.slice(0, 8));
- devcode = devcode.substring(0, devcode.length() - 1);
- //数值读取
- byteBuf.readBytes(12);
- byteBuf.markReaderIndex();
- Integer defaultValueLength = byteBuf.readByte() & 0xff;
- long defaultValue = 0;
- for (int i = 0; i < defaultValueLength; i++) {
- long tempLong = byteBuf.readByte() & 0xff;
- defaultValue = defaultValue * 256 + tempLong;
- }
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
- super.exceptionCaught(ctx, cause);
- cause.printStackTrace();
- ctx.close();
- }
-
-}
diff --git a/src/main/java/com/casic/mapper/DeviceDataMapper.java b/src/main/java/com/casic/mapper/DeviceDataMapper.java
new file mode 100644
index 0000000..be72d19
--- /dev/null
+++ b/src/main/java/com/casic/mapper/DeviceDataMapper.java
@@ -0,0 +1,28 @@
+package com.casic.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface DeviceDataMapper {
+
+
+ /**
+ * 获取压力数据
+ */
+ List
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
- if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
-// log.info(" String : " + msg.toString(Charset.defaultCharset()));
-// if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
- pareDeviceHex(msg);
-// out.add(msg);
-// }
- }
- }
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
- String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
- log.info(" devcode : " + devcode);
- byteBuf.resetReaderIndex();//重置位判断
- String valueStr=byteBuf.slice(26, 4).toString(Charset.defaultCharset());
- log.info(" valueStr : " + valueStr);
- long defaultValue = Long.valueOf(valueStr);
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverDomain.java b/src/main/java/com/casic/handler/ReceiverDomain.java
deleted file mode 100644
index f0a89b6..0000000
--- a/src/main/java/com/casic/handler/ReceiverDomain.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import lombok.Data;
-
-/**
- * @description: 环境数据实体类
- * @author: Stone
- * @create: 2019-01-10 22:38
- **/
-@Data
-public class ReceiverDomain {
- private String head;
- private int len;
- private String key;
- private String value;
-
- public ReceiverDomain(ByteBuf bf) {
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServer.java b/src/main/java/com/casic/handler/ReceiverServer.java
deleted file mode 100644
index 6894a00..0000000
--- a/src/main/java/com/casic/handler/ReceiverServer.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.casic.handler;
-
-import io.netty.bootstrap.ServerBootstrap;
-import io.netty.channel.ChannelFuture;
-import io.netty.channel.ChannelInitializer;
-import io.netty.channel.ChannelOption;
-import io.netty.channel.EventLoopGroup;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.channel.socket.SocketChannel;
-import io.netty.channel.socket.nio.NioServerSocketChannel;
-import io.netty.handler.codec.LineBasedFrameDecoder;
-import io.netty.handler.codec.string.StringDecoder;
-import io.netty.handler.logging.LogLevel;
-import io.netty.handler.logging.LoggingHandler;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-
-/**
- * @description: 接收客户端传过来的数据,只做打印处理
- * @author: Stone
- * @create: 2019-01-10 19:52
- **/
-@Slf4j
-@Component
-public class ReceiverServer {
-
- @Autowired
- private ReceiverServerHandler receiverServerHandler;
-
- @Value("${xgd.server-port}")
- private int port;
-
-
-
- @PostConstruct
- public void init() {
- this.start();
- }
-
- public void start() {
- EventLoopGroup bossGroup = new NioEventLoopGroup();
- EventLoopGroup workerGroup = new NioEventLoopGroup();
- log.info("server bind port = {}", port);
-
- ServerBootstrap serverBootstrap = new ServerBootstrap();
- serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
- serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
- serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
-
- serverBootstrap.childHandler(new ChannelInitializer() {
- @Override
- protected void initChannel(SocketChannel socketChannel) {
-// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
- socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
- socketChannel.pipeline().addLast(new ReceiverDecoder());
- socketChannel.pipeline().addLast(new StringDecoder());
- socketChannel.pipeline().addLast(receiverServerHandler);
- }
- });
-
- serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
- try {
- ChannelFuture channelFuture = serverBootstrap.bind(port).sync();
- channelFuture.channel().closeFuture().sync();
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- workerGroup.shutdownGracefully();
- bossGroup.shutdownGracefully();
- }
- }
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServerHandler.java b/src/main/java/com/casic/handler/ReceiverServerHandler.java
deleted file mode 100644
index f432e06..0000000
--- a/src/main/java/com/casic/handler/ReceiverServerHandler.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.casic.handler;
-
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelInboundHandlerAdapter;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.javassist.bytecode.ByteArray;
-import org.springframework.stereotype.Component;
-
-/**
- * @description: 消息处理handler
- * @author: Stone
- * @create: 2019-01-10 20:01
- **/
-@Slf4j
-@Component
-@ChannelHandler.Sharable
-public class ReceiverServerHandler extends ChannelInboundHandlerAdapter {
-
- public ReceiverServerHandler() {
- }
-
- @Override
- public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
- super.channelRegistered(ctx);
- }
-
- @Override
- public void channelActive(ChannelHandlerContext ctx) throws Exception {
- super.channelActive(ctx);
- }
-
- @Override
- public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
- super.channelRead(ctx, msg);
-// log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME,(String)msg);
- log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
- String msgStr = msg.toString();
- // 以固定行分隔符结尾分割,头部可能有不符合接口协议的字段, 去掉
- int idx = msgStr.indexOf("##");
- if (idx >= 0) {
- msgStr = msgStr.substring(idx);
- }
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME, msgStr);
- }
-
-// //ByteBuf byteBuf
- public static void main(String[] main) {
- byte[] hexBytes = {(byte) 0x86, 0x53, 0x28, 0x06, (byte) 0x84, 0x19, (byte) 0x94,
- 0x30, (byte) 0xAA, (byte) 0xAA, 0x01, 0x03, (byte) 0x02, 0x02, 0x00, (byte) 0xB8, 0x44};
- ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
- out.writeBytes(hexBytes);
-
- if (ByteBufUtil.hexDump(out).toLowerCase().contains("aaaa")) {
- pareDeviceHex(out);
- }
- }
-
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- String devcode = ByteBufUtil.hexDump(byteBuf.slice(0, 8));
- devcode = devcode.substring(0, devcode.length() - 1);
- //数值读取
- byteBuf.readBytes(12);
- byteBuf.markReaderIndex();
- Integer defaultValueLength = byteBuf.readByte() & 0xff;
- long defaultValue = 0;
- for (int i = 0; i < defaultValueLength; i++) {
- long tempLong = byteBuf.readByte() & 0xff;
- defaultValue = defaultValue * 256 + tempLong;
- }
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
- super.exceptionCaught(ctx, cause);
- cause.printStackTrace();
- ctx.close();
- }
-
-}
diff --git a/src/main/java/com/casic/mapper/DeviceDataMapper.java b/src/main/java/com/casic/mapper/DeviceDataMapper.java
new file mode 100644
index 0000000..be72d19
--- /dev/null
+++ b/src/main/java/com/casic/mapper/DeviceDataMapper.java
@@ -0,0 +1,28 @@
+package com.casic.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface DeviceDataMapper {
+
+
+ /**
+ * 获取压力数据
+ */
+ List> getPressureData();
+
+ /**
+ * 获取流量数据
+ */
+ List> getFlowData();
+
+ /**
+ * 获取温湿度数据
+ */
+ List> getHumiTemp();
+
+
+}
diff --git a/src/main/java/com/casic/mapper/RainFallDataMapper.java b/src/main/java/com/casic/mapper/RainFallDataMapper.java
new file mode 100644
index 0000000..f5c29db
--- /dev/null
+++ b/src/main/java/com/casic/mapper/RainFallDataMapper.java
@@ -0,0 +1,7 @@
+package com.casic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.model.RainFallData;
+
+public interface RainFallDataMapper extends BaseMapper {
+}
diff --git a/src/main/java/com/casic/model/RainFallData.java b/src/main/java/com/casic/model/RainFallData.java
new file mode 100644
index 0000000..fa96673
--- /dev/null
+++ b/src/main/java/com/casic/model/RainFallData.java
@@ -0,0 +1,30 @@
+package com.casic.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@TableName("AD_YL_YLIANG")
+public class RainFallData {
+
+ private String dbid;
+
+ private String scrid;
+
+ private String dstid;
+
+ private String totalyuliang;
+
+ private String curminuteyuliang;
+
+ private String forminuteyuliang;
+
+ private String value;
+
+ private Date logtime;
+
+ private Date uptime;
+
+}
diff --git a/src/main/java/com/casic/model/RelayStatusDTO.java b/src/main/java/com/casic/model/RelayStatusDTO.java
new file mode 100644
index 0000000..b839e0c
--- /dev/null
+++ b/src/main/java/com/casic/model/RelayStatusDTO.java
@@ -0,0 +1,20 @@
+package com.casic.model;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class RelayStatusDTO {
+
+ /***
+ * 通道名称 1 2 3 4 5 6 7 8
+ */
+ private String channelName;
+
+ /***
+ * 开关0,1
+ */
+ private Integer lampSwitch;
+
+}
diff --git a/src/main/java/com/casic/resolver/AlarmDataResolver.java b/src/main/java/com/casic/resolver/AlarmDataResolver.java
new file mode 100644
index 0000000..2c6874b
--- /dev/null
+++ b/src/main/java/com/casic/resolver/AlarmDataResolver.java
@@ -0,0 +1,28 @@
+package com.casic.resolver;
+
+
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class AlarmDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if(msg.contains(alarmMark)){
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ Integer isAlarm = Integer.valueOf(msg.substring(16,17));
+ log.info("设备编号为" + devcode + ",是否报警" + isAlarm);
+ return RelayStatusDTO.builder()
+ .channelName( RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/casic/resolver/DatagramResolver.java b/src/main/java/com/casic/resolver/DatagramResolver.java
new file mode 100644
index 0000000..d00c952
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramResolver.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+import com.casic.model.RelayStatusDTO;
+
+public interface DatagramResolver {
+
+ RelayStatusDTO datagram(String msg);
+
+}
diff --git a/src/main/java/com/casic/resolver/DatagramSupport.java b/src/main/java/com/casic/resolver/DatagramSupport.java
new file mode 100644
index 0000000..1d911a3
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramSupport.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+public class DatagramSupport {
+
+
+
+
+
+}
diff --git a/src/main/java/com/casic/resolver/RainFallDataResolver.java b/src/main/java/com/casic/resolver/RainFallDataResolver.java
new file mode 100644
index 0000000..8a22899
--- /dev/null
+++ b/src/main/java/com/casic/resolver/RainFallDataResolver.java
@@ -0,0 +1,79 @@
+package com.casic.resolver;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service
+@Slf4j
+public class RainFallDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Autowired
+ private RainFallDataMapper rainFallDataMapper;
+ @Autowired
+ private AlarmLevelConfig alarmLevelConfig;
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if (msg.contains(rainFallMark)) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ String defaultValue = msg.substring(26, 30);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ RainFallData rainFallData = initRainFallData(devcode, defaultValue);
+ rainFallDataMapper.insert(rainFallData);
+ Integer isAlarm = isAlarm(String.valueOf(defaultValue), alarmLevelConfig.getRainfall());
+ return RelayStatusDTO.builder()
+ .channelName(RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+
+ }
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ private RainFallData initRainFallData(String devcode, String valueStr) {
+ RainFallData rainFallData = new RainFallData();
+ rainFallData.setDstid(devcode);
+ rainFallData.setTotalyuliang(valueStr);
+ rainFallData.setUptime(new Date());
+ rainFallData.setLogtime(new Date());
+ return rainFallData;
+ }
+
+ // //ByteBuf byteBuf
+ public static void main(String[] main) {
+ pareDeviceHex("8653280684199430AAAA01030200023985");
+ }
+
+ private static void pareDeviceHex(String msg) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ log.info(" devcode : " + devcode);
+ String valueStr = msg.substring(26, 30);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverDecoder.java b/src/main/java/com/casic/server/ReceiverDecoder.java
new file mode 100644
index 0000000..7030790
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverDecoder.java
@@ -0,0 +1,71 @@
+package com.casic.server;
+
+import com.casic.enums.RelaySwitchEnums;
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.ByteToMessageDecoder;
+import lombok.extern.slf4j.Slf4j;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * 自定义解码器
+ *
+ * @description: 将从接口取到的数据编码
+ * @author: cz
+ * @create: 2023-5-10
+ **/
+@Slf4j
+public class ReceiverDecoder extends ByteToMessageDecoder implements RelaySwitchEnums {
+
+
+// final ChannelGroup channels =
+// new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+
+ @Override
+ protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
+ if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
+ pareDeviceHex(msg);
+ }
+// if(msg.readableBytes()>2){
+// out.add(msg);
+// }
+ }
+
+// @Override
+// public void channelActive(ChannelHandlerContext ctx) throws Exception {
+// channels.add(ctx.channel());
+// super.channelActive(ctx);
+// }
+//
+// @Override
+// public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+// super.channelRead(ctx, msg);
+// ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+// String switchConent = preFix + 1 + "," + 1 + postFix;
+// out.writeBytes(switchConent.getBytes());
+// channels.forEach(
+// channel ->{
+// if(channel!=ctx.channel()) {
+// channel.writeAndFlush(out);
+// }
+// }
+// );
+// }
+
+ private static void pareDeviceHex(ByteBuf byteBuf) {
+ //去掉补位
+ log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
+ String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
+ log.info(" devcode : " + devcode);
+ byteBuf.resetReaderIndex();//重置位判断
+ String valueStr = byteBuf.slice(26, 4).toString(Charset.defaultCharset());
+ log.info(" valueStr : " + valueStr);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverServer.java b/src/main/java/com/casic/server/ReceiverServer.java
new file mode 100644
index 0000000..a98e4ca
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServer.java
@@ -0,0 +1,72 @@
+package com.casic.server;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.logging.LogLevel;
+import io.netty.handler.logging.LoggingHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * @description: 接收客户端传过来的数据,只做打印处理
+ * @author: Stone
+ * @create: 2019-01-10 19:52
+ **/
+@Slf4j
+@Component
+public class ReceiverServer {
+
+ @Autowired
+ private ReceiverServerHandler receiverServerHandler;
+ @Autowired
+ private ServerPort serverPort;
+
+ @PostConstruct
+ public void init() {
+ this.start();
+ }
+
+ public void start() {
+ EventLoopGroup bossGroup = new NioEventLoopGroup();
+ EventLoopGroup workerGroup = new NioEventLoopGroup();
+ log.info("server bind port = {}", serverPort.getPort());
+
+ ServerBootstrap serverBootstrap = new ServerBootstrap();
+ serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
+ serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
+ serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
+
+ serverBootstrap.childHandler(new ChannelInitializer() {
+ @Override
+ protected void initChannel(SocketChannel socketChannel) {
+// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
+ socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
+// socketChannel.pipeline().addLast(new ReceiverDecoder());
+ socketChannel.pipeline().addLast(new StringDecoder());
+ socketChannel.pipeline().addLast(receiverServerHandler);
+ }
+ });
+ serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
+ try {
+ ChannelFuture channelFuture = serverBootstrap.bind(serverPort.getPort()).sync();
+ channelFuture.channel().closeFuture().sync();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } finally {
+ workerGroup.shutdownGracefully();
+ bossGroup.shutdownGracefully();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/server/ReceiverServerHandler.java b/src/main/java/com/casic/server/ReceiverServerHandler.java
new file mode 100644
index 0000000..31ac43e
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServerHandler.java
@@ -0,0 +1,103 @@
+package com.casic.server;
+
+
+import com.casic.enums.RelaySwitchEnums;
+import com.casic.model.RelayStatusDTO;
+import com.casic.resolver.RainFallDataResolver;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.channel.group.ChannelGroup;
+import io.netty.channel.group.DefaultChannelGroup;
+import io.netty.util.concurrent.GlobalEventExecutor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * @description: 消息处理handler
+ * @author: Stone
+ * @create: 2019-01-10 20:01
+ **/
+@Slf4j
+@Component
+@ChannelHandler.Sharable
+public class ReceiverServerHandler extends ChannelInboundHandlerAdapter implements RelaySwitchEnums {
+
+ final ChannelGroup channels =
+ new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+ @Autowired
+ private List rainFallDataResolverList;
+
+ public ReceiverServerHandler() {
+ }
+
+ @Override
+ public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
+ super.channelRegistered(ctx);
+ }
+
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ channels.add(ctx.channel());
+ super.channelActive(ctx);
+ }
+
+ @Override
+ public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+ channels.forEach(channel -> {
+ if (channel == ctx.channel()) {
+ channels.remove(channel);
+ }
+ }
+ );
+ super.channelInactive(ctx);
+ }
+
+ /**
+ * 雨量计
+ */
+ @Override
+ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+ if (msg instanceof String) {
+ rainFallDataResolverList.forEach(
+ rainFallDataResolver -> {
+ RelayStatusDTO relayStatusDTO = rainFallDataResolver.datagram(String.valueOf(msg));
+ sendMsg(ctx, relayStatusDTO);
+ }
+ );
+ }
+ super.channelRead(ctx, msg);
+ }
+
+ private void sendMsg(ChannelHandlerContext ctx, RelayStatusDTO relayStatusDTO) {
+ if (!ObjectUtils.isEmpty(relayStatusDTO)) {
+ ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+ String switchConent = preFix + relayStatusDTO.getChannelName() + "," + relayStatusDTO.getLampSwitch() + postFix;
+ out.writeBytes(switchConent.getBytes());
+ channels.forEach(channel -> {
+ if (channel.isActive()) {
+ if (channel != ctx.channel()) {
+ channel.writeAndFlush(out);
+ }
+ }
+ }
+ );
+ }
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ super.exceptionCaught(ctx, cause);
+ cause.printStackTrace();
+ ctx.close();
+ }
+
+}
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
- if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
-// log.info(" String : " + msg.toString(Charset.defaultCharset()));
-// if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
- pareDeviceHex(msg);
-// out.add(msg);
-// }
- }
- }
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
- String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
- log.info(" devcode : " + devcode);
- byteBuf.resetReaderIndex();//重置位判断
- String valueStr=byteBuf.slice(26, 4).toString(Charset.defaultCharset());
- log.info(" valueStr : " + valueStr);
- long defaultValue = Long.valueOf(valueStr);
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverDomain.java b/src/main/java/com/casic/handler/ReceiverDomain.java
deleted file mode 100644
index f0a89b6..0000000
--- a/src/main/java/com/casic/handler/ReceiverDomain.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import lombok.Data;
-
-/**
- * @description: 环境数据实体类
- * @author: Stone
- * @create: 2019-01-10 22:38
- **/
-@Data
-public class ReceiverDomain {
- private String head;
- private int len;
- private String key;
- private String value;
-
- public ReceiverDomain(ByteBuf bf) {
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServer.java b/src/main/java/com/casic/handler/ReceiverServer.java
deleted file mode 100644
index 6894a00..0000000
--- a/src/main/java/com/casic/handler/ReceiverServer.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.casic.handler;
-
-import io.netty.bootstrap.ServerBootstrap;
-import io.netty.channel.ChannelFuture;
-import io.netty.channel.ChannelInitializer;
-import io.netty.channel.ChannelOption;
-import io.netty.channel.EventLoopGroup;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.channel.socket.SocketChannel;
-import io.netty.channel.socket.nio.NioServerSocketChannel;
-import io.netty.handler.codec.LineBasedFrameDecoder;
-import io.netty.handler.codec.string.StringDecoder;
-import io.netty.handler.logging.LogLevel;
-import io.netty.handler.logging.LoggingHandler;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-
-/**
- * @description: 接收客户端传过来的数据,只做打印处理
- * @author: Stone
- * @create: 2019-01-10 19:52
- **/
-@Slf4j
-@Component
-public class ReceiverServer {
-
- @Autowired
- private ReceiverServerHandler receiverServerHandler;
-
- @Value("${xgd.server-port}")
- private int port;
-
-
-
- @PostConstruct
- public void init() {
- this.start();
- }
-
- public void start() {
- EventLoopGroup bossGroup = new NioEventLoopGroup();
- EventLoopGroup workerGroup = new NioEventLoopGroup();
- log.info("server bind port = {}", port);
-
- ServerBootstrap serverBootstrap = new ServerBootstrap();
- serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
- serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
- serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
-
- serverBootstrap.childHandler(new ChannelInitializer() {
- @Override
- protected void initChannel(SocketChannel socketChannel) {
-// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
- socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
- socketChannel.pipeline().addLast(new ReceiverDecoder());
- socketChannel.pipeline().addLast(new StringDecoder());
- socketChannel.pipeline().addLast(receiverServerHandler);
- }
- });
-
- serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
- try {
- ChannelFuture channelFuture = serverBootstrap.bind(port).sync();
- channelFuture.channel().closeFuture().sync();
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- workerGroup.shutdownGracefully();
- bossGroup.shutdownGracefully();
- }
- }
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServerHandler.java b/src/main/java/com/casic/handler/ReceiverServerHandler.java
deleted file mode 100644
index f432e06..0000000
--- a/src/main/java/com/casic/handler/ReceiverServerHandler.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.casic.handler;
-
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelInboundHandlerAdapter;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.javassist.bytecode.ByteArray;
-import org.springframework.stereotype.Component;
-
-/**
- * @description: 消息处理handler
- * @author: Stone
- * @create: 2019-01-10 20:01
- **/
-@Slf4j
-@Component
-@ChannelHandler.Sharable
-public class ReceiverServerHandler extends ChannelInboundHandlerAdapter {
-
- public ReceiverServerHandler() {
- }
-
- @Override
- public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
- super.channelRegistered(ctx);
- }
-
- @Override
- public void channelActive(ChannelHandlerContext ctx) throws Exception {
- super.channelActive(ctx);
- }
-
- @Override
- public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
- super.channelRead(ctx, msg);
-// log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME,(String)msg);
- log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
- String msgStr = msg.toString();
- // 以固定行分隔符结尾分割,头部可能有不符合接口协议的字段, 去掉
- int idx = msgStr.indexOf("##");
- if (idx >= 0) {
- msgStr = msgStr.substring(idx);
- }
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME, msgStr);
- }
-
-// //ByteBuf byteBuf
- public static void main(String[] main) {
- byte[] hexBytes = {(byte) 0x86, 0x53, 0x28, 0x06, (byte) 0x84, 0x19, (byte) 0x94,
- 0x30, (byte) 0xAA, (byte) 0xAA, 0x01, 0x03, (byte) 0x02, 0x02, 0x00, (byte) 0xB8, 0x44};
- ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
- out.writeBytes(hexBytes);
-
- if (ByteBufUtil.hexDump(out).toLowerCase().contains("aaaa")) {
- pareDeviceHex(out);
- }
- }
-
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- String devcode = ByteBufUtil.hexDump(byteBuf.slice(0, 8));
- devcode = devcode.substring(0, devcode.length() - 1);
- //数值读取
- byteBuf.readBytes(12);
- byteBuf.markReaderIndex();
- Integer defaultValueLength = byteBuf.readByte() & 0xff;
- long defaultValue = 0;
- for (int i = 0; i < defaultValueLength; i++) {
- long tempLong = byteBuf.readByte() & 0xff;
- defaultValue = defaultValue * 256 + tempLong;
- }
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
- super.exceptionCaught(ctx, cause);
- cause.printStackTrace();
- ctx.close();
- }
-
-}
diff --git a/src/main/java/com/casic/mapper/DeviceDataMapper.java b/src/main/java/com/casic/mapper/DeviceDataMapper.java
new file mode 100644
index 0000000..be72d19
--- /dev/null
+++ b/src/main/java/com/casic/mapper/DeviceDataMapper.java
@@ -0,0 +1,28 @@
+package com.casic.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface DeviceDataMapper {
+
+
+ /**
+ * 获取压力数据
+ */
+ List> getPressureData();
+
+ /**
+ * 获取流量数据
+ */
+ List> getFlowData();
+
+ /**
+ * 获取温湿度数据
+ */
+ List> getHumiTemp();
+
+
+}
diff --git a/src/main/java/com/casic/mapper/RainFallDataMapper.java b/src/main/java/com/casic/mapper/RainFallDataMapper.java
new file mode 100644
index 0000000..f5c29db
--- /dev/null
+++ b/src/main/java/com/casic/mapper/RainFallDataMapper.java
@@ -0,0 +1,7 @@
+package com.casic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.model.RainFallData;
+
+public interface RainFallDataMapper extends BaseMapper {
+}
diff --git a/src/main/java/com/casic/model/RainFallData.java b/src/main/java/com/casic/model/RainFallData.java
new file mode 100644
index 0000000..fa96673
--- /dev/null
+++ b/src/main/java/com/casic/model/RainFallData.java
@@ -0,0 +1,30 @@
+package com.casic.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@TableName("AD_YL_YLIANG")
+public class RainFallData {
+
+ private String dbid;
+
+ private String scrid;
+
+ private String dstid;
+
+ private String totalyuliang;
+
+ private String curminuteyuliang;
+
+ private String forminuteyuliang;
+
+ private String value;
+
+ private Date logtime;
+
+ private Date uptime;
+
+}
diff --git a/src/main/java/com/casic/model/RelayStatusDTO.java b/src/main/java/com/casic/model/RelayStatusDTO.java
new file mode 100644
index 0000000..b839e0c
--- /dev/null
+++ b/src/main/java/com/casic/model/RelayStatusDTO.java
@@ -0,0 +1,20 @@
+package com.casic.model;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class RelayStatusDTO {
+
+ /***
+ * 通道名称 1 2 3 4 5 6 7 8
+ */
+ private String channelName;
+
+ /***
+ * 开关0,1
+ */
+ private Integer lampSwitch;
+
+}
diff --git a/src/main/java/com/casic/resolver/AlarmDataResolver.java b/src/main/java/com/casic/resolver/AlarmDataResolver.java
new file mode 100644
index 0000000..2c6874b
--- /dev/null
+++ b/src/main/java/com/casic/resolver/AlarmDataResolver.java
@@ -0,0 +1,28 @@
+package com.casic.resolver;
+
+
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class AlarmDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if(msg.contains(alarmMark)){
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ Integer isAlarm = Integer.valueOf(msg.substring(16,17));
+ log.info("设备编号为" + devcode + ",是否报警" + isAlarm);
+ return RelayStatusDTO.builder()
+ .channelName( RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/casic/resolver/DatagramResolver.java b/src/main/java/com/casic/resolver/DatagramResolver.java
new file mode 100644
index 0000000..d00c952
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramResolver.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+import com.casic.model.RelayStatusDTO;
+
+public interface DatagramResolver {
+
+ RelayStatusDTO datagram(String msg);
+
+}
diff --git a/src/main/java/com/casic/resolver/DatagramSupport.java b/src/main/java/com/casic/resolver/DatagramSupport.java
new file mode 100644
index 0000000..1d911a3
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramSupport.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+public class DatagramSupport {
+
+
+
+
+
+}
diff --git a/src/main/java/com/casic/resolver/RainFallDataResolver.java b/src/main/java/com/casic/resolver/RainFallDataResolver.java
new file mode 100644
index 0000000..8a22899
--- /dev/null
+++ b/src/main/java/com/casic/resolver/RainFallDataResolver.java
@@ -0,0 +1,79 @@
+package com.casic.resolver;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service
+@Slf4j
+public class RainFallDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Autowired
+ private RainFallDataMapper rainFallDataMapper;
+ @Autowired
+ private AlarmLevelConfig alarmLevelConfig;
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if (msg.contains(rainFallMark)) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ String defaultValue = msg.substring(26, 30);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ RainFallData rainFallData = initRainFallData(devcode, defaultValue);
+ rainFallDataMapper.insert(rainFallData);
+ Integer isAlarm = isAlarm(String.valueOf(defaultValue), alarmLevelConfig.getRainfall());
+ return RelayStatusDTO.builder()
+ .channelName(RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+
+ }
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ private RainFallData initRainFallData(String devcode, String valueStr) {
+ RainFallData rainFallData = new RainFallData();
+ rainFallData.setDstid(devcode);
+ rainFallData.setTotalyuliang(valueStr);
+ rainFallData.setUptime(new Date());
+ rainFallData.setLogtime(new Date());
+ return rainFallData;
+ }
+
+ // //ByteBuf byteBuf
+ public static void main(String[] main) {
+ pareDeviceHex("8653280684199430AAAA01030200023985");
+ }
+
+ private static void pareDeviceHex(String msg) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ log.info(" devcode : " + devcode);
+ String valueStr = msg.substring(26, 30);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverDecoder.java b/src/main/java/com/casic/server/ReceiverDecoder.java
new file mode 100644
index 0000000..7030790
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverDecoder.java
@@ -0,0 +1,71 @@
+package com.casic.server;
+
+import com.casic.enums.RelaySwitchEnums;
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.ByteToMessageDecoder;
+import lombok.extern.slf4j.Slf4j;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * 自定义解码器
+ *
+ * @description: 将从接口取到的数据编码
+ * @author: cz
+ * @create: 2023-5-10
+ **/
+@Slf4j
+public class ReceiverDecoder extends ByteToMessageDecoder implements RelaySwitchEnums {
+
+
+// final ChannelGroup channels =
+// new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+
+ @Override
+ protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
+ if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
+ pareDeviceHex(msg);
+ }
+// if(msg.readableBytes()>2){
+// out.add(msg);
+// }
+ }
+
+// @Override
+// public void channelActive(ChannelHandlerContext ctx) throws Exception {
+// channels.add(ctx.channel());
+// super.channelActive(ctx);
+// }
+//
+// @Override
+// public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+// super.channelRead(ctx, msg);
+// ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+// String switchConent = preFix + 1 + "," + 1 + postFix;
+// out.writeBytes(switchConent.getBytes());
+// channels.forEach(
+// channel ->{
+// if(channel!=ctx.channel()) {
+// channel.writeAndFlush(out);
+// }
+// }
+// );
+// }
+
+ private static void pareDeviceHex(ByteBuf byteBuf) {
+ //去掉补位
+ log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
+ String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
+ log.info(" devcode : " + devcode);
+ byteBuf.resetReaderIndex();//重置位判断
+ String valueStr = byteBuf.slice(26, 4).toString(Charset.defaultCharset());
+ log.info(" valueStr : " + valueStr);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverServer.java b/src/main/java/com/casic/server/ReceiverServer.java
new file mode 100644
index 0000000..a98e4ca
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServer.java
@@ -0,0 +1,72 @@
+package com.casic.server;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.logging.LogLevel;
+import io.netty.handler.logging.LoggingHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * @description: 接收客户端传过来的数据,只做打印处理
+ * @author: Stone
+ * @create: 2019-01-10 19:52
+ **/
+@Slf4j
+@Component
+public class ReceiverServer {
+
+ @Autowired
+ private ReceiverServerHandler receiverServerHandler;
+ @Autowired
+ private ServerPort serverPort;
+
+ @PostConstruct
+ public void init() {
+ this.start();
+ }
+
+ public void start() {
+ EventLoopGroup bossGroup = new NioEventLoopGroup();
+ EventLoopGroup workerGroup = new NioEventLoopGroup();
+ log.info("server bind port = {}", serverPort.getPort());
+
+ ServerBootstrap serverBootstrap = new ServerBootstrap();
+ serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
+ serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
+ serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
+
+ serverBootstrap.childHandler(new ChannelInitializer() {
+ @Override
+ protected void initChannel(SocketChannel socketChannel) {
+// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
+ socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
+// socketChannel.pipeline().addLast(new ReceiverDecoder());
+ socketChannel.pipeline().addLast(new StringDecoder());
+ socketChannel.pipeline().addLast(receiverServerHandler);
+ }
+ });
+ serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
+ try {
+ ChannelFuture channelFuture = serverBootstrap.bind(serverPort.getPort()).sync();
+ channelFuture.channel().closeFuture().sync();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } finally {
+ workerGroup.shutdownGracefully();
+ bossGroup.shutdownGracefully();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/server/ReceiverServerHandler.java b/src/main/java/com/casic/server/ReceiverServerHandler.java
new file mode 100644
index 0000000..31ac43e
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServerHandler.java
@@ -0,0 +1,103 @@
+package com.casic.server;
+
+
+import com.casic.enums.RelaySwitchEnums;
+import com.casic.model.RelayStatusDTO;
+import com.casic.resolver.RainFallDataResolver;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.channel.group.ChannelGroup;
+import io.netty.channel.group.DefaultChannelGroup;
+import io.netty.util.concurrent.GlobalEventExecutor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * @description: 消息处理handler
+ * @author: Stone
+ * @create: 2019-01-10 20:01
+ **/
+@Slf4j
+@Component
+@ChannelHandler.Sharable
+public class ReceiverServerHandler extends ChannelInboundHandlerAdapter implements RelaySwitchEnums {
+
+ final ChannelGroup channels =
+ new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+ @Autowired
+ private List rainFallDataResolverList;
+
+ public ReceiverServerHandler() {
+ }
+
+ @Override
+ public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
+ super.channelRegistered(ctx);
+ }
+
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ channels.add(ctx.channel());
+ super.channelActive(ctx);
+ }
+
+ @Override
+ public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+ channels.forEach(channel -> {
+ if (channel == ctx.channel()) {
+ channels.remove(channel);
+ }
+ }
+ );
+ super.channelInactive(ctx);
+ }
+
+ /**
+ * 雨量计
+ */
+ @Override
+ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+ if (msg instanceof String) {
+ rainFallDataResolverList.forEach(
+ rainFallDataResolver -> {
+ RelayStatusDTO relayStatusDTO = rainFallDataResolver.datagram(String.valueOf(msg));
+ sendMsg(ctx, relayStatusDTO);
+ }
+ );
+ }
+ super.channelRead(ctx, msg);
+ }
+
+ private void sendMsg(ChannelHandlerContext ctx, RelayStatusDTO relayStatusDTO) {
+ if (!ObjectUtils.isEmpty(relayStatusDTO)) {
+ ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+ String switchConent = preFix + relayStatusDTO.getChannelName() + "," + relayStatusDTO.getLampSwitch() + postFix;
+ out.writeBytes(switchConent.getBytes());
+ channels.forEach(channel -> {
+ if (channel.isActive()) {
+ if (channel != ctx.channel()) {
+ channel.writeAndFlush(out);
+ }
+ }
+ }
+ );
+ }
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ super.exceptionCaught(ctx, cause);
+ cause.printStackTrace();
+ ctx.close();
+ }
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataScanner.java b/src/main/java/com/casic/service/DeviceDataScanner.java
new file mode 100644
index 0000000..049fa71
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataScanner.java
@@ -0,0 +1,7 @@
+package com.casic.service;
+
+public interface DeviceDataScanner {
+
+ void scanDeviceData();
+
+}
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
- if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
-// log.info(" String : " + msg.toString(Charset.defaultCharset()));
-// if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
- pareDeviceHex(msg);
-// out.add(msg);
-// }
- }
- }
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
- String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
- log.info(" devcode : " + devcode);
- byteBuf.resetReaderIndex();//重置位判断
- String valueStr=byteBuf.slice(26, 4).toString(Charset.defaultCharset());
- log.info(" valueStr : " + valueStr);
- long defaultValue = Long.valueOf(valueStr);
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverDomain.java b/src/main/java/com/casic/handler/ReceiverDomain.java
deleted file mode 100644
index f0a89b6..0000000
--- a/src/main/java/com/casic/handler/ReceiverDomain.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import lombok.Data;
-
-/**
- * @description: 环境数据实体类
- * @author: Stone
- * @create: 2019-01-10 22:38
- **/
-@Data
-public class ReceiverDomain {
- private String head;
- private int len;
- private String key;
- private String value;
-
- public ReceiverDomain(ByteBuf bf) {
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServer.java b/src/main/java/com/casic/handler/ReceiverServer.java
deleted file mode 100644
index 6894a00..0000000
--- a/src/main/java/com/casic/handler/ReceiverServer.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.casic.handler;
-
-import io.netty.bootstrap.ServerBootstrap;
-import io.netty.channel.ChannelFuture;
-import io.netty.channel.ChannelInitializer;
-import io.netty.channel.ChannelOption;
-import io.netty.channel.EventLoopGroup;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.channel.socket.SocketChannel;
-import io.netty.channel.socket.nio.NioServerSocketChannel;
-import io.netty.handler.codec.LineBasedFrameDecoder;
-import io.netty.handler.codec.string.StringDecoder;
-import io.netty.handler.logging.LogLevel;
-import io.netty.handler.logging.LoggingHandler;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-
-/**
- * @description: 接收客户端传过来的数据,只做打印处理
- * @author: Stone
- * @create: 2019-01-10 19:52
- **/
-@Slf4j
-@Component
-public class ReceiverServer {
-
- @Autowired
- private ReceiverServerHandler receiverServerHandler;
-
- @Value("${xgd.server-port}")
- private int port;
-
-
-
- @PostConstruct
- public void init() {
- this.start();
- }
-
- public void start() {
- EventLoopGroup bossGroup = new NioEventLoopGroup();
- EventLoopGroup workerGroup = new NioEventLoopGroup();
- log.info("server bind port = {}", port);
-
- ServerBootstrap serverBootstrap = new ServerBootstrap();
- serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
- serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
- serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
-
- serverBootstrap.childHandler(new ChannelInitializer() {
- @Override
- protected void initChannel(SocketChannel socketChannel) {
-// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
- socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
- socketChannel.pipeline().addLast(new ReceiverDecoder());
- socketChannel.pipeline().addLast(new StringDecoder());
- socketChannel.pipeline().addLast(receiverServerHandler);
- }
- });
-
- serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
- try {
- ChannelFuture channelFuture = serverBootstrap.bind(port).sync();
- channelFuture.channel().closeFuture().sync();
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- workerGroup.shutdownGracefully();
- bossGroup.shutdownGracefully();
- }
- }
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServerHandler.java b/src/main/java/com/casic/handler/ReceiverServerHandler.java
deleted file mode 100644
index f432e06..0000000
--- a/src/main/java/com/casic/handler/ReceiverServerHandler.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.casic.handler;
-
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelInboundHandlerAdapter;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.javassist.bytecode.ByteArray;
-import org.springframework.stereotype.Component;
-
-/**
- * @description: 消息处理handler
- * @author: Stone
- * @create: 2019-01-10 20:01
- **/
-@Slf4j
-@Component
-@ChannelHandler.Sharable
-public class ReceiverServerHandler extends ChannelInboundHandlerAdapter {
-
- public ReceiverServerHandler() {
- }
-
- @Override
- public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
- super.channelRegistered(ctx);
- }
-
- @Override
- public void channelActive(ChannelHandlerContext ctx) throws Exception {
- super.channelActive(ctx);
- }
-
- @Override
- public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
- super.channelRead(ctx, msg);
-// log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME,(String)msg);
- log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
- String msgStr = msg.toString();
- // 以固定行分隔符结尾分割,头部可能有不符合接口协议的字段, 去掉
- int idx = msgStr.indexOf("##");
- if (idx >= 0) {
- msgStr = msgStr.substring(idx);
- }
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME, msgStr);
- }
-
-// //ByteBuf byteBuf
- public static void main(String[] main) {
- byte[] hexBytes = {(byte) 0x86, 0x53, 0x28, 0x06, (byte) 0x84, 0x19, (byte) 0x94,
- 0x30, (byte) 0xAA, (byte) 0xAA, 0x01, 0x03, (byte) 0x02, 0x02, 0x00, (byte) 0xB8, 0x44};
- ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
- out.writeBytes(hexBytes);
-
- if (ByteBufUtil.hexDump(out).toLowerCase().contains("aaaa")) {
- pareDeviceHex(out);
- }
- }
-
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- String devcode = ByteBufUtil.hexDump(byteBuf.slice(0, 8));
- devcode = devcode.substring(0, devcode.length() - 1);
- //数值读取
- byteBuf.readBytes(12);
- byteBuf.markReaderIndex();
- Integer defaultValueLength = byteBuf.readByte() & 0xff;
- long defaultValue = 0;
- for (int i = 0; i < defaultValueLength; i++) {
- long tempLong = byteBuf.readByte() & 0xff;
- defaultValue = defaultValue * 256 + tempLong;
- }
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
- super.exceptionCaught(ctx, cause);
- cause.printStackTrace();
- ctx.close();
- }
-
-}
diff --git a/src/main/java/com/casic/mapper/DeviceDataMapper.java b/src/main/java/com/casic/mapper/DeviceDataMapper.java
new file mode 100644
index 0000000..be72d19
--- /dev/null
+++ b/src/main/java/com/casic/mapper/DeviceDataMapper.java
@@ -0,0 +1,28 @@
+package com.casic.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface DeviceDataMapper {
+
+
+ /**
+ * 获取压力数据
+ */
+ List> getPressureData();
+
+ /**
+ * 获取流量数据
+ */
+ List> getFlowData();
+
+ /**
+ * 获取温湿度数据
+ */
+ List> getHumiTemp();
+
+
+}
diff --git a/src/main/java/com/casic/mapper/RainFallDataMapper.java b/src/main/java/com/casic/mapper/RainFallDataMapper.java
new file mode 100644
index 0000000..f5c29db
--- /dev/null
+++ b/src/main/java/com/casic/mapper/RainFallDataMapper.java
@@ -0,0 +1,7 @@
+package com.casic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.model.RainFallData;
+
+public interface RainFallDataMapper extends BaseMapper {
+}
diff --git a/src/main/java/com/casic/model/RainFallData.java b/src/main/java/com/casic/model/RainFallData.java
new file mode 100644
index 0000000..fa96673
--- /dev/null
+++ b/src/main/java/com/casic/model/RainFallData.java
@@ -0,0 +1,30 @@
+package com.casic.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@TableName("AD_YL_YLIANG")
+public class RainFallData {
+
+ private String dbid;
+
+ private String scrid;
+
+ private String dstid;
+
+ private String totalyuliang;
+
+ private String curminuteyuliang;
+
+ private String forminuteyuliang;
+
+ private String value;
+
+ private Date logtime;
+
+ private Date uptime;
+
+}
diff --git a/src/main/java/com/casic/model/RelayStatusDTO.java b/src/main/java/com/casic/model/RelayStatusDTO.java
new file mode 100644
index 0000000..b839e0c
--- /dev/null
+++ b/src/main/java/com/casic/model/RelayStatusDTO.java
@@ -0,0 +1,20 @@
+package com.casic.model;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class RelayStatusDTO {
+
+ /***
+ * 通道名称 1 2 3 4 5 6 7 8
+ */
+ private String channelName;
+
+ /***
+ * 开关0,1
+ */
+ private Integer lampSwitch;
+
+}
diff --git a/src/main/java/com/casic/resolver/AlarmDataResolver.java b/src/main/java/com/casic/resolver/AlarmDataResolver.java
new file mode 100644
index 0000000..2c6874b
--- /dev/null
+++ b/src/main/java/com/casic/resolver/AlarmDataResolver.java
@@ -0,0 +1,28 @@
+package com.casic.resolver;
+
+
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class AlarmDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if(msg.contains(alarmMark)){
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ Integer isAlarm = Integer.valueOf(msg.substring(16,17));
+ log.info("设备编号为" + devcode + ",是否报警" + isAlarm);
+ return RelayStatusDTO.builder()
+ .channelName( RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/casic/resolver/DatagramResolver.java b/src/main/java/com/casic/resolver/DatagramResolver.java
new file mode 100644
index 0000000..d00c952
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramResolver.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+import com.casic.model.RelayStatusDTO;
+
+public interface DatagramResolver {
+
+ RelayStatusDTO datagram(String msg);
+
+}
diff --git a/src/main/java/com/casic/resolver/DatagramSupport.java b/src/main/java/com/casic/resolver/DatagramSupport.java
new file mode 100644
index 0000000..1d911a3
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramSupport.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+public class DatagramSupport {
+
+
+
+
+
+}
diff --git a/src/main/java/com/casic/resolver/RainFallDataResolver.java b/src/main/java/com/casic/resolver/RainFallDataResolver.java
new file mode 100644
index 0000000..8a22899
--- /dev/null
+++ b/src/main/java/com/casic/resolver/RainFallDataResolver.java
@@ -0,0 +1,79 @@
+package com.casic.resolver;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service
+@Slf4j
+public class RainFallDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Autowired
+ private RainFallDataMapper rainFallDataMapper;
+ @Autowired
+ private AlarmLevelConfig alarmLevelConfig;
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if (msg.contains(rainFallMark)) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ String defaultValue = msg.substring(26, 30);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ RainFallData rainFallData = initRainFallData(devcode, defaultValue);
+ rainFallDataMapper.insert(rainFallData);
+ Integer isAlarm = isAlarm(String.valueOf(defaultValue), alarmLevelConfig.getRainfall());
+ return RelayStatusDTO.builder()
+ .channelName(RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+
+ }
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ private RainFallData initRainFallData(String devcode, String valueStr) {
+ RainFallData rainFallData = new RainFallData();
+ rainFallData.setDstid(devcode);
+ rainFallData.setTotalyuliang(valueStr);
+ rainFallData.setUptime(new Date());
+ rainFallData.setLogtime(new Date());
+ return rainFallData;
+ }
+
+ // //ByteBuf byteBuf
+ public static void main(String[] main) {
+ pareDeviceHex("8653280684199430AAAA01030200023985");
+ }
+
+ private static void pareDeviceHex(String msg) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ log.info(" devcode : " + devcode);
+ String valueStr = msg.substring(26, 30);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverDecoder.java b/src/main/java/com/casic/server/ReceiverDecoder.java
new file mode 100644
index 0000000..7030790
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverDecoder.java
@@ -0,0 +1,71 @@
+package com.casic.server;
+
+import com.casic.enums.RelaySwitchEnums;
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.ByteToMessageDecoder;
+import lombok.extern.slf4j.Slf4j;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * 自定义解码器
+ *
+ * @description: 将从接口取到的数据编码
+ * @author: cz
+ * @create: 2023-5-10
+ **/
+@Slf4j
+public class ReceiverDecoder extends ByteToMessageDecoder implements RelaySwitchEnums {
+
+
+// final ChannelGroup channels =
+// new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+
+ @Override
+ protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
+ if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
+ pareDeviceHex(msg);
+ }
+// if(msg.readableBytes()>2){
+// out.add(msg);
+// }
+ }
+
+// @Override
+// public void channelActive(ChannelHandlerContext ctx) throws Exception {
+// channels.add(ctx.channel());
+// super.channelActive(ctx);
+// }
+//
+// @Override
+// public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+// super.channelRead(ctx, msg);
+// ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+// String switchConent = preFix + 1 + "," + 1 + postFix;
+// out.writeBytes(switchConent.getBytes());
+// channels.forEach(
+// channel ->{
+// if(channel!=ctx.channel()) {
+// channel.writeAndFlush(out);
+// }
+// }
+// );
+// }
+
+ private static void pareDeviceHex(ByteBuf byteBuf) {
+ //去掉补位
+ log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
+ String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
+ log.info(" devcode : " + devcode);
+ byteBuf.resetReaderIndex();//重置位判断
+ String valueStr = byteBuf.slice(26, 4).toString(Charset.defaultCharset());
+ log.info(" valueStr : " + valueStr);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverServer.java b/src/main/java/com/casic/server/ReceiverServer.java
new file mode 100644
index 0000000..a98e4ca
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServer.java
@@ -0,0 +1,72 @@
+package com.casic.server;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.logging.LogLevel;
+import io.netty.handler.logging.LoggingHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * @description: 接收客户端传过来的数据,只做打印处理
+ * @author: Stone
+ * @create: 2019-01-10 19:52
+ **/
+@Slf4j
+@Component
+public class ReceiverServer {
+
+ @Autowired
+ private ReceiverServerHandler receiverServerHandler;
+ @Autowired
+ private ServerPort serverPort;
+
+ @PostConstruct
+ public void init() {
+ this.start();
+ }
+
+ public void start() {
+ EventLoopGroup bossGroup = new NioEventLoopGroup();
+ EventLoopGroup workerGroup = new NioEventLoopGroup();
+ log.info("server bind port = {}", serverPort.getPort());
+
+ ServerBootstrap serverBootstrap = new ServerBootstrap();
+ serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
+ serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
+ serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
+
+ serverBootstrap.childHandler(new ChannelInitializer() {
+ @Override
+ protected void initChannel(SocketChannel socketChannel) {
+// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
+ socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
+// socketChannel.pipeline().addLast(new ReceiverDecoder());
+ socketChannel.pipeline().addLast(new StringDecoder());
+ socketChannel.pipeline().addLast(receiverServerHandler);
+ }
+ });
+ serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
+ try {
+ ChannelFuture channelFuture = serverBootstrap.bind(serverPort.getPort()).sync();
+ channelFuture.channel().closeFuture().sync();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } finally {
+ workerGroup.shutdownGracefully();
+ bossGroup.shutdownGracefully();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/server/ReceiverServerHandler.java b/src/main/java/com/casic/server/ReceiverServerHandler.java
new file mode 100644
index 0000000..31ac43e
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServerHandler.java
@@ -0,0 +1,103 @@
+package com.casic.server;
+
+
+import com.casic.enums.RelaySwitchEnums;
+import com.casic.model.RelayStatusDTO;
+import com.casic.resolver.RainFallDataResolver;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.channel.group.ChannelGroup;
+import io.netty.channel.group.DefaultChannelGroup;
+import io.netty.util.concurrent.GlobalEventExecutor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * @description: 消息处理handler
+ * @author: Stone
+ * @create: 2019-01-10 20:01
+ **/
+@Slf4j
+@Component
+@ChannelHandler.Sharable
+public class ReceiverServerHandler extends ChannelInboundHandlerAdapter implements RelaySwitchEnums {
+
+ final ChannelGroup channels =
+ new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+ @Autowired
+ private List rainFallDataResolverList;
+
+ public ReceiverServerHandler() {
+ }
+
+ @Override
+ public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
+ super.channelRegistered(ctx);
+ }
+
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ channels.add(ctx.channel());
+ super.channelActive(ctx);
+ }
+
+ @Override
+ public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+ channels.forEach(channel -> {
+ if (channel == ctx.channel()) {
+ channels.remove(channel);
+ }
+ }
+ );
+ super.channelInactive(ctx);
+ }
+
+ /**
+ * 雨量计
+ */
+ @Override
+ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+ if (msg instanceof String) {
+ rainFallDataResolverList.forEach(
+ rainFallDataResolver -> {
+ RelayStatusDTO relayStatusDTO = rainFallDataResolver.datagram(String.valueOf(msg));
+ sendMsg(ctx, relayStatusDTO);
+ }
+ );
+ }
+ super.channelRead(ctx, msg);
+ }
+
+ private void sendMsg(ChannelHandlerContext ctx, RelayStatusDTO relayStatusDTO) {
+ if (!ObjectUtils.isEmpty(relayStatusDTO)) {
+ ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+ String switchConent = preFix + relayStatusDTO.getChannelName() + "," + relayStatusDTO.getLampSwitch() + postFix;
+ out.writeBytes(switchConent.getBytes());
+ channels.forEach(channel -> {
+ if (channel.isActive()) {
+ if (channel != ctx.channel()) {
+ channel.writeAndFlush(out);
+ }
+ }
+ }
+ );
+ }
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ super.exceptionCaught(ctx, cause);
+ cause.printStackTrace();
+ ctx.close();
+ }
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataScanner.java b/src/main/java/com/casic/service/DeviceDataScanner.java
new file mode 100644
index 0000000..049fa71
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataScanner.java
@@ -0,0 +1,7 @@
+package com.casic.service;
+
+public interface DeviceDataScanner {
+
+ void scanDeviceData();
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataSupport.java b/src/main/java/com/casic/service/DeviceDataSupport.java
new file mode 100644
index 0000000..93d61ea
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataSupport.java
@@ -0,0 +1,50 @@
+package com.casic.service;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.client.Client;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.mapper.DeviceDataMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ *
+ */
+@Slf4j
+@Component
+public class DeviceDataSupport implements AlarmDatagramFlag {
+
+ @Autowired
+ protected DeviceDataMapper deviceDataMapper;
+ @Autowired
+ protected AlarmLevelConfig alarmLevelConfig;
+ @Autowired
+ private Client client;
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * 发送报警消息
+ */
+ protected void sendAlarmMsg(String devcode, Integer isAlarm) {
+ try {
+ String alarmMsg = devcode + alarmMark + isAlarm;
+ client.send(alarmMsg);
+ } catch (Exception ex) {
+ log.error("消息发送失败,设备编号为{},异常信息{}", devcode, ex.getMessage());
+ }
+ }
+
+}
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
- if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
-// log.info(" String : " + msg.toString(Charset.defaultCharset()));
-// if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
- pareDeviceHex(msg);
-// out.add(msg);
-// }
- }
- }
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
- String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
- log.info(" devcode : " + devcode);
- byteBuf.resetReaderIndex();//重置位判断
- String valueStr=byteBuf.slice(26, 4).toString(Charset.defaultCharset());
- log.info(" valueStr : " + valueStr);
- long defaultValue = Long.valueOf(valueStr);
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverDomain.java b/src/main/java/com/casic/handler/ReceiverDomain.java
deleted file mode 100644
index f0a89b6..0000000
--- a/src/main/java/com/casic/handler/ReceiverDomain.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import lombok.Data;
-
-/**
- * @description: 环境数据实体类
- * @author: Stone
- * @create: 2019-01-10 22:38
- **/
-@Data
-public class ReceiverDomain {
- private String head;
- private int len;
- private String key;
- private String value;
-
- public ReceiverDomain(ByteBuf bf) {
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServer.java b/src/main/java/com/casic/handler/ReceiverServer.java
deleted file mode 100644
index 6894a00..0000000
--- a/src/main/java/com/casic/handler/ReceiverServer.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.casic.handler;
-
-import io.netty.bootstrap.ServerBootstrap;
-import io.netty.channel.ChannelFuture;
-import io.netty.channel.ChannelInitializer;
-import io.netty.channel.ChannelOption;
-import io.netty.channel.EventLoopGroup;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.channel.socket.SocketChannel;
-import io.netty.channel.socket.nio.NioServerSocketChannel;
-import io.netty.handler.codec.LineBasedFrameDecoder;
-import io.netty.handler.codec.string.StringDecoder;
-import io.netty.handler.logging.LogLevel;
-import io.netty.handler.logging.LoggingHandler;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-
-/**
- * @description: 接收客户端传过来的数据,只做打印处理
- * @author: Stone
- * @create: 2019-01-10 19:52
- **/
-@Slf4j
-@Component
-public class ReceiverServer {
-
- @Autowired
- private ReceiverServerHandler receiverServerHandler;
-
- @Value("${xgd.server-port}")
- private int port;
-
-
-
- @PostConstruct
- public void init() {
- this.start();
- }
-
- public void start() {
- EventLoopGroup bossGroup = new NioEventLoopGroup();
- EventLoopGroup workerGroup = new NioEventLoopGroup();
- log.info("server bind port = {}", port);
-
- ServerBootstrap serverBootstrap = new ServerBootstrap();
- serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
- serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
- serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
-
- serverBootstrap.childHandler(new ChannelInitializer() {
- @Override
- protected void initChannel(SocketChannel socketChannel) {
-// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
- socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
- socketChannel.pipeline().addLast(new ReceiverDecoder());
- socketChannel.pipeline().addLast(new StringDecoder());
- socketChannel.pipeline().addLast(receiverServerHandler);
- }
- });
-
- serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
- try {
- ChannelFuture channelFuture = serverBootstrap.bind(port).sync();
- channelFuture.channel().closeFuture().sync();
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- workerGroup.shutdownGracefully();
- bossGroup.shutdownGracefully();
- }
- }
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServerHandler.java b/src/main/java/com/casic/handler/ReceiverServerHandler.java
deleted file mode 100644
index f432e06..0000000
--- a/src/main/java/com/casic/handler/ReceiverServerHandler.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.casic.handler;
-
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelInboundHandlerAdapter;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.javassist.bytecode.ByteArray;
-import org.springframework.stereotype.Component;
-
-/**
- * @description: 消息处理handler
- * @author: Stone
- * @create: 2019-01-10 20:01
- **/
-@Slf4j
-@Component
-@ChannelHandler.Sharable
-public class ReceiverServerHandler extends ChannelInboundHandlerAdapter {
-
- public ReceiverServerHandler() {
- }
-
- @Override
- public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
- super.channelRegistered(ctx);
- }
-
- @Override
- public void channelActive(ChannelHandlerContext ctx) throws Exception {
- super.channelActive(ctx);
- }
-
- @Override
- public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
- super.channelRead(ctx, msg);
-// log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME,(String)msg);
- log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
- String msgStr = msg.toString();
- // 以固定行分隔符结尾分割,头部可能有不符合接口协议的字段, 去掉
- int idx = msgStr.indexOf("##");
- if (idx >= 0) {
- msgStr = msgStr.substring(idx);
- }
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME, msgStr);
- }
-
-// //ByteBuf byteBuf
- public static void main(String[] main) {
- byte[] hexBytes = {(byte) 0x86, 0x53, 0x28, 0x06, (byte) 0x84, 0x19, (byte) 0x94,
- 0x30, (byte) 0xAA, (byte) 0xAA, 0x01, 0x03, (byte) 0x02, 0x02, 0x00, (byte) 0xB8, 0x44};
- ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
- out.writeBytes(hexBytes);
-
- if (ByteBufUtil.hexDump(out).toLowerCase().contains("aaaa")) {
- pareDeviceHex(out);
- }
- }
-
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- String devcode = ByteBufUtil.hexDump(byteBuf.slice(0, 8));
- devcode = devcode.substring(0, devcode.length() - 1);
- //数值读取
- byteBuf.readBytes(12);
- byteBuf.markReaderIndex();
- Integer defaultValueLength = byteBuf.readByte() & 0xff;
- long defaultValue = 0;
- for (int i = 0; i < defaultValueLength; i++) {
- long tempLong = byteBuf.readByte() & 0xff;
- defaultValue = defaultValue * 256 + tempLong;
- }
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
- super.exceptionCaught(ctx, cause);
- cause.printStackTrace();
- ctx.close();
- }
-
-}
diff --git a/src/main/java/com/casic/mapper/DeviceDataMapper.java b/src/main/java/com/casic/mapper/DeviceDataMapper.java
new file mode 100644
index 0000000..be72d19
--- /dev/null
+++ b/src/main/java/com/casic/mapper/DeviceDataMapper.java
@@ -0,0 +1,28 @@
+package com.casic.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface DeviceDataMapper {
+
+
+ /**
+ * 获取压力数据
+ */
+ List> getPressureData();
+
+ /**
+ * 获取流量数据
+ */
+ List> getFlowData();
+
+ /**
+ * 获取温湿度数据
+ */
+ List> getHumiTemp();
+
+
+}
diff --git a/src/main/java/com/casic/mapper/RainFallDataMapper.java b/src/main/java/com/casic/mapper/RainFallDataMapper.java
new file mode 100644
index 0000000..f5c29db
--- /dev/null
+++ b/src/main/java/com/casic/mapper/RainFallDataMapper.java
@@ -0,0 +1,7 @@
+package com.casic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.model.RainFallData;
+
+public interface RainFallDataMapper extends BaseMapper {
+}
diff --git a/src/main/java/com/casic/model/RainFallData.java b/src/main/java/com/casic/model/RainFallData.java
new file mode 100644
index 0000000..fa96673
--- /dev/null
+++ b/src/main/java/com/casic/model/RainFallData.java
@@ -0,0 +1,30 @@
+package com.casic.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@TableName("AD_YL_YLIANG")
+public class RainFallData {
+
+ private String dbid;
+
+ private String scrid;
+
+ private String dstid;
+
+ private String totalyuliang;
+
+ private String curminuteyuliang;
+
+ private String forminuteyuliang;
+
+ private String value;
+
+ private Date logtime;
+
+ private Date uptime;
+
+}
diff --git a/src/main/java/com/casic/model/RelayStatusDTO.java b/src/main/java/com/casic/model/RelayStatusDTO.java
new file mode 100644
index 0000000..b839e0c
--- /dev/null
+++ b/src/main/java/com/casic/model/RelayStatusDTO.java
@@ -0,0 +1,20 @@
+package com.casic.model;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class RelayStatusDTO {
+
+ /***
+ * 通道名称 1 2 3 4 5 6 7 8
+ */
+ private String channelName;
+
+ /***
+ * 开关0,1
+ */
+ private Integer lampSwitch;
+
+}
diff --git a/src/main/java/com/casic/resolver/AlarmDataResolver.java b/src/main/java/com/casic/resolver/AlarmDataResolver.java
new file mode 100644
index 0000000..2c6874b
--- /dev/null
+++ b/src/main/java/com/casic/resolver/AlarmDataResolver.java
@@ -0,0 +1,28 @@
+package com.casic.resolver;
+
+
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class AlarmDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if(msg.contains(alarmMark)){
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ Integer isAlarm = Integer.valueOf(msg.substring(16,17));
+ log.info("设备编号为" + devcode + ",是否报警" + isAlarm);
+ return RelayStatusDTO.builder()
+ .channelName( RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/casic/resolver/DatagramResolver.java b/src/main/java/com/casic/resolver/DatagramResolver.java
new file mode 100644
index 0000000..d00c952
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramResolver.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+import com.casic.model.RelayStatusDTO;
+
+public interface DatagramResolver {
+
+ RelayStatusDTO datagram(String msg);
+
+}
diff --git a/src/main/java/com/casic/resolver/DatagramSupport.java b/src/main/java/com/casic/resolver/DatagramSupport.java
new file mode 100644
index 0000000..1d911a3
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramSupport.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+public class DatagramSupport {
+
+
+
+
+
+}
diff --git a/src/main/java/com/casic/resolver/RainFallDataResolver.java b/src/main/java/com/casic/resolver/RainFallDataResolver.java
new file mode 100644
index 0000000..8a22899
--- /dev/null
+++ b/src/main/java/com/casic/resolver/RainFallDataResolver.java
@@ -0,0 +1,79 @@
+package com.casic.resolver;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service
+@Slf4j
+public class RainFallDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Autowired
+ private RainFallDataMapper rainFallDataMapper;
+ @Autowired
+ private AlarmLevelConfig alarmLevelConfig;
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if (msg.contains(rainFallMark)) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ String defaultValue = msg.substring(26, 30);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ RainFallData rainFallData = initRainFallData(devcode, defaultValue);
+ rainFallDataMapper.insert(rainFallData);
+ Integer isAlarm = isAlarm(String.valueOf(defaultValue), alarmLevelConfig.getRainfall());
+ return RelayStatusDTO.builder()
+ .channelName(RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+
+ }
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ private RainFallData initRainFallData(String devcode, String valueStr) {
+ RainFallData rainFallData = new RainFallData();
+ rainFallData.setDstid(devcode);
+ rainFallData.setTotalyuliang(valueStr);
+ rainFallData.setUptime(new Date());
+ rainFallData.setLogtime(new Date());
+ return rainFallData;
+ }
+
+ // //ByteBuf byteBuf
+ public static void main(String[] main) {
+ pareDeviceHex("8653280684199430AAAA01030200023985");
+ }
+
+ private static void pareDeviceHex(String msg) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ log.info(" devcode : " + devcode);
+ String valueStr = msg.substring(26, 30);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverDecoder.java b/src/main/java/com/casic/server/ReceiverDecoder.java
new file mode 100644
index 0000000..7030790
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverDecoder.java
@@ -0,0 +1,71 @@
+package com.casic.server;
+
+import com.casic.enums.RelaySwitchEnums;
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.ByteToMessageDecoder;
+import lombok.extern.slf4j.Slf4j;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * 自定义解码器
+ *
+ * @description: 将从接口取到的数据编码
+ * @author: cz
+ * @create: 2023-5-10
+ **/
+@Slf4j
+public class ReceiverDecoder extends ByteToMessageDecoder implements RelaySwitchEnums {
+
+
+// final ChannelGroup channels =
+// new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+
+ @Override
+ protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
+ if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
+ pareDeviceHex(msg);
+ }
+// if(msg.readableBytes()>2){
+// out.add(msg);
+// }
+ }
+
+// @Override
+// public void channelActive(ChannelHandlerContext ctx) throws Exception {
+// channels.add(ctx.channel());
+// super.channelActive(ctx);
+// }
+//
+// @Override
+// public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+// super.channelRead(ctx, msg);
+// ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+// String switchConent = preFix + 1 + "," + 1 + postFix;
+// out.writeBytes(switchConent.getBytes());
+// channels.forEach(
+// channel ->{
+// if(channel!=ctx.channel()) {
+// channel.writeAndFlush(out);
+// }
+// }
+// );
+// }
+
+ private static void pareDeviceHex(ByteBuf byteBuf) {
+ //去掉补位
+ log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
+ String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
+ log.info(" devcode : " + devcode);
+ byteBuf.resetReaderIndex();//重置位判断
+ String valueStr = byteBuf.slice(26, 4).toString(Charset.defaultCharset());
+ log.info(" valueStr : " + valueStr);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverServer.java b/src/main/java/com/casic/server/ReceiverServer.java
new file mode 100644
index 0000000..a98e4ca
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServer.java
@@ -0,0 +1,72 @@
+package com.casic.server;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.logging.LogLevel;
+import io.netty.handler.logging.LoggingHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * @description: 接收客户端传过来的数据,只做打印处理
+ * @author: Stone
+ * @create: 2019-01-10 19:52
+ **/
+@Slf4j
+@Component
+public class ReceiverServer {
+
+ @Autowired
+ private ReceiverServerHandler receiverServerHandler;
+ @Autowired
+ private ServerPort serverPort;
+
+ @PostConstruct
+ public void init() {
+ this.start();
+ }
+
+ public void start() {
+ EventLoopGroup bossGroup = new NioEventLoopGroup();
+ EventLoopGroup workerGroup = new NioEventLoopGroup();
+ log.info("server bind port = {}", serverPort.getPort());
+
+ ServerBootstrap serverBootstrap = new ServerBootstrap();
+ serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
+ serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
+ serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
+
+ serverBootstrap.childHandler(new ChannelInitializer() {
+ @Override
+ protected void initChannel(SocketChannel socketChannel) {
+// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
+ socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
+// socketChannel.pipeline().addLast(new ReceiverDecoder());
+ socketChannel.pipeline().addLast(new StringDecoder());
+ socketChannel.pipeline().addLast(receiverServerHandler);
+ }
+ });
+ serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
+ try {
+ ChannelFuture channelFuture = serverBootstrap.bind(serverPort.getPort()).sync();
+ channelFuture.channel().closeFuture().sync();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } finally {
+ workerGroup.shutdownGracefully();
+ bossGroup.shutdownGracefully();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/server/ReceiverServerHandler.java b/src/main/java/com/casic/server/ReceiverServerHandler.java
new file mode 100644
index 0000000..31ac43e
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServerHandler.java
@@ -0,0 +1,103 @@
+package com.casic.server;
+
+
+import com.casic.enums.RelaySwitchEnums;
+import com.casic.model.RelayStatusDTO;
+import com.casic.resolver.RainFallDataResolver;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.channel.group.ChannelGroup;
+import io.netty.channel.group.DefaultChannelGroup;
+import io.netty.util.concurrent.GlobalEventExecutor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * @description: 消息处理handler
+ * @author: Stone
+ * @create: 2019-01-10 20:01
+ **/
+@Slf4j
+@Component
+@ChannelHandler.Sharable
+public class ReceiverServerHandler extends ChannelInboundHandlerAdapter implements RelaySwitchEnums {
+
+ final ChannelGroup channels =
+ new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+ @Autowired
+ private List rainFallDataResolverList;
+
+ public ReceiverServerHandler() {
+ }
+
+ @Override
+ public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
+ super.channelRegistered(ctx);
+ }
+
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ channels.add(ctx.channel());
+ super.channelActive(ctx);
+ }
+
+ @Override
+ public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+ channels.forEach(channel -> {
+ if (channel == ctx.channel()) {
+ channels.remove(channel);
+ }
+ }
+ );
+ super.channelInactive(ctx);
+ }
+
+ /**
+ * 雨量计
+ */
+ @Override
+ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+ if (msg instanceof String) {
+ rainFallDataResolverList.forEach(
+ rainFallDataResolver -> {
+ RelayStatusDTO relayStatusDTO = rainFallDataResolver.datagram(String.valueOf(msg));
+ sendMsg(ctx, relayStatusDTO);
+ }
+ );
+ }
+ super.channelRead(ctx, msg);
+ }
+
+ private void sendMsg(ChannelHandlerContext ctx, RelayStatusDTO relayStatusDTO) {
+ if (!ObjectUtils.isEmpty(relayStatusDTO)) {
+ ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+ String switchConent = preFix + relayStatusDTO.getChannelName() + "," + relayStatusDTO.getLampSwitch() + postFix;
+ out.writeBytes(switchConent.getBytes());
+ channels.forEach(channel -> {
+ if (channel.isActive()) {
+ if (channel != ctx.channel()) {
+ channel.writeAndFlush(out);
+ }
+ }
+ }
+ );
+ }
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ super.exceptionCaught(ctx, cause);
+ cause.printStackTrace();
+ ctx.close();
+ }
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataScanner.java b/src/main/java/com/casic/service/DeviceDataScanner.java
new file mode 100644
index 0000000..049fa71
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataScanner.java
@@ -0,0 +1,7 @@
+package com.casic.service;
+
+public interface DeviceDataScanner {
+
+ void scanDeviceData();
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataSupport.java b/src/main/java/com/casic/service/DeviceDataSupport.java
new file mode 100644
index 0000000..93d61ea
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataSupport.java
@@ -0,0 +1,50 @@
+package com.casic.service;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.client.Client;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.mapper.DeviceDataMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ *
+ */
+@Slf4j
+@Component
+public class DeviceDataSupport implements AlarmDatagramFlag {
+
+ @Autowired
+ protected DeviceDataMapper deviceDataMapper;
+ @Autowired
+ protected AlarmLevelConfig alarmLevelConfig;
+ @Autowired
+ private Client client;
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * 发送报警消息
+ */
+ protected void sendAlarmMsg(String devcode, Integer isAlarm) {
+ try {
+ String alarmMsg = devcode + alarmMark + isAlarm;
+ client.send(alarmMsg);
+ } catch (Exception ex) {
+ log.error("消息发送失败,设备编号为{},异常信息{}", devcode, ex.getMessage());
+ }
+ }
+
+}
diff --git a/src/main/java/com/casic/service/RainFallDataService.java b/src/main/java/com/casic/service/RainFallDataService.java
new file mode 100644
index 0000000..6c1a12d
--- /dev/null
+++ b/src/main/java/com/casic/service/RainFallDataService.java
@@ -0,0 +1,6 @@
+package com.casic.service;
+
+public interface RainFallDataService {
+
+
+}
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
- if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
-// log.info(" String : " + msg.toString(Charset.defaultCharset()));
-// if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
- pareDeviceHex(msg);
-// out.add(msg);
-// }
- }
- }
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
- String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
- log.info(" devcode : " + devcode);
- byteBuf.resetReaderIndex();//重置位判断
- String valueStr=byteBuf.slice(26, 4).toString(Charset.defaultCharset());
- log.info(" valueStr : " + valueStr);
- long defaultValue = Long.valueOf(valueStr);
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverDomain.java b/src/main/java/com/casic/handler/ReceiverDomain.java
deleted file mode 100644
index f0a89b6..0000000
--- a/src/main/java/com/casic/handler/ReceiverDomain.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import lombok.Data;
-
-/**
- * @description: 环境数据实体类
- * @author: Stone
- * @create: 2019-01-10 22:38
- **/
-@Data
-public class ReceiverDomain {
- private String head;
- private int len;
- private String key;
- private String value;
-
- public ReceiverDomain(ByteBuf bf) {
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServer.java b/src/main/java/com/casic/handler/ReceiverServer.java
deleted file mode 100644
index 6894a00..0000000
--- a/src/main/java/com/casic/handler/ReceiverServer.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.casic.handler;
-
-import io.netty.bootstrap.ServerBootstrap;
-import io.netty.channel.ChannelFuture;
-import io.netty.channel.ChannelInitializer;
-import io.netty.channel.ChannelOption;
-import io.netty.channel.EventLoopGroup;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.channel.socket.SocketChannel;
-import io.netty.channel.socket.nio.NioServerSocketChannel;
-import io.netty.handler.codec.LineBasedFrameDecoder;
-import io.netty.handler.codec.string.StringDecoder;
-import io.netty.handler.logging.LogLevel;
-import io.netty.handler.logging.LoggingHandler;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-
-/**
- * @description: 接收客户端传过来的数据,只做打印处理
- * @author: Stone
- * @create: 2019-01-10 19:52
- **/
-@Slf4j
-@Component
-public class ReceiverServer {
-
- @Autowired
- private ReceiverServerHandler receiverServerHandler;
-
- @Value("${xgd.server-port}")
- private int port;
-
-
-
- @PostConstruct
- public void init() {
- this.start();
- }
-
- public void start() {
- EventLoopGroup bossGroup = new NioEventLoopGroup();
- EventLoopGroup workerGroup = new NioEventLoopGroup();
- log.info("server bind port = {}", port);
-
- ServerBootstrap serverBootstrap = new ServerBootstrap();
- serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
- serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
- serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
-
- serverBootstrap.childHandler(new ChannelInitializer() {
- @Override
- protected void initChannel(SocketChannel socketChannel) {
-// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
- socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
- socketChannel.pipeline().addLast(new ReceiverDecoder());
- socketChannel.pipeline().addLast(new StringDecoder());
- socketChannel.pipeline().addLast(receiverServerHandler);
- }
- });
-
- serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
- try {
- ChannelFuture channelFuture = serverBootstrap.bind(port).sync();
- channelFuture.channel().closeFuture().sync();
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- workerGroup.shutdownGracefully();
- bossGroup.shutdownGracefully();
- }
- }
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServerHandler.java b/src/main/java/com/casic/handler/ReceiverServerHandler.java
deleted file mode 100644
index f432e06..0000000
--- a/src/main/java/com/casic/handler/ReceiverServerHandler.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.casic.handler;
-
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelInboundHandlerAdapter;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.javassist.bytecode.ByteArray;
-import org.springframework.stereotype.Component;
-
-/**
- * @description: 消息处理handler
- * @author: Stone
- * @create: 2019-01-10 20:01
- **/
-@Slf4j
-@Component
-@ChannelHandler.Sharable
-public class ReceiverServerHandler extends ChannelInboundHandlerAdapter {
-
- public ReceiverServerHandler() {
- }
-
- @Override
- public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
- super.channelRegistered(ctx);
- }
-
- @Override
- public void channelActive(ChannelHandlerContext ctx) throws Exception {
- super.channelActive(ctx);
- }
-
- @Override
- public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
- super.channelRead(ctx, msg);
-// log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME,(String)msg);
- log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
- String msgStr = msg.toString();
- // 以固定行分隔符结尾分割,头部可能有不符合接口协议的字段, 去掉
- int idx = msgStr.indexOf("##");
- if (idx >= 0) {
- msgStr = msgStr.substring(idx);
- }
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME, msgStr);
- }
-
-// //ByteBuf byteBuf
- public static void main(String[] main) {
- byte[] hexBytes = {(byte) 0x86, 0x53, 0x28, 0x06, (byte) 0x84, 0x19, (byte) 0x94,
- 0x30, (byte) 0xAA, (byte) 0xAA, 0x01, 0x03, (byte) 0x02, 0x02, 0x00, (byte) 0xB8, 0x44};
- ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
- out.writeBytes(hexBytes);
-
- if (ByteBufUtil.hexDump(out).toLowerCase().contains("aaaa")) {
- pareDeviceHex(out);
- }
- }
-
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- String devcode = ByteBufUtil.hexDump(byteBuf.slice(0, 8));
- devcode = devcode.substring(0, devcode.length() - 1);
- //数值读取
- byteBuf.readBytes(12);
- byteBuf.markReaderIndex();
- Integer defaultValueLength = byteBuf.readByte() & 0xff;
- long defaultValue = 0;
- for (int i = 0; i < defaultValueLength; i++) {
- long tempLong = byteBuf.readByte() & 0xff;
- defaultValue = defaultValue * 256 + tempLong;
- }
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
- super.exceptionCaught(ctx, cause);
- cause.printStackTrace();
- ctx.close();
- }
-
-}
diff --git a/src/main/java/com/casic/mapper/DeviceDataMapper.java b/src/main/java/com/casic/mapper/DeviceDataMapper.java
new file mode 100644
index 0000000..be72d19
--- /dev/null
+++ b/src/main/java/com/casic/mapper/DeviceDataMapper.java
@@ -0,0 +1,28 @@
+package com.casic.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface DeviceDataMapper {
+
+
+ /**
+ * 获取压力数据
+ */
+ List> getPressureData();
+
+ /**
+ * 获取流量数据
+ */
+ List> getFlowData();
+
+ /**
+ * 获取温湿度数据
+ */
+ List> getHumiTemp();
+
+
+}
diff --git a/src/main/java/com/casic/mapper/RainFallDataMapper.java b/src/main/java/com/casic/mapper/RainFallDataMapper.java
new file mode 100644
index 0000000..f5c29db
--- /dev/null
+++ b/src/main/java/com/casic/mapper/RainFallDataMapper.java
@@ -0,0 +1,7 @@
+package com.casic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.model.RainFallData;
+
+public interface RainFallDataMapper extends BaseMapper {
+}
diff --git a/src/main/java/com/casic/model/RainFallData.java b/src/main/java/com/casic/model/RainFallData.java
new file mode 100644
index 0000000..fa96673
--- /dev/null
+++ b/src/main/java/com/casic/model/RainFallData.java
@@ -0,0 +1,30 @@
+package com.casic.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@TableName("AD_YL_YLIANG")
+public class RainFallData {
+
+ private String dbid;
+
+ private String scrid;
+
+ private String dstid;
+
+ private String totalyuliang;
+
+ private String curminuteyuliang;
+
+ private String forminuteyuliang;
+
+ private String value;
+
+ private Date logtime;
+
+ private Date uptime;
+
+}
diff --git a/src/main/java/com/casic/model/RelayStatusDTO.java b/src/main/java/com/casic/model/RelayStatusDTO.java
new file mode 100644
index 0000000..b839e0c
--- /dev/null
+++ b/src/main/java/com/casic/model/RelayStatusDTO.java
@@ -0,0 +1,20 @@
+package com.casic.model;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class RelayStatusDTO {
+
+ /***
+ * 通道名称 1 2 3 4 5 6 7 8
+ */
+ private String channelName;
+
+ /***
+ * 开关0,1
+ */
+ private Integer lampSwitch;
+
+}
diff --git a/src/main/java/com/casic/resolver/AlarmDataResolver.java b/src/main/java/com/casic/resolver/AlarmDataResolver.java
new file mode 100644
index 0000000..2c6874b
--- /dev/null
+++ b/src/main/java/com/casic/resolver/AlarmDataResolver.java
@@ -0,0 +1,28 @@
+package com.casic.resolver;
+
+
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class AlarmDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if(msg.contains(alarmMark)){
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ Integer isAlarm = Integer.valueOf(msg.substring(16,17));
+ log.info("设备编号为" + devcode + ",是否报警" + isAlarm);
+ return RelayStatusDTO.builder()
+ .channelName( RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/casic/resolver/DatagramResolver.java b/src/main/java/com/casic/resolver/DatagramResolver.java
new file mode 100644
index 0000000..d00c952
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramResolver.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+import com.casic.model.RelayStatusDTO;
+
+public interface DatagramResolver {
+
+ RelayStatusDTO datagram(String msg);
+
+}
diff --git a/src/main/java/com/casic/resolver/DatagramSupport.java b/src/main/java/com/casic/resolver/DatagramSupport.java
new file mode 100644
index 0000000..1d911a3
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramSupport.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+public class DatagramSupport {
+
+
+
+
+
+}
diff --git a/src/main/java/com/casic/resolver/RainFallDataResolver.java b/src/main/java/com/casic/resolver/RainFallDataResolver.java
new file mode 100644
index 0000000..8a22899
--- /dev/null
+++ b/src/main/java/com/casic/resolver/RainFallDataResolver.java
@@ -0,0 +1,79 @@
+package com.casic.resolver;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service
+@Slf4j
+public class RainFallDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Autowired
+ private RainFallDataMapper rainFallDataMapper;
+ @Autowired
+ private AlarmLevelConfig alarmLevelConfig;
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if (msg.contains(rainFallMark)) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ String defaultValue = msg.substring(26, 30);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ RainFallData rainFallData = initRainFallData(devcode, defaultValue);
+ rainFallDataMapper.insert(rainFallData);
+ Integer isAlarm = isAlarm(String.valueOf(defaultValue), alarmLevelConfig.getRainfall());
+ return RelayStatusDTO.builder()
+ .channelName(RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+
+ }
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ private RainFallData initRainFallData(String devcode, String valueStr) {
+ RainFallData rainFallData = new RainFallData();
+ rainFallData.setDstid(devcode);
+ rainFallData.setTotalyuliang(valueStr);
+ rainFallData.setUptime(new Date());
+ rainFallData.setLogtime(new Date());
+ return rainFallData;
+ }
+
+ // //ByteBuf byteBuf
+ public static void main(String[] main) {
+ pareDeviceHex("8653280684199430AAAA01030200023985");
+ }
+
+ private static void pareDeviceHex(String msg) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ log.info(" devcode : " + devcode);
+ String valueStr = msg.substring(26, 30);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverDecoder.java b/src/main/java/com/casic/server/ReceiverDecoder.java
new file mode 100644
index 0000000..7030790
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverDecoder.java
@@ -0,0 +1,71 @@
+package com.casic.server;
+
+import com.casic.enums.RelaySwitchEnums;
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.ByteToMessageDecoder;
+import lombok.extern.slf4j.Slf4j;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * 自定义解码器
+ *
+ * @description: 将从接口取到的数据编码
+ * @author: cz
+ * @create: 2023-5-10
+ **/
+@Slf4j
+public class ReceiverDecoder extends ByteToMessageDecoder implements RelaySwitchEnums {
+
+
+// final ChannelGroup channels =
+// new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+
+ @Override
+ protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
+ if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
+ pareDeviceHex(msg);
+ }
+// if(msg.readableBytes()>2){
+// out.add(msg);
+// }
+ }
+
+// @Override
+// public void channelActive(ChannelHandlerContext ctx) throws Exception {
+// channels.add(ctx.channel());
+// super.channelActive(ctx);
+// }
+//
+// @Override
+// public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+// super.channelRead(ctx, msg);
+// ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+// String switchConent = preFix + 1 + "," + 1 + postFix;
+// out.writeBytes(switchConent.getBytes());
+// channels.forEach(
+// channel ->{
+// if(channel!=ctx.channel()) {
+// channel.writeAndFlush(out);
+// }
+// }
+// );
+// }
+
+ private static void pareDeviceHex(ByteBuf byteBuf) {
+ //去掉补位
+ log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
+ String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
+ log.info(" devcode : " + devcode);
+ byteBuf.resetReaderIndex();//重置位判断
+ String valueStr = byteBuf.slice(26, 4).toString(Charset.defaultCharset());
+ log.info(" valueStr : " + valueStr);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverServer.java b/src/main/java/com/casic/server/ReceiverServer.java
new file mode 100644
index 0000000..a98e4ca
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServer.java
@@ -0,0 +1,72 @@
+package com.casic.server;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.logging.LogLevel;
+import io.netty.handler.logging.LoggingHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * @description: 接收客户端传过来的数据,只做打印处理
+ * @author: Stone
+ * @create: 2019-01-10 19:52
+ **/
+@Slf4j
+@Component
+public class ReceiverServer {
+
+ @Autowired
+ private ReceiverServerHandler receiverServerHandler;
+ @Autowired
+ private ServerPort serverPort;
+
+ @PostConstruct
+ public void init() {
+ this.start();
+ }
+
+ public void start() {
+ EventLoopGroup bossGroup = new NioEventLoopGroup();
+ EventLoopGroup workerGroup = new NioEventLoopGroup();
+ log.info("server bind port = {}", serverPort.getPort());
+
+ ServerBootstrap serverBootstrap = new ServerBootstrap();
+ serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
+ serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
+ serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
+
+ serverBootstrap.childHandler(new ChannelInitializer() {
+ @Override
+ protected void initChannel(SocketChannel socketChannel) {
+// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
+ socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
+// socketChannel.pipeline().addLast(new ReceiverDecoder());
+ socketChannel.pipeline().addLast(new StringDecoder());
+ socketChannel.pipeline().addLast(receiverServerHandler);
+ }
+ });
+ serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
+ try {
+ ChannelFuture channelFuture = serverBootstrap.bind(serverPort.getPort()).sync();
+ channelFuture.channel().closeFuture().sync();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } finally {
+ workerGroup.shutdownGracefully();
+ bossGroup.shutdownGracefully();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/server/ReceiverServerHandler.java b/src/main/java/com/casic/server/ReceiverServerHandler.java
new file mode 100644
index 0000000..31ac43e
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServerHandler.java
@@ -0,0 +1,103 @@
+package com.casic.server;
+
+
+import com.casic.enums.RelaySwitchEnums;
+import com.casic.model.RelayStatusDTO;
+import com.casic.resolver.RainFallDataResolver;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.channel.group.ChannelGroup;
+import io.netty.channel.group.DefaultChannelGroup;
+import io.netty.util.concurrent.GlobalEventExecutor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * @description: 消息处理handler
+ * @author: Stone
+ * @create: 2019-01-10 20:01
+ **/
+@Slf4j
+@Component
+@ChannelHandler.Sharable
+public class ReceiverServerHandler extends ChannelInboundHandlerAdapter implements RelaySwitchEnums {
+
+ final ChannelGroup channels =
+ new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+ @Autowired
+ private List rainFallDataResolverList;
+
+ public ReceiverServerHandler() {
+ }
+
+ @Override
+ public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
+ super.channelRegistered(ctx);
+ }
+
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ channels.add(ctx.channel());
+ super.channelActive(ctx);
+ }
+
+ @Override
+ public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+ channels.forEach(channel -> {
+ if (channel == ctx.channel()) {
+ channels.remove(channel);
+ }
+ }
+ );
+ super.channelInactive(ctx);
+ }
+
+ /**
+ * 雨量计
+ */
+ @Override
+ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+ if (msg instanceof String) {
+ rainFallDataResolverList.forEach(
+ rainFallDataResolver -> {
+ RelayStatusDTO relayStatusDTO = rainFallDataResolver.datagram(String.valueOf(msg));
+ sendMsg(ctx, relayStatusDTO);
+ }
+ );
+ }
+ super.channelRead(ctx, msg);
+ }
+
+ private void sendMsg(ChannelHandlerContext ctx, RelayStatusDTO relayStatusDTO) {
+ if (!ObjectUtils.isEmpty(relayStatusDTO)) {
+ ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+ String switchConent = preFix + relayStatusDTO.getChannelName() + "," + relayStatusDTO.getLampSwitch() + postFix;
+ out.writeBytes(switchConent.getBytes());
+ channels.forEach(channel -> {
+ if (channel.isActive()) {
+ if (channel != ctx.channel()) {
+ channel.writeAndFlush(out);
+ }
+ }
+ }
+ );
+ }
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ super.exceptionCaught(ctx, cause);
+ cause.printStackTrace();
+ ctx.close();
+ }
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataScanner.java b/src/main/java/com/casic/service/DeviceDataScanner.java
new file mode 100644
index 0000000..049fa71
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataScanner.java
@@ -0,0 +1,7 @@
+package com.casic.service;
+
+public interface DeviceDataScanner {
+
+ void scanDeviceData();
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataSupport.java b/src/main/java/com/casic/service/DeviceDataSupport.java
new file mode 100644
index 0000000..93d61ea
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataSupport.java
@@ -0,0 +1,50 @@
+package com.casic.service;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.client.Client;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.mapper.DeviceDataMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ *
+ */
+@Slf4j
+@Component
+public class DeviceDataSupport implements AlarmDatagramFlag {
+
+ @Autowired
+ protected DeviceDataMapper deviceDataMapper;
+ @Autowired
+ protected AlarmLevelConfig alarmLevelConfig;
+ @Autowired
+ private Client client;
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * 发送报警消息
+ */
+ protected void sendAlarmMsg(String devcode, Integer isAlarm) {
+ try {
+ String alarmMsg = devcode + alarmMark + isAlarm;
+ client.send(alarmMsg);
+ } catch (Exception ex) {
+ log.error("消息发送失败,设备编号为{},异常信息{}", devcode, ex.getMessage());
+ }
+ }
+
+}
diff --git a/src/main/java/com/casic/service/RainFallDataService.java b/src/main/java/com/casic/service/RainFallDataService.java
new file mode 100644
index 0000000..6c1a12d
--- /dev/null
+++ b/src/main/java/com/casic/service/RainFallDataService.java
@@ -0,0 +1,6 @@
+package com.casic.service;
+
+public interface RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
new file mode 100644
index 0000000..14dc1eb
--- /dev/null
+++ b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
@@ -0,0 +1,13 @@
+package com.casic.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.service.RainFallDataService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class RainFallDataServiceImpl extends ServiceImpl implements RainFallDataService {
+
+
+}
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
- if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
-// log.info(" String : " + msg.toString(Charset.defaultCharset()));
-// if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
- pareDeviceHex(msg);
-// out.add(msg);
-// }
- }
- }
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
- String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
- log.info(" devcode : " + devcode);
- byteBuf.resetReaderIndex();//重置位判断
- String valueStr=byteBuf.slice(26, 4).toString(Charset.defaultCharset());
- log.info(" valueStr : " + valueStr);
- long defaultValue = Long.valueOf(valueStr);
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverDomain.java b/src/main/java/com/casic/handler/ReceiverDomain.java
deleted file mode 100644
index f0a89b6..0000000
--- a/src/main/java/com/casic/handler/ReceiverDomain.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import lombok.Data;
-
-/**
- * @description: 环境数据实体类
- * @author: Stone
- * @create: 2019-01-10 22:38
- **/
-@Data
-public class ReceiverDomain {
- private String head;
- private int len;
- private String key;
- private String value;
-
- public ReceiverDomain(ByteBuf bf) {
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServer.java b/src/main/java/com/casic/handler/ReceiverServer.java
deleted file mode 100644
index 6894a00..0000000
--- a/src/main/java/com/casic/handler/ReceiverServer.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.casic.handler;
-
-import io.netty.bootstrap.ServerBootstrap;
-import io.netty.channel.ChannelFuture;
-import io.netty.channel.ChannelInitializer;
-import io.netty.channel.ChannelOption;
-import io.netty.channel.EventLoopGroup;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.channel.socket.SocketChannel;
-import io.netty.channel.socket.nio.NioServerSocketChannel;
-import io.netty.handler.codec.LineBasedFrameDecoder;
-import io.netty.handler.codec.string.StringDecoder;
-import io.netty.handler.logging.LogLevel;
-import io.netty.handler.logging.LoggingHandler;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-
-/**
- * @description: 接收客户端传过来的数据,只做打印处理
- * @author: Stone
- * @create: 2019-01-10 19:52
- **/
-@Slf4j
-@Component
-public class ReceiverServer {
-
- @Autowired
- private ReceiverServerHandler receiverServerHandler;
-
- @Value("${xgd.server-port}")
- private int port;
-
-
-
- @PostConstruct
- public void init() {
- this.start();
- }
-
- public void start() {
- EventLoopGroup bossGroup = new NioEventLoopGroup();
- EventLoopGroup workerGroup = new NioEventLoopGroup();
- log.info("server bind port = {}", port);
-
- ServerBootstrap serverBootstrap = new ServerBootstrap();
- serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
- serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
- serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
-
- serverBootstrap.childHandler(new ChannelInitializer() {
- @Override
- protected void initChannel(SocketChannel socketChannel) {
-// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
- socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
- socketChannel.pipeline().addLast(new ReceiverDecoder());
- socketChannel.pipeline().addLast(new StringDecoder());
- socketChannel.pipeline().addLast(receiverServerHandler);
- }
- });
-
- serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
- try {
- ChannelFuture channelFuture = serverBootstrap.bind(port).sync();
- channelFuture.channel().closeFuture().sync();
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- workerGroup.shutdownGracefully();
- bossGroup.shutdownGracefully();
- }
- }
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServerHandler.java b/src/main/java/com/casic/handler/ReceiverServerHandler.java
deleted file mode 100644
index f432e06..0000000
--- a/src/main/java/com/casic/handler/ReceiverServerHandler.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.casic.handler;
-
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelInboundHandlerAdapter;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.javassist.bytecode.ByteArray;
-import org.springframework.stereotype.Component;
-
-/**
- * @description: 消息处理handler
- * @author: Stone
- * @create: 2019-01-10 20:01
- **/
-@Slf4j
-@Component
-@ChannelHandler.Sharable
-public class ReceiverServerHandler extends ChannelInboundHandlerAdapter {
-
- public ReceiverServerHandler() {
- }
-
- @Override
- public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
- super.channelRegistered(ctx);
- }
-
- @Override
- public void channelActive(ChannelHandlerContext ctx) throws Exception {
- super.channelActive(ctx);
- }
-
- @Override
- public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
- super.channelRead(ctx, msg);
-// log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME,(String)msg);
- log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
- String msgStr = msg.toString();
- // 以固定行分隔符结尾分割,头部可能有不符合接口协议的字段, 去掉
- int idx = msgStr.indexOf("##");
- if (idx >= 0) {
- msgStr = msgStr.substring(idx);
- }
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME, msgStr);
- }
-
-// //ByteBuf byteBuf
- public static void main(String[] main) {
- byte[] hexBytes = {(byte) 0x86, 0x53, 0x28, 0x06, (byte) 0x84, 0x19, (byte) 0x94,
- 0x30, (byte) 0xAA, (byte) 0xAA, 0x01, 0x03, (byte) 0x02, 0x02, 0x00, (byte) 0xB8, 0x44};
- ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
- out.writeBytes(hexBytes);
-
- if (ByteBufUtil.hexDump(out).toLowerCase().contains("aaaa")) {
- pareDeviceHex(out);
- }
- }
-
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- String devcode = ByteBufUtil.hexDump(byteBuf.slice(0, 8));
- devcode = devcode.substring(0, devcode.length() - 1);
- //数值读取
- byteBuf.readBytes(12);
- byteBuf.markReaderIndex();
- Integer defaultValueLength = byteBuf.readByte() & 0xff;
- long defaultValue = 0;
- for (int i = 0; i < defaultValueLength; i++) {
- long tempLong = byteBuf.readByte() & 0xff;
- defaultValue = defaultValue * 256 + tempLong;
- }
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
- super.exceptionCaught(ctx, cause);
- cause.printStackTrace();
- ctx.close();
- }
-
-}
diff --git a/src/main/java/com/casic/mapper/DeviceDataMapper.java b/src/main/java/com/casic/mapper/DeviceDataMapper.java
new file mode 100644
index 0000000..be72d19
--- /dev/null
+++ b/src/main/java/com/casic/mapper/DeviceDataMapper.java
@@ -0,0 +1,28 @@
+package com.casic.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface DeviceDataMapper {
+
+
+ /**
+ * 获取压力数据
+ */
+ List> getPressureData();
+
+ /**
+ * 获取流量数据
+ */
+ List> getFlowData();
+
+ /**
+ * 获取温湿度数据
+ */
+ List> getHumiTemp();
+
+
+}
diff --git a/src/main/java/com/casic/mapper/RainFallDataMapper.java b/src/main/java/com/casic/mapper/RainFallDataMapper.java
new file mode 100644
index 0000000..f5c29db
--- /dev/null
+++ b/src/main/java/com/casic/mapper/RainFallDataMapper.java
@@ -0,0 +1,7 @@
+package com.casic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.model.RainFallData;
+
+public interface RainFallDataMapper extends BaseMapper {
+}
diff --git a/src/main/java/com/casic/model/RainFallData.java b/src/main/java/com/casic/model/RainFallData.java
new file mode 100644
index 0000000..fa96673
--- /dev/null
+++ b/src/main/java/com/casic/model/RainFallData.java
@@ -0,0 +1,30 @@
+package com.casic.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@TableName("AD_YL_YLIANG")
+public class RainFallData {
+
+ private String dbid;
+
+ private String scrid;
+
+ private String dstid;
+
+ private String totalyuliang;
+
+ private String curminuteyuliang;
+
+ private String forminuteyuliang;
+
+ private String value;
+
+ private Date logtime;
+
+ private Date uptime;
+
+}
diff --git a/src/main/java/com/casic/model/RelayStatusDTO.java b/src/main/java/com/casic/model/RelayStatusDTO.java
new file mode 100644
index 0000000..b839e0c
--- /dev/null
+++ b/src/main/java/com/casic/model/RelayStatusDTO.java
@@ -0,0 +1,20 @@
+package com.casic.model;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class RelayStatusDTO {
+
+ /***
+ * 通道名称 1 2 3 4 5 6 7 8
+ */
+ private String channelName;
+
+ /***
+ * 开关0,1
+ */
+ private Integer lampSwitch;
+
+}
diff --git a/src/main/java/com/casic/resolver/AlarmDataResolver.java b/src/main/java/com/casic/resolver/AlarmDataResolver.java
new file mode 100644
index 0000000..2c6874b
--- /dev/null
+++ b/src/main/java/com/casic/resolver/AlarmDataResolver.java
@@ -0,0 +1,28 @@
+package com.casic.resolver;
+
+
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class AlarmDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if(msg.contains(alarmMark)){
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ Integer isAlarm = Integer.valueOf(msg.substring(16,17));
+ log.info("设备编号为" + devcode + ",是否报警" + isAlarm);
+ return RelayStatusDTO.builder()
+ .channelName( RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/casic/resolver/DatagramResolver.java b/src/main/java/com/casic/resolver/DatagramResolver.java
new file mode 100644
index 0000000..d00c952
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramResolver.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+import com.casic.model.RelayStatusDTO;
+
+public interface DatagramResolver {
+
+ RelayStatusDTO datagram(String msg);
+
+}
diff --git a/src/main/java/com/casic/resolver/DatagramSupport.java b/src/main/java/com/casic/resolver/DatagramSupport.java
new file mode 100644
index 0000000..1d911a3
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramSupport.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+public class DatagramSupport {
+
+
+
+
+
+}
diff --git a/src/main/java/com/casic/resolver/RainFallDataResolver.java b/src/main/java/com/casic/resolver/RainFallDataResolver.java
new file mode 100644
index 0000000..8a22899
--- /dev/null
+++ b/src/main/java/com/casic/resolver/RainFallDataResolver.java
@@ -0,0 +1,79 @@
+package com.casic.resolver;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service
+@Slf4j
+public class RainFallDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Autowired
+ private RainFallDataMapper rainFallDataMapper;
+ @Autowired
+ private AlarmLevelConfig alarmLevelConfig;
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if (msg.contains(rainFallMark)) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ String defaultValue = msg.substring(26, 30);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ RainFallData rainFallData = initRainFallData(devcode, defaultValue);
+ rainFallDataMapper.insert(rainFallData);
+ Integer isAlarm = isAlarm(String.valueOf(defaultValue), alarmLevelConfig.getRainfall());
+ return RelayStatusDTO.builder()
+ .channelName(RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+
+ }
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ private RainFallData initRainFallData(String devcode, String valueStr) {
+ RainFallData rainFallData = new RainFallData();
+ rainFallData.setDstid(devcode);
+ rainFallData.setTotalyuliang(valueStr);
+ rainFallData.setUptime(new Date());
+ rainFallData.setLogtime(new Date());
+ return rainFallData;
+ }
+
+ // //ByteBuf byteBuf
+ public static void main(String[] main) {
+ pareDeviceHex("8653280684199430AAAA01030200023985");
+ }
+
+ private static void pareDeviceHex(String msg) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ log.info(" devcode : " + devcode);
+ String valueStr = msg.substring(26, 30);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverDecoder.java b/src/main/java/com/casic/server/ReceiverDecoder.java
new file mode 100644
index 0000000..7030790
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverDecoder.java
@@ -0,0 +1,71 @@
+package com.casic.server;
+
+import com.casic.enums.RelaySwitchEnums;
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.ByteToMessageDecoder;
+import lombok.extern.slf4j.Slf4j;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * 自定义解码器
+ *
+ * @description: 将从接口取到的数据编码
+ * @author: cz
+ * @create: 2023-5-10
+ **/
+@Slf4j
+public class ReceiverDecoder extends ByteToMessageDecoder implements RelaySwitchEnums {
+
+
+// final ChannelGroup channels =
+// new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+
+ @Override
+ protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
+ if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
+ pareDeviceHex(msg);
+ }
+// if(msg.readableBytes()>2){
+// out.add(msg);
+// }
+ }
+
+// @Override
+// public void channelActive(ChannelHandlerContext ctx) throws Exception {
+// channels.add(ctx.channel());
+// super.channelActive(ctx);
+// }
+//
+// @Override
+// public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+// super.channelRead(ctx, msg);
+// ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+// String switchConent = preFix + 1 + "," + 1 + postFix;
+// out.writeBytes(switchConent.getBytes());
+// channels.forEach(
+// channel ->{
+// if(channel!=ctx.channel()) {
+// channel.writeAndFlush(out);
+// }
+// }
+// );
+// }
+
+ private static void pareDeviceHex(ByteBuf byteBuf) {
+ //去掉补位
+ log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
+ String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
+ log.info(" devcode : " + devcode);
+ byteBuf.resetReaderIndex();//重置位判断
+ String valueStr = byteBuf.slice(26, 4).toString(Charset.defaultCharset());
+ log.info(" valueStr : " + valueStr);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverServer.java b/src/main/java/com/casic/server/ReceiverServer.java
new file mode 100644
index 0000000..a98e4ca
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServer.java
@@ -0,0 +1,72 @@
+package com.casic.server;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.logging.LogLevel;
+import io.netty.handler.logging.LoggingHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * @description: 接收客户端传过来的数据,只做打印处理
+ * @author: Stone
+ * @create: 2019-01-10 19:52
+ **/
+@Slf4j
+@Component
+public class ReceiverServer {
+
+ @Autowired
+ private ReceiverServerHandler receiverServerHandler;
+ @Autowired
+ private ServerPort serverPort;
+
+ @PostConstruct
+ public void init() {
+ this.start();
+ }
+
+ public void start() {
+ EventLoopGroup bossGroup = new NioEventLoopGroup();
+ EventLoopGroup workerGroup = new NioEventLoopGroup();
+ log.info("server bind port = {}", serverPort.getPort());
+
+ ServerBootstrap serverBootstrap = new ServerBootstrap();
+ serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
+ serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
+ serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
+
+ serverBootstrap.childHandler(new ChannelInitializer() {
+ @Override
+ protected void initChannel(SocketChannel socketChannel) {
+// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
+ socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
+// socketChannel.pipeline().addLast(new ReceiverDecoder());
+ socketChannel.pipeline().addLast(new StringDecoder());
+ socketChannel.pipeline().addLast(receiverServerHandler);
+ }
+ });
+ serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
+ try {
+ ChannelFuture channelFuture = serverBootstrap.bind(serverPort.getPort()).sync();
+ channelFuture.channel().closeFuture().sync();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } finally {
+ workerGroup.shutdownGracefully();
+ bossGroup.shutdownGracefully();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/server/ReceiverServerHandler.java b/src/main/java/com/casic/server/ReceiverServerHandler.java
new file mode 100644
index 0000000..31ac43e
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServerHandler.java
@@ -0,0 +1,103 @@
+package com.casic.server;
+
+
+import com.casic.enums.RelaySwitchEnums;
+import com.casic.model.RelayStatusDTO;
+import com.casic.resolver.RainFallDataResolver;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.channel.group.ChannelGroup;
+import io.netty.channel.group.DefaultChannelGroup;
+import io.netty.util.concurrent.GlobalEventExecutor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * @description: 消息处理handler
+ * @author: Stone
+ * @create: 2019-01-10 20:01
+ **/
+@Slf4j
+@Component
+@ChannelHandler.Sharable
+public class ReceiverServerHandler extends ChannelInboundHandlerAdapter implements RelaySwitchEnums {
+
+ final ChannelGroup channels =
+ new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+ @Autowired
+ private List rainFallDataResolverList;
+
+ public ReceiverServerHandler() {
+ }
+
+ @Override
+ public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
+ super.channelRegistered(ctx);
+ }
+
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ channels.add(ctx.channel());
+ super.channelActive(ctx);
+ }
+
+ @Override
+ public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+ channels.forEach(channel -> {
+ if (channel == ctx.channel()) {
+ channels.remove(channel);
+ }
+ }
+ );
+ super.channelInactive(ctx);
+ }
+
+ /**
+ * 雨量计
+ */
+ @Override
+ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+ if (msg instanceof String) {
+ rainFallDataResolverList.forEach(
+ rainFallDataResolver -> {
+ RelayStatusDTO relayStatusDTO = rainFallDataResolver.datagram(String.valueOf(msg));
+ sendMsg(ctx, relayStatusDTO);
+ }
+ );
+ }
+ super.channelRead(ctx, msg);
+ }
+
+ private void sendMsg(ChannelHandlerContext ctx, RelayStatusDTO relayStatusDTO) {
+ if (!ObjectUtils.isEmpty(relayStatusDTO)) {
+ ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+ String switchConent = preFix + relayStatusDTO.getChannelName() + "," + relayStatusDTO.getLampSwitch() + postFix;
+ out.writeBytes(switchConent.getBytes());
+ channels.forEach(channel -> {
+ if (channel.isActive()) {
+ if (channel != ctx.channel()) {
+ channel.writeAndFlush(out);
+ }
+ }
+ }
+ );
+ }
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ super.exceptionCaught(ctx, cause);
+ cause.printStackTrace();
+ ctx.close();
+ }
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataScanner.java b/src/main/java/com/casic/service/DeviceDataScanner.java
new file mode 100644
index 0000000..049fa71
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataScanner.java
@@ -0,0 +1,7 @@
+package com.casic.service;
+
+public interface DeviceDataScanner {
+
+ void scanDeviceData();
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataSupport.java b/src/main/java/com/casic/service/DeviceDataSupport.java
new file mode 100644
index 0000000..93d61ea
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataSupport.java
@@ -0,0 +1,50 @@
+package com.casic.service;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.client.Client;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.mapper.DeviceDataMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ *
+ */
+@Slf4j
+@Component
+public class DeviceDataSupport implements AlarmDatagramFlag {
+
+ @Autowired
+ protected DeviceDataMapper deviceDataMapper;
+ @Autowired
+ protected AlarmLevelConfig alarmLevelConfig;
+ @Autowired
+ private Client client;
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * 发送报警消息
+ */
+ protected void sendAlarmMsg(String devcode, Integer isAlarm) {
+ try {
+ String alarmMsg = devcode + alarmMark + isAlarm;
+ client.send(alarmMsg);
+ } catch (Exception ex) {
+ log.error("消息发送失败,设备编号为{},异常信息{}", devcode, ex.getMessage());
+ }
+ }
+
+}
diff --git a/src/main/java/com/casic/service/RainFallDataService.java b/src/main/java/com/casic/service/RainFallDataService.java
new file mode 100644
index 0000000..6c1a12d
--- /dev/null
+++ b/src/main/java/com/casic/service/RainFallDataService.java
@@ -0,0 +1,6 @@
+package com.casic.service;
+
+public interface RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
new file mode 100644
index 0000000..14dc1eb
--- /dev/null
+++ b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
@@ -0,0 +1,13 @@
+package com.casic.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.service.RainFallDataService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class RainFallDataServiceImpl extends ServiceImpl implements RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/scanner/FlowDataScanner.java b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
new file mode 100644
index 0000000..7ab7228
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
@@ -0,0 +1,28 @@
+package com.casic.service.scanner;
+
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class FlowDataScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String thresholdValue = alarmLevelConfig.getFlow();
+ List> flowDataMapList = this.deviceDataMapper.getFlowData();
+ flowDataMapList.forEach(
+ flowDataMap -> {
+ String devcode = flowDataMap.get("devcode").toString();
+ String insdata = flowDataMap.get("insdata").toString();
+ Integer isAlarm = isAlarm(insdata, thresholdValue);
+ sendAlarmMsg(devcode, isAlarm);
+ }
+ );
+ }
+
+
+}
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
- if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
-// log.info(" String : " + msg.toString(Charset.defaultCharset()));
-// if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
- pareDeviceHex(msg);
-// out.add(msg);
-// }
- }
- }
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
- String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
- log.info(" devcode : " + devcode);
- byteBuf.resetReaderIndex();//重置位判断
- String valueStr=byteBuf.slice(26, 4).toString(Charset.defaultCharset());
- log.info(" valueStr : " + valueStr);
- long defaultValue = Long.valueOf(valueStr);
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverDomain.java b/src/main/java/com/casic/handler/ReceiverDomain.java
deleted file mode 100644
index f0a89b6..0000000
--- a/src/main/java/com/casic/handler/ReceiverDomain.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import lombok.Data;
-
-/**
- * @description: 环境数据实体类
- * @author: Stone
- * @create: 2019-01-10 22:38
- **/
-@Data
-public class ReceiverDomain {
- private String head;
- private int len;
- private String key;
- private String value;
-
- public ReceiverDomain(ByteBuf bf) {
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServer.java b/src/main/java/com/casic/handler/ReceiverServer.java
deleted file mode 100644
index 6894a00..0000000
--- a/src/main/java/com/casic/handler/ReceiverServer.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.casic.handler;
-
-import io.netty.bootstrap.ServerBootstrap;
-import io.netty.channel.ChannelFuture;
-import io.netty.channel.ChannelInitializer;
-import io.netty.channel.ChannelOption;
-import io.netty.channel.EventLoopGroup;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.channel.socket.SocketChannel;
-import io.netty.channel.socket.nio.NioServerSocketChannel;
-import io.netty.handler.codec.LineBasedFrameDecoder;
-import io.netty.handler.codec.string.StringDecoder;
-import io.netty.handler.logging.LogLevel;
-import io.netty.handler.logging.LoggingHandler;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-
-/**
- * @description: 接收客户端传过来的数据,只做打印处理
- * @author: Stone
- * @create: 2019-01-10 19:52
- **/
-@Slf4j
-@Component
-public class ReceiverServer {
-
- @Autowired
- private ReceiverServerHandler receiverServerHandler;
-
- @Value("${xgd.server-port}")
- private int port;
-
-
-
- @PostConstruct
- public void init() {
- this.start();
- }
-
- public void start() {
- EventLoopGroup bossGroup = new NioEventLoopGroup();
- EventLoopGroup workerGroup = new NioEventLoopGroup();
- log.info("server bind port = {}", port);
-
- ServerBootstrap serverBootstrap = new ServerBootstrap();
- serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
- serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
- serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
-
- serverBootstrap.childHandler(new ChannelInitializer() {
- @Override
- protected void initChannel(SocketChannel socketChannel) {
-// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
- socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
- socketChannel.pipeline().addLast(new ReceiverDecoder());
- socketChannel.pipeline().addLast(new StringDecoder());
- socketChannel.pipeline().addLast(receiverServerHandler);
- }
- });
-
- serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
- try {
- ChannelFuture channelFuture = serverBootstrap.bind(port).sync();
- channelFuture.channel().closeFuture().sync();
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- workerGroup.shutdownGracefully();
- bossGroup.shutdownGracefully();
- }
- }
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServerHandler.java b/src/main/java/com/casic/handler/ReceiverServerHandler.java
deleted file mode 100644
index f432e06..0000000
--- a/src/main/java/com/casic/handler/ReceiverServerHandler.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.casic.handler;
-
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelInboundHandlerAdapter;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.javassist.bytecode.ByteArray;
-import org.springframework.stereotype.Component;
-
-/**
- * @description: 消息处理handler
- * @author: Stone
- * @create: 2019-01-10 20:01
- **/
-@Slf4j
-@Component
-@ChannelHandler.Sharable
-public class ReceiverServerHandler extends ChannelInboundHandlerAdapter {
-
- public ReceiverServerHandler() {
- }
-
- @Override
- public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
- super.channelRegistered(ctx);
- }
-
- @Override
- public void channelActive(ChannelHandlerContext ctx) throws Exception {
- super.channelActive(ctx);
- }
-
- @Override
- public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
- super.channelRead(ctx, msg);
-// log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME,(String)msg);
- log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
- String msgStr = msg.toString();
- // 以固定行分隔符结尾分割,头部可能有不符合接口协议的字段, 去掉
- int idx = msgStr.indexOf("##");
- if (idx >= 0) {
- msgStr = msgStr.substring(idx);
- }
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME, msgStr);
- }
-
-// //ByteBuf byteBuf
- public static void main(String[] main) {
- byte[] hexBytes = {(byte) 0x86, 0x53, 0x28, 0x06, (byte) 0x84, 0x19, (byte) 0x94,
- 0x30, (byte) 0xAA, (byte) 0xAA, 0x01, 0x03, (byte) 0x02, 0x02, 0x00, (byte) 0xB8, 0x44};
- ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
- out.writeBytes(hexBytes);
-
- if (ByteBufUtil.hexDump(out).toLowerCase().contains("aaaa")) {
- pareDeviceHex(out);
- }
- }
-
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- String devcode = ByteBufUtil.hexDump(byteBuf.slice(0, 8));
- devcode = devcode.substring(0, devcode.length() - 1);
- //数值读取
- byteBuf.readBytes(12);
- byteBuf.markReaderIndex();
- Integer defaultValueLength = byteBuf.readByte() & 0xff;
- long defaultValue = 0;
- for (int i = 0; i < defaultValueLength; i++) {
- long tempLong = byteBuf.readByte() & 0xff;
- defaultValue = defaultValue * 256 + tempLong;
- }
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
- super.exceptionCaught(ctx, cause);
- cause.printStackTrace();
- ctx.close();
- }
-
-}
diff --git a/src/main/java/com/casic/mapper/DeviceDataMapper.java b/src/main/java/com/casic/mapper/DeviceDataMapper.java
new file mode 100644
index 0000000..be72d19
--- /dev/null
+++ b/src/main/java/com/casic/mapper/DeviceDataMapper.java
@@ -0,0 +1,28 @@
+package com.casic.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface DeviceDataMapper {
+
+
+ /**
+ * 获取压力数据
+ */
+ List> getPressureData();
+
+ /**
+ * 获取流量数据
+ */
+ List> getFlowData();
+
+ /**
+ * 获取温湿度数据
+ */
+ List> getHumiTemp();
+
+
+}
diff --git a/src/main/java/com/casic/mapper/RainFallDataMapper.java b/src/main/java/com/casic/mapper/RainFallDataMapper.java
new file mode 100644
index 0000000..f5c29db
--- /dev/null
+++ b/src/main/java/com/casic/mapper/RainFallDataMapper.java
@@ -0,0 +1,7 @@
+package com.casic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.model.RainFallData;
+
+public interface RainFallDataMapper extends BaseMapper {
+}
diff --git a/src/main/java/com/casic/model/RainFallData.java b/src/main/java/com/casic/model/RainFallData.java
new file mode 100644
index 0000000..fa96673
--- /dev/null
+++ b/src/main/java/com/casic/model/RainFallData.java
@@ -0,0 +1,30 @@
+package com.casic.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@TableName("AD_YL_YLIANG")
+public class RainFallData {
+
+ private String dbid;
+
+ private String scrid;
+
+ private String dstid;
+
+ private String totalyuliang;
+
+ private String curminuteyuliang;
+
+ private String forminuteyuliang;
+
+ private String value;
+
+ private Date logtime;
+
+ private Date uptime;
+
+}
diff --git a/src/main/java/com/casic/model/RelayStatusDTO.java b/src/main/java/com/casic/model/RelayStatusDTO.java
new file mode 100644
index 0000000..b839e0c
--- /dev/null
+++ b/src/main/java/com/casic/model/RelayStatusDTO.java
@@ -0,0 +1,20 @@
+package com.casic.model;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class RelayStatusDTO {
+
+ /***
+ * 通道名称 1 2 3 4 5 6 7 8
+ */
+ private String channelName;
+
+ /***
+ * 开关0,1
+ */
+ private Integer lampSwitch;
+
+}
diff --git a/src/main/java/com/casic/resolver/AlarmDataResolver.java b/src/main/java/com/casic/resolver/AlarmDataResolver.java
new file mode 100644
index 0000000..2c6874b
--- /dev/null
+++ b/src/main/java/com/casic/resolver/AlarmDataResolver.java
@@ -0,0 +1,28 @@
+package com.casic.resolver;
+
+
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class AlarmDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if(msg.contains(alarmMark)){
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ Integer isAlarm = Integer.valueOf(msg.substring(16,17));
+ log.info("设备编号为" + devcode + ",是否报警" + isAlarm);
+ return RelayStatusDTO.builder()
+ .channelName( RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/casic/resolver/DatagramResolver.java b/src/main/java/com/casic/resolver/DatagramResolver.java
new file mode 100644
index 0000000..d00c952
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramResolver.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+import com.casic.model.RelayStatusDTO;
+
+public interface DatagramResolver {
+
+ RelayStatusDTO datagram(String msg);
+
+}
diff --git a/src/main/java/com/casic/resolver/DatagramSupport.java b/src/main/java/com/casic/resolver/DatagramSupport.java
new file mode 100644
index 0000000..1d911a3
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramSupport.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+public class DatagramSupport {
+
+
+
+
+
+}
diff --git a/src/main/java/com/casic/resolver/RainFallDataResolver.java b/src/main/java/com/casic/resolver/RainFallDataResolver.java
new file mode 100644
index 0000000..8a22899
--- /dev/null
+++ b/src/main/java/com/casic/resolver/RainFallDataResolver.java
@@ -0,0 +1,79 @@
+package com.casic.resolver;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service
+@Slf4j
+public class RainFallDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Autowired
+ private RainFallDataMapper rainFallDataMapper;
+ @Autowired
+ private AlarmLevelConfig alarmLevelConfig;
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if (msg.contains(rainFallMark)) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ String defaultValue = msg.substring(26, 30);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ RainFallData rainFallData = initRainFallData(devcode, defaultValue);
+ rainFallDataMapper.insert(rainFallData);
+ Integer isAlarm = isAlarm(String.valueOf(defaultValue), alarmLevelConfig.getRainfall());
+ return RelayStatusDTO.builder()
+ .channelName(RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+
+ }
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ private RainFallData initRainFallData(String devcode, String valueStr) {
+ RainFallData rainFallData = new RainFallData();
+ rainFallData.setDstid(devcode);
+ rainFallData.setTotalyuliang(valueStr);
+ rainFallData.setUptime(new Date());
+ rainFallData.setLogtime(new Date());
+ return rainFallData;
+ }
+
+ // //ByteBuf byteBuf
+ public static void main(String[] main) {
+ pareDeviceHex("8653280684199430AAAA01030200023985");
+ }
+
+ private static void pareDeviceHex(String msg) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ log.info(" devcode : " + devcode);
+ String valueStr = msg.substring(26, 30);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverDecoder.java b/src/main/java/com/casic/server/ReceiverDecoder.java
new file mode 100644
index 0000000..7030790
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverDecoder.java
@@ -0,0 +1,71 @@
+package com.casic.server;
+
+import com.casic.enums.RelaySwitchEnums;
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.ByteToMessageDecoder;
+import lombok.extern.slf4j.Slf4j;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * 自定义解码器
+ *
+ * @description: 将从接口取到的数据编码
+ * @author: cz
+ * @create: 2023-5-10
+ **/
+@Slf4j
+public class ReceiverDecoder extends ByteToMessageDecoder implements RelaySwitchEnums {
+
+
+// final ChannelGroup channels =
+// new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+
+ @Override
+ protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
+ if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
+ pareDeviceHex(msg);
+ }
+// if(msg.readableBytes()>2){
+// out.add(msg);
+// }
+ }
+
+// @Override
+// public void channelActive(ChannelHandlerContext ctx) throws Exception {
+// channels.add(ctx.channel());
+// super.channelActive(ctx);
+// }
+//
+// @Override
+// public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+// super.channelRead(ctx, msg);
+// ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+// String switchConent = preFix + 1 + "," + 1 + postFix;
+// out.writeBytes(switchConent.getBytes());
+// channels.forEach(
+// channel ->{
+// if(channel!=ctx.channel()) {
+// channel.writeAndFlush(out);
+// }
+// }
+// );
+// }
+
+ private static void pareDeviceHex(ByteBuf byteBuf) {
+ //去掉补位
+ log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
+ String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
+ log.info(" devcode : " + devcode);
+ byteBuf.resetReaderIndex();//重置位判断
+ String valueStr = byteBuf.slice(26, 4).toString(Charset.defaultCharset());
+ log.info(" valueStr : " + valueStr);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverServer.java b/src/main/java/com/casic/server/ReceiverServer.java
new file mode 100644
index 0000000..a98e4ca
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServer.java
@@ -0,0 +1,72 @@
+package com.casic.server;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.logging.LogLevel;
+import io.netty.handler.logging.LoggingHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * @description: 接收客户端传过来的数据,只做打印处理
+ * @author: Stone
+ * @create: 2019-01-10 19:52
+ **/
+@Slf4j
+@Component
+public class ReceiverServer {
+
+ @Autowired
+ private ReceiverServerHandler receiverServerHandler;
+ @Autowired
+ private ServerPort serverPort;
+
+ @PostConstruct
+ public void init() {
+ this.start();
+ }
+
+ public void start() {
+ EventLoopGroup bossGroup = new NioEventLoopGroup();
+ EventLoopGroup workerGroup = new NioEventLoopGroup();
+ log.info("server bind port = {}", serverPort.getPort());
+
+ ServerBootstrap serverBootstrap = new ServerBootstrap();
+ serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
+ serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
+ serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
+
+ serverBootstrap.childHandler(new ChannelInitializer() {
+ @Override
+ protected void initChannel(SocketChannel socketChannel) {
+// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
+ socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
+// socketChannel.pipeline().addLast(new ReceiverDecoder());
+ socketChannel.pipeline().addLast(new StringDecoder());
+ socketChannel.pipeline().addLast(receiverServerHandler);
+ }
+ });
+ serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
+ try {
+ ChannelFuture channelFuture = serverBootstrap.bind(serverPort.getPort()).sync();
+ channelFuture.channel().closeFuture().sync();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } finally {
+ workerGroup.shutdownGracefully();
+ bossGroup.shutdownGracefully();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/server/ReceiverServerHandler.java b/src/main/java/com/casic/server/ReceiverServerHandler.java
new file mode 100644
index 0000000..31ac43e
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServerHandler.java
@@ -0,0 +1,103 @@
+package com.casic.server;
+
+
+import com.casic.enums.RelaySwitchEnums;
+import com.casic.model.RelayStatusDTO;
+import com.casic.resolver.RainFallDataResolver;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.channel.group.ChannelGroup;
+import io.netty.channel.group.DefaultChannelGroup;
+import io.netty.util.concurrent.GlobalEventExecutor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * @description: 消息处理handler
+ * @author: Stone
+ * @create: 2019-01-10 20:01
+ **/
+@Slf4j
+@Component
+@ChannelHandler.Sharable
+public class ReceiverServerHandler extends ChannelInboundHandlerAdapter implements RelaySwitchEnums {
+
+ final ChannelGroup channels =
+ new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+ @Autowired
+ private List rainFallDataResolverList;
+
+ public ReceiverServerHandler() {
+ }
+
+ @Override
+ public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
+ super.channelRegistered(ctx);
+ }
+
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ channels.add(ctx.channel());
+ super.channelActive(ctx);
+ }
+
+ @Override
+ public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+ channels.forEach(channel -> {
+ if (channel == ctx.channel()) {
+ channels.remove(channel);
+ }
+ }
+ );
+ super.channelInactive(ctx);
+ }
+
+ /**
+ * 雨量计
+ */
+ @Override
+ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+ if (msg instanceof String) {
+ rainFallDataResolverList.forEach(
+ rainFallDataResolver -> {
+ RelayStatusDTO relayStatusDTO = rainFallDataResolver.datagram(String.valueOf(msg));
+ sendMsg(ctx, relayStatusDTO);
+ }
+ );
+ }
+ super.channelRead(ctx, msg);
+ }
+
+ private void sendMsg(ChannelHandlerContext ctx, RelayStatusDTO relayStatusDTO) {
+ if (!ObjectUtils.isEmpty(relayStatusDTO)) {
+ ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+ String switchConent = preFix + relayStatusDTO.getChannelName() + "," + relayStatusDTO.getLampSwitch() + postFix;
+ out.writeBytes(switchConent.getBytes());
+ channels.forEach(channel -> {
+ if (channel.isActive()) {
+ if (channel != ctx.channel()) {
+ channel.writeAndFlush(out);
+ }
+ }
+ }
+ );
+ }
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ super.exceptionCaught(ctx, cause);
+ cause.printStackTrace();
+ ctx.close();
+ }
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataScanner.java b/src/main/java/com/casic/service/DeviceDataScanner.java
new file mode 100644
index 0000000..049fa71
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataScanner.java
@@ -0,0 +1,7 @@
+package com.casic.service;
+
+public interface DeviceDataScanner {
+
+ void scanDeviceData();
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataSupport.java b/src/main/java/com/casic/service/DeviceDataSupport.java
new file mode 100644
index 0000000..93d61ea
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataSupport.java
@@ -0,0 +1,50 @@
+package com.casic.service;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.client.Client;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.mapper.DeviceDataMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ *
+ */
+@Slf4j
+@Component
+public class DeviceDataSupport implements AlarmDatagramFlag {
+
+ @Autowired
+ protected DeviceDataMapper deviceDataMapper;
+ @Autowired
+ protected AlarmLevelConfig alarmLevelConfig;
+ @Autowired
+ private Client client;
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * 发送报警消息
+ */
+ protected void sendAlarmMsg(String devcode, Integer isAlarm) {
+ try {
+ String alarmMsg = devcode + alarmMark + isAlarm;
+ client.send(alarmMsg);
+ } catch (Exception ex) {
+ log.error("消息发送失败,设备编号为{},异常信息{}", devcode, ex.getMessage());
+ }
+ }
+
+}
diff --git a/src/main/java/com/casic/service/RainFallDataService.java b/src/main/java/com/casic/service/RainFallDataService.java
new file mode 100644
index 0000000..6c1a12d
--- /dev/null
+++ b/src/main/java/com/casic/service/RainFallDataService.java
@@ -0,0 +1,6 @@
+package com.casic.service;
+
+public interface RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
new file mode 100644
index 0000000..14dc1eb
--- /dev/null
+++ b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
@@ -0,0 +1,13 @@
+package com.casic.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.service.RainFallDataService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class RainFallDataServiceImpl extends ServiceImpl implements RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/scanner/FlowDataScanner.java b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
new file mode 100644
index 0000000..7ab7228
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
@@ -0,0 +1,28 @@
+package com.casic.service.scanner;
+
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class FlowDataScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String thresholdValue = alarmLevelConfig.getFlow();
+ List> flowDataMapList = this.deviceDataMapper.getFlowData();
+ flowDataMapList.forEach(
+ flowDataMap -> {
+ String devcode = flowDataMap.get("devcode").toString();
+ String insdata = flowDataMap.get("insdata").toString();
+ Integer isAlarm = isAlarm(insdata, thresholdValue);
+ sendAlarmMsg(devcode, isAlarm);
+ }
+ );
+ }
+
+
+}
diff --git a/src/main/java/com/casic/service/scanner/PressDataScanner.java b/src/main/java/com/casic/service/scanner/PressDataScanner.java
new file mode 100644
index 0000000..6738c38
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/PressDataScanner.java
@@ -0,0 +1,29 @@
+package com.casic.service.scanner;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.DeviceDataMapper;
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class PressDataScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String thresholdValue = alarmLevelConfig.getPressure();
+ List> pressDataMapList = this.deviceDataMapper.getPressureData();
+ pressDataMapList.forEach(
+ pressDataMap -> {
+ String devcode = pressDataMap.get("devcode").toString();
+ String pressdata = pressDataMap.get("pressdata").toString();
+ Integer isAlarm=isAlarm(pressdata,thresholdValue);
+ sendAlarmMsg(devcode,isAlarm);
+ }
+ );
+ }
+
+}
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
- if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
-// log.info(" String : " + msg.toString(Charset.defaultCharset()));
-// if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
- pareDeviceHex(msg);
-// out.add(msg);
-// }
- }
- }
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
- String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
- log.info(" devcode : " + devcode);
- byteBuf.resetReaderIndex();//重置位判断
- String valueStr=byteBuf.slice(26, 4).toString(Charset.defaultCharset());
- log.info(" valueStr : " + valueStr);
- long defaultValue = Long.valueOf(valueStr);
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverDomain.java b/src/main/java/com/casic/handler/ReceiverDomain.java
deleted file mode 100644
index f0a89b6..0000000
--- a/src/main/java/com/casic/handler/ReceiverDomain.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import lombok.Data;
-
-/**
- * @description: 环境数据实体类
- * @author: Stone
- * @create: 2019-01-10 22:38
- **/
-@Data
-public class ReceiverDomain {
- private String head;
- private int len;
- private String key;
- private String value;
-
- public ReceiverDomain(ByteBuf bf) {
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServer.java b/src/main/java/com/casic/handler/ReceiverServer.java
deleted file mode 100644
index 6894a00..0000000
--- a/src/main/java/com/casic/handler/ReceiverServer.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.casic.handler;
-
-import io.netty.bootstrap.ServerBootstrap;
-import io.netty.channel.ChannelFuture;
-import io.netty.channel.ChannelInitializer;
-import io.netty.channel.ChannelOption;
-import io.netty.channel.EventLoopGroup;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.channel.socket.SocketChannel;
-import io.netty.channel.socket.nio.NioServerSocketChannel;
-import io.netty.handler.codec.LineBasedFrameDecoder;
-import io.netty.handler.codec.string.StringDecoder;
-import io.netty.handler.logging.LogLevel;
-import io.netty.handler.logging.LoggingHandler;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-
-/**
- * @description: 接收客户端传过来的数据,只做打印处理
- * @author: Stone
- * @create: 2019-01-10 19:52
- **/
-@Slf4j
-@Component
-public class ReceiverServer {
-
- @Autowired
- private ReceiverServerHandler receiverServerHandler;
-
- @Value("${xgd.server-port}")
- private int port;
-
-
-
- @PostConstruct
- public void init() {
- this.start();
- }
-
- public void start() {
- EventLoopGroup bossGroup = new NioEventLoopGroup();
- EventLoopGroup workerGroup = new NioEventLoopGroup();
- log.info("server bind port = {}", port);
-
- ServerBootstrap serverBootstrap = new ServerBootstrap();
- serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
- serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
- serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
-
- serverBootstrap.childHandler(new ChannelInitializer() {
- @Override
- protected void initChannel(SocketChannel socketChannel) {
-// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
- socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
- socketChannel.pipeline().addLast(new ReceiverDecoder());
- socketChannel.pipeline().addLast(new StringDecoder());
- socketChannel.pipeline().addLast(receiverServerHandler);
- }
- });
-
- serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
- try {
- ChannelFuture channelFuture = serverBootstrap.bind(port).sync();
- channelFuture.channel().closeFuture().sync();
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- workerGroup.shutdownGracefully();
- bossGroup.shutdownGracefully();
- }
- }
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServerHandler.java b/src/main/java/com/casic/handler/ReceiverServerHandler.java
deleted file mode 100644
index f432e06..0000000
--- a/src/main/java/com/casic/handler/ReceiverServerHandler.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.casic.handler;
-
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelInboundHandlerAdapter;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.javassist.bytecode.ByteArray;
-import org.springframework.stereotype.Component;
-
-/**
- * @description: 消息处理handler
- * @author: Stone
- * @create: 2019-01-10 20:01
- **/
-@Slf4j
-@Component
-@ChannelHandler.Sharable
-public class ReceiverServerHandler extends ChannelInboundHandlerAdapter {
-
- public ReceiverServerHandler() {
- }
-
- @Override
- public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
- super.channelRegistered(ctx);
- }
-
- @Override
- public void channelActive(ChannelHandlerContext ctx) throws Exception {
- super.channelActive(ctx);
- }
-
- @Override
- public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
- super.channelRead(ctx, msg);
-// log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME,(String)msg);
- log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
- String msgStr = msg.toString();
- // 以固定行分隔符结尾分割,头部可能有不符合接口协议的字段, 去掉
- int idx = msgStr.indexOf("##");
- if (idx >= 0) {
- msgStr = msgStr.substring(idx);
- }
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME, msgStr);
- }
-
-// //ByteBuf byteBuf
- public static void main(String[] main) {
- byte[] hexBytes = {(byte) 0x86, 0x53, 0x28, 0x06, (byte) 0x84, 0x19, (byte) 0x94,
- 0x30, (byte) 0xAA, (byte) 0xAA, 0x01, 0x03, (byte) 0x02, 0x02, 0x00, (byte) 0xB8, 0x44};
- ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
- out.writeBytes(hexBytes);
-
- if (ByteBufUtil.hexDump(out).toLowerCase().contains("aaaa")) {
- pareDeviceHex(out);
- }
- }
-
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- String devcode = ByteBufUtil.hexDump(byteBuf.slice(0, 8));
- devcode = devcode.substring(0, devcode.length() - 1);
- //数值读取
- byteBuf.readBytes(12);
- byteBuf.markReaderIndex();
- Integer defaultValueLength = byteBuf.readByte() & 0xff;
- long defaultValue = 0;
- for (int i = 0; i < defaultValueLength; i++) {
- long tempLong = byteBuf.readByte() & 0xff;
- defaultValue = defaultValue * 256 + tempLong;
- }
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
- super.exceptionCaught(ctx, cause);
- cause.printStackTrace();
- ctx.close();
- }
-
-}
diff --git a/src/main/java/com/casic/mapper/DeviceDataMapper.java b/src/main/java/com/casic/mapper/DeviceDataMapper.java
new file mode 100644
index 0000000..be72d19
--- /dev/null
+++ b/src/main/java/com/casic/mapper/DeviceDataMapper.java
@@ -0,0 +1,28 @@
+package com.casic.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface DeviceDataMapper {
+
+
+ /**
+ * 获取压力数据
+ */
+ List> getPressureData();
+
+ /**
+ * 获取流量数据
+ */
+ List> getFlowData();
+
+ /**
+ * 获取温湿度数据
+ */
+ List> getHumiTemp();
+
+
+}
diff --git a/src/main/java/com/casic/mapper/RainFallDataMapper.java b/src/main/java/com/casic/mapper/RainFallDataMapper.java
new file mode 100644
index 0000000..f5c29db
--- /dev/null
+++ b/src/main/java/com/casic/mapper/RainFallDataMapper.java
@@ -0,0 +1,7 @@
+package com.casic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.model.RainFallData;
+
+public interface RainFallDataMapper extends BaseMapper {
+}
diff --git a/src/main/java/com/casic/model/RainFallData.java b/src/main/java/com/casic/model/RainFallData.java
new file mode 100644
index 0000000..fa96673
--- /dev/null
+++ b/src/main/java/com/casic/model/RainFallData.java
@@ -0,0 +1,30 @@
+package com.casic.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@TableName("AD_YL_YLIANG")
+public class RainFallData {
+
+ private String dbid;
+
+ private String scrid;
+
+ private String dstid;
+
+ private String totalyuliang;
+
+ private String curminuteyuliang;
+
+ private String forminuteyuliang;
+
+ private String value;
+
+ private Date logtime;
+
+ private Date uptime;
+
+}
diff --git a/src/main/java/com/casic/model/RelayStatusDTO.java b/src/main/java/com/casic/model/RelayStatusDTO.java
new file mode 100644
index 0000000..b839e0c
--- /dev/null
+++ b/src/main/java/com/casic/model/RelayStatusDTO.java
@@ -0,0 +1,20 @@
+package com.casic.model;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class RelayStatusDTO {
+
+ /***
+ * 通道名称 1 2 3 4 5 6 7 8
+ */
+ private String channelName;
+
+ /***
+ * 开关0,1
+ */
+ private Integer lampSwitch;
+
+}
diff --git a/src/main/java/com/casic/resolver/AlarmDataResolver.java b/src/main/java/com/casic/resolver/AlarmDataResolver.java
new file mode 100644
index 0000000..2c6874b
--- /dev/null
+++ b/src/main/java/com/casic/resolver/AlarmDataResolver.java
@@ -0,0 +1,28 @@
+package com.casic.resolver;
+
+
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class AlarmDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if(msg.contains(alarmMark)){
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ Integer isAlarm = Integer.valueOf(msg.substring(16,17));
+ log.info("设备编号为" + devcode + ",是否报警" + isAlarm);
+ return RelayStatusDTO.builder()
+ .channelName( RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/casic/resolver/DatagramResolver.java b/src/main/java/com/casic/resolver/DatagramResolver.java
new file mode 100644
index 0000000..d00c952
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramResolver.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+import com.casic.model.RelayStatusDTO;
+
+public interface DatagramResolver {
+
+ RelayStatusDTO datagram(String msg);
+
+}
diff --git a/src/main/java/com/casic/resolver/DatagramSupport.java b/src/main/java/com/casic/resolver/DatagramSupport.java
new file mode 100644
index 0000000..1d911a3
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramSupport.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+public class DatagramSupport {
+
+
+
+
+
+}
diff --git a/src/main/java/com/casic/resolver/RainFallDataResolver.java b/src/main/java/com/casic/resolver/RainFallDataResolver.java
new file mode 100644
index 0000000..8a22899
--- /dev/null
+++ b/src/main/java/com/casic/resolver/RainFallDataResolver.java
@@ -0,0 +1,79 @@
+package com.casic.resolver;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service
+@Slf4j
+public class RainFallDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Autowired
+ private RainFallDataMapper rainFallDataMapper;
+ @Autowired
+ private AlarmLevelConfig alarmLevelConfig;
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if (msg.contains(rainFallMark)) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ String defaultValue = msg.substring(26, 30);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ RainFallData rainFallData = initRainFallData(devcode, defaultValue);
+ rainFallDataMapper.insert(rainFallData);
+ Integer isAlarm = isAlarm(String.valueOf(defaultValue), alarmLevelConfig.getRainfall());
+ return RelayStatusDTO.builder()
+ .channelName(RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+
+ }
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ private RainFallData initRainFallData(String devcode, String valueStr) {
+ RainFallData rainFallData = new RainFallData();
+ rainFallData.setDstid(devcode);
+ rainFallData.setTotalyuliang(valueStr);
+ rainFallData.setUptime(new Date());
+ rainFallData.setLogtime(new Date());
+ return rainFallData;
+ }
+
+ // //ByteBuf byteBuf
+ public static void main(String[] main) {
+ pareDeviceHex("8653280684199430AAAA01030200023985");
+ }
+
+ private static void pareDeviceHex(String msg) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ log.info(" devcode : " + devcode);
+ String valueStr = msg.substring(26, 30);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverDecoder.java b/src/main/java/com/casic/server/ReceiverDecoder.java
new file mode 100644
index 0000000..7030790
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverDecoder.java
@@ -0,0 +1,71 @@
+package com.casic.server;
+
+import com.casic.enums.RelaySwitchEnums;
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.ByteToMessageDecoder;
+import lombok.extern.slf4j.Slf4j;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * 自定义解码器
+ *
+ * @description: 将从接口取到的数据编码
+ * @author: cz
+ * @create: 2023-5-10
+ **/
+@Slf4j
+public class ReceiverDecoder extends ByteToMessageDecoder implements RelaySwitchEnums {
+
+
+// final ChannelGroup channels =
+// new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+
+ @Override
+ protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
+ if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
+ pareDeviceHex(msg);
+ }
+// if(msg.readableBytes()>2){
+// out.add(msg);
+// }
+ }
+
+// @Override
+// public void channelActive(ChannelHandlerContext ctx) throws Exception {
+// channels.add(ctx.channel());
+// super.channelActive(ctx);
+// }
+//
+// @Override
+// public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+// super.channelRead(ctx, msg);
+// ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+// String switchConent = preFix + 1 + "," + 1 + postFix;
+// out.writeBytes(switchConent.getBytes());
+// channels.forEach(
+// channel ->{
+// if(channel!=ctx.channel()) {
+// channel.writeAndFlush(out);
+// }
+// }
+// );
+// }
+
+ private static void pareDeviceHex(ByteBuf byteBuf) {
+ //去掉补位
+ log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
+ String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
+ log.info(" devcode : " + devcode);
+ byteBuf.resetReaderIndex();//重置位判断
+ String valueStr = byteBuf.slice(26, 4).toString(Charset.defaultCharset());
+ log.info(" valueStr : " + valueStr);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverServer.java b/src/main/java/com/casic/server/ReceiverServer.java
new file mode 100644
index 0000000..a98e4ca
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServer.java
@@ -0,0 +1,72 @@
+package com.casic.server;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.logging.LogLevel;
+import io.netty.handler.logging.LoggingHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * @description: 接收客户端传过来的数据,只做打印处理
+ * @author: Stone
+ * @create: 2019-01-10 19:52
+ **/
+@Slf4j
+@Component
+public class ReceiverServer {
+
+ @Autowired
+ private ReceiverServerHandler receiverServerHandler;
+ @Autowired
+ private ServerPort serverPort;
+
+ @PostConstruct
+ public void init() {
+ this.start();
+ }
+
+ public void start() {
+ EventLoopGroup bossGroup = new NioEventLoopGroup();
+ EventLoopGroup workerGroup = new NioEventLoopGroup();
+ log.info("server bind port = {}", serverPort.getPort());
+
+ ServerBootstrap serverBootstrap = new ServerBootstrap();
+ serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
+ serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
+ serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
+
+ serverBootstrap.childHandler(new ChannelInitializer() {
+ @Override
+ protected void initChannel(SocketChannel socketChannel) {
+// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
+ socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
+// socketChannel.pipeline().addLast(new ReceiverDecoder());
+ socketChannel.pipeline().addLast(new StringDecoder());
+ socketChannel.pipeline().addLast(receiverServerHandler);
+ }
+ });
+ serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
+ try {
+ ChannelFuture channelFuture = serverBootstrap.bind(serverPort.getPort()).sync();
+ channelFuture.channel().closeFuture().sync();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } finally {
+ workerGroup.shutdownGracefully();
+ bossGroup.shutdownGracefully();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/server/ReceiverServerHandler.java b/src/main/java/com/casic/server/ReceiverServerHandler.java
new file mode 100644
index 0000000..31ac43e
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServerHandler.java
@@ -0,0 +1,103 @@
+package com.casic.server;
+
+
+import com.casic.enums.RelaySwitchEnums;
+import com.casic.model.RelayStatusDTO;
+import com.casic.resolver.RainFallDataResolver;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.channel.group.ChannelGroup;
+import io.netty.channel.group.DefaultChannelGroup;
+import io.netty.util.concurrent.GlobalEventExecutor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * @description: 消息处理handler
+ * @author: Stone
+ * @create: 2019-01-10 20:01
+ **/
+@Slf4j
+@Component
+@ChannelHandler.Sharable
+public class ReceiverServerHandler extends ChannelInboundHandlerAdapter implements RelaySwitchEnums {
+
+ final ChannelGroup channels =
+ new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+ @Autowired
+ private List rainFallDataResolverList;
+
+ public ReceiverServerHandler() {
+ }
+
+ @Override
+ public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
+ super.channelRegistered(ctx);
+ }
+
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ channels.add(ctx.channel());
+ super.channelActive(ctx);
+ }
+
+ @Override
+ public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+ channels.forEach(channel -> {
+ if (channel == ctx.channel()) {
+ channels.remove(channel);
+ }
+ }
+ );
+ super.channelInactive(ctx);
+ }
+
+ /**
+ * 雨量计
+ */
+ @Override
+ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+ if (msg instanceof String) {
+ rainFallDataResolverList.forEach(
+ rainFallDataResolver -> {
+ RelayStatusDTO relayStatusDTO = rainFallDataResolver.datagram(String.valueOf(msg));
+ sendMsg(ctx, relayStatusDTO);
+ }
+ );
+ }
+ super.channelRead(ctx, msg);
+ }
+
+ private void sendMsg(ChannelHandlerContext ctx, RelayStatusDTO relayStatusDTO) {
+ if (!ObjectUtils.isEmpty(relayStatusDTO)) {
+ ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+ String switchConent = preFix + relayStatusDTO.getChannelName() + "," + relayStatusDTO.getLampSwitch() + postFix;
+ out.writeBytes(switchConent.getBytes());
+ channels.forEach(channel -> {
+ if (channel.isActive()) {
+ if (channel != ctx.channel()) {
+ channel.writeAndFlush(out);
+ }
+ }
+ }
+ );
+ }
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ super.exceptionCaught(ctx, cause);
+ cause.printStackTrace();
+ ctx.close();
+ }
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataScanner.java b/src/main/java/com/casic/service/DeviceDataScanner.java
new file mode 100644
index 0000000..049fa71
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataScanner.java
@@ -0,0 +1,7 @@
+package com.casic.service;
+
+public interface DeviceDataScanner {
+
+ void scanDeviceData();
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataSupport.java b/src/main/java/com/casic/service/DeviceDataSupport.java
new file mode 100644
index 0000000..93d61ea
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataSupport.java
@@ -0,0 +1,50 @@
+package com.casic.service;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.client.Client;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.mapper.DeviceDataMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ *
+ */
+@Slf4j
+@Component
+public class DeviceDataSupport implements AlarmDatagramFlag {
+
+ @Autowired
+ protected DeviceDataMapper deviceDataMapper;
+ @Autowired
+ protected AlarmLevelConfig alarmLevelConfig;
+ @Autowired
+ private Client client;
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * 发送报警消息
+ */
+ protected void sendAlarmMsg(String devcode, Integer isAlarm) {
+ try {
+ String alarmMsg = devcode + alarmMark + isAlarm;
+ client.send(alarmMsg);
+ } catch (Exception ex) {
+ log.error("消息发送失败,设备编号为{},异常信息{}", devcode, ex.getMessage());
+ }
+ }
+
+}
diff --git a/src/main/java/com/casic/service/RainFallDataService.java b/src/main/java/com/casic/service/RainFallDataService.java
new file mode 100644
index 0000000..6c1a12d
--- /dev/null
+++ b/src/main/java/com/casic/service/RainFallDataService.java
@@ -0,0 +1,6 @@
+package com.casic.service;
+
+public interface RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
new file mode 100644
index 0000000..14dc1eb
--- /dev/null
+++ b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
@@ -0,0 +1,13 @@
+package com.casic.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.service.RainFallDataService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class RainFallDataServiceImpl extends ServiceImpl implements RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/scanner/FlowDataScanner.java b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
new file mode 100644
index 0000000..7ab7228
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
@@ -0,0 +1,28 @@
+package com.casic.service.scanner;
+
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class FlowDataScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String thresholdValue = alarmLevelConfig.getFlow();
+ List> flowDataMapList = this.deviceDataMapper.getFlowData();
+ flowDataMapList.forEach(
+ flowDataMap -> {
+ String devcode = flowDataMap.get("devcode").toString();
+ String insdata = flowDataMap.get("insdata").toString();
+ Integer isAlarm = isAlarm(insdata, thresholdValue);
+ sendAlarmMsg(devcode, isAlarm);
+ }
+ );
+ }
+
+
+}
diff --git a/src/main/java/com/casic/service/scanner/PressDataScanner.java b/src/main/java/com/casic/service/scanner/PressDataScanner.java
new file mode 100644
index 0000000..6738c38
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/PressDataScanner.java
@@ -0,0 +1,29 @@
+package com.casic.service.scanner;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.DeviceDataMapper;
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class PressDataScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String thresholdValue = alarmLevelConfig.getPressure();
+ List> pressDataMapList = this.deviceDataMapper.getPressureData();
+ pressDataMapList.forEach(
+ pressDataMap -> {
+ String devcode = pressDataMap.get("devcode").toString();
+ String pressdata = pressDataMap.get("pressdata").toString();
+ Integer isAlarm=isAlarm(pressdata,thresholdValue);
+ sendAlarmMsg(devcode,isAlarm);
+ }
+ );
+ }
+
+}
diff --git a/src/main/java/com/casic/service/scanner/TempHumiScanner.java b/src/main/java/com/casic/service/scanner/TempHumiScanner.java
new file mode 100644
index 0000000..a9efc57
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/TempHumiScanner.java
@@ -0,0 +1,34 @@
+package com.casic.service.scanner;
+
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class TempHumiScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String humiThreshold = alarmLevelConfig.getHumi();
+ String tempThreshold = alarmLevelConfig.getTemp();
+ List> pressDataMapList = this.deviceDataMapper.getHumiTemp();
+ pressDataMapList.forEach(
+ pressDataMap -> {
+ String devcode = pressDataMap.get("devcode").toString();
+ String temperatureData = pressDataMap.get("temperature").toString();
+ Integer isTempAlarm = isAlarm(temperatureData, tempThreshold);
+ String humidityData = pressDataMap.get("humidity").toString();
+ Integer isHumiAlarm = isAlarm(humidityData, humiThreshold);
+ if (isHumiAlarm == 0 && isTempAlarm == 0) {
+ sendAlarmMsg(devcode, 0);
+ } else {
+ sendAlarmMsg(devcode, 1);
+ }
+ }
+ );
+ }
+
+}
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
- if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
-// log.info(" String : " + msg.toString(Charset.defaultCharset()));
-// if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
- pareDeviceHex(msg);
-// out.add(msg);
-// }
- }
- }
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
- String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
- log.info(" devcode : " + devcode);
- byteBuf.resetReaderIndex();//重置位判断
- String valueStr=byteBuf.slice(26, 4).toString(Charset.defaultCharset());
- log.info(" valueStr : " + valueStr);
- long defaultValue = Long.valueOf(valueStr);
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverDomain.java b/src/main/java/com/casic/handler/ReceiverDomain.java
deleted file mode 100644
index f0a89b6..0000000
--- a/src/main/java/com/casic/handler/ReceiverDomain.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import lombok.Data;
-
-/**
- * @description: 环境数据实体类
- * @author: Stone
- * @create: 2019-01-10 22:38
- **/
-@Data
-public class ReceiverDomain {
- private String head;
- private int len;
- private String key;
- private String value;
-
- public ReceiverDomain(ByteBuf bf) {
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServer.java b/src/main/java/com/casic/handler/ReceiverServer.java
deleted file mode 100644
index 6894a00..0000000
--- a/src/main/java/com/casic/handler/ReceiverServer.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.casic.handler;
-
-import io.netty.bootstrap.ServerBootstrap;
-import io.netty.channel.ChannelFuture;
-import io.netty.channel.ChannelInitializer;
-import io.netty.channel.ChannelOption;
-import io.netty.channel.EventLoopGroup;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.channel.socket.SocketChannel;
-import io.netty.channel.socket.nio.NioServerSocketChannel;
-import io.netty.handler.codec.LineBasedFrameDecoder;
-import io.netty.handler.codec.string.StringDecoder;
-import io.netty.handler.logging.LogLevel;
-import io.netty.handler.logging.LoggingHandler;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-
-/**
- * @description: 接收客户端传过来的数据,只做打印处理
- * @author: Stone
- * @create: 2019-01-10 19:52
- **/
-@Slf4j
-@Component
-public class ReceiverServer {
-
- @Autowired
- private ReceiverServerHandler receiverServerHandler;
-
- @Value("${xgd.server-port}")
- private int port;
-
-
-
- @PostConstruct
- public void init() {
- this.start();
- }
-
- public void start() {
- EventLoopGroup bossGroup = new NioEventLoopGroup();
- EventLoopGroup workerGroup = new NioEventLoopGroup();
- log.info("server bind port = {}", port);
-
- ServerBootstrap serverBootstrap = new ServerBootstrap();
- serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
- serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
- serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
-
- serverBootstrap.childHandler(new ChannelInitializer() {
- @Override
- protected void initChannel(SocketChannel socketChannel) {
-// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
- socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
- socketChannel.pipeline().addLast(new ReceiverDecoder());
- socketChannel.pipeline().addLast(new StringDecoder());
- socketChannel.pipeline().addLast(receiverServerHandler);
- }
- });
-
- serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
- try {
- ChannelFuture channelFuture = serverBootstrap.bind(port).sync();
- channelFuture.channel().closeFuture().sync();
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- workerGroup.shutdownGracefully();
- bossGroup.shutdownGracefully();
- }
- }
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServerHandler.java b/src/main/java/com/casic/handler/ReceiverServerHandler.java
deleted file mode 100644
index f432e06..0000000
--- a/src/main/java/com/casic/handler/ReceiverServerHandler.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.casic.handler;
-
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelInboundHandlerAdapter;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.javassist.bytecode.ByteArray;
-import org.springframework.stereotype.Component;
-
-/**
- * @description: 消息处理handler
- * @author: Stone
- * @create: 2019-01-10 20:01
- **/
-@Slf4j
-@Component
-@ChannelHandler.Sharable
-public class ReceiverServerHandler extends ChannelInboundHandlerAdapter {
-
- public ReceiverServerHandler() {
- }
-
- @Override
- public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
- super.channelRegistered(ctx);
- }
-
- @Override
- public void channelActive(ChannelHandlerContext ctx) throws Exception {
- super.channelActive(ctx);
- }
-
- @Override
- public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
- super.channelRead(ctx, msg);
-// log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME,(String)msg);
- log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
- String msgStr = msg.toString();
- // 以固定行分隔符结尾分割,头部可能有不符合接口协议的字段, 去掉
- int idx = msgStr.indexOf("##");
- if (idx >= 0) {
- msgStr = msgStr.substring(idx);
- }
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME, msgStr);
- }
-
-// //ByteBuf byteBuf
- public static void main(String[] main) {
- byte[] hexBytes = {(byte) 0x86, 0x53, 0x28, 0x06, (byte) 0x84, 0x19, (byte) 0x94,
- 0x30, (byte) 0xAA, (byte) 0xAA, 0x01, 0x03, (byte) 0x02, 0x02, 0x00, (byte) 0xB8, 0x44};
- ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
- out.writeBytes(hexBytes);
-
- if (ByteBufUtil.hexDump(out).toLowerCase().contains("aaaa")) {
- pareDeviceHex(out);
- }
- }
-
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- String devcode = ByteBufUtil.hexDump(byteBuf.slice(0, 8));
- devcode = devcode.substring(0, devcode.length() - 1);
- //数值读取
- byteBuf.readBytes(12);
- byteBuf.markReaderIndex();
- Integer defaultValueLength = byteBuf.readByte() & 0xff;
- long defaultValue = 0;
- for (int i = 0; i < defaultValueLength; i++) {
- long tempLong = byteBuf.readByte() & 0xff;
- defaultValue = defaultValue * 256 + tempLong;
- }
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
- super.exceptionCaught(ctx, cause);
- cause.printStackTrace();
- ctx.close();
- }
-
-}
diff --git a/src/main/java/com/casic/mapper/DeviceDataMapper.java b/src/main/java/com/casic/mapper/DeviceDataMapper.java
new file mode 100644
index 0000000..be72d19
--- /dev/null
+++ b/src/main/java/com/casic/mapper/DeviceDataMapper.java
@@ -0,0 +1,28 @@
+package com.casic.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface DeviceDataMapper {
+
+
+ /**
+ * 获取压力数据
+ */
+ List> getPressureData();
+
+ /**
+ * 获取流量数据
+ */
+ List> getFlowData();
+
+ /**
+ * 获取温湿度数据
+ */
+ List> getHumiTemp();
+
+
+}
diff --git a/src/main/java/com/casic/mapper/RainFallDataMapper.java b/src/main/java/com/casic/mapper/RainFallDataMapper.java
new file mode 100644
index 0000000..f5c29db
--- /dev/null
+++ b/src/main/java/com/casic/mapper/RainFallDataMapper.java
@@ -0,0 +1,7 @@
+package com.casic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.model.RainFallData;
+
+public interface RainFallDataMapper extends BaseMapper {
+}
diff --git a/src/main/java/com/casic/model/RainFallData.java b/src/main/java/com/casic/model/RainFallData.java
new file mode 100644
index 0000000..fa96673
--- /dev/null
+++ b/src/main/java/com/casic/model/RainFallData.java
@@ -0,0 +1,30 @@
+package com.casic.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@TableName("AD_YL_YLIANG")
+public class RainFallData {
+
+ private String dbid;
+
+ private String scrid;
+
+ private String dstid;
+
+ private String totalyuliang;
+
+ private String curminuteyuliang;
+
+ private String forminuteyuliang;
+
+ private String value;
+
+ private Date logtime;
+
+ private Date uptime;
+
+}
diff --git a/src/main/java/com/casic/model/RelayStatusDTO.java b/src/main/java/com/casic/model/RelayStatusDTO.java
new file mode 100644
index 0000000..b839e0c
--- /dev/null
+++ b/src/main/java/com/casic/model/RelayStatusDTO.java
@@ -0,0 +1,20 @@
+package com.casic.model;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class RelayStatusDTO {
+
+ /***
+ * 通道名称 1 2 3 4 5 6 7 8
+ */
+ private String channelName;
+
+ /***
+ * 开关0,1
+ */
+ private Integer lampSwitch;
+
+}
diff --git a/src/main/java/com/casic/resolver/AlarmDataResolver.java b/src/main/java/com/casic/resolver/AlarmDataResolver.java
new file mode 100644
index 0000000..2c6874b
--- /dev/null
+++ b/src/main/java/com/casic/resolver/AlarmDataResolver.java
@@ -0,0 +1,28 @@
+package com.casic.resolver;
+
+
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class AlarmDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if(msg.contains(alarmMark)){
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ Integer isAlarm = Integer.valueOf(msg.substring(16,17));
+ log.info("设备编号为" + devcode + ",是否报警" + isAlarm);
+ return RelayStatusDTO.builder()
+ .channelName( RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/casic/resolver/DatagramResolver.java b/src/main/java/com/casic/resolver/DatagramResolver.java
new file mode 100644
index 0000000..d00c952
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramResolver.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+import com.casic.model.RelayStatusDTO;
+
+public interface DatagramResolver {
+
+ RelayStatusDTO datagram(String msg);
+
+}
diff --git a/src/main/java/com/casic/resolver/DatagramSupport.java b/src/main/java/com/casic/resolver/DatagramSupport.java
new file mode 100644
index 0000000..1d911a3
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramSupport.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+public class DatagramSupport {
+
+
+
+
+
+}
diff --git a/src/main/java/com/casic/resolver/RainFallDataResolver.java b/src/main/java/com/casic/resolver/RainFallDataResolver.java
new file mode 100644
index 0000000..8a22899
--- /dev/null
+++ b/src/main/java/com/casic/resolver/RainFallDataResolver.java
@@ -0,0 +1,79 @@
+package com.casic.resolver;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service
+@Slf4j
+public class RainFallDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Autowired
+ private RainFallDataMapper rainFallDataMapper;
+ @Autowired
+ private AlarmLevelConfig alarmLevelConfig;
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if (msg.contains(rainFallMark)) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ String defaultValue = msg.substring(26, 30);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ RainFallData rainFallData = initRainFallData(devcode, defaultValue);
+ rainFallDataMapper.insert(rainFallData);
+ Integer isAlarm = isAlarm(String.valueOf(defaultValue), alarmLevelConfig.getRainfall());
+ return RelayStatusDTO.builder()
+ .channelName(RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+
+ }
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ private RainFallData initRainFallData(String devcode, String valueStr) {
+ RainFallData rainFallData = new RainFallData();
+ rainFallData.setDstid(devcode);
+ rainFallData.setTotalyuliang(valueStr);
+ rainFallData.setUptime(new Date());
+ rainFallData.setLogtime(new Date());
+ return rainFallData;
+ }
+
+ // //ByteBuf byteBuf
+ public static void main(String[] main) {
+ pareDeviceHex("8653280684199430AAAA01030200023985");
+ }
+
+ private static void pareDeviceHex(String msg) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ log.info(" devcode : " + devcode);
+ String valueStr = msg.substring(26, 30);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverDecoder.java b/src/main/java/com/casic/server/ReceiverDecoder.java
new file mode 100644
index 0000000..7030790
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverDecoder.java
@@ -0,0 +1,71 @@
+package com.casic.server;
+
+import com.casic.enums.RelaySwitchEnums;
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.ByteToMessageDecoder;
+import lombok.extern.slf4j.Slf4j;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * 自定义解码器
+ *
+ * @description: 将从接口取到的数据编码
+ * @author: cz
+ * @create: 2023-5-10
+ **/
+@Slf4j
+public class ReceiverDecoder extends ByteToMessageDecoder implements RelaySwitchEnums {
+
+
+// final ChannelGroup channels =
+// new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+
+ @Override
+ protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
+ if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
+ pareDeviceHex(msg);
+ }
+// if(msg.readableBytes()>2){
+// out.add(msg);
+// }
+ }
+
+// @Override
+// public void channelActive(ChannelHandlerContext ctx) throws Exception {
+// channels.add(ctx.channel());
+// super.channelActive(ctx);
+// }
+//
+// @Override
+// public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+// super.channelRead(ctx, msg);
+// ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+// String switchConent = preFix + 1 + "," + 1 + postFix;
+// out.writeBytes(switchConent.getBytes());
+// channels.forEach(
+// channel ->{
+// if(channel!=ctx.channel()) {
+// channel.writeAndFlush(out);
+// }
+// }
+// );
+// }
+
+ private static void pareDeviceHex(ByteBuf byteBuf) {
+ //去掉补位
+ log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
+ String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
+ log.info(" devcode : " + devcode);
+ byteBuf.resetReaderIndex();//重置位判断
+ String valueStr = byteBuf.slice(26, 4).toString(Charset.defaultCharset());
+ log.info(" valueStr : " + valueStr);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverServer.java b/src/main/java/com/casic/server/ReceiverServer.java
new file mode 100644
index 0000000..a98e4ca
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServer.java
@@ -0,0 +1,72 @@
+package com.casic.server;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.logging.LogLevel;
+import io.netty.handler.logging.LoggingHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * @description: 接收客户端传过来的数据,只做打印处理
+ * @author: Stone
+ * @create: 2019-01-10 19:52
+ **/
+@Slf4j
+@Component
+public class ReceiverServer {
+
+ @Autowired
+ private ReceiverServerHandler receiverServerHandler;
+ @Autowired
+ private ServerPort serverPort;
+
+ @PostConstruct
+ public void init() {
+ this.start();
+ }
+
+ public void start() {
+ EventLoopGroup bossGroup = new NioEventLoopGroup();
+ EventLoopGroup workerGroup = new NioEventLoopGroup();
+ log.info("server bind port = {}", serverPort.getPort());
+
+ ServerBootstrap serverBootstrap = new ServerBootstrap();
+ serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
+ serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
+ serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
+
+ serverBootstrap.childHandler(new ChannelInitializer() {
+ @Override
+ protected void initChannel(SocketChannel socketChannel) {
+// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
+ socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
+// socketChannel.pipeline().addLast(new ReceiverDecoder());
+ socketChannel.pipeline().addLast(new StringDecoder());
+ socketChannel.pipeline().addLast(receiverServerHandler);
+ }
+ });
+ serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
+ try {
+ ChannelFuture channelFuture = serverBootstrap.bind(serverPort.getPort()).sync();
+ channelFuture.channel().closeFuture().sync();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } finally {
+ workerGroup.shutdownGracefully();
+ bossGroup.shutdownGracefully();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/server/ReceiverServerHandler.java b/src/main/java/com/casic/server/ReceiverServerHandler.java
new file mode 100644
index 0000000..31ac43e
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServerHandler.java
@@ -0,0 +1,103 @@
+package com.casic.server;
+
+
+import com.casic.enums.RelaySwitchEnums;
+import com.casic.model.RelayStatusDTO;
+import com.casic.resolver.RainFallDataResolver;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.channel.group.ChannelGroup;
+import io.netty.channel.group.DefaultChannelGroup;
+import io.netty.util.concurrent.GlobalEventExecutor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * @description: 消息处理handler
+ * @author: Stone
+ * @create: 2019-01-10 20:01
+ **/
+@Slf4j
+@Component
+@ChannelHandler.Sharable
+public class ReceiverServerHandler extends ChannelInboundHandlerAdapter implements RelaySwitchEnums {
+
+ final ChannelGroup channels =
+ new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+ @Autowired
+ private List rainFallDataResolverList;
+
+ public ReceiverServerHandler() {
+ }
+
+ @Override
+ public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
+ super.channelRegistered(ctx);
+ }
+
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ channels.add(ctx.channel());
+ super.channelActive(ctx);
+ }
+
+ @Override
+ public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+ channels.forEach(channel -> {
+ if (channel == ctx.channel()) {
+ channels.remove(channel);
+ }
+ }
+ );
+ super.channelInactive(ctx);
+ }
+
+ /**
+ * 雨量计
+ */
+ @Override
+ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+ if (msg instanceof String) {
+ rainFallDataResolverList.forEach(
+ rainFallDataResolver -> {
+ RelayStatusDTO relayStatusDTO = rainFallDataResolver.datagram(String.valueOf(msg));
+ sendMsg(ctx, relayStatusDTO);
+ }
+ );
+ }
+ super.channelRead(ctx, msg);
+ }
+
+ private void sendMsg(ChannelHandlerContext ctx, RelayStatusDTO relayStatusDTO) {
+ if (!ObjectUtils.isEmpty(relayStatusDTO)) {
+ ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+ String switchConent = preFix + relayStatusDTO.getChannelName() + "," + relayStatusDTO.getLampSwitch() + postFix;
+ out.writeBytes(switchConent.getBytes());
+ channels.forEach(channel -> {
+ if (channel.isActive()) {
+ if (channel != ctx.channel()) {
+ channel.writeAndFlush(out);
+ }
+ }
+ }
+ );
+ }
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ super.exceptionCaught(ctx, cause);
+ cause.printStackTrace();
+ ctx.close();
+ }
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataScanner.java b/src/main/java/com/casic/service/DeviceDataScanner.java
new file mode 100644
index 0000000..049fa71
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataScanner.java
@@ -0,0 +1,7 @@
+package com.casic.service;
+
+public interface DeviceDataScanner {
+
+ void scanDeviceData();
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataSupport.java b/src/main/java/com/casic/service/DeviceDataSupport.java
new file mode 100644
index 0000000..93d61ea
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataSupport.java
@@ -0,0 +1,50 @@
+package com.casic.service;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.client.Client;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.mapper.DeviceDataMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ *
+ */
+@Slf4j
+@Component
+public class DeviceDataSupport implements AlarmDatagramFlag {
+
+ @Autowired
+ protected DeviceDataMapper deviceDataMapper;
+ @Autowired
+ protected AlarmLevelConfig alarmLevelConfig;
+ @Autowired
+ private Client client;
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * 发送报警消息
+ */
+ protected void sendAlarmMsg(String devcode, Integer isAlarm) {
+ try {
+ String alarmMsg = devcode + alarmMark + isAlarm;
+ client.send(alarmMsg);
+ } catch (Exception ex) {
+ log.error("消息发送失败,设备编号为{},异常信息{}", devcode, ex.getMessage());
+ }
+ }
+
+}
diff --git a/src/main/java/com/casic/service/RainFallDataService.java b/src/main/java/com/casic/service/RainFallDataService.java
new file mode 100644
index 0000000..6c1a12d
--- /dev/null
+++ b/src/main/java/com/casic/service/RainFallDataService.java
@@ -0,0 +1,6 @@
+package com.casic.service;
+
+public interface RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
new file mode 100644
index 0000000..14dc1eb
--- /dev/null
+++ b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
@@ -0,0 +1,13 @@
+package com.casic.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.service.RainFallDataService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class RainFallDataServiceImpl extends ServiceImpl implements RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/scanner/FlowDataScanner.java b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
new file mode 100644
index 0000000..7ab7228
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
@@ -0,0 +1,28 @@
+package com.casic.service.scanner;
+
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class FlowDataScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String thresholdValue = alarmLevelConfig.getFlow();
+ List> flowDataMapList = this.deviceDataMapper.getFlowData();
+ flowDataMapList.forEach(
+ flowDataMap -> {
+ String devcode = flowDataMap.get("devcode").toString();
+ String insdata = flowDataMap.get("insdata").toString();
+ Integer isAlarm = isAlarm(insdata, thresholdValue);
+ sendAlarmMsg(devcode, isAlarm);
+ }
+ );
+ }
+
+
+}
diff --git a/src/main/java/com/casic/service/scanner/PressDataScanner.java b/src/main/java/com/casic/service/scanner/PressDataScanner.java
new file mode 100644
index 0000000..6738c38
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/PressDataScanner.java
@@ -0,0 +1,29 @@
+package com.casic.service.scanner;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.DeviceDataMapper;
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class PressDataScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String thresholdValue = alarmLevelConfig.getPressure();
+ List> pressDataMapList = this.deviceDataMapper.getPressureData();
+ pressDataMapList.forEach(
+ pressDataMap -> {
+ String devcode = pressDataMap.get("devcode").toString();
+ String pressdata = pressDataMap.get("pressdata").toString();
+ Integer isAlarm=isAlarm(pressdata,thresholdValue);
+ sendAlarmMsg(devcode,isAlarm);
+ }
+ );
+ }
+
+}
diff --git a/src/main/java/com/casic/service/scanner/TempHumiScanner.java b/src/main/java/com/casic/service/scanner/TempHumiScanner.java
new file mode 100644
index 0000000..a9efc57
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/TempHumiScanner.java
@@ -0,0 +1,34 @@
+package com.casic.service.scanner;
+
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class TempHumiScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String humiThreshold = alarmLevelConfig.getHumi();
+ String tempThreshold = alarmLevelConfig.getTemp();
+ List> pressDataMapList = this.deviceDataMapper.getHumiTemp();
+ pressDataMapList.forEach(
+ pressDataMap -> {
+ String devcode = pressDataMap.get("devcode").toString();
+ String temperatureData = pressDataMap.get("temperature").toString();
+ Integer isTempAlarm = isAlarm(temperatureData, tempThreshold);
+ String humidityData = pressDataMap.get("humidity").toString();
+ Integer isHumiAlarm = isAlarm(humidityData, humiThreshold);
+ if (isHumiAlarm == 0 && isTempAlarm == 0) {
+ sendAlarmMsg(devcode, 0);
+ } else {
+ sendAlarmMsg(devcode, 1);
+ }
+ }
+ );
+ }
+
+}
diff --git a/src/main/java/com/casic/util/Client.java b/src/main/java/com/casic/util/Client.java
deleted file mode 100644
index a416600..0000000
--- a/src/main/java/com/casic/util/Client.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.casic.util;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.net.Socket;
-import java.net.UnknownHostException;
-
-/**
- * @author: njb
- * @Date: 2020/11/26 18:49
- * @desc: 客户端socket
- */
-public class Client {
- public static void main(String[] args) {
- try {
- //发送到8888端口
- Socket socket = new Socket("127.0.0.1", 11321);
- //输出流
- OutputStream outputStream = socket.getOutputStream();
- PrintWriter printWriter = new PrintWriter(outputStream);
- printWriter.write("服务端你好,我是客户端");
- printWriter.flush();
- //关闭资源
- printWriter.close();
- outputStream.close();
- socket.close();
- } catch (UnknownHostException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-}
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
- if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
-// log.info(" String : " + msg.toString(Charset.defaultCharset()));
-// if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
- pareDeviceHex(msg);
-// out.add(msg);
-// }
- }
- }
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
- String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
- log.info(" devcode : " + devcode);
- byteBuf.resetReaderIndex();//重置位判断
- String valueStr=byteBuf.slice(26, 4).toString(Charset.defaultCharset());
- log.info(" valueStr : " + valueStr);
- long defaultValue = Long.valueOf(valueStr);
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverDomain.java b/src/main/java/com/casic/handler/ReceiverDomain.java
deleted file mode 100644
index f0a89b6..0000000
--- a/src/main/java/com/casic/handler/ReceiverDomain.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import lombok.Data;
-
-/**
- * @description: 环境数据实体类
- * @author: Stone
- * @create: 2019-01-10 22:38
- **/
-@Data
-public class ReceiverDomain {
- private String head;
- private int len;
- private String key;
- private String value;
-
- public ReceiverDomain(ByteBuf bf) {
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServer.java b/src/main/java/com/casic/handler/ReceiverServer.java
deleted file mode 100644
index 6894a00..0000000
--- a/src/main/java/com/casic/handler/ReceiverServer.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.casic.handler;
-
-import io.netty.bootstrap.ServerBootstrap;
-import io.netty.channel.ChannelFuture;
-import io.netty.channel.ChannelInitializer;
-import io.netty.channel.ChannelOption;
-import io.netty.channel.EventLoopGroup;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.channel.socket.SocketChannel;
-import io.netty.channel.socket.nio.NioServerSocketChannel;
-import io.netty.handler.codec.LineBasedFrameDecoder;
-import io.netty.handler.codec.string.StringDecoder;
-import io.netty.handler.logging.LogLevel;
-import io.netty.handler.logging.LoggingHandler;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-
-/**
- * @description: 接收客户端传过来的数据,只做打印处理
- * @author: Stone
- * @create: 2019-01-10 19:52
- **/
-@Slf4j
-@Component
-public class ReceiverServer {
-
- @Autowired
- private ReceiverServerHandler receiverServerHandler;
-
- @Value("${xgd.server-port}")
- private int port;
-
-
-
- @PostConstruct
- public void init() {
- this.start();
- }
-
- public void start() {
- EventLoopGroup bossGroup = new NioEventLoopGroup();
- EventLoopGroup workerGroup = new NioEventLoopGroup();
- log.info("server bind port = {}", port);
-
- ServerBootstrap serverBootstrap = new ServerBootstrap();
- serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
- serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
- serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
-
- serverBootstrap.childHandler(new ChannelInitializer() {
- @Override
- protected void initChannel(SocketChannel socketChannel) {
-// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
- socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
- socketChannel.pipeline().addLast(new ReceiverDecoder());
- socketChannel.pipeline().addLast(new StringDecoder());
- socketChannel.pipeline().addLast(receiverServerHandler);
- }
- });
-
- serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
- try {
- ChannelFuture channelFuture = serverBootstrap.bind(port).sync();
- channelFuture.channel().closeFuture().sync();
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- workerGroup.shutdownGracefully();
- bossGroup.shutdownGracefully();
- }
- }
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServerHandler.java b/src/main/java/com/casic/handler/ReceiverServerHandler.java
deleted file mode 100644
index f432e06..0000000
--- a/src/main/java/com/casic/handler/ReceiverServerHandler.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.casic.handler;
-
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelInboundHandlerAdapter;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.javassist.bytecode.ByteArray;
-import org.springframework.stereotype.Component;
-
-/**
- * @description: 消息处理handler
- * @author: Stone
- * @create: 2019-01-10 20:01
- **/
-@Slf4j
-@Component
-@ChannelHandler.Sharable
-public class ReceiverServerHandler extends ChannelInboundHandlerAdapter {
-
- public ReceiverServerHandler() {
- }
-
- @Override
- public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
- super.channelRegistered(ctx);
- }
-
- @Override
- public void channelActive(ChannelHandlerContext ctx) throws Exception {
- super.channelActive(ctx);
- }
-
- @Override
- public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
- super.channelRead(ctx, msg);
-// log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME,(String)msg);
- log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
- String msgStr = msg.toString();
- // 以固定行分隔符结尾分割,头部可能有不符合接口协议的字段, 去掉
- int idx = msgStr.indexOf("##");
- if (idx >= 0) {
- msgStr = msgStr.substring(idx);
- }
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME, msgStr);
- }
-
-// //ByteBuf byteBuf
- public static void main(String[] main) {
- byte[] hexBytes = {(byte) 0x86, 0x53, 0x28, 0x06, (byte) 0x84, 0x19, (byte) 0x94,
- 0x30, (byte) 0xAA, (byte) 0xAA, 0x01, 0x03, (byte) 0x02, 0x02, 0x00, (byte) 0xB8, 0x44};
- ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
- out.writeBytes(hexBytes);
-
- if (ByteBufUtil.hexDump(out).toLowerCase().contains("aaaa")) {
- pareDeviceHex(out);
- }
- }
-
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- String devcode = ByteBufUtil.hexDump(byteBuf.slice(0, 8));
- devcode = devcode.substring(0, devcode.length() - 1);
- //数值读取
- byteBuf.readBytes(12);
- byteBuf.markReaderIndex();
- Integer defaultValueLength = byteBuf.readByte() & 0xff;
- long defaultValue = 0;
- for (int i = 0; i < defaultValueLength; i++) {
- long tempLong = byteBuf.readByte() & 0xff;
- defaultValue = defaultValue * 256 + tempLong;
- }
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
- super.exceptionCaught(ctx, cause);
- cause.printStackTrace();
- ctx.close();
- }
-
-}
diff --git a/src/main/java/com/casic/mapper/DeviceDataMapper.java b/src/main/java/com/casic/mapper/DeviceDataMapper.java
new file mode 100644
index 0000000..be72d19
--- /dev/null
+++ b/src/main/java/com/casic/mapper/DeviceDataMapper.java
@@ -0,0 +1,28 @@
+package com.casic.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface DeviceDataMapper {
+
+
+ /**
+ * 获取压力数据
+ */
+ List> getPressureData();
+
+ /**
+ * 获取流量数据
+ */
+ List> getFlowData();
+
+ /**
+ * 获取温湿度数据
+ */
+ List> getHumiTemp();
+
+
+}
diff --git a/src/main/java/com/casic/mapper/RainFallDataMapper.java b/src/main/java/com/casic/mapper/RainFallDataMapper.java
new file mode 100644
index 0000000..f5c29db
--- /dev/null
+++ b/src/main/java/com/casic/mapper/RainFallDataMapper.java
@@ -0,0 +1,7 @@
+package com.casic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.model.RainFallData;
+
+public interface RainFallDataMapper extends BaseMapper {
+}
diff --git a/src/main/java/com/casic/model/RainFallData.java b/src/main/java/com/casic/model/RainFallData.java
new file mode 100644
index 0000000..fa96673
--- /dev/null
+++ b/src/main/java/com/casic/model/RainFallData.java
@@ -0,0 +1,30 @@
+package com.casic.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@TableName("AD_YL_YLIANG")
+public class RainFallData {
+
+ private String dbid;
+
+ private String scrid;
+
+ private String dstid;
+
+ private String totalyuliang;
+
+ private String curminuteyuliang;
+
+ private String forminuteyuliang;
+
+ private String value;
+
+ private Date logtime;
+
+ private Date uptime;
+
+}
diff --git a/src/main/java/com/casic/model/RelayStatusDTO.java b/src/main/java/com/casic/model/RelayStatusDTO.java
new file mode 100644
index 0000000..b839e0c
--- /dev/null
+++ b/src/main/java/com/casic/model/RelayStatusDTO.java
@@ -0,0 +1,20 @@
+package com.casic.model;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class RelayStatusDTO {
+
+ /***
+ * 通道名称 1 2 3 4 5 6 7 8
+ */
+ private String channelName;
+
+ /***
+ * 开关0,1
+ */
+ private Integer lampSwitch;
+
+}
diff --git a/src/main/java/com/casic/resolver/AlarmDataResolver.java b/src/main/java/com/casic/resolver/AlarmDataResolver.java
new file mode 100644
index 0000000..2c6874b
--- /dev/null
+++ b/src/main/java/com/casic/resolver/AlarmDataResolver.java
@@ -0,0 +1,28 @@
+package com.casic.resolver;
+
+
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class AlarmDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if(msg.contains(alarmMark)){
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ Integer isAlarm = Integer.valueOf(msg.substring(16,17));
+ log.info("设备编号为" + devcode + ",是否报警" + isAlarm);
+ return RelayStatusDTO.builder()
+ .channelName( RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/casic/resolver/DatagramResolver.java b/src/main/java/com/casic/resolver/DatagramResolver.java
new file mode 100644
index 0000000..d00c952
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramResolver.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+import com.casic.model.RelayStatusDTO;
+
+public interface DatagramResolver {
+
+ RelayStatusDTO datagram(String msg);
+
+}
diff --git a/src/main/java/com/casic/resolver/DatagramSupport.java b/src/main/java/com/casic/resolver/DatagramSupport.java
new file mode 100644
index 0000000..1d911a3
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramSupport.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+public class DatagramSupport {
+
+
+
+
+
+}
diff --git a/src/main/java/com/casic/resolver/RainFallDataResolver.java b/src/main/java/com/casic/resolver/RainFallDataResolver.java
new file mode 100644
index 0000000..8a22899
--- /dev/null
+++ b/src/main/java/com/casic/resolver/RainFallDataResolver.java
@@ -0,0 +1,79 @@
+package com.casic.resolver;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service
+@Slf4j
+public class RainFallDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Autowired
+ private RainFallDataMapper rainFallDataMapper;
+ @Autowired
+ private AlarmLevelConfig alarmLevelConfig;
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if (msg.contains(rainFallMark)) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ String defaultValue = msg.substring(26, 30);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ RainFallData rainFallData = initRainFallData(devcode, defaultValue);
+ rainFallDataMapper.insert(rainFallData);
+ Integer isAlarm = isAlarm(String.valueOf(defaultValue), alarmLevelConfig.getRainfall());
+ return RelayStatusDTO.builder()
+ .channelName(RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+
+ }
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ private RainFallData initRainFallData(String devcode, String valueStr) {
+ RainFallData rainFallData = new RainFallData();
+ rainFallData.setDstid(devcode);
+ rainFallData.setTotalyuliang(valueStr);
+ rainFallData.setUptime(new Date());
+ rainFallData.setLogtime(new Date());
+ return rainFallData;
+ }
+
+ // //ByteBuf byteBuf
+ public static void main(String[] main) {
+ pareDeviceHex("8653280684199430AAAA01030200023985");
+ }
+
+ private static void pareDeviceHex(String msg) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ log.info(" devcode : " + devcode);
+ String valueStr = msg.substring(26, 30);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverDecoder.java b/src/main/java/com/casic/server/ReceiverDecoder.java
new file mode 100644
index 0000000..7030790
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverDecoder.java
@@ -0,0 +1,71 @@
+package com.casic.server;
+
+import com.casic.enums.RelaySwitchEnums;
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.ByteToMessageDecoder;
+import lombok.extern.slf4j.Slf4j;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * 自定义解码器
+ *
+ * @description: 将从接口取到的数据编码
+ * @author: cz
+ * @create: 2023-5-10
+ **/
+@Slf4j
+public class ReceiverDecoder extends ByteToMessageDecoder implements RelaySwitchEnums {
+
+
+// final ChannelGroup channels =
+// new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+
+ @Override
+ protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
+ if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
+ pareDeviceHex(msg);
+ }
+// if(msg.readableBytes()>2){
+// out.add(msg);
+// }
+ }
+
+// @Override
+// public void channelActive(ChannelHandlerContext ctx) throws Exception {
+// channels.add(ctx.channel());
+// super.channelActive(ctx);
+// }
+//
+// @Override
+// public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+// super.channelRead(ctx, msg);
+// ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+// String switchConent = preFix + 1 + "," + 1 + postFix;
+// out.writeBytes(switchConent.getBytes());
+// channels.forEach(
+// channel ->{
+// if(channel!=ctx.channel()) {
+// channel.writeAndFlush(out);
+// }
+// }
+// );
+// }
+
+ private static void pareDeviceHex(ByteBuf byteBuf) {
+ //去掉补位
+ log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
+ String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
+ log.info(" devcode : " + devcode);
+ byteBuf.resetReaderIndex();//重置位判断
+ String valueStr = byteBuf.slice(26, 4).toString(Charset.defaultCharset());
+ log.info(" valueStr : " + valueStr);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverServer.java b/src/main/java/com/casic/server/ReceiverServer.java
new file mode 100644
index 0000000..a98e4ca
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServer.java
@@ -0,0 +1,72 @@
+package com.casic.server;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.logging.LogLevel;
+import io.netty.handler.logging.LoggingHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * @description: 接收客户端传过来的数据,只做打印处理
+ * @author: Stone
+ * @create: 2019-01-10 19:52
+ **/
+@Slf4j
+@Component
+public class ReceiverServer {
+
+ @Autowired
+ private ReceiverServerHandler receiverServerHandler;
+ @Autowired
+ private ServerPort serverPort;
+
+ @PostConstruct
+ public void init() {
+ this.start();
+ }
+
+ public void start() {
+ EventLoopGroup bossGroup = new NioEventLoopGroup();
+ EventLoopGroup workerGroup = new NioEventLoopGroup();
+ log.info("server bind port = {}", serverPort.getPort());
+
+ ServerBootstrap serverBootstrap = new ServerBootstrap();
+ serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
+ serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
+ serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
+
+ serverBootstrap.childHandler(new ChannelInitializer() {
+ @Override
+ protected void initChannel(SocketChannel socketChannel) {
+// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
+ socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
+// socketChannel.pipeline().addLast(new ReceiverDecoder());
+ socketChannel.pipeline().addLast(new StringDecoder());
+ socketChannel.pipeline().addLast(receiverServerHandler);
+ }
+ });
+ serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
+ try {
+ ChannelFuture channelFuture = serverBootstrap.bind(serverPort.getPort()).sync();
+ channelFuture.channel().closeFuture().sync();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } finally {
+ workerGroup.shutdownGracefully();
+ bossGroup.shutdownGracefully();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/server/ReceiverServerHandler.java b/src/main/java/com/casic/server/ReceiverServerHandler.java
new file mode 100644
index 0000000..31ac43e
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServerHandler.java
@@ -0,0 +1,103 @@
+package com.casic.server;
+
+
+import com.casic.enums.RelaySwitchEnums;
+import com.casic.model.RelayStatusDTO;
+import com.casic.resolver.RainFallDataResolver;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.channel.group.ChannelGroup;
+import io.netty.channel.group.DefaultChannelGroup;
+import io.netty.util.concurrent.GlobalEventExecutor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * @description: 消息处理handler
+ * @author: Stone
+ * @create: 2019-01-10 20:01
+ **/
+@Slf4j
+@Component
+@ChannelHandler.Sharable
+public class ReceiverServerHandler extends ChannelInboundHandlerAdapter implements RelaySwitchEnums {
+
+ final ChannelGroup channels =
+ new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+ @Autowired
+ private List rainFallDataResolverList;
+
+ public ReceiverServerHandler() {
+ }
+
+ @Override
+ public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
+ super.channelRegistered(ctx);
+ }
+
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ channels.add(ctx.channel());
+ super.channelActive(ctx);
+ }
+
+ @Override
+ public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+ channels.forEach(channel -> {
+ if (channel == ctx.channel()) {
+ channels.remove(channel);
+ }
+ }
+ );
+ super.channelInactive(ctx);
+ }
+
+ /**
+ * 雨量计
+ */
+ @Override
+ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+ if (msg instanceof String) {
+ rainFallDataResolverList.forEach(
+ rainFallDataResolver -> {
+ RelayStatusDTO relayStatusDTO = rainFallDataResolver.datagram(String.valueOf(msg));
+ sendMsg(ctx, relayStatusDTO);
+ }
+ );
+ }
+ super.channelRead(ctx, msg);
+ }
+
+ private void sendMsg(ChannelHandlerContext ctx, RelayStatusDTO relayStatusDTO) {
+ if (!ObjectUtils.isEmpty(relayStatusDTO)) {
+ ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+ String switchConent = preFix + relayStatusDTO.getChannelName() + "," + relayStatusDTO.getLampSwitch() + postFix;
+ out.writeBytes(switchConent.getBytes());
+ channels.forEach(channel -> {
+ if (channel.isActive()) {
+ if (channel != ctx.channel()) {
+ channel.writeAndFlush(out);
+ }
+ }
+ }
+ );
+ }
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ super.exceptionCaught(ctx, cause);
+ cause.printStackTrace();
+ ctx.close();
+ }
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataScanner.java b/src/main/java/com/casic/service/DeviceDataScanner.java
new file mode 100644
index 0000000..049fa71
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataScanner.java
@@ -0,0 +1,7 @@
+package com.casic.service;
+
+public interface DeviceDataScanner {
+
+ void scanDeviceData();
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataSupport.java b/src/main/java/com/casic/service/DeviceDataSupport.java
new file mode 100644
index 0000000..93d61ea
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataSupport.java
@@ -0,0 +1,50 @@
+package com.casic.service;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.client.Client;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.mapper.DeviceDataMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ *
+ */
+@Slf4j
+@Component
+public class DeviceDataSupport implements AlarmDatagramFlag {
+
+ @Autowired
+ protected DeviceDataMapper deviceDataMapper;
+ @Autowired
+ protected AlarmLevelConfig alarmLevelConfig;
+ @Autowired
+ private Client client;
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * 发送报警消息
+ */
+ protected void sendAlarmMsg(String devcode, Integer isAlarm) {
+ try {
+ String alarmMsg = devcode + alarmMark + isAlarm;
+ client.send(alarmMsg);
+ } catch (Exception ex) {
+ log.error("消息发送失败,设备编号为{},异常信息{}", devcode, ex.getMessage());
+ }
+ }
+
+}
diff --git a/src/main/java/com/casic/service/RainFallDataService.java b/src/main/java/com/casic/service/RainFallDataService.java
new file mode 100644
index 0000000..6c1a12d
--- /dev/null
+++ b/src/main/java/com/casic/service/RainFallDataService.java
@@ -0,0 +1,6 @@
+package com.casic.service;
+
+public interface RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
new file mode 100644
index 0000000..14dc1eb
--- /dev/null
+++ b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
@@ -0,0 +1,13 @@
+package com.casic.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.service.RainFallDataService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class RainFallDataServiceImpl extends ServiceImpl implements RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/scanner/FlowDataScanner.java b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
new file mode 100644
index 0000000..7ab7228
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
@@ -0,0 +1,28 @@
+package com.casic.service.scanner;
+
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class FlowDataScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String thresholdValue = alarmLevelConfig.getFlow();
+ List> flowDataMapList = this.deviceDataMapper.getFlowData();
+ flowDataMapList.forEach(
+ flowDataMap -> {
+ String devcode = flowDataMap.get("devcode").toString();
+ String insdata = flowDataMap.get("insdata").toString();
+ Integer isAlarm = isAlarm(insdata, thresholdValue);
+ sendAlarmMsg(devcode, isAlarm);
+ }
+ );
+ }
+
+
+}
diff --git a/src/main/java/com/casic/service/scanner/PressDataScanner.java b/src/main/java/com/casic/service/scanner/PressDataScanner.java
new file mode 100644
index 0000000..6738c38
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/PressDataScanner.java
@@ -0,0 +1,29 @@
+package com.casic.service.scanner;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.DeviceDataMapper;
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class PressDataScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String thresholdValue = alarmLevelConfig.getPressure();
+ List> pressDataMapList = this.deviceDataMapper.getPressureData();
+ pressDataMapList.forEach(
+ pressDataMap -> {
+ String devcode = pressDataMap.get("devcode").toString();
+ String pressdata = pressDataMap.get("pressdata").toString();
+ Integer isAlarm=isAlarm(pressdata,thresholdValue);
+ sendAlarmMsg(devcode,isAlarm);
+ }
+ );
+ }
+
+}
diff --git a/src/main/java/com/casic/service/scanner/TempHumiScanner.java b/src/main/java/com/casic/service/scanner/TempHumiScanner.java
new file mode 100644
index 0000000..a9efc57
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/TempHumiScanner.java
@@ -0,0 +1,34 @@
+package com.casic.service.scanner;
+
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class TempHumiScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String humiThreshold = alarmLevelConfig.getHumi();
+ String tempThreshold = alarmLevelConfig.getTemp();
+ List> pressDataMapList = this.deviceDataMapper.getHumiTemp();
+ pressDataMapList.forEach(
+ pressDataMap -> {
+ String devcode = pressDataMap.get("devcode").toString();
+ String temperatureData = pressDataMap.get("temperature").toString();
+ Integer isTempAlarm = isAlarm(temperatureData, tempThreshold);
+ String humidityData = pressDataMap.get("humidity").toString();
+ Integer isHumiAlarm = isAlarm(humidityData, humiThreshold);
+ if (isHumiAlarm == 0 && isTempAlarm == 0) {
+ sendAlarmMsg(devcode, 0);
+ } else {
+ sendAlarmMsg(devcode, 1);
+ }
+ }
+ );
+ }
+
+}
diff --git a/src/main/java/com/casic/util/Client.java b/src/main/java/com/casic/util/Client.java
deleted file mode 100644
index a416600..0000000
--- a/src/main/java/com/casic/util/Client.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.casic.util;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.net.Socket;
-import java.net.UnknownHostException;
-
-/**
- * @author: njb
- * @Date: 2020/11/26 18:49
- * @desc: 客户端socket
- */
-public class Client {
- public static void main(String[] args) {
- try {
- //发送到8888端口
- Socket socket = new Socket("127.0.0.1", 11321);
- //输出流
- OutputStream outputStream = socket.getOutputStream();
- PrintWriter printWriter = new PrintWriter(outputStream);
- printWriter.write("服务端你好,我是客户端");
- printWriter.flush();
- //关闭资源
- printWriter.close();
- outputStream.close();
- socket.close();
- } catch (UnknownHostException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-}
diff --git a/src/main/java/com/casic/util/ClientTest.java b/src/main/java/com/casic/util/ClientTest.java
new file mode 100644
index 0000000..4c1bf65
--- /dev/null
+++ b/src/main/java/com/casic/util/ClientTest.java
@@ -0,0 +1,34 @@
+package com.casic.util;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.net.Socket;
+import java.net.UnknownHostException;
+
+/**
+ * @author: njb
+ * @Date: 2020/11/26 18:49
+ * @desc: 客户端socket
+ */
+public class ClientTest {
+ public static void main(String[] args) {
+ try {
+ //发送到8888端口
+ Socket socket = new Socket("127.0.0.1", 11321);
+ //输出流
+ OutputStream outputStream = socket.getOutputStream();
+ PrintWriter printWriter = new PrintWriter(outputStream);
+ printWriter.write("服务端你好,我是客户端");
+ printWriter.flush();
+ //关闭资源
+ printWriter.close();
+ outputStream.close();
+ socket.close();
+ } catch (UnknownHostException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
- if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
-// log.info(" String : " + msg.toString(Charset.defaultCharset()));
-// if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
- pareDeviceHex(msg);
-// out.add(msg);
-// }
- }
- }
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
- String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
- log.info(" devcode : " + devcode);
- byteBuf.resetReaderIndex();//重置位判断
- String valueStr=byteBuf.slice(26, 4).toString(Charset.defaultCharset());
- log.info(" valueStr : " + valueStr);
- long defaultValue = Long.valueOf(valueStr);
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverDomain.java b/src/main/java/com/casic/handler/ReceiverDomain.java
deleted file mode 100644
index f0a89b6..0000000
--- a/src/main/java/com/casic/handler/ReceiverDomain.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import lombok.Data;
-
-/**
- * @description: 环境数据实体类
- * @author: Stone
- * @create: 2019-01-10 22:38
- **/
-@Data
-public class ReceiverDomain {
- private String head;
- private int len;
- private String key;
- private String value;
-
- public ReceiverDomain(ByteBuf bf) {
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServer.java b/src/main/java/com/casic/handler/ReceiverServer.java
deleted file mode 100644
index 6894a00..0000000
--- a/src/main/java/com/casic/handler/ReceiverServer.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.casic.handler;
-
-import io.netty.bootstrap.ServerBootstrap;
-import io.netty.channel.ChannelFuture;
-import io.netty.channel.ChannelInitializer;
-import io.netty.channel.ChannelOption;
-import io.netty.channel.EventLoopGroup;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.channel.socket.SocketChannel;
-import io.netty.channel.socket.nio.NioServerSocketChannel;
-import io.netty.handler.codec.LineBasedFrameDecoder;
-import io.netty.handler.codec.string.StringDecoder;
-import io.netty.handler.logging.LogLevel;
-import io.netty.handler.logging.LoggingHandler;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-
-/**
- * @description: 接收客户端传过来的数据,只做打印处理
- * @author: Stone
- * @create: 2019-01-10 19:52
- **/
-@Slf4j
-@Component
-public class ReceiverServer {
-
- @Autowired
- private ReceiverServerHandler receiverServerHandler;
-
- @Value("${xgd.server-port}")
- private int port;
-
-
-
- @PostConstruct
- public void init() {
- this.start();
- }
-
- public void start() {
- EventLoopGroup bossGroup = new NioEventLoopGroup();
- EventLoopGroup workerGroup = new NioEventLoopGroup();
- log.info("server bind port = {}", port);
-
- ServerBootstrap serverBootstrap = new ServerBootstrap();
- serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
- serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
- serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
-
- serverBootstrap.childHandler(new ChannelInitializer() {
- @Override
- protected void initChannel(SocketChannel socketChannel) {
-// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
- socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
- socketChannel.pipeline().addLast(new ReceiverDecoder());
- socketChannel.pipeline().addLast(new StringDecoder());
- socketChannel.pipeline().addLast(receiverServerHandler);
- }
- });
-
- serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
- try {
- ChannelFuture channelFuture = serverBootstrap.bind(port).sync();
- channelFuture.channel().closeFuture().sync();
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- workerGroup.shutdownGracefully();
- bossGroup.shutdownGracefully();
- }
- }
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServerHandler.java b/src/main/java/com/casic/handler/ReceiverServerHandler.java
deleted file mode 100644
index f432e06..0000000
--- a/src/main/java/com/casic/handler/ReceiverServerHandler.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.casic.handler;
-
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelInboundHandlerAdapter;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.javassist.bytecode.ByteArray;
-import org.springframework.stereotype.Component;
-
-/**
- * @description: 消息处理handler
- * @author: Stone
- * @create: 2019-01-10 20:01
- **/
-@Slf4j
-@Component
-@ChannelHandler.Sharable
-public class ReceiverServerHandler extends ChannelInboundHandlerAdapter {
-
- public ReceiverServerHandler() {
- }
-
- @Override
- public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
- super.channelRegistered(ctx);
- }
-
- @Override
- public void channelActive(ChannelHandlerContext ctx) throws Exception {
- super.channelActive(ctx);
- }
-
- @Override
- public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
- super.channelRead(ctx, msg);
-// log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME,(String)msg);
- log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
- String msgStr = msg.toString();
- // 以固定行分隔符结尾分割,头部可能有不符合接口协议的字段, 去掉
- int idx = msgStr.indexOf("##");
- if (idx >= 0) {
- msgStr = msgStr.substring(idx);
- }
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME, msgStr);
- }
-
-// //ByteBuf byteBuf
- public static void main(String[] main) {
- byte[] hexBytes = {(byte) 0x86, 0x53, 0x28, 0x06, (byte) 0x84, 0x19, (byte) 0x94,
- 0x30, (byte) 0xAA, (byte) 0xAA, 0x01, 0x03, (byte) 0x02, 0x02, 0x00, (byte) 0xB8, 0x44};
- ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
- out.writeBytes(hexBytes);
-
- if (ByteBufUtil.hexDump(out).toLowerCase().contains("aaaa")) {
- pareDeviceHex(out);
- }
- }
-
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- String devcode = ByteBufUtil.hexDump(byteBuf.slice(0, 8));
- devcode = devcode.substring(0, devcode.length() - 1);
- //数值读取
- byteBuf.readBytes(12);
- byteBuf.markReaderIndex();
- Integer defaultValueLength = byteBuf.readByte() & 0xff;
- long defaultValue = 0;
- for (int i = 0; i < defaultValueLength; i++) {
- long tempLong = byteBuf.readByte() & 0xff;
- defaultValue = defaultValue * 256 + tempLong;
- }
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
- super.exceptionCaught(ctx, cause);
- cause.printStackTrace();
- ctx.close();
- }
-
-}
diff --git a/src/main/java/com/casic/mapper/DeviceDataMapper.java b/src/main/java/com/casic/mapper/DeviceDataMapper.java
new file mode 100644
index 0000000..be72d19
--- /dev/null
+++ b/src/main/java/com/casic/mapper/DeviceDataMapper.java
@@ -0,0 +1,28 @@
+package com.casic.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface DeviceDataMapper {
+
+
+ /**
+ * 获取压力数据
+ */
+ List> getPressureData();
+
+ /**
+ * 获取流量数据
+ */
+ List> getFlowData();
+
+ /**
+ * 获取温湿度数据
+ */
+ List> getHumiTemp();
+
+
+}
diff --git a/src/main/java/com/casic/mapper/RainFallDataMapper.java b/src/main/java/com/casic/mapper/RainFallDataMapper.java
new file mode 100644
index 0000000..f5c29db
--- /dev/null
+++ b/src/main/java/com/casic/mapper/RainFallDataMapper.java
@@ -0,0 +1,7 @@
+package com.casic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.model.RainFallData;
+
+public interface RainFallDataMapper extends BaseMapper {
+}
diff --git a/src/main/java/com/casic/model/RainFallData.java b/src/main/java/com/casic/model/RainFallData.java
new file mode 100644
index 0000000..fa96673
--- /dev/null
+++ b/src/main/java/com/casic/model/RainFallData.java
@@ -0,0 +1,30 @@
+package com.casic.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@TableName("AD_YL_YLIANG")
+public class RainFallData {
+
+ private String dbid;
+
+ private String scrid;
+
+ private String dstid;
+
+ private String totalyuliang;
+
+ private String curminuteyuliang;
+
+ private String forminuteyuliang;
+
+ private String value;
+
+ private Date logtime;
+
+ private Date uptime;
+
+}
diff --git a/src/main/java/com/casic/model/RelayStatusDTO.java b/src/main/java/com/casic/model/RelayStatusDTO.java
new file mode 100644
index 0000000..b839e0c
--- /dev/null
+++ b/src/main/java/com/casic/model/RelayStatusDTO.java
@@ -0,0 +1,20 @@
+package com.casic.model;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class RelayStatusDTO {
+
+ /***
+ * 通道名称 1 2 3 4 5 6 7 8
+ */
+ private String channelName;
+
+ /***
+ * 开关0,1
+ */
+ private Integer lampSwitch;
+
+}
diff --git a/src/main/java/com/casic/resolver/AlarmDataResolver.java b/src/main/java/com/casic/resolver/AlarmDataResolver.java
new file mode 100644
index 0000000..2c6874b
--- /dev/null
+++ b/src/main/java/com/casic/resolver/AlarmDataResolver.java
@@ -0,0 +1,28 @@
+package com.casic.resolver;
+
+
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class AlarmDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if(msg.contains(alarmMark)){
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ Integer isAlarm = Integer.valueOf(msg.substring(16,17));
+ log.info("设备编号为" + devcode + ",是否报警" + isAlarm);
+ return RelayStatusDTO.builder()
+ .channelName( RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/casic/resolver/DatagramResolver.java b/src/main/java/com/casic/resolver/DatagramResolver.java
new file mode 100644
index 0000000..d00c952
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramResolver.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+import com.casic.model.RelayStatusDTO;
+
+public interface DatagramResolver {
+
+ RelayStatusDTO datagram(String msg);
+
+}
diff --git a/src/main/java/com/casic/resolver/DatagramSupport.java b/src/main/java/com/casic/resolver/DatagramSupport.java
new file mode 100644
index 0000000..1d911a3
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramSupport.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+public class DatagramSupport {
+
+
+
+
+
+}
diff --git a/src/main/java/com/casic/resolver/RainFallDataResolver.java b/src/main/java/com/casic/resolver/RainFallDataResolver.java
new file mode 100644
index 0000000..8a22899
--- /dev/null
+++ b/src/main/java/com/casic/resolver/RainFallDataResolver.java
@@ -0,0 +1,79 @@
+package com.casic.resolver;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service
+@Slf4j
+public class RainFallDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Autowired
+ private RainFallDataMapper rainFallDataMapper;
+ @Autowired
+ private AlarmLevelConfig alarmLevelConfig;
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if (msg.contains(rainFallMark)) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ String defaultValue = msg.substring(26, 30);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ RainFallData rainFallData = initRainFallData(devcode, defaultValue);
+ rainFallDataMapper.insert(rainFallData);
+ Integer isAlarm = isAlarm(String.valueOf(defaultValue), alarmLevelConfig.getRainfall());
+ return RelayStatusDTO.builder()
+ .channelName(RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+
+ }
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ private RainFallData initRainFallData(String devcode, String valueStr) {
+ RainFallData rainFallData = new RainFallData();
+ rainFallData.setDstid(devcode);
+ rainFallData.setTotalyuliang(valueStr);
+ rainFallData.setUptime(new Date());
+ rainFallData.setLogtime(new Date());
+ return rainFallData;
+ }
+
+ // //ByteBuf byteBuf
+ public static void main(String[] main) {
+ pareDeviceHex("8653280684199430AAAA01030200023985");
+ }
+
+ private static void pareDeviceHex(String msg) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ log.info(" devcode : " + devcode);
+ String valueStr = msg.substring(26, 30);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverDecoder.java b/src/main/java/com/casic/server/ReceiverDecoder.java
new file mode 100644
index 0000000..7030790
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverDecoder.java
@@ -0,0 +1,71 @@
+package com.casic.server;
+
+import com.casic.enums.RelaySwitchEnums;
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.ByteToMessageDecoder;
+import lombok.extern.slf4j.Slf4j;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * 自定义解码器
+ *
+ * @description: 将从接口取到的数据编码
+ * @author: cz
+ * @create: 2023-5-10
+ **/
+@Slf4j
+public class ReceiverDecoder extends ByteToMessageDecoder implements RelaySwitchEnums {
+
+
+// final ChannelGroup channels =
+// new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+
+ @Override
+ protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
+ if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
+ pareDeviceHex(msg);
+ }
+// if(msg.readableBytes()>2){
+// out.add(msg);
+// }
+ }
+
+// @Override
+// public void channelActive(ChannelHandlerContext ctx) throws Exception {
+// channels.add(ctx.channel());
+// super.channelActive(ctx);
+// }
+//
+// @Override
+// public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+// super.channelRead(ctx, msg);
+// ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+// String switchConent = preFix + 1 + "," + 1 + postFix;
+// out.writeBytes(switchConent.getBytes());
+// channels.forEach(
+// channel ->{
+// if(channel!=ctx.channel()) {
+// channel.writeAndFlush(out);
+// }
+// }
+// );
+// }
+
+ private static void pareDeviceHex(ByteBuf byteBuf) {
+ //去掉补位
+ log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
+ String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
+ log.info(" devcode : " + devcode);
+ byteBuf.resetReaderIndex();//重置位判断
+ String valueStr = byteBuf.slice(26, 4).toString(Charset.defaultCharset());
+ log.info(" valueStr : " + valueStr);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverServer.java b/src/main/java/com/casic/server/ReceiverServer.java
new file mode 100644
index 0000000..a98e4ca
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServer.java
@@ -0,0 +1,72 @@
+package com.casic.server;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.logging.LogLevel;
+import io.netty.handler.logging.LoggingHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * @description: 接收客户端传过来的数据,只做打印处理
+ * @author: Stone
+ * @create: 2019-01-10 19:52
+ **/
+@Slf4j
+@Component
+public class ReceiverServer {
+
+ @Autowired
+ private ReceiverServerHandler receiverServerHandler;
+ @Autowired
+ private ServerPort serverPort;
+
+ @PostConstruct
+ public void init() {
+ this.start();
+ }
+
+ public void start() {
+ EventLoopGroup bossGroup = new NioEventLoopGroup();
+ EventLoopGroup workerGroup = new NioEventLoopGroup();
+ log.info("server bind port = {}", serverPort.getPort());
+
+ ServerBootstrap serverBootstrap = new ServerBootstrap();
+ serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
+ serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
+ serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
+
+ serverBootstrap.childHandler(new ChannelInitializer() {
+ @Override
+ protected void initChannel(SocketChannel socketChannel) {
+// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
+ socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
+// socketChannel.pipeline().addLast(new ReceiverDecoder());
+ socketChannel.pipeline().addLast(new StringDecoder());
+ socketChannel.pipeline().addLast(receiverServerHandler);
+ }
+ });
+ serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
+ try {
+ ChannelFuture channelFuture = serverBootstrap.bind(serverPort.getPort()).sync();
+ channelFuture.channel().closeFuture().sync();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } finally {
+ workerGroup.shutdownGracefully();
+ bossGroup.shutdownGracefully();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/server/ReceiverServerHandler.java b/src/main/java/com/casic/server/ReceiverServerHandler.java
new file mode 100644
index 0000000..31ac43e
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServerHandler.java
@@ -0,0 +1,103 @@
+package com.casic.server;
+
+
+import com.casic.enums.RelaySwitchEnums;
+import com.casic.model.RelayStatusDTO;
+import com.casic.resolver.RainFallDataResolver;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.channel.group.ChannelGroup;
+import io.netty.channel.group.DefaultChannelGroup;
+import io.netty.util.concurrent.GlobalEventExecutor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * @description: 消息处理handler
+ * @author: Stone
+ * @create: 2019-01-10 20:01
+ **/
+@Slf4j
+@Component
+@ChannelHandler.Sharable
+public class ReceiverServerHandler extends ChannelInboundHandlerAdapter implements RelaySwitchEnums {
+
+ final ChannelGroup channels =
+ new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+ @Autowired
+ private List rainFallDataResolverList;
+
+ public ReceiverServerHandler() {
+ }
+
+ @Override
+ public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
+ super.channelRegistered(ctx);
+ }
+
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ channels.add(ctx.channel());
+ super.channelActive(ctx);
+ }
+
+ @Override
+ public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+ channels.forEach(channel -> {
+ if (channel == ctx.channel()) {
+ channels.remove(channel);
+ }
+ }
+ );
+ super.channelInactive(ctx);
+ }
+
+ /**
+ * 雨量计
+ */
+ @Override
+ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+ if (msg instanceof String) {
+ rainFallDataResolverList.forEach(
+ rainFallDataResolver -> {
+ RelayStatusDTO relayStatusDTO = rainFallDataResolver.datagram(String.valueOf(msg));
+ sendMsg(ctx, relayStatusDTO);
+ }
+ );
+ }
+ super.channelRead(ctx, msg);
+ }
+
+ private void sendMsg(ChannelHandlerContext ctx, RelayStatusDTO relayStatusDTO) {
+ if (!ObjectUtils.isEmpty(relayStatusDTO)) {
+ ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+ String switchConent = preFix + relayStatusDTO.getChannelName() + "," + relayStatusDTO.getLampSwitch() + postFix;
+ out.writeBytes(switchConent.getBytes());
+ channels.forEach(channel -> {
+ if (channel.isActive()) {
+ if (channel != ctx.channel()) {
+ channel.writeAndFlush(out);
+ }
+ }
+ }
+ );
+ }
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ super.exceptionCaught(ctx, cause);
+ cause.printStackTrace();
+ ctx.close();
+ }
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataScanner.java b/src/main/java/com/casic/service/DeviceDataScanner.java
new file mode 100644
index 0000000..049fa71
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataScanner.java
@@ -0,0 +1,7 @@
+package com.casic.service;
+
+public interface DeviceDataScanner {
+
+ void scanDeviceData();
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataSupport.java b/src/main/java/com/casic/service/DeviceDataSupport.java
new file mode 100644
index 0000000..93d61ea
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataSupport.java
@@ -0,0 +1,50 @@
+package com.casic.service;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.client.Client;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.mapper.DeviceDataMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ *
+ */
+@Slf4j
+@Component
+public class DeviceDataSupport implements AlarmDatagramFlag {
+
+ @Autowired
+ protected DeviceDataMapper deviceDataMapper;
+ @Autowired
+ protected AlarmLevelConfig alarmLevelConfig;
+ @Autowired
+ private Client client;
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * 发送报警消息
+ */
+ protected void sendAlarmMsg(String devcode, Integer isAlarm) {
+ try {
+ String alarmMsg = devcode + alarmMark + isAlarm;
+ client.send(alarmMsg);
+ } catch (Exception ex) {
+ log.error("消息发送失败,设备编号为{},异常信息{}", devcode, ex.getMessage());
+ }
+ }
+
+}
diff --git a/src/main/java/com/casic/service/RainFallDataService.java b/src/main/java/com/casic/service/RainFallDataService.java
new file mode 100644
index 0000000..6c1a12d
--- /dev/null
+++ b/src/main/java/com/casic/service/RainFallDataService.java
@@ -0,0 +1,6 @@
+package com.casic.service;
+
+public interface RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
new file mode 100644
index 0000000..14dc1eb
--- /dev/null
+++ b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
@@ -0,0 +1,13 @@
+package com.casic.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.service.RainFallDataService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class RainFallDataServiceImpl extends ServiceImpl implements RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/scanner/FlowDataScanner.java b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
new file mode 100644
index 0000000..7ab7228
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
@@ -0,0 +1,28 @@
+package com.casic.service.scanner;
+
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class FlowDataScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String thresholdValue = alarmLevelConfig.getFlow();
+ List> flowDataMapList = this.deviceDataMapper.getFlowData();
+ flowDataMapList.forEach(
+ flowDataMap -> {
+ String devcode = flowDataMap.get("devcode").toString();
+ String insdata = flowDataMap.get("insdata").toString();
+ Integer isAlarm = isAlarm(insdata, thresholdValue);
+ sendAlarmMsg(devcode, isAlarm);
+ }
+ );
+ }
+
+
+}
diff --git a/src/main/java/com/casic/service/scanner/PressDataScanner.java b/src/main/java/com/casic/service/scanner/PressDataScanner.java
new file mode 100644
index 0000000..6738c38
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/PressDataScanner.java
@@ -0,0 +1,29 @@
+package com.casic.service.scanner;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.DeviceDataMapper;
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class PressDataScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String thresholdValue = alarmLevelConfig.getPressure();
+ List> pressDataMapList = this.deviceDataMapper.getPressureData();
+ pressDataMapList.forEach(
+ pressDataMap -> {
+ String devcode = pressDataMap.get("devcode").toString();
+ String pressdata = pressDataMap.get("pressdata").toString();
+ Integer isAlarm=isAlarm(pressdata,thresholdValue);
+ sendAlarmMsg(devcode,isAlarm);
+ }
+ );
+ }
+
+}
diff --git a/src/main/java/com/casic/service/scanner/TempHumiScanner.java b/src/main/java/com/casic/service/scanner/TempHumiScanner.java
new file mode 100644
index 0000000..a9efc57
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/TempHumiScanner.java
@@ -0,0 +1,34 @@
+package com.casic.service.scanner;
+
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class TempHumiScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String humiThreshold = alarmLevelConfig.getHumi();
+ String tempThreshold = alarmLevelConfig.getTemp();
+ List> pressDataMapList = this.deviceDataMapper.getHumiTemp();
+ pressDataMapList.forEach(
+ pressDataMap -> {
+ String devcode = pressDataMap.get("devcode").toString();
+ String temperatureData = pressDataMap.get("temperature").toString();
+ Integer isTempAlarm = isAlarm(temperatureData, tempThreshold);
+ String humidityData = pressDataMap.get("humidity").toString();
+ Integer isHumiAlarm = isAlarm(humidityData, humiThreshold);
+ if (isHumiAlarm == 0 && isTempAlarm == 0) {
+ sendAlarmMsg(devcode, 0);
+ } else {
+ sendAlarmMsg(devcode, 1);
+ }
+ }
+ );
+ }
+
+}
diff --git a/src/main/java/com/casic/util/Client.java b/src/main/java/com/casic/util/Client.java
deleted file mode 100644
index a416600..0000000
--- a/src/main/java/com/casic/util/Client.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.casic.util;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.net.Socket;
-import java.net.UnknownHostException;
-
-/**
- * @author: njb
- * @Date: 2020/11/26 18:49
- * @desc: 客户端socket
- */
-public class Client {
- public static void main(String[] args) {
- try {
- //发送到8888端口
- Socket socket = new Socket("127.0.0.1", 11321);
- //输出流
- OutputStream outputStream = socket.getOutputStream();
- PrintWriter printWriter = new PrintWriter(outputStream);
- printWriter.write("服务端你好,我是客户端");
- printWriter.flush();
- //关闭资源
- printWriter.close();
- outputStream.close();
- socket.close();
- } catch (UnknownHostException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-}
diff --git a/src/main/java/com/casic/util/ClientTest.java b/src/main/java/com/casic/util/ClientTest.java
new file mode 100644
index 0000000..4c1bf65
--- /dev/null
+++ b/src/main/java/com/casic/util/ClientTest.java
@@ -0,0 +1,34 @@
+package com.casic.util;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.net.Socket;
+import java.net.UnknownHostException;
+
+/**
+ * @author: njb
+ * @Date: 2020/11/26 18:49
+ * @desc: 客户端socket
+ */
+public class ClientTest {
+ public static void main(String[] args) {
+ try {
+ //发送到8888端口
+ Socket socket = new Socket("127.0.0.1", 11321);
+ //输出流
+ OutputStream outputStream = socket.getOutputStream();
+ PrintWriter printWriter = new PrintWriter(outputStream);
+ printWriter.write("服务端你好,我是客户端");
+ printWriter.flush();
+ //关闭资源
+ printWriter.close();
+ outputStream.close();
+ socket.close();
+ } catch (UnknownHostException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/util/Server.java b/src/main/java/com/casic/util/Server.java
deleted file mode 100644
index 50c0957..0000000
--- a/src/main/java/com/casic/util/Server.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.casic.util;
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.ServerSocket;
-import java.net.Socket;
-
-/**
- * @author: njb
- * @Date: 2020/11/26 18:49
- * @desc: 服务器socket
- */
-public class Server {
- public static void main(String[] args) {
- try {
- ServerSocket serverSocket = new ServerSocket(11321);
- System.out.println("----------------服务端执行,開始监听请求----------------");
-
- Socket socket = serverSocket.accept();//開始监听
- InputStream inputStream = socket.getInputStream();
- //获取请求内容
- String info;
- BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
- while ((info = bufferedReader.readLine()) != null) {
- System.out.println("我是服务端,客户端请求为:" + info);
- }
- //关闭资源
- socket.shutdownInput();
- bufferedReader.close();
- inputStream.close();
- socket.close();
- serverSocket.close();
- } catch (Exception exception) {
- exception.printStackTrace();
- }
- }
-}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
- if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
-// log.info(" String : " + msg.toString(Charset.defaultCharset()));
-// if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
- pareDeviceHex(msg);
-// out.add(msg);
-// }
- }
- }
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
- String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
- log.info(" devcode : " + devcode);
- byteBuf.resetReaderIndex();//重置位判断
- String valueStr=byteBuf.slice(26, 4).toString(Charset.defaultCharset());
- log.info(" valueStr : " + valueStr);
- long defaultValue = Long.valueOf(valueStr);
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverDomain.java b/src/main/java/com/casic/handler/ReceiverDomain.java
deleted file mode 100644
index f0a89b6..0000000
--- a/src/main/java/com/casic/handler/ReceiverDomain.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import lombok.Data;
-
-/**
- * @description: 环境数据实体类
- * @author: Stone
- * @create: 2019-01-10 22:38
- **/
-@Data
-public class ReceiverDomain {
- private String head;
- private int len;
- private String key;
- private String value;
-
- public ReceiverDomain(ByteBuf bf) {
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServer.java b/src/main/java/com/casic/handler/ReceiverServer.java
deleted file mode 100644
index 6894a00..0000000
--- a/src/main/java/com/casic/handler/ReceiverServer.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.casic.handler;
-
-import io.netty.bootstrap.ServerBootstrap;
-import io.netty.channel.ChannelFuture;
-import io.netty.channel.ChannelInitializer;
-import io.netty.channel.ChannelOption;
-import io.netty.channel.EventLoopGroup;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.channel.socket.SocketChannel;
-import io.netty.channel.socket.nio.NioServerSocketChannel;
-import io.netty.handler.codec.LineBasedFrameDecoder;
-import io.netty.handler.codec.string.StringDecoder;
-import io.netty.handler.logging.LogLevel;
-import io.netty.handler.logging.LoggingHandler;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-
-/**
- * @description: 接收客户端传过来的数据,只做打印处理
- * @author: Stone
- * @create: 2019-01-10 19:52
- **/
-@Slf4j
-@Component
-public class ReceiverServer {
-
- @Autowired
- private ReceiverServerHandler receiverServerHandler;
-
- @Value("${xgd.server-port}")
- private int port;
-
-
-
- @PostConstruct
- public void init() {
- this.start();
- }
-
- public void start() {
- EventLoopGroup bossGroup = new NioEventLoopGroup();
- EventLoopGroup workerGroup = new NioEventLoopGroup();
- log.info("server bind port = {}", port);
-
- ServerBootstrap serverBootstrap = new ServerBootstrap();
- serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
- serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
- serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
-
- serverBootstrap.childHandler(new ChannelInitializer() {
- @Override
- protected void initChannel(SocketChannel socketChannel) {
-// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
- socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
- socketChannel.pipeline().addLast(new ReceiverDecoder());
- socketChannel.pipeline().addLast(new StringDecoder());
- socketChannel.pipeline().addLast(receiverServerHandler);
- }
- });
-
- serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
- try {
- ChannelFuture channelFuture = serverBootstrap.bind(port).sync();
- channelFuture.channel().closeFuture().sync();
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- workerGroup.shutdownGracefully();
- bossGroup.shutdownGracefully();
- }
- }
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServerHandler.java b/src/main/java/com/casic/handler/ReceiverServerHandler.java
deleted file mode 100644
index f432e06..0000000
--- a/src/main/java/com/casic/handler/ReceiverServerHandler.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.casic.handler;
-
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelInboundHandlerAdapter;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.javassist.bytecode.ByteArray;
-import org.springframework.stereotype.Component;
-
-/**
- * @description: 消息处理handler
- * @author: Stone
- * @create: 2019-01-10 20:01
- **/
-@Slf4j
-@Component
-@ChannelHandler.Sharable
-public class ReceiverServerHandler extends ChannelInboundHandlerAdapter {
-
- public ReceiverServerHandler() {
- }
-
- @Override
- public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
- super.channelRegistered(ctx);
- }
-
- @Override
- public void channelActive(ChannelHandlerContext ctx) throws Exception {
- super.channelActive(ctx);
- }
-
- @Override
- public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
- super.channelRead(ctx, msg);
-// log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME,(String)msg);
- log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
- String msgStr = msg.toString();
- // 以固定行分隔符结尾分割,头部可能有不符合接口协议的字段, 去掉
- int idx = msgStr.indexOf("##");
- if (idx >= 0) {
- msgStr = msgStr.substring(idx);
- }
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME, msgStr);
- }
-
-// //ByteBuf byteBuf
- public static void main(String[] main) {
- byte[] hexBytes = {(byte) 0x86, 0x53, 0x28, 0x06, (byte) 0x84, 0x19, (byte) 0x94,
- 0x30, (byte) 0xAA, (byte) 0xAA, 0x01, 0x03, (byte) 0x02, 0x02, 0x00, (byte) 0xB8, 0x44};
- ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
- out.writeBytes(hexBytes);
-
- if (ByteBufUtil.hexDump(out).toLowerCase().contains("aaaa")) {
- pareDeviceHex(out);
- }
- }
-
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- String devcode = ByteBufUtil.hexDump(byteBuf.slice(0, 8));
- devcode = devcode.substring(0, devcode.length() - 1);
- //数值读取
- byteBuf.readBytes(12);
- byteBuf.markReaderIndex();
- Integer defaultValueLength = byteBuf.readByte() & 0xff;
- long defaultValue = 0;
- for (int i = 0; i < defaultValueLength; i++) {
- long tempLong = byteBuf.readByte() & 0xff;
- defaultValue = defaultValue * 256 + tempLong;
- }
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
- super.exceptionCaught(ctx, cause);
- cause.printStackTrace();
- ctx.close();
- }
-
-}
diff --git a/src/main/java/com/casic/mapper/DeviceDataMapper.java b/src/main/java/com/casic/mapper/DeviceDataMapper.java
new file mode 100644
index 0000000..be72d19
--- /dev/null
+++ b/src/main/java/com/casic/mapper/DeviceDataMapper.java
@@ -0,0 +1,28 @@
+package com.casic.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface DeviceDataMapper {
+
+
+ /**
+ * 获取压力数据
+ */
+ List> getPressureData();
+
+ /**
+ * 获取流量数据
+ */
+ List> getFlowData();
+
+ /**
+ * 获取温湿度数据
+ */
+ List> getHumiTemp();
+
+
+}
diff --git a/src/main/java/com/casic/mapper/RainFallDataMapper.java b/src/main/java/com/casic/mapper/RainFallDataMapper.java
new file mode 100644
index 0000000..f5c29db
--- /dev/null
+++ b/src/main/java/com/casic/mapper/RainFallDataMapper.java
@@ -0,0 +1,7 @@
+package com.casic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.model.RainFallData;
+
+public interface RainFallDataMapper extends BaseMapper {
+}
diff --git a/src/main/java/com/casic/model/RainFallData.java b/src/main/java/com/casic/model/RainFallData.java
new file mode 100644
index 0000000..fa96673
--- /dev/null
+++ b/src/main/java/com/casic/model/RainFallData.java
@@ -0,0 +1,30 @@
+package com.casic.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@TableName("AD_YL_YLIANG")
+public class RainFallData {
+
+ private String dbid;
+
+ private String scrid;
+
+ private String dstid;
+
+ private String totalyuliang;
+
+ private String curminuteyuliang;
+
+ private String forminuteyuliang;
+
+ private String value;
+
+ private Date logtime;
+
+ private Date uptime;
+
+}
diff --git a/src/main/java/com/casic/model/RelayStatusDTO.java b/src/main/java/com/casic/model/RelayStatusDTO.java
new file mode 100644
index 0000000..b839e0c
--- /dev/null
+++ b/src/main/java/com/casic/model/RelayStatusDTO.java
@@ -0,0 +1,20 @@
+package com.casic.model;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class RelayStatusDTO {
+
+ /***
+ * 通道名称 1 2 3 4 5 6 7 8
+ */
+ private String channelName;
+
+ /***
+ * 开关0,1
+ */
+ private Integer lampSwitch;
+
+}
diff --git a/src/main/java/com/casic/resolver/AlarmDataResolver.java b/src/main/java/com/casic/resolver/AlarmDataResolver.java
new file mode 100644
index 0000000..2c6874b
--- /dev/null
+++ b/src/main/java/com/casic/resolver/AlarmDataResolver.java
@@ -0,0 +1,28 @@
+package com.casic.resolver;
+
+
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class AlarmDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if(msg.contains(alarmMark)){
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ Integer isAlarm = Integer.valueOf(msg.substring(16,17));
+ log.info("设备编号为" + devcode + ",是否报警" + isAlarm);
+ return RelayStatusDTO.builder()
+ .channelName( RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/casic/resolver/DatagramResolver.java b/src/main/java/com/casic/resolver/DatagramResolver.java
new file mode 100644
index 0000000..d00c952
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramResolver.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+import com.casic.model.RelayStatusDTO;
+
+public interface DatagramResolver {
+
+ RelayStatusDTO datagram(String msg);
+
+}
diff --git a/src/main/java/com/casic/resolver/DatagramSupport.java b/src/main/java/com/casic/resolver/DatagramSupport.java
new file mode 100644
index 0000000..1d911a3
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramSupport.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+public class DatagramSupport {
+
+
+
+
+
+}
diff --git a/src/main/java/com/casic/resolver/RainFallDataResolver.java b/src/main/java/com/casic/resolver/RainFallDataResolver.java
new file mode 100644
index 0000000..8a22899
--- /dev/null
+++ b/src/main/java/com/casic/resolver/RainFallDataResolver.java
@@ -0,0 +1,79 @@
+package com.casic.resolver;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service
+@Slf4j
+public class RainFallDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Autowired
+ private RainFallDataMapper rainFallDataMapper;
+ @Autowired
+ private AlarmLevelConfig alarmLevelConfig;
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if (msg.contains(rainFallMark)) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ String defaultValue = msg.substring(26, 30);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ RainFallData rainFallData = initRainFallData(devcode, defaultValue);
+ rainFallDataMapper.insert(rainFallData);
+ Integer isAlarm = isAlarm(String.valueOf(defaultValue), alarmLevelConfig.getRainfall());
+ return RelayStatusDTO.builder()
+ .channelName(RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+
+ }
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ private RainFallData initRainFallData(String devcode, String valueStr) {
+ RainFallData rainFallData = new RainFallData();
+ rainFallData.setDstid(devcode);
+ rainFallData.setTotalyuliang(valueStr);
+ rainFallData.setUptime(new Date());
+ rainFallData.setLogtime(new Date());
+ return rainFallData;
+ }
+
+ // //ByteBuf byteBuf
+ public static void main(String[] main) {
+ pareDeviceHex("8653280684199430AAAA01030200023985");
+ }
+
+ private static void pareDeviceHex(String msg) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ log.info(" devcode : " + devcode);
+ String valueStr = msg.substring(26, 30);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverDecoder.java b/src/main/java/com/casic/server/ReceiverDecoder.java
new file mode 100644
index 0000000..7030790
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverDecoder.java
@@ -0,0 +1,71 @@
+package com.casic.server;
+
+import com.casic.enums.RelaySwitchEnums;
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.ByteToMessageDecoder;
+import lombok.extern.slf4j.Slf4j;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * 自定义解码器
+ *
+ * @description: 将从接口取到的数据编码
+ * @author: cz
+ * @create: 2023-5-10
+ **/
+@Slf4j
+public class ReceiverDecoder extends ByteToMessageDecoder implements RelaySwitchEnums {
+
+
+// final ChannelGroup channels =
+// new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+
+ @Override
+ protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
+ if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
+ pareDeviceHex(msg);
+ }
+// if(msg.readableBytes()>2){
+// out.add(msg);
+// }
+ }
+
+// @Override
+// public void channelActive(ChannelHandlerContext ctx) throws Exception {
+// channels.add(ctx.channel());
+// super.channelActive(ctx);
+// }
+//
+// @Override
+// public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+// super.channelRead(ctx, msg);
+// ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+// String switchConent = preFix + 1 + "," + 1 + postFix;
+// out.writeBytes(switchConent.getBytes());
+// channels.forEach(
+// channel ->{
+// if(channel!=ctx.channel()) {
+// channel.writeAndFlush(out);
+// }
+// }
+// );
+// }
+
+ private static void pareDeviceHex(ByteBuf byteBuf) {
+ //去掉补位
+ log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
+ String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
+ log.info(" devcode : " + devcode);
+ byteBuf.resetReaderIndex();//重置位判断
+ String valueStr = byteBuf.slice(26, 4).toString(Charset.defaultCharset());
+ log.info(" valueStr : " + valueStr);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverServer.java b/src/main/java/com/casic/server/ReceiverServer.java
new file mode 100644
index 0000000..a98e4ca
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServer.java
@@ -0,0 +1,72 @@
+package com.casic.server;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.logging.LogLevel;
+import io.netty.handler.logging.LoggingHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * @description: 接收客户端传过来的数据,只做打印处理
+ * @author: Stone
+ * @create: 2019-01-10 19:52
+ **/
+@Slf4j
+@Component
+public class ReceiverServer {
+
+ @Autowired
+ private ReceiverServerHandler receiverServerHandler;
+ @Autowired
+ private ServerPort serverPort;
+
+ @PostConstruct
+ public void init() {
+ this.start();
+ }
+
+ public void start() {
+ EventLoopGroup bossGroup = new NioEventLoopGroup();
+ EventLoopGroup workerGroup = new NioEventLoopGroup();
+ log.info("server bind port = {}", serverPort.getPort());
+
+ ServerBootstrap serverBootstrap = new ServerBootstrap();
+ serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
+ serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
+ serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
+
+ serverBootstrap.childHandler(new ChannelInitializer() {
+ @Override
+ protected void initChannel(SocketChannel socketChannel) {
+// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
+ socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
+// socketChannel.pipeline().addLast(new ReceiverDecoder());
+ socketChannel.pipeline().addLast(new StringDecoder());
+ socketChannel.pipeline().addLast(receiverServerHandler);
+ }
+ });
+ serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
+ try {
+ ChannelFuture channelFuture = serverBootstrap.bind(serverPort.getPort()).sync();
+ channelFuture.channel().closeFuture().sync();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } finally {
+ workerGroup.shutdownGracefully();
+ bossGroup.shutdownGracefully();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/server/ReceiverServerHandler.java b/src/main/java/com/casic/server/ReceiverServerHandler.java
new file mode 100644
index 0000000..31ac43e
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServerHandler.java
@@ -0,0 +1,103 @@
+package com.casic.server;
+
+
+import com.casic.enums.RelaySwitchEnums;
+import com.casic.model.RelayStatusDTO;
+import com.casic.resolver.RainFallDataResolver;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.channel.group.ChannelGroup;
+import io.netty.channel.group.DefaultChannelGroup;
+import io.netty.util.concurrent.GlobalEventExecutor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * @description: 消息处理handler
+ * @author: Stone
+ * @create: 2019-01-10 20:01
+ **/
+@Slf4j
+@Component
+@ChannelHandler.Sharable
+public class ReceiverServerHandler extends ChannelInboundHandlerAdapter implements RelaySwitchEnums {
+
+ final ChannelGroup channels =
+ new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+ @Autowired
+ private List rainFallDataResolverList;
+
+ public ReceiverServerHandler() {
+ }
+
+ @Override
+ public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
+ super.channelRegistered(ctx);
+ }
+
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ channels.add(ctx.channel());
+ super.channelActive(ctx);
+ }
+
+ @Override
+ public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+ channels.forEach(channel -> {
+ if (channel == ctx.channel()) {
+ channels.remove(channel);
+ }
+ }
+ );
+ super.channelInactive(ctx);
+ }
+
+ /**
+ * 雨量计
+ */
+ @Override
+ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+ if (msg instanceof String) {
+ rainFallDataResolverList.forEach(
+ rainFallDataResolver -> {
+ RelayStatusDTO relayStatusDTO = rainFallDataResolver.datagram(String.valueOf(msg));
+ sendMsg(ctx, relayStatusDTO);
+ }
+ );
+ }
+ super.channelRead(ctx, msg);
+ }
+
+ private void sendMsg(ChannelHandlerContext ctx, RelayStatusDTO relayStatusDTO) {
+ if (!ObjectUtils.isEmpty(relayStatusDTO)) {
+ ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+ String switchConent = preFix + relayStatusDTO.getChannelName() + "," + relayStatusDTO.getLampSwitch() + postFix;
+ out.writeBytes(switchConent.getBytes());
+ channels.forEach(channel -> {
+ if (channel.isActive()) {
+ if (channel != ctx.channel()) {
+ channel.writeAndFlush(out);
+ }
+ }
+ }
+ );
+ }
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ super.exceptionCaught(ctx, cause);
+ cause.printStackTrace();
+ ctx.close();
+ }
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataScanner.java b/src/main/java/com/casic/service/DeviceDataScanner.java
new file mode 100644
index 0000000..049fa71
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataScanner.java
@@ -0,0 +1,7 @@
+package com.casic.service;
+
+public interface DeviceDataScanner {
+
+ void scanDeviceData();
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataSupport.java b/src/main/java/com/casic/service/DeviceDataSupport.java
new file mode 100644
index 0000000..93d61ea
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataSupport.java
@@ -0,0 +1,50 @@
+package com.casic.service;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.client.Client;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.mapper.DeviceDataMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ *
+ */
+@Slf4j
+@Component
+public class DeviceDataSupport implements AlarmDatagramFlag {
+
+ @Autowired
+ protected DeviceDataMapper deviceDataMapper;
+ @Autowired
+ protected AlarmLevelConfig alarmLevelConfig;
+ @Autowired
+ private Client client;
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * 发送报警消息
+ */
+ protected void sendAlarmMsg(String devcode, Integer isAlarm) {
+ try {
+ String alarmMsg = devcode + alarmMark + isAlarm;
+ client.send(alarmMsg);
+ } catch (Exception ex) {
+ log.error("消息发送失败,设备编号为{},异常信息{}", devcode, ex.getMessage());
+ }
+ }
+
+}
diff --git a/src/main/java/com/casic/service/RainFallDataService.java b/src/main/java/com/casic/service/RainFallDataService.java
new file mode 100644
index 0000000..6c1a12d
--- /dev/null
+++ b/src/main/java/com/casic/service/RainFallDataService.java
@@ -0,0 +1,6 @@
+package com.casic.service;
+
+public interface RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
new file mode 100644
index 0000000..14dc1eb
--- /dev/null
+++ b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
@@ -0,0 +1,13 @@
+package com.casic.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.service.RainFallDataService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class RainFallDataServiceImpl extends ServiceImpl implements RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/scanner/FlowDataScanner.java b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
new file mode 100644
index 0000000..7ab7228
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
@@ -0,0 +1,28 @@
+package com.casic.service.scanner;
+
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class FlowDataScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String thresholdValue = alarmLevelConfig.getFlow();
+ List> flowDataMapList = this.deviceDataMapper.getFlowData();
+ flowDataMapList.forEach(
+ flowDataMap -> {
+ String devcode = flowDataMap.get("devcode").toString();
+ String insdata = flowDataMap.get("insdata").toString();
+ Integer isAlarm = isAlarm(insdata, thresholdValue);
+ sendAlarmMsg(devcode, isAlarm);
+ }
+ );
+ }
+
+
+}
diff --git a/src/main/java/com/casic/service/scanner/PressDataScanner.java b/src/main/java/com/casic/service/scanner/PressDataScanner.java
new file mode 100644
index 0000000..6738c38
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/PressDataScanner.java
@@ -0,0 +1,29 @@
+package com.casic.service.scanner;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.DeviceDataMapper;
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class PressDataScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String thresholdValue = alarmLevelConfig.getPressure();
+ List> pressDataMapList = this.deviceDataMapper.getPressureData();
+ pressDataMapList.forEach(
+ pressDataMap -> {
+ String devcode = pressDataMap.get("devcode").toString();
+ String pressdata = pressDataMap.get("pressdata").toString();
+ Integer isAlarm=isAlarm(pressdata,thresholdValue);
+ sendAlarmMsg(devcode,isAlarm);
+ }
+ );
+ }
+
+}
diff --git a/src/main/java/com/casic/service/scanner/TempHumiScanner.java b/src/main/java/com/casic/service/scanner/TempHumiScanner.java
new file mode 100644
index 0000000..a9efc57
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/TempHumiScanner.java
@@ -0,0 +1,34 @@
+package com.casic.service.scanner;
+
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class TempHumiScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String humiThreshold = alarmLevelConfig.getHumi();
+ String tempThreshold = alarmLevelConfig.getTemp();
+ List> pressDataMapList = this.deviceDataMapper.getHumiTemp();
+ pressDataMapList.forEach(
+ pressDataMap -> {
+ String devcode = pressDataMap.get("devcode").toString();
+ String temperatureData = pressDataMap.get("temperature").toString();
+ Integer isTempAlarm = isAlarm(temperatureData, tempThreshold);
+ String humidityData = pressDataMap.get("humidity").toString();
+ Integer isHumiAlarm = isAlarm(humidityData, humiThreshold);
+ if (isHumiAlarm == 0 && isTempAlarm == 0) {
+ sendAlarmMsg(devcode, 0);
+ } else {
+ sendAlarmMsg(devcode, 1);
+ }
+ }
+ );
+ }
+
+}
diff --git a/src/main/java/com/casic/util/Client.java b/src/main/java/com/casic/util/Client.java
deleted file mode 100644
index a416600..0000000
--- a/src/main/java/com/casic/util/Client.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.casic.util;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.net.Socket;
-import java.net.UnknownHostException;
-
-/**
- * @author: njb
- * @Date: 2020/11/26 18:49
- * @desc: 客户端socket
- */
-public class Client {
- public static void main(String[] args) {
- try {
- //发送到8888端口
- Socket socket = new Socket("127.0.0.1", 11321);
- //输出流
- OutputStream outputStream = socket.getOutputStream();
- PrintWriter printWriter = new PrintWriter(outputStream);
- printWriter.write("服务端你好,我是客户端");
- printWriter.flush();
- //关闭资源
- printWriter.close();
- outputStream.close();
- socket.close();
- } catch (UnknownHostException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-}
diff --git a/src/main/java/com/casic/util/ClientTest.java b/src/main/java/com/casic/util/ClientTest.java
new file mode 100644
index 0000000..4c1bf65
--- /dev/null
+++ b/src/main/java/com/casic/util/ClientTest.java
@@ -0,0 +1,34 @@
+package com.casic.util;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.net.Socket;
+import java.net.UnknownHostException;
+
+/**
+ * @author: njb
+ * @Date: 2020/11/26 18:49
+ * @desc: 客户端socket
+ */
+public class ClientTest {
+ public static void main(String[] args) {
+ try {
+ //发送到8888端口
+ Socket socket = new Socket("127.0.0.1", 11321);
+ //输出流
+ OutputStream outputStream = socket.getOutputStream();
+ PrintWriter printWriter = new PrintWriter(outputStream);
+ printWriter.write("服务端你好,我是客户端");
+ printWriter.flush();
+ //关闭资源
+ printWriter.close();
+ outputStream.close();
+ socket.close();
+ } catch (UnknownHostException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/util/Server.java b/src/main/java/com/casic/util/Server.java
deleted file mode 100644
index 50c0957..0000000
--- a/src/main/java/com/casic/util/Server.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.casic.util;
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.ServerSocket;
-import java.net.Socket;
-
-/**
- * @author: njb
- * @Date: 2020/11/26 18:49
- * @desc: 服务器socket
- */
-public class Server {
- public static void main(String[] args) {
- try {
- ServerSocket serverSocket = new ServerSocket(11321);
- System.out.println("----------------服务端执行,開始监听请求----------------");
-
- Socket socket = serverSocket.accept();//開始监听
- InputStream inputStream = socket.getInputStream();
- //获取请求内容
- String info;
- BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
- while ((info = bufferedReader.readLine()) != null) {
- System.out.println("我是服务端,客户端请求为:" + info);
- }
- //关闭资源
- socket.shutdownInput();
- bufferedReader.close();
- inputStream.close();
- socket.close();
- serverSocket.close();
- } catch (Exception exception) {
- exception.printStackTrace();
- }
- }
-}
\ No newline at end of file
diff --git a/src/main/java/com/casic/util/ServerTest.java b/src/main/java/com/casic/util/ServerTest.java
new file mode 100644
index 0000000..53ba687
--- /dev/null
+++ b/src/main/java/com/casic/util/ServerTest.java
@@ -0,0 +1,38 @@
+package com.casic.util;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+/**
+ * @author: njb
+ * @Date: 2020/11/26 18:49
+ * @desc: 服务器socket
+ */
+public class ServerTest {
+ public static void main(String[] args) {
+ try {
+ ServerSocket serverSocket = new ServerSocket(11321);
+ System.out.println("----------------服务端执行,開始监听请求----------------");
+
+ Socket socket = serverSocket.accept();//開始监听
+ InputStream inputStream = socket.getInputStream();
+ //获取请求内容
+ String info;
+ BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+ while ((info = bufferedReader.readLine()) != null) {
+ System.out.println("我是服务端,客户端请求为:" + info);
+ }
+ //关闭资源
+ socket.shutdownInput();
+ bufferedReader.close();
+ inputStream.close();
+ socket.close();
+ serverSocket.close();
+ } catch (Exception exception) {
+ exception.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
- if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
-// log.info(" String : " + msg.toString(Charset.defaultCharset()));
-// if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
- pareDeviceHex(msg);
-// out.add(msg);
-// }
- }
- }
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
- String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
- log.info(" devcode : " + devcode);
- byteBuf.resetReaderIndex();//重置位判断
- String valueStr=byteBuf.slice(26, 4).toString(Charset.defaultCharset());
- log.info(" valueStr : " + valueStr);
- long defaultValue = Long.valueOf(valueStr);
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverDomain.java b/src/main/java/com/casic/handler/ReceiverDomain.java
deleted file mode 100644
index f0a89b6..0000000
--- a/src/main/java/com/casic/handler/ReceiverDomain.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import lombok.Data;
-
-/**
- * @description: 环境数据实体类
- * @author: Stone
- * @create: 2019-01-10 22:38
- **/
-@Data
-public class ReceiverDomain {
- private String head;
- private int len;
- private String key;
- private String value;
-
- public ReceiverDomain(ByteBuf bf) {
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServer.java b/src/main/java/com/casic/handler/ReceiverServer.java
deleted file mode 100644
index 6894a00..0000000
--- a/src/main/java/com/casic/handler/ReceiverServer.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.casic.handler;
-
-import io.netty.bootstrap.ServerBootstrap;
-import io.netty.channel.ChannelFuture;
-import io.netty.channel.ChannelInitializer;
-import io.netty.channel.ChannelOption;
-import io.netty.channel.EventLoopGroup;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.channel.socket.SocketChannel;
-import io.netty.channel.socket.nio.NioServerSocketChannel;
-import io.netty.handler.codec.LineBasedFrameDecoder;
-import io.netty.handler.codec.string.StringDecoder;
-import io.netty.handler.logging.LogLevel;
-import io.netty.handler.logging.LoggingHandler;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-
-/**
- * @description: 接收客户端传过来的数据,只做打印处理
- * @author: Stone
- * @create: 2019-01-10 19:52
- **/
-@Slf4j
-@Component
-public class ReceiverServer {
-
- @Autowired
- private ReceiverServerHandler receiverServerHandler;
-
- @Value("${xgd.server-port}")
- private int port;
-
-
-
- @PostConstruct
- public void init() {
- this.start();
- }
-
- public void start() {
- EventLoopGroup bossGroup = new NioEventLoopGroup();
- EventLoopGroup workerGroup = new NioEventLoopGroup();
- log.info("server bind port = {}", port);
-
- ServerBootstrap serverBootstrap = new ServerBootstrap();
- serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
- serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
- serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
-
- serverBootstrap.childHandler(new ChannelInitializer() {
- @Override
- protected void initChannel(SocketChannel socketChannel) {
-// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
- socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
- socketChannel.pipeline().addLast(new ReceiverDecoder());
- socketChannel.pipeline().addLast(new StringDecoder());
- socketChannel.pipeline().addLast(receiverServerHandler);
- }
- });
-
- serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
- try {
- ChannelFuture channelFuture = serverBootstrap.bind(port).sync();
- channelFuture.channel().closeFuture().sync();
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- workerGroup.shutdownGracefully();
- bossGroup.shutdownGracefully();
- }
- }
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServerHandler.java b/src/main/java/com/casic/handler/ReceiverServerHandler.java
deleted file mode 100644
index f432e06..0000000
--- a/src/main/java/com/casic/handler/ReceiverServerHandler.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.casic.handler;
-
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelInboundHandlerAdapter;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.javassist.bytecode.ByteArray;
-import org.springframework.stereotype.Component;
-
-/**
- * @description: 消息处理handler
- * @author: Stone
- * @create: 2019-01-10 20:01
- **/
-@Slf4j
-@Component
-@ChannelHandler.Sharable
-public class ReceiverServerHandler extends ChannelInboundHandlerAdapter {
-
- public ReceiverServerHandler() {
- }
-
- @Override
- public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
- super.channelRegistered(ctx);
- }
-
- @Override
- public void channelActive(ChannelHandlerContext ctx) throws Exception {
- super.channelActive(ctx);
- }
-
- @Override
- public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
- super.channelRead(ctx, msg);
-// log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME,(String)msg);
- log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
- String msgStr = msg.toString();
- // 以固定行分隔符结尾分割,头部可能有不符合接口协议的字段, 去掉
- int idx = msgStr.indexOf("##");
- if (idx >= 0) {
- msgStr = msgStr.substring(idx);
- }
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME, msgStr);
- }
-
-// //ByteBuf byteBuf
- public static void main(String[] main) {
- byte[] hexBytes = {(byte) 0x86, 0x53, 0x28, 0x06, (byte) 0x84, 0x19, (byte) 0x94,
- 0x30, (byte) 0xAA, (byte) 0xAA, 0x01, 0x03, (byte) 0x02, 0x02, 0x00, (byte) 0xB8, 0x44};
- ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
- out.writeBytes(hexBytes);
-
- if (ByteBufUtil.hexDump(out).toLowerCase().contains("aaaa")) {
- pareDeviceHex(out);
- }
- }
-
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- String devcode = ByteBufUtil.hexDump(byteBuf.slice(0, 8));
- devcode = devcode.substring(0, devcode.length() - 1);
- //数值读取
- byteBuf.readBytes(12);
- byteBuf.markReaderIndex();
- Integer defaultValueLength = byteBuf.readByte() & 0xff;
- long defaultValue = 0;
- for (int i = 0; i < defaultValueLength; i++) {
- long tempLong = byteBuf.readByte() & 0xff;
- defaultValue = defaultValue * 256 + tempLong;
- }
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
- super.exceptionCaught(ctx, cause);
- cause.printStackTrace();
- ctx.close();
- }
-
-}
diff --git a/src/main/java/com/casic/mapper/DeviceDataMapper.java b/src/main/java/com/casic/mapper/DeviceDataMapper.java
new file mode 100644
index 0000000..be72d19
--- /dev/null
+++ b/src/main/java/com/casic/mapper/DeviceDataMapper.java
@@ -0,0 +1,28 @@
+package com.casic.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface DeviceDataMapper {
+
+
+ /**
+ * 获取压力数据
+ */
+ List> getPressureData();
+
+ /**
+ * 获取流量数据
+ */
+ List> getFlowData();
+
+ /**
+ * 获取温湿度数据
+ */
+ List> getHumiTemp();
+
+
+}
diff --git a/src/main/java/com/casic/mapper/RainFallDataMapper.java b/src/main/java/com/casic/mapper/RainFallDataMapper.java
new file mode 100644
index 0000000..f5c29db
--- /dev/null
+++ b/src/main/java/com/casic/mapper/RainFallDataMapper.java
@@ -0,0 +1,7 @@
+package com.casic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.model.RainFallData;
+
+public interface RainFallDataMapper extends BaseMapper {
+}
diff --git a/src/main/java/com/casic/model/RainFallData.java b/src/main/java/com/casic/model/RainFallData.java
new file mode 100644
index 0000000..fa96673
--- /dev/null
+++ b/src/main/java/com/casic/model/RainFallData.java
@@ -0,0 +1,30 @@
+package com.casic.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@TableName("AD_YL_YLIANG")
+public class RainFallData {
+
+ private String dbid;
+
+ private String scrid;
+
+ private String dstid;
+
+ private String totalyuliang;
+
+ private String curminuteyuliang;
+
+ private String forminuteyuliang;
+
+ private String value;
+
+ private Date logtime;
+
+ private Date uptime;
+
+}
diff --git a/src/main/java/com/casic/model/RelayStatusDTO.java b/src/main/java/com/casic/model/RelayStatusDTO.java
new file mode 100644
index 0000000..b839e0c
--- /dev/null
+++ b/src/main/java/com/casic/model/RelayStatusDTO.java
@@ -0,0 +1,20 @@
+package com.casic.model;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class RelayStatusDTO {
+
+ /***
+ * 通道名称 1 2 3 4 5 6 7 8
+ */
+ private String channelName;
+
+ /***
+ * 开关0,1
+ */
+ private Integer lampSwitch;
+
+}
diff --git a/src/main/java/com/casic/resolver/AlarmDataResolver.java b/src/main/java/com/casic/resolver/AlarmDataResolver.java
new file mode 100644
index 0000000..2c6874b
--- /dev/null
+++ b/src/main/java/com/casic/resolver/AlarmDataResolver.java
@@ -0,0 +1,28 @@
+package com.casic.resolver;
+
+
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class AlarmDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if(msg.contains(alarmMark)){
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ Integer isAlarm = Integer.valueOf(msg.substring(16,17));
+ log.info("设备编号为" + devcode + ",是否报警" + isAlarm);
+ return RelayStatusDTO.builder()
+ .channelName( RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/casic/resolver/DatagramResolver.java b/src/main/java/com/casic/resolver/DatagramResolver.java
new file mode 100644
index 0000000..d00c952
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramResolver.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+import com.casic.model.RelayStatusDTO;
+
+public interface DatagramResolver {
+
+ RelayStatusDTO datagram(String msg);
+
+}
diff --git a/src/main/java/com/casic/resolver/DatagramSupport.java b/src/main/java/com/casic/resolver/DatagramSupport.java
new file mode 100644
index 0000000..1d911a3
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramSupport.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+public class DatagramSupport {
+
+
+
+
+
+}
diff --git a/src/main/java/com/casic/resolver/RainFallDataResolver.java b/src/main/java/com/casic/resolver/RainFallDataResolver.java
new file mode 100644
index 0000000..8a22899
--- /dev/null
+++ b/src/main/java/com/casic/resolver/RainFallDataResolver.java
@@ -0,0 +1,79 @@
+package com.casic.resolver;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service
+@Slf4j
+public class RainFallDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Autowired
+ private RainFallDataMapper rainFallDataMapper;
+ @Autowired
+ private AlarmLevelConfig alarmLevelConfig;
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if (msg.contains(rainFallMark)) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ String defaultValue = msg.substring(26, 30);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ RainFallData rainFallData = initRainFallData(devcode, defaultValue);
+ rainFallDataMapper.insert(rainFallData);
+ Integer isAlarm = isAlarm(String.valueOf(defaultValue), alarmLevelConfig.getRainfall());
+ return RelayStatusDTO.builder()
+ .channelName(RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+
+ }
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ private RainFallData initRainFallData(String devcode, String valueStr) {
+ RainFallData rainFallData = new RainFallData();
+ rainFallData.setDstid(devcode);
+ rainFallData.setTotalyuliang(valueStr);
+ rainFallData.setUptime(new Date());
+ rainFallData.setLogtime(new Date());
+ return rainFallData;
+ }
+
+ // //ByteBuf byteBuf
+ public static void main(String[] main) {
+ pareDeviceHex("8653280684199430AAAA01030200023985");
+ }
+
+ private static void pareDeviceHex(String msg) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ log.info(" devcode : " + devcode);
+ String valueStr = msg.substring(26, 30);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverDecoder.java b/src/main/java/com/casic/server/ReceiverDecoder.java
new file mode 100644
index 0000000..7030790
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverDecoder.java
@@ -0,0 +1,71 @@
+package com.casic.server;
+
+import com.casic.enums.RelaySwitchEnums;
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.ByteToMessageDecoder;
+import lombok.extern.slf4j.Slf4j;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * 自定义解码器
+ *
+ * @description: 将从接口取到的数据编码
+ * @author: cz
+ * @create: 2023-5-10
+ **/
+@Slf4j
+public class ReceiverDecoder extends ByteToMessageDecoder implements RelaySwitchEnums {
+
+
+// final ChannelGroup channels =
+// new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+
+ @Override
+ protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
+ if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
+ pareDeviceHex(msg);
+ }
+// if(msg.readableBytes()>2){
+// out.add(msg);
+// }
+ }
+
+// @Override
+// public void channelActive(ChannelHandlerContext ctx) throws Exception {
+// channels.add(ctx.channel());
+// super.channelActive(ctx);
+// }
+//
+// @Override
+// public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+// super.channelRead(ctx, msg);
+// ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+// String switchConent = preFix + 1 + "," + 1 + postFix;
+// out.writeBytes(switchConent.getBytes());
+// channels.forEach(
+// channel ->{
+// if(channel!=ctx.channel()) {
+// channel.writeAndFlush(out);
+// }
+// }
+// );
+// }
+
+ private static void pareDeviceHex(ByteBuf byteBuf) {
+ //去掉补位
+ log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
+ String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
+ log.info(" devcode : " + devcode);
+ byteBuf.resetReaderIndex();//重置位判断
+ String valueStr = byteBuf.slice(26, 4).toString(Charset.defaultCharset());
+ log.info(" valueStr : " + valueStr);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverServer.java b/src/main/java/com/casic/server/ReceiverServer.java
new file mode 100644
index 0000000..a98e4ca
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServer.java
@@ -0,0 +1,72 @@
+package com.casic.server;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.logging.LogLevel;
+import io.netty.handler.logging.LoggingHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * @description: 接收客户端传过来的数据,只做打印处理
+ * @author: Stone
+ * @create: 2019-01-10 19:52
+ **/
+@Slf4j
+@Component
+public class ReceiverServer {
+
+ @Autowired
+ private ReceiverServerHandler receiverServerHandler;
+ @Autowired
+ private ServerPort serverPort;
+
+ @PostConstruct
+ public void init() {
+ this.start();
+ }
+
+ public void start() {
+ EventLoopGroup bossGroup = new NioEventLoopGroup();
+ EventLoopGroup workerGroup = new NioEventLoopGroup();
+ log.info("server bind port = {}", serverPort.getPort());
+
+ ServerBootstrap serverBootstrap = new ServerBootstrap();
+ serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
+ serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
+ serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
+
+ serverBootstrap.childHandler(new ChannelInitializer() {
+ @Override
+ protected void initChannel(SocketChannel socketChannel) {
+// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
+ socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
+// socketChannel.pipeline().addLast(new ReceiverDecoder());
+ socketChannel.pipeline().addLast(new StringDecoder());
+ socketChannel.pipeline().addLast(receiverServerHandler);
+ }
+ });
+ serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
+ try {
+ ChannelFuture channelFuture = serverBootstrap.bind(serverPort.getPort()).sync();
+ channelFuture.channel().closeFuture().sync();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } finally {
+ workerGroup.shutdownGracefully();
+ bossGroup.shutdownGracefully();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/server/ReceiverServerHandler.java b/src/main/java/com/casic/server/ReceiverServerHandler.java
new file mode 100644
index 0000000..31ac43e
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServerHandler.java
@@ -0,0 +1,103 @@
+package com.casic.server;
+
+
+import com.casic.enums.RelaySwitchEnums;
+import com.casic.model.RelayStatusDTO;
+import com.casic.resolver.RainFallDataResolver;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.channel.group.ChannelGroup;
+import io.netty.channel.group.DefaultChannelGroup;
+import io.netty.util.concurrent.GlobalEventExecutor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * @description: 消息处理handler
+ * @author: Stone
+ * @create: 2019-01-10 20:01
+ **/
+@Slf4j
+@Component
+@ChannelHandler.Sharable
+public class ReceiverServerHandler extends ChannelInboundHandlerAdapter implements RelaySwitchEnums {
+
+ final ChannelGroup channels =
+ new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+ @Autowired
+ private List rainFallDataResolverList;
+
+ public ReceiverServerHandler() {
+ }
+
+ @Override
+ public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
+ super.channelRegistered(ctx);
+ }
+
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ channels.add(ctx.channel());
+ super.channelActive(ctx);
+ }
+
+ @Override
+ public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+ channels.forEach(channel -> {
+ if (channel == ctx.channel()) {
+ channels.remove(channel);
+ }
+ }
+ );
+ super.channelInactive(ctx);
+ }
+
+ /**
+ * 雨量计
+ */
+ @Override
+ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+ if (msg instanceof String) {
+ rainFallDataResolverList.forEach(
+ rainFallDataResolver -> {
+ RelayStatusDTO relayStatusDTO = rainFallDataResolver.datagram(String.valueOf(msg));
+ sendMsg(ctx, relayStatusDTO);
+ }
+ );
+ }
+ super.channelRead(ctx, msg);
+ }
+
+ private void sendMsg(ChannelHandlerContext ctx, RelayStatusDTO relayStatusDTO) {
+ if (!ObjectUtils.isEmpty(relayStatusDTO)) {
+ ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+ String switchConent = preFix + relayStatusDTO.getChannelName() + "," + relayStatusDTO.getLampSwitch() + postFix;
+ out.writeBytes(switchConent.getBytes());
+ channels.forEach(channel -> {
+ if (channel.isActive()) {
+ if (channel != ctx.channel()) {
+ channel.writeAndFlush(out);
+ }
+ }
+ }
+ );
+ }
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ super.exceptionCaught(ctx, cause);
+ cause.printStackTrace();
+ ctx.close();
+ }
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataScanner.java b/src/main/java/com/casic/service/DeviceDataScanner.java
new file mode 100644
index 0000000..049fa71
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataScanner.java
@@ -0,0 +1,7 @@
+package com.casic.service;
+
+public interface DeviceDataScanner {
+
+ void scanDeviceData();
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataSupport.java b/src/main/java/com/casic/service/DeviceDataSupport.java
new file mode 100644
index 0000000..93d61ea
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataSupport.java
@@ -0,0 +1,50 @@
+package com.casic.service;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.client.Client;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.mapper.DeviceDataMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ *
+ */
+@Slf4j
+@Component
+public class DeviceDataSupport implements AlarmDatagramFlag {
+
+ @Autowired
+ protected DeviceDataMapper deviceDataMapper;
+ @Autowired
+ protected AlarmLevelConfig alarmLevelConfig;
+ @Autowired
+ private Client client;
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * 发送报警消息
+ */
+ protected void sendAlarmMsg(String devcode, Integer isAlarm) {
+ try {
+ String alarmMsg = devcode + alarmMark + isAlarm;
+ client.send(alarmMsg);
+ } catch (Exception ex) {
+ log.error("消息发送失败,设备编号为{},异常信息{}", devcode, ex.getMessage());
+ }
+ }
+
+}
diff --git a/src/main/java/com/casic/service/RainFallDataService.java b/src/main/java/com/casic/service/RainFallDataService.java
new file mode 100644
index 0000000..6c1a12d
--- /dev/null
+++ b/src/main/java/com/casic/service/RainFallDataService.java
@@ -0,0 +1,6 @@
+package com.casic.service;
+
+public interface RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
new file mode 100644
index 0000000..14dc1eb
--- /dev/null
+++ b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
@@ -0,0 +1,13 @@
+package com.casic.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.service.RainFallDataService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class RainFallDataServiceImpl extends ServiceImpl implements RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/scanner/FlowDataScanner.java b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
new file mode 100644
index 0000000..7ab7228
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
@@ -0,0 +1,28 @@
+package com.casic.service.scanner;
+
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class FlowDataScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String thresholdValue = alarmLevelConfig.getFlow();
+ List> flowDataMapList = this.deviceDataMapper.getFlowData();
+ flowDataMapList.forEach(
+ flowDataMap -> {
+ String devcode = flowDataMap.get("devcode").toString();
+ String insdata = flowDataMap.get("insdata").toString();
+ Integer isAlarm = isAlarm(insdata, thresholdValue);
+ sendAlarmMsg(devcode, isAlarm);
+ }
+ );
+ }
+
+
+}
diff --git a/src/main/java/com/casic/service/scanner/PressDataScanner.java b/src/main/java/com/casic/service/scanner/PressDataScanner.java
new file mode 100644
index 0000000..6738c38
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/PressDataScanner.java
@@ -0,0 +1,29 @@
+package com.casic.service.scanner;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.DeviceDataMapper;
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class PressDataScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String thresholdValue = alarmLevelConfig.getPressure();
+ List> pressDataMapList = this.deviceDataMapper.getPressureData();
+ pressDataMapList.forEach(
+ pressDataMap -> {
+ String devcode = pressDataMap.get("devcode").toString();
+ String pressdata = pressDataMap.get("pressdata").toString();
+ Integer isAlarm=isAlarm(pressdata,thresholdValue);
+ sendAlarmMsg(devcode,isAlarm);
+ }
+ );
+ }
+
+}
diff --git a/src/main/java/com/casic/service/scanner/TempHumiScanner.java b/src/main/java/com/casic/service/scanner/TempHumiScanner.java
new file mode 100644
index 0000000..a9efc57
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/TempHumiScanner.java
@@ -0,0 +1,34 @@
+package com.casic.service.scanner;
+
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class TempHumiScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String humiThreshold = alarmLevelConfig.getHumi();
+ String tempThreshold = alarmLevelConfig.getTemp();
+ List> pressDataMapList = this.deviceDataMapper.getHumiTemp();
+ pressDataMapList.forEach(
+ pressDataMap -> {
+ String devcode = pressDataMap.get("devcode").toString();
+ String temperatureData = pressDataMap.get("temperature").toString();
+ Integer isTempAlarm = isAlarm(temperatureData, tempThreshold);
+ String humidityData = pressDataMap.get("humidity").toString();
+ Integer isHumiAlarm = isAlarm(humidityData, humiThreshold);
+ if (isHumiAlarm == 0 && isTempAlarm == 0) {
+ sendAlarmMsg(devcode, 0);
+ } else {
+ sendAlarmMsg(devcode, 1);
+ }
+ }
+ );
+ }
+
+}
diff --git a/src/main/java/com/casic/util/Client.java b/src/main/java/com/casic/util/Client.java
deleted file mode 100644
index a416600..0000000
--- a/src/main/java/com/casic/util/Client.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.casic.util;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.net.Socket;
-import java.net.UnknownHostException;
-
-/**
- * @author: njb
- * @Date: 2020/11/26 18:49
- * @desc: 客户端socket
- */
-public class Client {
- public static void main(String[] args) {
- try {
- //发送到8888端口
- Socket socket = new Socket("127.0.0.1", 11321);
- //输出流
- OutputStream outputStream = socket.getOutputStream();
- PrintWriter printWriter = new PrintWriter(outputStream);
- printWriter.write("服务端你好,我是客户端");
- printWriter.flush();
- //关闭资源
- printWriter.close();
- outputStream.close();
- socket.close();
- } catch (UnknownHostException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-}
diff --git a/src/main/java/com/casic/util/ClientTest.java b/src/main/java/com/casic/util/ClientTest.java
new file mode 100644
index 0000000..4c1bf65
--- /dev/null
+++ b/src/main/java/com/casic/util/ClientTest.java
@@ -0,0 +1,34 @@
+package com.casic.util;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.net.Socket;
+import java.net.UnknownHostException;
+
+/**
+ * @author: njb
+ * @Date: 2020/11/26 18:49
+ * @desc: 客户端socket
+ */
+public class ClientTest {
+ public static void main(String[] args) {
+ try {
+ //发送到8888端口
+ Socket socket = new Socket("127.0.0.1", 11321);
+ //输出流
+ OutputStream outputStream = socket.getOutputStream();
+ PrintWriter printWriter = new PrintWriter(outputStream);
+ printWriter.write("服务端你好,我是客户端");
+ printWriter.flush();
+ //关闭资源
+ printWriter.close();
+ outputStream.close();
+ socket.close();
+ } catch (UnknownHostException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/util/Server.java b/src/main/java/com/casic/util/Server.java
deleted file mode 100644
index 50c0957..0000000
--- a/src/main/java/com/casic/util/Server.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.casic.util;
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.ServerSocket;
-import java.net.Socket;
-
-/**
- * @author: njb
- * @Date: 2020/11/26 18:49
- * @desc: 服务器socket
- */
-public class Server {
- public static void main(String[] args) {
- try {
- ServerSocket serverSocket = new ServerSocket(11321);
- System.out.println("----------------服务端执行,開始监听请求----------------");
-
- Socket socket = serverSocket.accept();//開始监听
- InputStream inputStream = socket.getInputStream();
- //获取请求内容
- String info;
- BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
- while ((info = bufferedReader.readLine()) != null) {
- System.out.println("我是服务端,客户端请求为:" + info);
- }
- //关闭资源
- socket.shutdownInput();
- bufferedReader.close();
- inputStream.close();
- socket.close();
- serverSocket.close();
- } catch (Exception exception) {
- exception.printStackTrace();
- }
- }
-}
\ No newline at end of file
diff --git a/src/main/java/com/casic/util/ServerTest.java b/src/main/java/com/casic/util/ServerTest.java
new file mode 100644
index 0000000..53ba687
--- /dev/null
+++ b/src/main/java/com/casic/util/ServerTest.java
@@ -0,0 +1,38 @@
+package com.casic.util;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+/**
+ * @author: njb
+ * @Date: 2020/11/26 18:49
+ * @desc: 服务器socket
+ */
+public class ServerTest {
+ public static void main(String[] args) {
+ try {
+ ServerSocket serverSocket = new ServerSocket(11321);
+ System.out.println("----------------服务端执行,開始监听请求----------------");
+
+ Socket socket = serverSocket.accept();//開始监听
+ InputStream inputStream = socket.getInputStream();
+ //获取请求内容
+ String info;
+ BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+ while ((info = bufferedReader.readLine()) != null) {
+ System.out.println("我是服务端,客户端请求为:" + info);
+ }
+ //关闭资源
+ socket.shutdownInput();
+ bufferedReader.close();
+ inputStream.close();
+ socket.close();
+ serverSocket.close();
+ } catch (Exception exception) {
+ exception.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/casic/util/SpringContextUtil.java b/src/main/java/com/casic/util/SpringContextUtil.java
new file mode 100644
index 0000000..290d6f6
--- /dev/null
+++ b/src/main/java/com/casic/util/SpringContextUtil.java
@@ -0,0 +1,106 @@
+package com.casic.util;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.beans.factory.support.AbstractBeanDefinition;
+import org.springframework.beans.factory.support.BeanDefinitionBuilder;
+import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ForkJoinPool;
+import java.util.function.Function;
+
+/**
+ * @Description: Spring应用上下文工具
+ * @Author: cz
+ * @Date: 2022-04-19
+ */
+@Component
+public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware {
+ /**
+ * Spring应用上下文环境
+ */
+ private static ApplicationContext applicationContext;
+
+ private static ConfigurableListableBeanFactory beanFactory;
+
+ /**
+ * 实现ApplicationContextAware接口的回调方法,设置上下文环境
+ */
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+ SpringContextUtil.applicationContext = applicationContext;
+ }
+
+ @Override
+ public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
+ SpringContextUtil.beanFactory = beanFactory;
+ }
+
+ public static ApplicationContext getApplicationContext() {
+ return applicationContext;
+ }
+
+// public static Object getBean(String beanId) throws BeansException {
+// return applicationContext.getBean(beanId);
+// }
+
+ public static T getBean(Class requiredType) {
+ return (T) applicationContext.getBean(requiredType);
+ }
+
+ @SuppressWarnings("unchecked")
+ public static T getBean(String name) throws BeansException {
+ return (T) beanFactory.getBean(name);
+ }
+
+ public static boolean containsBean(String name) {
+ return beanFactory.containsBean(name);
+ }
+
+ public static T registerBean(String beanName, Class clazz, Function function) {
+ // 生成bean定义
+ BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz);
+ // 执行bean处理函数
+ AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder);
+ BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory;
+ // 判断是否通过beanName注册
+ if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) {
+ beanFactory.registerBeanDefinition(beanName, beanDefinition);
+ return getBean(beanName);
+ } else {
+ // 非命名bean注册
+ String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory);
+ return getBean(name);
+ }
+ }
+
+ public static T registerBean(String beanName, Class clazz, List args, Map property) {
+ return registerBean(beanName, clazz, beanDefinitionBuilder -> {
+ // 放入构造参数
+ if (!CollectionUtils.isEmpty(args)) {
+ args.forEach(beanDefinitionBuilder::addConstructorArgValue);
+ }
+ // 放入属性
+ if (!CollectionUtils.isEmpty(property)) {
+ property.forEach(beanDefinitionBuilder::addPropertyValue);
+ }
+ return beanDefinitionBuilder.getBeanDefinition();
+ });
+ }
+
+ @Bean
+ public ForkJoinPool forkJoinPool() {
+ return new ForkJoinPool(100);
+ }
+
+}
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
- if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
-// log.info(" String : " + msg.toString(Charset.defaultCharset()));
-// if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
- pareDeviceHex(msg);
-// out.add(msg);
-// }
- }
- }
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
- String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
- log.info(" devcode : " + devcode);
- byteBuf.resetReaderIndex();//重置位判断
- String valueStr=byteBuf.slice(26, 4).toString(Charset.defaultCharset());
- log.info(" valueStr : " + valueStr);
- long defaultValue = Long.valueOf(valueStr);
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverDomain.java b/src/main/java/com/casic/handler/ReceiverDomain.java
deleted file mode 100644
index f0a89b6..0000000
--- a/src/main/java/com/casic/handler/ReceiverDomain.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import lombok.Data;
-
-/**
- * @description: 环境数据实体类
- * @author: Stone
- * @create: 2019-01-10 22:38
- **/
-@Data
-public class ReceiverDomain {
- private String head;
- private int len;
- private String key;
- private String value;
-
- public ReceiverDomain(ByteBuf bf) {
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServer.java b/src/main/java/com/casic/handler/ReceiverServer.java
deleted file mode 100644
index 6894a00..0000000
--- a/src/main/java/com/casic/handler/ReceiverServer.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.casic.handler;
-
-import io.netty.bootstrap.ServerBootstrap;
-import io.netty.channel.ChannelFuture;
-import io.netty.channel.ChannelInitializer;
-import io.netty.channel.ChannelOption;
-import io.netty.channel.EventLoopGroup;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.channel.socket.SocketChannel;
-import io.netty.channel.socket.nio.NioServerSocketChannel;
-import io.netty.handler.codec.LineBasedFrameDecoder;
-import io.netty.handler.codec.string.StringDecoder;
-import io.netty.handler.logging.LogLevel;
-import io.netty.handler.logging.LoggingHandler;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-
-/**
- * @description: 接收客户端传过来的数据,只做打印处理
- * @author: Stone
- * @create: 2019-01-10 19:52
- **/
-@Slf4j
-@Component
-public class ReceiverServer {
-
- @Autowired
- private ReceiverServerHandler receiverServerHandler;
-
- @Value("${xgd.server-port}")
- private int port;
-
-
-
- @PostConstruct
- public void init() {
- this.start();
- }
-
- public void start() {
- EventLoopGroup bossGroup = new NioEventLoopGroup();
- EventLoopGroup workerGroup = new NioEventLoopGroup();
- log.info("server bind port = {}", port);
-
- ServerBootstrap serverBootstrap = new ServerBootstrap();
- serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
- serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
- serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
-
- serverBootstrap.childHandler(new ChannelInitializer() {
- @Override
- protected void initChannel(SocketChannel socketChannel) {
-// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
- socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
- socketChannel.pipeline().addLast(new ReceiverDecoder());
- socketChannel.pipeline().addLast(new StringDecoder());
- socketChannel.pipeline().addLast(receiverServerHandler);
- }
- });
-
- serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
- try {
- ChannelFuture channelFuture = serverBootstrap.bind(port).sync();
- channelFuture.channel().closeFuture().sync();
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- workerGroup.shutdownGracefully();
- bossGroup.shutdownGracefully();
- }
- }
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServerHandler.java b/src/main/java/com/casic/handler/ReceiverServerHandler.java
deleted file mode 100644
index f432e06..0000000
--- a/src/main/java/com/casic/handler/ReceiverServerHandler.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.casic.handler;
-
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelInboundHandlerAdapter;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.javassist.bytecode.ByteArray;
-import org.springframework.stereotype.Component;
-
-/**
- * @description: 消息处理handler
- * @author: Stone
- * @create: 2019-01-10 20:01
- **/
-@Slf4j
-@Component
-@ChannelHandler.Sharable
-public class ReceiverServerHandler extends ChannelInboundHandlerAdapter {
-
- public ReceiverServerHandler() {
- }
-
- @Override
- public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
- super.channelRegistered(ctx);
- }
-
- @Override
- public void channelActive(ChannelHandlerContext ctx) throws Exception {
- super.channelActive(ctx);
- }
-
- @Override
- public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
- super.channelRead(ctx, msg);
-// log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME,(String)msg);
- log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
- String msgStr = msg.toString();
- // 以固定行分隔符结尾分割,头部可能有不符合接口协议的字段, 去掉
- int idx = msgStr.indexOf("##");
- if (idx >= 0) {
- msgStr = msgStr.substring(idx);
- }
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME, msgStr);
- }
-
-// //ByteBuf byteBuf
- public static void main(String[] main) {
- byte[] hexBytes = {(byte) 0x86, 0x53, 0x28, 0x06, (byte) 0x84, 0x19, (byte) 0x94,
- 0x30, (byte) 0xAA, (byte) 0xAA, 0x01, 0x03, (byte) 0x02, 0x02, 0x00, (byte) 0xB8, 0x44};
- ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
- out.writeBytes(hexBytes);
-
- if (ByteBufUtil.hexDump(out).toLowerCase().contains("aaaa")) {
- pareDeviceHex(out);
- }
- }
-
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- String devcode = ByteBufUtil.hexDump(byteBuf.slice(0, 8));
- devcode = devcode.substring(0, devcode.length() - 1);
- //数值读取
- byteBuf.readBytes(12);
- byteBuf.markReaderIndex();
- Integer defaultValueLength = byteBuf.readByte() & 0xff;
- long defaultValue = 0;
- for (int i = 0; i < defaultValueLength; i++) {
- long tempLong = byteBuf.readByte() & 0xff;
- defaultValue = defaultValue * 256 + tempLong;
- }
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
- super.exceptionCaught(ctx, cause);
- cause.printStackTrace();
- ctx.close();
- }
-
-}
diff --git a/src/main/java/com/casic/mapper/DeviceDataMapper.java b/src/main/java/com/casic/mapper/DeviceDataMapper.java
new file mode 100644
index 0000000..be72d19
--- /dev/null
+++ b/src/main/java/com/casic/mapper/DeviceDataMapper.java
@@ -0,0 +1,28 @@
+package com.casic.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface DeviceDataMapper {
+
+
+ /**
+ * 获取压力数据
+ */
+ List> getPressureData();
+
+ /**
+ * 获取流量数据
+ */
+ List> getFlowData();
+
+ /**
+ * 获取温湿度数据
+ */
+ List> getHumiTemp();
+
+
+}
diff --git a/src/main/java/com/casic/mapper/RainFallDataMapper.java b/src/main/java/com/casic/mapper/RainFallDataMapper.java
new file mode 100644
index 0000000..f5c29db
--- /dev/null
+++ b/src/main/java/com/casic/mapper/RainFallDataMapper.java
@@ -0,0 +1,7 @@
+package com.casic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.model.RainFallData;
+
+public interface RainFallDataMapper extends BaseMapper {
+}
diff --git a/src/main/java/com/casic/model/RainFallData.java b/src/main/java/com/casic/model/RainFallData.java
new file mode 100644
index 0000000..fa96673
--- /dev/null
+++ b/src/main/java/com/casic/model/RainFallData.java
@@ -0,0 +1,30 @@
+package com.casic.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@TableName("AD_YL_YLIANG")
+public class RainFallData {
+
+ private String dbid;
+
+ private String scrid;
+
+ private String dstid;
+
+ private String totalyuliang;
+
+ private String curminuteyuliang;
+
+ private String forminuteyuliang;
+
+ private String value;
+
+ private Date logtime;
+
+ private Date uptime;
+
+}
diff --git a/src/main/java/com/casic/model/RelayStatusDTO.java b/src/main/java/com/casic/model/RelayStatusDTO.java
new file mode 100644
index 0000000..b839e0c
--- /dev/null
+++ b/src/main/java/com/casic/model/RelayStatusDTO.java
@@ -0,0 +1,20 @@
+package com.casic.model;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class RelayStatusDTO {
+
+ /***
+ * 通道名称 1 2 3 4 5 6 7 8
+ */
+ private String channelName;
+
+ /***
+ * 开关0,1
+ */
+ private Integer lampSwitch;
+
+}
diff --git a/src/main/java/com/casic/resolver/AlarmDataResolver.java b/src/main/java/com/casic/resolver/AlarmDataResolver.java
new file mode 100644
index 0000000..2c6874b
--- /dev/null
+++ b/src/main/java/com/casic/resolver/AlarmDataResolver.java
@@ -0,0 +1,28 @@
+package com.casic.resolver;
+
+
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class AlarmDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if(msg.contains(alarmMark)){
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ Integer isAlarm = Integer.valueOf(msg.substring(16,17));
+ log.info("设备编号为" + devcode + ",是否报警" + isAlarm);
+ return RelayStatusDTO.builder()
+ .channelName( RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/casic/resolver/DatagramResolver.java b/src/main/java/com/casic/resolver/DatagramResolver.java
new file mode 100644
index 0000000..d00c952
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramResolver.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+import com.casic.model.RelayStatusDTO;
+
+public interface DatagramResolver {
+
+ RelayStatusDTO datagram(String msg);
+
+}
diff --git a/src/main/java/com/casic/resolver/DatagramSupport.java b/src/main/java/com/casic/resolver/DatagramSupport.java
new file mode 100644
index 0000000..1d911a3
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramSupport.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+public class DatagramSupport {
+
+
+
+
+
+}
diff --git a/src/main/java/com/casic/resolver/RainFallDataResolver.java b/src/main/java/com/casic/resolver/RainFallDataResolver.java
new file mode 100644
index 0000000..8a22899
--- /dev/null
+++ b/src/main/java/com/casic/resolver/RainFallDataResolver.java
@@ -0,0 +1,79 @@
+package com.casic.resolver;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service
+@Slf4j
+public class RainFallDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Autowired
+ private RainFallDataMapper rainFallDataMapper;
+ @Autowired
+ private AlarmLevelConfig alarmLevelConfig;
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if (msg.contains(rainFallMark)) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ String defaultValue = msg.substring(26, 30);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ RainFallData rainFallData = initRainFallData(devcode, defaultValue);
+ rainFallDataMapper.insert(rainFallData);
+ Integer isAlarm = isAlarm(String.valueOf(defaultValue), alarmLevelConfig.getRainfall());
+ return RelayStatusDTO.builder()
+ .channelName(RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+
+ }
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ private RainFallData initRainFallData(String devcode, String valueStr) {
+ RainFallData rainFallData = new RainFallData();
+ rainFallData.setDstid(devcode);
+ rainFallData.setTotalyuliang(valueStr);
+ rainFallData.setUptime(new Date());
+ rainFallData.setLogtime(new Date());
+ return rainFallData;
+ }
+
+ // //ByteBuf byteBuf
+ public static void main(String[] main) {
+ pareDeviceHex("8653280684199430AAAA01030200023985");
+ }
+
+ private static void pareDeviceHex(String msg) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ log.info(" devcode : " + devcode);
+ String valueStr = msg.substring(26, 30);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverDecoder.java b/src/main/java/com/casic/server/ReceiverDecoder.java
new file mode 100644
index 0000000..7030790
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverDecoder.java
@@ -0,0 +1,71 @@
+package com.casic.server;
+
+import com.casic.enums.RelaySwitchEnums;
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.ByteToMessageDecoder;
+import lombok.extern.slf4j.Slf4j;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * 自定义解码器
+ *
+ * @description: 将从接口取到的数据编码
+ * @author: cz
+ * @create: 2023-5-10
+ **/
+@Slf4j
+public class ReceiverDecoder extends ByteToMessageDecoder implements RelaySwitchEnums {
+
+
+// final ChannelGroup channels =
+// new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+
+ @Override
+ protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
+ if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
+ pareDeviceHex(msg);
+ }
+// if(msg.readableBytes()>2){
+// out.add(msg);
+// }
+ }
+
+// @Override
+// public void channelActive(ChannelHandlerContext ctx) throws Exception {
+// channels.add(ctx.channel());
+// super.channelActive(ctx);
+// }
+//
+// @Override
+// public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+// super.channelRead(ctx, msg);
+// ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+// String switchConent = preFix + 1 + "," + 1 + postFix;
+// out.writeBytes(switchConent.getBytes());
+// channels.forEach(
+// channel ->{
+// if(channel!=ctx.channel()) {
+// channel.writeAndFlush(out);
+// }
+// }
+// );
+// }
+
+ private static void pareDeviceHex(ByteBuf byteBuf) {
+ //去掉补位
+ log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
+ String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
+ log.info(" devcode : " + devcode);
+ byteBuf.resetReaderIndex();//重置位判断
+ String valueStr = byteBuf.slice(26, 4).toString(Charset.defaultCharset());
+ log.info(" valueStr : " + valueStr);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverServer.java b/src/main/java/com/casic/server/ReceiverServer.java
new file mode 100644
index 0000000..a98e4ca
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServer.java
@@ -0,0 +1,72 @@
+package com.casic.server;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.logging.LogLevel;
+import io.netty.handler.logging.LoggingHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * @description: 接收客户端传过来的数据,只做打印处理
+ * @author: Stone
+ * @create: 2019-01-10 19:52
+ **/
+@Slf4j
+@Component
+public class ReceiverServer {
+
+ @Autowired
+ private ReceiverServerHandler receiverServerHandler;
+ @Autowired
+ private ServerPort serverPort;
+
+ @PostConstruct
+ public void init() {
+ this.start();
+ }
+
+ public void start() {
+ EventLoopGroup bossGroup = new NioEventLoopGroup();
+ EventLoopGroup workerGroup = new NioEventLoopGroup();
+ log.info("server bind port = {}", serverPort.getPort());
+
+ ServerBootstrap serverBootstrap = new ServerBootstrap();
+ serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
+ serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
+ serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
+
+ serverBootstrap.childHandler(new ChannelInitializer() {
+ @Override
+ protected void initChannel(SocketChannel socketChannel) {
+// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
+ socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
+// socketChannel.pipeline().addLast(new ReceiverDecoder());
+ socketChannel.pipeline().addLast(new StringDecoder());
+ socketChannel.pipeline().addLast(receiverServerHandler);
+ }
+ });
+ serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
+ try {
+ ChannelFuture channelFuture = serverBootstrap.bind(serverPort.getPort()).sync();
+ channelFuture.channel().closeFuture().sync();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } finally {
+ workerGroup.shutdownGracefully();
+ bossGroup.shutdownGracefully();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/server/ReceiverServerHandler.java b/src/main/java/com/casic/server/ReceiverServerHandler.java
new file mode 100644
index 0000000..31ac43e
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServerHandler.java
@@ -0,0 +1,103 @@
+package com.casic.server;
+
+
+import com.casic.enums.RelaySwitchEnums;
+import com.casic.model.RelayStatusDTO;
+import com.casic.resolver.RainFallDataResolver;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.channel.group.ChannelGroup;
+import io.netty.channel.group.DefaultChannelGroup;
+import io.netty.util.concurrent.GlobalEventExecutor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * @description: 消息处理handler
+ * @author: Stone
+ * @create: 2019-01-10 20:01
+ **/
+@Slf4j
+@Component
+@ChannelHandler.Sharable
+public class ReceiverServerHandler extends ChannelInboundHandlerAdapter implements RelaySwitchEnums {
+
+ final ChannelGroup channels =
+ new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+ @Autowired
+ private List rainFallDataResolverList;
+
+ public ReceiverServerHandler() {
+ }
+
+ @Override
+ public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
+ super.channelRegistered(ctx);
+ }
+
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ channels.add(ctx.channel());
+ super.channelActive(ctx);
+ }
+
+ @Override
+ public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+ channels.forEach(channel -> {
+ if (channel == ctx.channel()) {
+ channels.remove(channel);
+ }
+ }
+ );
+ super.channelInactive(ctx);
+ }
+
+ /**
+ * 雨量计
+ */
+ @Override
+ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+ if (msg instanceof String) {
+ rainFallDataResolverList.forEach(
+ rainFallDataResolver -> {
+ RelayStatusDTO relayStatusDTO = rainFallDataResolver.datagram(String.valueOf(msg));
+ sendMsg(ctx, relayStatusDTO);
+ }
+ );
+ }
+ super.channelRead(ctx, msg);
+ }
+
+ private void sendMsg(ChannelHandlerContext ctx, RelayStatusDTO relayStatusDTO) {
+ if (!ObjectUtils.isEmpty(relayStatusDTO)) {
+ ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+ String switchConent = preFix + relayStatusDTO.getChannelName() + "," + relayStatusDTO.getLampSwitch() + postFix;
+ out.writeBytes(switchConent.getBytes());
+ channels.forEach(channel -> {
+ if (channel.isActive()) {
+ if (channel != ctx.channel()) {
+ channel.writeAndFlush(out);
+ }
+ }
+ }
+ );
+ }
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ super.exceptionCaught(ctx, cause);
+ cause.printStackTrace();
+ ctx.close();
+ }
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataScanner.java b/src/main/java/com/casic/service/DeviceDataScanner.java
new file mode 100644
index 0000000..049fa71
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataScanner.java
@@ -0,0 +1,7 @@
+package com.casic.service;
+
+public interface DeviceDataScanner {
+
+ void scanDeviceData();
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataSupport.java b/src/main/java/com/casic/service/DeviceDataSupport.java
new file mode 100644
index 0000000..93d61ea
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataSupport.java
@@ -0,0 +1,50 @@
+package com.casic.service;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.client.Client;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.mapper.DeviceDataMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ *
+ */
+@Slf4j
+@Component
+public class DeviceDataSupport implements AlarmDatagramFlag {
+
+ @Autowired
+ protected DeviceDataMapper deviceDataMapper;
+ @Autowired
+ protected AlarmLevelConfig alarmLevelConfig;
+ @Autowired
+ private Client client;
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * 发送报警消息
+ */
+ protected void sendAlarmMsg(String devcode, Integer isAlarm) {
+ try {
+ String alarmMsg = devcode + alarmMark + isAlarm;
+ client.send(alarmMsg);
+ } catch (Exception ex) {
+ log.error("消息发送失败,设备编号为{},异常信息{}", devcode, ex.getMessage());
+ }
+ }
+
+}
diff --git a/src/main/java/com/casic/service/RainFallDataService.java b/src/main/java/com/casic/service/RainFallDataService.java
new file mode 100644
index 0000000..6c1a12d
--- /dev/null
+++ b/src/main/java/com/casic/service/RainFallDataService.java
@@ -0,0 +1,6 @@
+package com.casic.service;
+
+public interface RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
new file mode 100644
index 0000000..14dc1eb
--- /dev/null
+++ b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
@@ -0,0 +1,13 @@
+package com.casic.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.service.RainFallDataService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class RainFallDataServiceImpl extends ServiceImpl implements RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/scanner/FlowDataScanner.java b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
new file mode 100644
index 0000000..7ab7228
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
@@ -0,0 +1,28 @@
+package com.casic.service.scanner;
+
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class FlowDataScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String thresholdValue = alarmLevelConfig.getFlow();
+ List> flowDataMapList = this.deviceDataMapper.getFlowData();
+ flowDataMapList.forEach(
+ flowDataMap -> {
+ String devcode = flowDataMap.get("devcode").toString();
+ String insdata = flowDataMap.get("insdata").toString();
+ Integer isAlarm = isAlarm(insdata, thresholdValue);
+ sendAlarmMsg(devcode, isAlarm);
+ }
+ );
+ }
+
+
+}
diff --git a/src/main/java/com/casic/service/scanner/PressDataScanner.java b/src/main/java/com/casic/service/scanner/PressDataScanner.java
new file mode 100644
index 0000000..6738c38
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/PressDataScanner.java
@@ -0,0 +1,29 @@
+package com.casic.service.scanner;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.DeviceDataMapper;
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class PressDataScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String thresholdValue = alarmLevelConfig.getPressure();
+ List> pressDataMapList = this.deviceDataMapper.getPressureData();
+ pressDataMapList.forEach(
+ pressDataMap -> {
+ String devcode = pressDataMap.get("devcode").toString();
+ String pressdata = pressDataMap.get("pressdata").toString();
+ Integer isAlarm=isAlarm(pressdata,thresholdValue);
+ sendAlarmMsg(devcode,isAlarm);
+ }
+ );
+ }
+
+}
diff --git a/src/main/java/com/casic/service/scanner/TempHumiScanner.java b/src/main/java/com/casic/service/scanner/TempHumiScanner.java
new file mode 100644
index 0000000..a9efc57
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/TempHumiScanner.java
@@ -0,0 +1,34 @@
+package com.casic.service.scanner;
+
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class TempHumiScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String humiThreshold = alarmLevelConfig.getHumi();
+ String tempThreshold = alarmLevelConfig.getTemp();
+ List> pressDataMapList = this.deviceDataMapper.getHumiTemp();
+ pressDataMapList.forEach(
+ pressDataMap -> {
+ String devcode = pressDataMap.get("devcode").toString();
+ String temperatureData = pressDataMap.get("temperature").toString();
+ Integer isTempAlarm = isAlarm(temperatureData, tempThreshold);
+ String humidityData = pressDataMap.get("humidity").toString();
+ Integer isHumiAlarm = isAlarm(humidityData, humiThreshold);
+ if (isHumiAlarm == 0 && isTempAlarm == 0) {
+ sendAlarmMsg(devcode, 0);
+ } else {
+ sendAlarmMsg(devcode, 1);
+ }
+ }
+ );
+ }
+
+}
diff --git a/src/main/java/com/casic/util/Client.java b/src/main/java/com/casic/util/Client.java
deleted file mode 100644
index a416600..0000000
--- a/src/main/java/com/casic/util/Client.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.casic.util;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.net.Socket;
-import java.net.UnknownHostException;
-
-/**
- * @author: njb
- * @Date: 2020/11/26 18:49
- * @desc: 客户端socket
- */
-public class Client {
- public static void main(String[] args) {
- try {
- //发送到8888端口
- Socket socket = new Socket("127.0.0.1", 11321);
- //输出流
- OutputStream outputStream = socket.getOutputStream();
- PrintWriter printWriter = new PrintWriter(outputStream);
- printWriter.write("服务端你好,我是客户端");
- printWriter.flush();
- //关闭资源
- printWriter.close();
- outputStream.close();
- socket.close();
- } catch (UnknownHostException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-}
diff --git a/src/main/java/com/casic/util/ClientTest.java b/src/main/java/com/casic/util/ClientTest.java
new file mode 100644
index 0000000..4c1bf65
--- /dev/null
+++ b/src/main/java/com/casic/util/ClientTest.java
@@ -0,0 +1,34 @@
+package com.casic.util;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.net.Socket;
+import java.net.UnknownHostException;
+
+/**
+ * @author: njb
+ * @Date: 2020/11/26 18:49
+ * @desc: 客户端socket
+ */
+public class ClientTest {
+ public static void main(String[] args) {
+ try {
+ //发送到8888端口
+ Socket socket = new Socket("127.0.0.1", 11321);
+ //输出流
+ OutputStream outputStream = socket.getOutputStream();
+ PrintWriter printWriter = new PrintWriter(outputStream);
+ printWriter.write("服务端你好,我是客户端");
+ printWriter.flush();
+ //关闭资源
+ printWriter.close();
+ outputStream.close();
+ socket.close();
+ } catch (UnknownHostException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/util/Server.java b/src/main/java/com/casic/util/Server.java
deleted file mode 100644
index 50c0957..0000000
--- a/src/main/java/com/casic/util/Server.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.casic.util;
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.ServerSocket;
-import java.net.Socket;
-
-/**
- * @author: njb
- * @Date: 2020/11/26 18:49
- * @desc: 服务器socket
- */
-public class Server {
- public static void main(String[] args) {
- try {
- ServerSocket serverSocket = new ServerSocket(11321);
- System.out.println("----------------服务端执行,開始监听请求----------------");
-
- Socket socket = serverSocket.accept();//開始监听
- InputStream inputStream = socket.getInputStream();
- //获取请求内容
- String info;
- BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
- while ((info = bufferedReader.readLine()) != null) {
- System.out.println("我是服务端,客户端请求为:" + info);
- }
- //关闭资源
- socket.shutdownInput();
- bufferedReader.close();
- inputStream.close();
- socket.close();
- serverSocket.close();
- } catch (Exception exception) {
- exception.printStackTrace();
- }
- }
-}
\ No newline at end of file
diff --git a/src/main/java/com/casic/util/ServerTest.java b/src/main/java/com/casic/util/ServerTest.java
new file mode 100644
index 0000000..53ba687
--- /dev/null
+++ b/src/main/java/com/casic/util/ServerTest.java
@@ -0,0 +1,38 @@
+package com.casic.util;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+/**
+ * @author: njb
+ * @Date: 2020/11/26 18:49
+ * @desc: 服务器socket
+ */
+public class ServerTest {
+ public static void main(String[] args) {
+ try {
+ ServerSocket serverSocket = new ServerSocket(11321);
+ System.out.println("----------------服务端执行,開始监听请求----------------");
+
+ Socket socket = serverSocket.accept();//開始监听
+ InputStream inputStream = socket.getInputStream();
+ //获取请求内容
+ String info;
+ BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+ while ((info = bufferedReader.readLine()) != null) {
+ System.out.println("我是服务端,客户端请求为:" + info);
+ }
+ //关闭资源
+ socket.shutdownInput();
+ bufferedReader.close();
+ inputStream.close();
+ socket.close();
+ serverSocket.close();
+ } catch (Exception exception) {
+ exception.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/casic/util/SpringContextUtil.java b/src/main/java/com/casic/util/SpringContextUtil.java
new file mode 100644
index 0000000..290d6f6
--- /dev/null
+++ b/src/main/java/com/casic/util/SpringContextUtil.java
@@ -0,0 +1,106 @@
+package com.casic.util;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.beans.factory.support.AbstractBeanDefinition;
+import org.springframework.beans.factory.support.BeanDefinitionBuilder;
+import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ForkJoinPool;
+import java.util.function.Function;
+
+/**
+ * @Description: Spring应用上下文工具
+ * @Author: cz
+ * @Date: 2022-04-19
+ */
+@Component
+public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware {
+ /**
+ * Spring应用上下文环境
+ */
+ private static ApplicationContext applicationContext;
+
+ private static ConfigurableListableBeanFactory beanFactory;
+
+ /**
+ * 实现ApplicationContextAware接口的回调方法,设置上下文环境
+ */
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+ SpringContextUtil.applicationContext = applicationContext;
+ }
+
+ @Override
+ public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
+ SpringContextUtil.beanFactory = beanFactory;
+ }
+
+ public static ApplicationContext getApplicationContext() {
+ return applicationContext;
+ }
+
+// public static Object getBean(String beanId) throws BeansException {
+// return applicationContext.getBean(beanId);
+// }
+
+ public static T getBean(Class requiredType) {
+ return (T) applicationContext.getBean(requiredType);
+ }
+
+ @SuppressWarnings("unchecked")
+ public static T getBean(String name) throws BeansException {
+ return (T) beanFactory.getBean(name);
+ }
+
+ public static boolean containsBean(String name) {
+ return beanFactory.containsBean(name);
+ }
+
+ public static T registerBean(String beanName, Class clazz, Function function) {
+ // 生成bean定义
+ BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz);
+ // 执行bean处理函数
+ AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder);
+ BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory;
+ // 判断是否通过beanName注册
+ if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) {
+ beanFactory.registerBeanDefinition(beanName, beanDefinition);
+ return getBean(beanName);
+ } else {
+ // 非命名bean注册
+ String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory);
+ return getBean(name);
+ }
+ }
+
+ public static T registerBean(String beanName, Class clazz, List args, Map property) {
+ return registerBean(beanName, clazz, beanDefinitionBuilder -> {
+ // 放入构造参数
+ if (!CollectionUtils.isEmpty(args)) {
+ args.forEach(beanDefinitionBuilder::addConstructorArgValue);
+ }
+ // 放入属性
+ if (!CollectionUtils.isEmpty(property)) {
+ property.forEach(beanDefinitionBuilder::addPropertyValue);
+ }
+ return beanDefinitionBuilder.getBeanDefinition();
+ });
+ }
+
+ @Bean
+ public ForkJoinPool forkJoinPool() {
+ return new ForkJoinPool(100);
+ }
+
+}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..20205e3
--- /dev/null
+++ b/src/main/resources/application-dev.yml
@@ -0,0 +1,18 @@
+server:
+ port: 11315
+################### spring配置 ###################
+spring:
+ datasource:
+ driverClassName: oracle.jdbc.driver.OracleDriver
+ url: jdbc:oracle:thin:@139.198.18.188:1521:WDMA
+ username: sensor
+ password: sensor
+ jms:
+ pub-sub-domain: false
+
+logging:
+ level.root: error
+ level.com.casic: info
+ file:
+ path: logs/
+ name: missiles.log
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
- if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
-// log.info(" String : " + msg.toString(Charset.defaultCharset()));
-// if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
- pareDeviceHex(msg);
-// out.add(msg);
-// }
- }
- }
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
- String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
- log.info(" devcode : " + devcode);
- byteBuf.resetReaderIndex();//重置位判断
- String valueStr=byteBuf.slice(26, 4).toString(Charset.defaultCharset());
- log.info(" valueStr : " + valueStr);
- long defaultValue = Long.valueOf(valueStr);
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverDomain.java b/src/main/java/com/casic/handler/ReceiverDomain.java
deleted file mode 100644
index f0a89b6..0000000
--- a/src/main/java/com/casic/handler/ReceiverDomain.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import lombok.Data;
-
-/**
- * @description: 环境数据实体类
- * @author: Stone
- * @create: 2019-01-10 22:38
- **/
-@Data
-public class ReceiverDomain {
- private String head;
- private int len;
- private String key;
- private String value;
-
- public ReceiverDomain(ByteBuf bf) {
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServer.java b/src/main/java/com/casic/handler/ReceiverServer.java
deleted file mode 100644
index 6894a00..0000000
--- a/src/main/java/com/casic/handler/ReceiverServer.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.casic.handler;
-
-import io.netty.bootstrap.ServerBootstrap;
-import io.netty.channel.ChannelFuture;
-import io.netty.channel.ChannelInitializer;
-import io.netty.channel.ChannelOption;
-import io.netty.channel.EventLoopGroup;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.channel.socket.SocketChannel;
-import io.netty.channel.socket.nio.NioServerSocketChannel;
-import io.netty.handler.codec.LineBasedFrameDecoder;
-import io.netty.handler.codec.string.StringDecoder;
-import io.netty.handler.logging.LogLevel;
-import io.netty.handler.logging.LoggingHandler;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-
-/**
- * @description: 接收客户端传过来的数据,只做打印处理
- * @author: Stone
- * @create: 2019-01-10 19:52
- **/
-@Slf4j
-@Component
-public class ReceiverServer {
-
- @Autowired
- private ReceiverServerHandler receiverServerHandler;
-
- @Value("${xgd.server-port}")
- private int port;
-
-
-
- @PostConstruct
- public void init() {
- this.start();
- }
-
- public void start() {
- EventLoopGroup bossGroup = new NioEventLoopGroup();
- EventLoopGroup workerGroup = new NioEventLoopGroup();
- log.info("server bind port = {}", port);
-
- ServerBootstrap serverBootstrap = new ServerBootstrap();
- serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
- serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
- serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
-
- serverBootstrap.childHandler(new ChannelInitializer() {
- @Override
- protected void initChannel(SocketChannel socketChannel) {
-// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
- socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
- socketChannel.pipeline().addLast(new ReceiverDecoder());
- socketChannel.pipeline().addLast(new StringDecoder());
- socketChannel.pipeline().addLast(receiverServerHandler);
- }
- });
-
- serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
- try {
- ChannelFuture channelFuture = serverBootstrap.bind(port).sync();
- channelFuture.channel().closeFuture().sync();
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- workerGroup.shutdownGracefully();
- bossGroup.shutdownGracefully();
- }
- }
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServerHandler.java b/src/main/java/com/casic/handler/ReceiverServerHandler.java
deleted file mode 100644
index f432e06..0000000
--- a/src/main/java/com/casic/handler/ReceiverServerHandler.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.casic.handler;
-
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelInboundHandlerAdapter;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.javassist.bytecode.ByteArray;
-import org.springframework.stereotype.Component;
-
-/**
- * @description: 消息处理handler
- * @author: Stone
- * @create: 2019-01-10 20:01
- **/
-@Slf4j
-@Component
-@ChannelHandler.Sharable
-public class ReceiverServerHandler extends ChannelInboundHandlerAdapter {
-
- public ReceiverServerHandler() {
- }
-
- @Override
- public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
- super.channelRegistered(ctx);
- }
-
- @Override
- public void channelActive(ChannelHandlerContext ctx) throws Exception {
- super.channelActive(ctx);
- }
-
- @Override
- public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
- super.channelRead(ctx, msg);
-// log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME,(String)msg);
- log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
- String msgStr = msg.toString();
- // 以固定行分隔符结尾分割,头部可能有不符合接口协议的字段, 去掉
- int idx = msgStr.indexOf("##");
- if (idx >= 0) {
- msgStr = msgStr.substring(idx);
- }
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME, msgStr);
- }
-
-// //ByteBuf byteBuf
- public static void main(String[] main) {
- byte[] hexBytes = {(byte) 0x86, 0x53, 0x28, 0x06, (byte) 0x84, 0x19, (byte) 0x94,
- 0x30, (byte) 0xAA, (byte) 0xAA, 0x01, 0x03, (byte) 0x02, 0x02, 0x00, (byte) 0xB8, 0x44};
- ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
- out.writeBytes(hexBytes);
-
- if (ByteBufUtil.hexDump(out).toLowerCase().contains("aaaa")) {
- pareDeviceHex(out);
- }
- }
-
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- String devcode = ByteBufUtil.hexDump(byteBuf.slice(0, 8));
- devcode = devcode.substring(0, devcode.length() - 1);
- //数值读取
- byteBuf.readBytes(12);
- byteBuf.markReaderIndex();
- Integer defaultValueLength = byteBuf.readByte() & 0xff;
- long defaultValue = 0;
- for (int i = 0; i < defaultValueLength; i++) {
- long tempLong = byteBuf.readByte() & 0xff;
- defaultValue = defaultValue * 256 + tempLong;
- }
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
- super.exceptionCaught(ctx, cause);
- cause.printStackTrace();
- ctx.close();
- }
-
-}
diff --git a/src/main/java/com/casic/mapper/DeviceDataMapper.java b/src/main/java/com/casic/mapper/DeviceDataMapper.java
new file mode 100644
index 0000000..be72d19
--- /dev/null
+++ b/src/main/java/com/casic/mapper/DeviceDataMapper.java
@@ -0,0 +1,28 @@
+package com.casic.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface DeviceDataMapper {
+
+
+ /**
+ * 获取压力数据
+ */
+ List> getPressureData();
+
+ /**
+ * 获取流量数据
+ */
+ List> getFlowData();
+
+ /**
+ * 获取温湿度数据
+ */
+ List> getHumiTemp();
+
+
+}
diff --git a/src/main/java/com/casic/mapper/RainFallDataMapper.java b/src/main/java/com/casic/mapper/RainFallDataMapper.java
new file mode 100644
index 0000000..f5c29db
--- /dev/null
+++ b/src/main/java/com/casic/mapper/RainFallDataMapper.java
@@ -0,0 +1,7 @@
+package com.casic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.model.RainFallData;
+
+public interface RainFallDataMapper extends BaseMapper {
+}
diff --git a/src/main/java/com/casic/model/RainFallData.java b/src/main/java/com/casic/model/RainFallData.java
new file mode 100644
index 0000000..fa96673
--- /dev/null
+++ b/src/main/java/com/casic/model/RainFallData.java
@@ -0,0 +1,30 @@
+package com.casic.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@TableName("AD_YL_YLIANG")
+public class RainFallData {
+
+ private String dbid;
+
+ private String scrid;
+
+ private String dstid;
+
+ private String totalyuliang;
+
+ private String curminuteyuliang;
+
+ private String forminuteyuliang;
+
+ private String value;
+
+ private Date logtime;
+
+ private Date uptime;
+
+}
diff --git a/src/main/java/com/casic/model/RelayStatusDTO.java b/src/main/java/com/casic/model/RelayStatusDTO.java
new file mode 100644
index 0000000..b839e0c
--- /dev/null
+++ b/src/main/java/com/casic/model/RelayStatusDTO.java
@@ -0,0 +1,20 @@
+package com.casic.model;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class RelayStatusDTO {
+
+ /***
+ * 通道名称 1 2 3 4 5 6 7 8
+ */
+ private String channelName;
+
+ /***
+ * 开关0,1
+ */
+ private Integer lampSwitch;
+
+}
diff --git a/src/main/java/com/casic/resolver/AlarmDataResolver.java b/src/main/java/com/casic/resolver/AlarmDataResolver.java
new file mode 100644
index 0000000..2c6874b
--- /dev/null
+++ b/src/main/java/com/casic/resolver/AlarmDataResolver.java
@@ -0,0 +1,28 @@
+package com.casic.resolver;
+
+
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class AlarmDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if(msg.contains(alarmMark)){
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ Integer isAlarm = Integer.valueOf(msg.substring(16,17));
+ log.info("设备编号为" + devcode + ",是否报警" + isAlarm);
+ return RelayStatusDTO.builder()
+ .channelName( RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/casic/resolver/DatagramResolver.java b/src/main/java/com/casic/resolver/DatagramResolver.java
new file mode 100644
index 0000000..d00c952
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramResolver.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+import com.casic.model.RelayStatusDTO;
+
+public interface DatagramResolver {
+
+ RelayStatusDTO datagram(String msg);
+
+}
diff --git a/src/main/java/com/casic/resolver/DatagramSupport.java b/src/main/java/com/casic/resolver/DatagramSupport.java
new file mode 100644
index 0000000..1d911a3
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramSupport.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+public class DatagramSupport {
+
+
+
+
+
+}
diff --git a/src/main/java/com/casic/resolver/RainFallDataResolver.java b/src/main/java/com/casic/resolver/RainFallDataResolver.java
new file mode 100644
index 0000000..8a22899
--- /dev/null
+++ b/src/main/java/com/casic/resolver/RainFallDataResolver.java
@@ -0,0 +1,79 @@
+package com.casic.resolver;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service
+@Slf4j
+public class RainFallDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Autowired
+ private RainFallDataMapper rainFallDataMapper;
+ @Autowired
+ private AlarmLevelConfig alarmLevelConfig;
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if (msg.contains(rainFallMark)) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ String defaultValue = msg.substring(26, 30);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ RainFallData rainFallData = initRainFallData(devcode, defaultValue);
+ rainFallDataMapper.insert(rainFallData);
+ Integer isAlarm = isAlarm(String.valueOf(defaultValue), alarmLevelConfig.getRainfall());
+ return RelayStatusDTO.builder()
+ .channelName(RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+
+ }
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ private RainFallData initRainFallData(String devcode, String valueStr) {
+ RainFallData rainFallData = new RainFallData();
+ rainFallData.setDstid(devcode);
+ rainFallData.setTotalyuliang(valueStr);
+ rainFallData.setUptime(new Date());
+ rainFallData.setLogtime(new Date());
+ return rainFallData;
+ }
+
+ // //ByteBuf byteBuf
+ public static void main(String[] main) {
+ pareDeviceHex("8653280684199430AAAA01030200023985");
+ }
+
+ private static void pareDeviceHex(String msg) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ log.info(" devcode : " + devcode);
+ String valueStr = msg.substring(26, 30);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverDecoder.java b/src/main/java/com/casic/server/ReceiverDecoder.java
new file mode 100644
index 0000000..7030790
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverDecoder.java
@@ -0,0 +1,71 @@
+package com.casic.server;
+
+import com.casic.enums.RelaySwitchEnums;
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.ByteToMessageDecoder;
+import lombok.extern.slf4j.Slf4j;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * 自定义解码器
+ *
+ * @description: 将从接口取到的数据编码
+ * @author: cz
+ * @create: 2023-5-10
+ **/
+@Slf4j
+public class ReceiverDecoder extends ByteToMessageDecoder implements RelaySwitchEnums {
+
+
+// final ChannelGroup channels =
+// new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+
+ @Override
+ protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
+ if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
+ pareDeviceHex(msg);
+ }
+// if(msg.readableBytes()>2){
+// out.add(msg);
+// }
+ }
+
+// @Override
+// public void channelActive(ChannelHandlerContext ctx) throws Exception {
+// channels.add(ctx.channel());
+// super.channelActive(ctx);
+// }
+//
+// @Override
+// public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+// super.channelRead(ctx, msg);
+// ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+// String switchConent = preFix + 1 + "," + 1 + postFix;
+// out.writeBytes(switchConent.getBytes());
+// channels.forEach(
+// channel ->{
+// if(channel!=ctx.channel()) {
+// channel.writeAndFlush(out);
+// }
+// }
+// );
+// }
+
+ private static void pareDeviceHex(ByteBuf byteBuf) {
+ //去掉补位
+ log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
+ String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
+ log.info(" devcode : " + devcode);
+ byteBuf.resetReaderIndex();//重置位判断
+ String valueStr = byteBuf.slice(26, 4).toString(Charset.defaultCharset());
+ log.info(" valueStr : " + valueStr);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverServer.java b/src/main/java/com/casic/server/ReceiverServer.java
new file mode 100644
index 0000000..a98e4ca
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServer.java
@@ -0,0 +1,72 @@
+package com.casic.server;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.logging.LogLevel;
+import io.netty.handler.logging.LoggingHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * @description: 接收客户端传过来的数据,只做打印处理
+ * @author: Stone
+ * @create: 2019-01-10 19:52
+ **/
+@Slf4j
+@Component
+public class ReceiverServer {
+
+ @Autowired
+ private ReceiverServerHandler receiverServerHandler;
+ @Autowired
+ private ServerPort serverPort;
+
+ @PostConstruct
+ public void init() {
+ this.start();
+ }
+
+ public void start() {
+ EventLoopGroup bossGroup = new NioEventLoopGroup();
+ EventLoopGroup workerGroup = new NioEventLoopGroup();
+ log.info("server bind port = {}", serverPort.getPort());
+
+ ServerBootstrap serverBootstrap = new ServerBootstrap();
+ serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
+ serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
+ serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
+
+ serverBootstrap.childHandler(new ChannelInitializer() {
+ @Override
+ protected void initChannel(SocketChannel socketChannel) {
+// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
+ socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
+// socketChannel.pipeline().addLast(new ReceiverDecoder());
+ socketChannel.pipeline().addLast(new StringDecoder());
+ socketChannel.pipeline().addLast(receiverServerHandler);
+ }
+ });
+ serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
+ try {
+ ChannelFuture channelFuture = serverBootstrap.bind(serverPort.getPort()).sync();
+ channelFuture.channel().closeFuture().sync();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } finally {
+ workerGroup.shutdownGracefully();
+ bossGroup.shutdownGracefully();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/server/ReceiverServerHandler.java b/src/main/java/com/casic/server/ReceiverServerHandler.java
new file mode 100644
index 0000000..31ac43e
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServerHandler.java
@@ -0,0 +1,103 @@
+package com.casic.server;
+
+
+import com.casic.enums.RelaySwitchEnums;
+import com.casic.model.RelayStatusDTO;
+import com.casic.resolver.RainFallDataResolver;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.channel.group.ChannelGroup;
+import io.netty.channel.group.DefaultChannelGroup;
+import io.netty.util.concurrent.GlobalEventExecutor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * @description: 消息处理handler
+ * @author: Stone
+ * @create: 2019-01-10 20:01
+ **/
+@Slf4j
+@Component
+@ChannelHandler.Sharable
+public class ReceiverServerHandler extends ChannelInboundHandlerAdapter implements RelaySwitchEnums {
+
+ final ChannelGroup channels =
+ new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+ @Autowired
+ private List rainFallDataResolverList;
+
+ public ReceiverServerHandler() {
+ }
+
+ @Override
+ public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
+ super.channelRegistered(ctx);
+ }
+
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ channels.add(ctx.channel());
+ super.channelActive(ctx);
+ }
+
+ @Override
+ public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+ channels.forEach(channel -> {
+ if (channel == ctx.channel()) {
+ channels.remove(channel);
+ }
+ }
+ );
+ super.channelInactive(ctx);
+ }
+
+ /**
+ * 雨量计
+ */
+ @Override
+ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+ if (msg instanceof String) {
+ rainFallDataResolverList.forEach(
+ rainFallDataResolver -> {
+ RelayStatusDTO relayStatusDTO = rainFallDataResolver.datagram(String.valueOf(msg));
+ sendMsg(ctx, relayStatusDTO);
+ }
+ );
+ }
+ super.channelRead(ctx, msg);
+ }
+
+ private void sendMsg(ChannelHandlerContext ctx, RelayStatusDTO relayStatusDTO) {
+ if (!ObjectUtils.isEmpty(relayStatusDTO)) {
+ ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+ String switchConent = preFix + relayStatusDTO.getChannelName() + "," + relayStatusDTO.getLampSwitch() + postFix;
+ out.writeBytes(switchConent.getBytes());
+ channels.forEach(channel -> {
+ if (channel.isActive()) {
+ if (channel != ctx.channel()) {
+ channel.writeAndFlush(out);
+ }
+ }
+ }
+ );
+ }
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ super.exceptionCaught(ctx, cause);
+ cause.printStackTrace();
+ ctx.close();
+ }
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataScanner.java b/src/main/java/com/casic/service/DeviceDataScanner.java
new file mode 100644
index 0000000..049fa71
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataScanner.java
@@ -0,0 +1,7 @@
+package com.casic.service;
+
+public interface DeviceDataScanner {
+
+ void scanDeviceData();
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataSupport.java b/src/main/java/com/casic/service/DeviceDataSupport.java
new file mode 100644
index 0000000..93d61ea
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataSupport.java
@@ -0,0 +1,50 @@
+package com.casic.service;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.client.Client;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.mapper.DeviceDataMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ *
+ */
+@Slf4j
+@Component
+public class DeviceDataSupport implements AlarmDatagramFlag {
+
+ @Autowired
+ protected DeviceDataMapper deviceDataMapper;
+ @Autowired
+ protected AlarmLevelConfig alarmLevelConfig;
+ @Autowired
+ private Client client;
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * 发送报警消息
+ */
+ protected void sendAlarmMsg(String devcode, Integer isAlarm) {
+ try {
+ String alarmMsg = devcode + alarmMark + isAlarm;
+ client.send(alarmMsg);
+ } catch (Exception ex) {
+ log.error("消息发送失败,设备编号为{},异常信息{}", devcode, ex.getMessage());
+ }
+ }
+
+}
diff --git a/src/main/java/com/casic/service/RainFallDataService.java b/src/main/java/com/casic/service/RainFallDataService.java
new file mode 100644
index 0000000..6c1a12d
--- /dev/null
+++ b/src/main/java/com/casic/service/RainFallDataService.java
@@ -0,0 +1,6 @@
+package com.casic.service;
+
+public interface RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
new file mode 100644
index 0000000..14dc1eb
--- /dev/null
+++ b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
@@ -0,0 +1,13 @@
+package com.casic.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.service.RainFallDataService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class RainFallDataServiceImpl extends ServiceImpl implements RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/scanner/FlowDataScanner.java b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
new file mode 100644
index 0000000..7ab7228
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
@@ -0,0 +1,28 @@
+package com.casic.service.scanner;
+
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class FlowDataScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String thresholdValue = alarmLevelConfig.getFlow();
+ List> flowDataMapList = this.deviceDataMapper.getFlowData();
+ flowDataMapList.forEach(
+ flowDataMap -> {
+ String devcode = flowDataMap.get("devcode").toString();
+ String insdata = flowDataMap.get("insdata").toString();
+ Integer isAlarm = isAlarm(insdata, thresholdValue);
+ sendAlarmMsg(devcode, isAlarm);
+ }
+ );
+ }
+
+
+}
diff --git a/src/main/java/com/casic/service/scanner/PressDataScanner.java b/src/main/java/com/casic/service/scanner/PressDataScanner.java
new file mode 100644
index 0000000..6738c38
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/PressDataScanner.java
@@ -0,0 +1,29 @@
+package com.casic.service.scanner;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.DeviceDataMapper;
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class PressDataScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String thresholdValue = alarmLevelConfig.getPressure();
+ List> pressDataMapList = this.deviceDataMapper.getPressureData();
+ pressDataMapList.forEach(
+ pressDataMap -> {
+ String devcode = pressDataMap.get("devcode").toString();
+ String pressdata = pressDataMap.get("pressdata").toString();
+ Integer isAlarm=isAlarm(pressdata,thresholdValue);
+ sendAlarmMsg(devcode,isAlarm);
+ }
+ );
+ }
+
+}
diff --git a/src/main/java/com/casic/service/scanner/TempHumiScanner.java b/src/main/java/com/casic/service/scanner/TempHumiScanner.java
new file mode 100644
index 0000000..a9efc57
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/TempHumiScanner.java
@@ -0,0 +1,34 @@
+package com.casic.service.scanner;
+
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class TempHumiScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String humiThreshold = alarmLevelConfig.getHumi();
+ String tempThreshold = alarmLevelConfig.getTemp();
+ List> pressDataMapList = this.deviceDataMapper.getHumiTemp();
+ pressDataMapList.forEach(
+ pressDataMap -> {
+ String devcode = pressDataMap.get("devcode").toString();
+ String temperatureData = pressDataMap.get("temperature").toString();
+ Integer isTempAlarm = isAlarm(temperatureData, tempThreshold);
+ String humidityData = pressDataMap.get("humidity").toString();
+ Integer isHumiAlarm = isAlarm(humidityData, humiThreshold);
+ if (isHumiAlarm == 0 && isTempAlarm == 0) {
+ sendAlarmMsg(devcode, 0);
+ } else {
+ sendAlarmMsg(devcode, 1);
+ }
+ }
+ );
+ }
+
+}
diff --git a/src/main/java/com/casic/util/Client.java b/src/main/java/com/casic/util/Client.java
deleted file mode 100644
index a416600..0000000
--- a/src/main/java/com/casic/util/Client.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.casic.util;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.net.Socket;
-import java.net.UnknownHostException;
-
-/**
- * @author: njb
- * @Date: 2020/11/26 18:49
- * @desc: 客户端socket
- */
-public class Client {
- public static void main(String[] args) {
- try {
- //发送到8888端口
- Socket socket = new Socket("127.0.0.1", 11321);
- //输出流
- OutputStream outputStream = socket.getOutputStream();
- PrintWriter printWriter = new PrintWriter(outputStream);
- printWriter.write("服务端你好,我是客户端");
- printWriter.flush();
- //关闭资源
- printWriter.close();
- outputStream.close();
- socket.close();
- } catch (UnknownHostException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-}
diff --git a/src/main/java/com/casic/util/ClientTest.java b/src/main/java/com/casic/util/ClientTest.java
new file mode 100644
index 0000000..4c1bf65
--- /dev/null
+++ b/src/main/java/com/casic/util/ClientTest.java
@@ -0,0 +1,34 @@
+package com.casic.util;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.net.Socket;
+import java.net.UnknownHostException;
+
+/**
+ * @author: njb
+ * @Date: 2020/11/26 18:49
+ * @desc: 客户端socket
+ */
+public class ClientTest {
+ public static void main(String[] args) {
+ try {
+ //发送到8888端口
+ Socket socket = new Socket("127.0.0.1", 11321);
+ //输出流
+ OutputStream outputStream = socket.getOutputStream();
+ PrintWriter printWriter = new PrintWriter(outputStream);
+ printWriter.write("服务端你好,我是客户端");
+ printWriter.flush();
+ //关闭资源
+ printWriter.close();
+ outputStream.close();
+ socket.close();
+ } catch (UnknownHostException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/util/Server.java b/src/main/java/com/casic/util/Server.java
deleted file mode 100644
index 50c0957..0000000
--- a/src/main/java/com/casic/util/Server.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.casic.util;
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.ServerSocket;
-import java.net.Socket;
-
-/**
- * @author: njb
- * @Date: 2020/11/26 18:49
- * @desc: 服务器socket
- */
-public class Server {
- public static void main(String[] args) {
- try {
- ServerSocket serverSocket = new ServerSocket(11321);
- System.out.println("----------------服务端执行,開始监听请求----------------");
-
- Socket socket = serverSocket.accept();//開始监听
- InputStream inputStream = socket.getInputStream();
- //获取请求内容
- String info;
- BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
- while ((info = bufferedReader.readLine()) != null) {
- System.out.println("我是服务端,客户端请求为:" + info);
- }
- //关闭资源
- socket.shutdownInput();
- bufferedReader.close();
- inputStream.close();
- socket.close();
- serverSocket.close();
- } catch (Exception exception) {
- exception.printStackTrace();
- }
- }
-}
\ No newline at end of file
diff --git a/src/main/java/com/casic/util/ServerTest.java b/src/main/java/com/casic/util/ServerTest.java
new file mode 100644
index 0000000..53ba687
--- /dev/null
+++ b/src/main/java/com/casic/util/ServerTest.java
@@ -0,0 +1,38 @@
+package com.casic.util;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+/**
+ * @author: njb
+ * @Date: 2020/11/26 18:49
+ * @desc: 服务器socket
+ */
+public class ServerTest {
+ public static void main(String[] args) {
+ try {
+ ServerSocket serverSocket = new ServerSocket(11321);
+ System.out.println("----------------服务端执行,開始监听请求----------------");
+
+ Socket socket = serverSocket.accept();//開始监听
+ InputStream inputStream = socket.getInputStream();
+ //获取请求内容
+ String info;
+ BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+ while ((info = bufferedReader.readLine()) != null) {
+ System.out.println("我是服务端,客户端请求为:" + info);
+ }
+ //关闭资源
+ socket.shutdownInput();
+ bufferedReader.close();
+ inputStream.close();
+ socket.close();
+ serverSocket.close();
+ } catch (Exception exception) {
+ exception.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/casic/util/SpringContextUtil.java b/src/main/java/com/casic/util/SpringContextUtil.java
new file mode 100644
index 0000000..290d6f6
--- /dev/null
+++ b/src/main/java/com/casic/util/SpringContextUtil.java
@@ -0,0 +1,106 @@
+package com.casic.util;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.beans.factory.support.AbstractBeanDefinition;
+import org.springframework.beans.factory.support.BeanDefinitionBuilder;
+import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ForkJoinPool;
+import java.util.function.Function;
+
+/**
+ * @Description: Spring应用上下文工具
+ * @Author: cz
+ * @Date: 2022-04-19
+ */
+@Component
+public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware {
+ /**
+ * Spring应用上下文环境
+ */
+ private static ApplicationContext applicationContext;
+
+ private static ConfigurableListableBeanFactory beanFactory;
+
+ /**
+ * 实现ApplicationContextAware接口的回调方法,设置上下文环境
+ */
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+ SpringContextUtil.applicationContext = applicationContext;
+ }
+
+ @Override
+ public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
+ SpringContextUtil.beanFactory = beanFactory;
+ }
+
+ public static ApplicationContext getApplicationContext() {
+ return applicationContext;
+ }
+
+// public static Object getBean(String beanId) throws BeansException {
+// return applicationContext.getBean(beanId);
+// }
+
+ public static T getBean(Class requiredType) {
+ return (T) applicationContext.getBean(requiredType);
+ }
+
+ @SuppressWarnings("unchecked")
+ public static T getBean(String name) throws BeansException {
+ return (T) beanFactory.getBean(name);
+ }
+
+ public static boolean containsBean(String name) {
+ return beanFactory.containsBean(name);
+ }
+
+ public static T registerBean(String beanName, Class clazz, Function function) {
+ // 生成bean定义
+ BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz);
+ // 执行bean处理函数
+ AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder);
+ BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory;
+ // 判断是否通过beanName注册
+ if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) {
+ beanFactory.registerBeanDefinition(beanName, beanDefinition);
+ return getBean(beanName);
+ } else {
+ // 非命名bean注册
+ String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory);
+ return getBean(name);
+ }
+ }
+
+ public static T registerBean(String beanName, Class clazz, List args, Map property) {
+ return registerBean(beanName, clazz, beanDefinitionBuilder -> {
+ // 放入构造参数
+ if (!CollectionUtils.isEmpty(args)) {
+ args.forEach(beanDefinitionBuilder::addConstructorArgValue);
+ }
+ // 放入属性
+ if (!CollectionUtils.isEmpty(property)) {
+ property.forEach(beanDefinitionBuilder::addPropertyValue);
+ }
+ return beanDefinitionBuilder.getBeanDefinition();
+ });
+ }
+
+ @Bean
+ public ForkJoinPool forkJoinPool() {
+ return new ForkJoinPool(100);
+ }
+
+}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..20205e3
--- /dev/null
+++ b/src/main/resources/application-dev.yml
@@ -0,0 +1,18 @@
+server:
+ port: 11315
+################### spring配置 ###################
+spring:
+ datasource:
+ driverClassName: oracle.jdbc.driver.OracleDriver
+ url: jdbc:oracle:thin:@139.198.18.188:1521:WDMA
+ username: sensor
+ password: sensor
+ jms:
+ pub-sub-domain: false
+
+logging:
+ level.root: error
+ level.com.casic: info
+ file:
+ path: logs/
+ name: missiles.log
\ No newline at end of file
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index d27f7a5..4a7b9ac 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,29 +1,34 @@
-server:
- port: 11315
-################### spring配置 ###################
spring:
- datasource:
- driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://111.198.10.15:11102/smartwell_demos?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&&allowMultiQueries=true&&useSSL=true
- username: root
- password: Casic203!
- jms:
- pub-sub-domain: false
- activemq:
- user:
- password:
- broker-url: tcp://192.168.0.203:61616
- kafka:
- url: http://58.250.71.201:19000/API/Table/GetRTJoinTmpStore
- tableId: 66
- topic: 66
+ profiles:
+ active: dev
+ servlet:
+ multipart:
+ max-file-size: 50MB
+ max-request-size: 80MB
+ mvc:
+ pathmatch:
+ matching-strategy: ant_path_matcher
+mybatis-plus:
+ global-config:
+ enable-sql-runner: true
+ configuration:
+ # 配置结果集属性为空时 是否映射返回结果
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用
+ mapper-locations: classpath:mapper/*.xml
+mybatis:
+ mapper-locations: classpath:mapper/*.xml
+#mybatis-plus:
+# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
-
-
-
-# customer config
-c-activemq:
- queue-name: "hjt.msg.queue"
+casic:
+ alarm:
+ rainfall: 20
+ humi: 10
+ temp: 10
+ pressure: 15
+ flow: 5
+ task:
+ cronTime: 0 */1 * * * ?
xgd:
server-port: 13764
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
- if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
-// log.info(" String : " + msg.toString(Charset.defaultCharset()));
-// if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
- pareDeviceHex(msg);
-// out.add(msg);
-// }
- }
- }
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
- String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
- log.info(" devcode : " + devcode);
- byteBuf.resetReaderIndex();//重置位判断
- String valueStr=byteBuf.slice(26, 4).toString(Charset.defaultCharset());
- log.info(" valueStr : " + valueStr);
- long defaultValue = Long.valueOf(valueStr);
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverDomain.java b/src/main/java/com/casic/handler/ReceiverDomain.java
deleted file mode 100644
index f0a89b6..0000000
--- a/src/main/java/com/casic/handler/ReceiverDomain.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import lombok.Data;
-
-/**
- * @description: 环境数据实体类
- * @author: Stone
- * @create: 2019-01-10 22:38
- **/
-@Data
-public class ReceiverDomain {
- private String head;
- private int len;
- private String key;
- private String value;
-
- public ReceiverDomain(ByteBuf bf) {
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServer.java b/src/main/java/com/casic/handler/ReceiverServer.java
deleted file mode 100644
index 6894a00..0000000
--- a/src/main/java/com/casic/handler/ReceiverServer.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.casic.handler;
-
-import io.netty.bootstrap.ServerBootstrap;
-import io.netty.channel.ChannelFuture;
-import io.netty.channel.ChannelInitializer;
-import io.netty.channel.ChannelOption;
-import io.netty.channel.EventLoopGroup;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.channel.socket.SocketChannel;
-import io.netty.channel.socket.nio.NioServerSocketChannel;
-import io.netty.handler.codec.LineBasedFrameDecoder;
-import io.netty.handler.codec.string.StringDecoder;
-import io.netty.handler.logging.LogLevel;
-import io.netty.handler.logging.LoggingHandler;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-
-/**
- * @description: 接收客户端传过来的数据,只做打印处理
- * @author: Stone
- * @create: 2019-01-10 19:52
- **/
-@Slf4j
-@Component
-public class ReceiverServer {
-
- @Autowired
- private ReceiverServerHandler receiverServerHandler;
-
- @Value("${xgd.server-port}")
- private int port;
-
-
-
- @PostConstruct
- public void init() {
- this.start();
- }
-
- public void start() {
- EventLoopGroup bossGroup = new NioEventLoopGroup();
- EventLoopGroup workerGroup = new NioEventLoopGroup();
- log.info("server bind port = {}", port);
-
- ServerBootstrap serverBootstrap = new ServerBootstrap();
- serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
- serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
- serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
-
- serverBootstrap.childHandler(new ChannelInitializer() {
- @Override
- protected void initChannel(SocketChannel socketChannel) {
-// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
- socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
- socketChannel.pipeline().addLast(new ReceiverDecoder());
- socketChannel.pipeline().addLast(new StringDecoder());
- socketChannel.pipeline().addLast(receiverServerHandler);
- }
- });
-
- serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
- try {
- ChannelFuture channelFuture = serverBootstrap.bind(port).sync();
- channelFuture.channel().closeFuture().sync();
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- workerGroup.shutdownGracefully();
- bossGroup.shutdownGracefully();
- }
- }
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServerHandler.java b/src/main/java/com/casic/handler/ReceiverServerHandler.java
deleted file mode 100644
index f432e06..0000000
--- a/src/main/java/com/casic/handler/ReceiverServerHandler.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.casic.handler;
-
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelInboundHandlerAdapter;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.javassist.bytecode.ByteArray;
-import org.springframework.stereotype.Component;
-
-/**
- * @description: 消息处理handler
- * @author: Stone
- * @create: 2019-01-10 20:01
- **/
-@Slf4j
-@Component
-@ChannelHandler.Sharable
-public class ReceiverServerHandler extends ChannelInboundHandlerAdapter {
-
- public ReceiverServerHandler() {
- }
-
- @Override
- public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
- super.channelRegistered(ctx);
- }
-
- @Override
- public void channelActive(ChannelHandlerContext ctx) throws Exception {
- super.channelActive(ctx);
- }
-
- @Override
- public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
- super.channelRead(ctx, msg);
-// log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME,(String)msg);
- log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
- String msgStr = msg.toString();
- // 以固定行分隔符结尾分割,头部可能有不符合接口协议的字段, 去掉
- int idx = msgStr.indexOf("##");
- if (idx >= 0) {
- msgStr = msgStr.substring(idx);
- }
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME, msgStr);
- }
-
-// //ByteBuf byteBuf
- public static void main(String[] main) {
- byte[] hexBytes = {(byte) 0x86, 0x53, 0x28, 0x06, (byte) 0x84, 0x19, (byte) 0x94,
- 0x30, (byte) 0xAA, (byte) 0xAA, 0x01, 0x03, (byte) 0x02, 0x02, 0x00, (byte) 0xB8, 0x44};
- ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
- out.writeBytes(hexBytes);
-
- if (ByteBufUtil.hexDump(out).toLowerCase().contains("aaaa")) {
- pareDeviceHex(out);
- }
- }
-
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- String devcode = ByteBufUtil.hexDump(byteBuf.slice(0, 8));
- devcode = devcode.substring(0, devcode.length() - 1);
- //数值读取
- byteBuf.readBytes(12);
- byteBuf.markReaderIndex();
- Integer defaultValueLength = byteBuf.readByte() & 0xff;
- long defaultValue = 0;
- for (int i = 0; i < defaultValueLength; i++) {
- long tempLong = byteBuf.readByte() & 0xff;
- defaultValue = defaultValue * 256 + tempLong;
- }
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
- super.exceptionCaught(ctx, cause);
- cause.printStackTrace();
- ctx.close();
- }
-
-}
diff --git a/src/main/java/com/casic/mapper/DeviceDataMapper.java b/src/main/java/com/casic/mapper/DeviceDataMapper.java
new file mode 100644
index 0000000..be72d19
--- /dev/null
+++ b/src/main/java/com/casic/mapper/DeviceDataMapper.java
@@ -0,0 +1,28 @@
+package com.casic.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface DeviceDataMapper {
+
+
+ /**
+ * 获取压力数据
+ */
+ List> getPressureData();
+
+ /**
+ * 获取流量数据
+ */
+ List> getFlowData();
+
+ /**
+ * 获取温湿度数据
+ */
+ List> getHumiTemp();
+
+
+}
diff --git a/src/main/java/com/casic/mapper/RainFallDataMapper.java b/src/main/java/com/casic/mapper/RainFallDataMapper.java
new file mode 100644
index 0000000..f5c29db
--- /dev/null
+++ b/src/main/java/com/casic/mapper/RainFallDataMapper.java
@@ -0,0 +1,7 @@
+package com.casic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.model.RainFallData;
+
+public interface RainFallDataMapper extends BaseMapper {
+}
diff --git a/src/main/java/com/casic/model/RainFallData.java b/src/main/java/com/casic/model/RainFallData.java
new file mode 100644
index 0000000..fa96673
--- /dev/null
+++ b/src/main/java/com/casic/model/RainFallData.java
@@ -0,0 +1,30 @@
+package com.casic.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@TableName("AD_YL_YLIANG")
+public class RainFallData {
+
+ private String dbid;
+
+ private String scrid;
+
+ private String dstid;
+
+ private String totalyuliang;
+
+ private String curminuteyuliang;
+
+ private String forminuteyuliang;
+
+ private String value;
+
+ private Date logtime;
+
+ private Date uptime;
+
+}
diff --git a/src/main/java/com/casic/model/RelayStatusDTO.java b/src/main/java/com/casic/model/RelayStatusDTO.java
new file mode 100644
index 0000000..b839e0c
--- /dev/null
+++ b/src/main/java/com/casic/model/RelayStatusDTO.java
@@ -0,0 +1,20 @@
+package com.casic.model;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class RelayStatusDTO {
+
+ /***
+ * 通道名称 1 2 3 4 5 6 7 8
+ */
+ private String channelName;
+
+ /***
+ * 开关0,1
+ */
+ private Integer lampSwitch;
+
+}
diff --git a/src/main/java/com/casic/resolver/AlarmDataResolver.java b/src/main/java/com/casic/resolver/AlarmDataResolver.java
new file mode 100644
index 0000000..2c6874b
--- /dev/null
+++ b/src/main/java/com/casic/resolver/AlarmDataResolver.java
@@ -0,0 +1,28 @@
+package com.casic.resolver;
+
+
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class AlarmDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if(msg.contains(alarmMark)){
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ Integer isAlarm = Integer.valueOf(msg.substring(16,17));
+ log.info("设备编号为" + devcode + ",是否报警" + isAlarm);
+ return RelayStatusDTO.builder()
+ .channelName( RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/casic/resolver/DatagramResolver.java b/src/main/java/com/casic/resolver/DatagramResolver.java
new file mode 100644
index 0000000..d00c952
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramResolver.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+import com.casic.model.RelayStatusDTO;
+
+public interface DatagramResolver {
+
+ RelayStatusDTO datagram(String msg);
+
+}
diff --git a/src/main/java/com/casic/resolver/DatagramSupport.java b/src/main/java/com/casic/resolver/DatagramSupport.java
new file mode 100644
index 0000000..1d911a3
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramSupport.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+public class DatagramSupport {
+
+
+
+
+
+}
diff --git a/src/main/java/com/casic/resolver/RainFallDataResolver.java b/src/main/java/com/casic/resolver/RainFallDataResolver.java
new file mode 100644
index 0000000..8a22899
--- /dev/null
+++ b/src/main/java/com/casic/resolver/RainFallDataResolver.java
@@ -0,0 +1,79 @@
+package com.casic.resolver;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service
+@Slf4j
+public class RainFallDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Autowired
+ private RainFallDataMapper rainFallDataMapper;
+ @Autowired
+ private AlarmLevelConfig alarmLevelConfig;
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if (msg.contains(rainFallMark)) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ String defaultValue = msg.substring(26, 30);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ RainFallData rainFallData = initRainFallData(devcode, defaultValue);
+ rainFallDataMapper.insert(rainFallData);
+ Integer isAlarm = isAlarm(String.valueOf(defaultValue), alarmLevelConfig.getRainfall());
+ return RelayStatusDTO.builder()
+ .channelName(RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+
+ }
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ private RainFallData initRainFallData(String devcode, String valueStr) {
+ RainFallData rainFallData = new RainFallData();
+ rainFallData.setDstid(devcode);
+ rainFallData.setTotalyuliang(valueStr);
+ rainFallData.setUptime(new Date());
+ rainFallData.setLogtime(new Date());
+ return rainFallData;
+ }
+
+ // //ByteBuf byteBuf
+ public static void main(String[] main) {
+ pareDeviceHex("8653280684199430AAAA01030200023985");
+ }
+
+ private static void pareDeviceHex(String msg) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ log.info(" devcode : " + devcode);
+ String valueStr = msg.substring(26, 30);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverDecoder.java b/src/main/java/com/casic/server/ReceiverDecoder.java
new file mode 100644
index 0000000..7030790
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverDecoder.java
@@ -0,0 +1,71 @@
+package com.casic.server;
+
+import com.casic.enums.RelaySwitchEnums;
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.ByteToMessageDecoder;
+import lombok.extern.slf4j.Slf4j;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * 自定义解码器
+ *
+ * @description: 将从接口取到的数据编码
+ * @author: cz
+ * @create: 2023-5-10
+ **/
+@Slf4j
+public class ReceiverDecoder extends ByteToMessageDecoder implements RelaySwitchEnums {
+
+
+// final ChannelGroup channels =
+// new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+
+ @Override
+ protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
+ if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
+ pareDeviceHex(msg);
+ }
+// if(msg.readableBytes()>2){
+// out.add(msg);
+// }
+ }
+
+// @Override
+// public void channelActive(ChannelHandlerContext ctx) throws Exception {
+// channels.add(ctx.channel());
+// super.channelActive(ctx);
+// }
+//
+// @Override
+// public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+// super.channelRead(ctx, msg);
+// ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+// String switchConent = preFix + 1 + "," + 1 + postFix;
+// out.writeBytes(switchConent.getBytes());
+// channels.forEach(
+// channel ->{
+// if(channel!=ctx.channel()) {
+// channel.writeAndFlush(out);
+// }
+// }
+// );
+// }
+
+ private static void pareDeviceHex(ByteBuf byteBuf) {
+ //去掉补位
+ log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
+ String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
+ log.info(" devcode : " + devcode);
+ byteBuf.resetReaderIndex();//重置位判断
+ String valueStr = byteBuf.slice(26, 4).toString(Charset.defaultCharset());
+ log.info(" valueStr : " + valueStr);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverServer.java b/src/main/java/com/casic/server/ReceiverServer.java
new file mode 100644
index 0000000..a98e4ca
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServer.java
@@ -0,0 +1,72 @@
+package com.casic.server;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.logging.LogLevel;
+import io.netty.handler.logging.LoggingHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * @description: 接收客户端传过来的数据,只做打印处理
+ * @author: Stone
+ * @create: 2019-01-10 19:52
+ **/
+@Slf4j
+@Component
+public class ReceiverServer {
+
+ @Autowired
+ private ReceiverServerHandler receiverServerHandler;
+ @Autowired
+ private ServerPort serverPort;
+
+ @PostConstruct
+ public void init() {
+ this.start();
+ }
+
+ public void start() {
+ EventLoopGroup bossGroup = new NioEventLoopGroup();
+ EventLoopGroup workerGroup = new NioEventLoopGroup();
+ log.info("server bind port = {}", serverPort.getPort());
+
+ ServerBootstrap serverBootstrap = new ServerBootstrap();
+ serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
+ serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
+ serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
+
+ serverBootstrap.childHandler(new ChannelInitializer() {
+ @Override
+ protected void initChannel(SocketChannel socketChannel) {
+// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
+ socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
+// socketChannel.pipeline().addLast(new ReceiverDecoder());
+ socketChannel.pipeline().addLast(new StringDecoder());
+ socketChannel.pipeline().addLast(receiverServerHandler);
+ }
+ });
+ serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
+ try {
+ ChannelFuture channelFuture = serverBootstrap.bind(serverPort.getPort()).sync();
+ channelFuture.channel().closeFuture().sync();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } finally {
+ workerGroup.shutdownGracefully();
+ bossGroup.shutdownGracefully();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/server/ReceiverServerHandler.java b/src/main/java/com/casic/server/ReceiverServerHandler.java
new file mode 100644
index 0000000..31ac43e
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServerHandler.java
@@ -0,0 +1,103 @@
+package com.casic.server;
+
+
+import com.casic.enums.RelaySwitchEnums;
+import com.casic.model.RelayStatusDTO;
+import com.casic.resolver.RainFallDataResolver;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.channel.group.ChannelGroup;
+import io.netty.channel.group.DefaultChannelGroup;
+import io.netty.util.concurrent.GlobalEventExecutor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * @description: 消息处理handler
+ * @author: Stone
+ * @create: 2019-01-10 20:01
+ **/
+@Slf4j
+@Component
+@ChannelHandler.Sharable
+public class ReceiverServerHandler extends ChannelInboundHandlerAdapter implements RelaySwitchEnums {
+
+ final ChannelGroup channels =
+ new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+ @Autowired
+ private List rainFallDataResolverList;
+
+ public ReceiverServerHandler() {
+ }
+
+ @Override
+ public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
+ super.channelRegistered(ctx);
+ }
+
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ channels.add(ctx.channel());
+ super.channelActive(ctx);
+ }
+
+ @Override
+ public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+ channels.forEach(channel -> {
+ if (channel == ctx.channel()) {
+ channels.remove(channel);
+ }
+ }
+ );
+ super.channelInactive(ctx);
+ }
+
+ /**
+ * 雨量计
+ */
+ @Override
+ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+ if (msg instanceof String) {
+ rainFallDataResolverList.forEach(
+ rainFallDataResolver -> {
+ RelayStatusDTO relayStatusDTO = rainFallDataResolver.datagram(String.valueOf(msg));
+ sendMsg(ctx, relayStatusDTO);
+ }
+ );
+ }
+ super.channelRead(ctx, msg);
+ }
+
+ private void sendMsg(ChannelHandlerContext ctx, RelayStatusDTO relayStatusDTO) {
+ if (!ObjectUtils.isEmpty(relayStatusDTO)) {
+ ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+ String switchConent = preFix + relayStatusDTO.getChannelName() + "," + relayStatusDTO.getLampSwitch() + postFix;
+ out.writeBytes(switchConent.getBytes());
+ channels.forEach(channel -> {
+ if (channel.isActive()) {
+ if (channel != ctx.channel()) {
+ channel.writeAndFlush(out);
+ }
+ }
+ }
+ );
+ }
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ super.exceptionCaught(ctx, cause);
+ cause.printStackTrace();
+ ctx.close();
+ }
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataScanner.java b/src/main/java/com/casic/service/DeviceDataScanner.java
new file mode 100644
index 0000000..049fa71
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataScanner.java
@@ -0,0 +1,7 @@
+package com.casic.service;
+
+public interface DeviceDataScanner {
+
+ void scanDeviceData();
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataSupport.java b/src/main/java/com/casic/service/DeviceDataSupport.java
new file mode 100644
index 0000000..93d61ea
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataSupport.java
@@ -0,0 +1,50 @@
+package com.casic.service;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.client.Client;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.mapper.DeviceDataMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ *
+ */
+@Slf4j
+@Component
+public class DeviceDataSupport implements AlarmDatagramFlag {
+
+ @Autowired
+ protected DeviceDataMapper deviceDataMapper;
+ @Autowired
+ protected AlarmLevelConfig alarmLevelConfig;
+ @Autowired
+ private Client client;
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * 发送报警消息
+ */
+ protected void sendAlarmMsg(String devcode, Integer isAlarm) {
+ try {
+ String alarmMsg = devcode + alarmMark + isAlarm;
+ client.send(alarmMsg);
+ } catch (Exception ex) {
+ log.error("消息发送失败,设备编号为{},异常信息{}", devcode, ex.getMessage());
+ }
+ }
+
+}
diff --git a/src/main/java/com/casic/service/RainFallDataService.java b/src/main/java/com/casic/service/RainFallDataService.java
new file mode 100644
index 0000000..6c1a12d
--- /dev/null
+++ b/src/main/java/com/casic/service/RainFallDataService.java
@@ -0,0 +1,6 @@
+package com.casic.service;
+
+public interface RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
new file mode 100644
index 0000000..14dc1eb
--- /dev/null
+++ b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
@@ -0,0 +1,13 @@
+package com.casic.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.service.RainFallDataService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class RainFallDataServiceImpl extends ServiceImpl implements RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/scanner/FlowDataScanner.java b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
new file mode 100644
index 0000000..7ab7228
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
@@ -0,0 +1,28 @@
+package com.casic.service.scanner;
+
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class FlowDataScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String thresholdValue = alarmLevelConfig.getFlow();
+ List> flowDataMapList = this.deviceDataMapper.getFlowData();
+ flowDataMapList.forEach(
+ flowDataMap -> {
+ String devcode = flowDataMap.get("devcode").toString();
+ String insdata = flowDataMap.get("insdata").toString();
+ Integer isAlarm = isAlarm(insdata, thresholdValue);
+ sendAlarmMsg(devcode, isAlarm);
+ }
+ );
+ }
+
+
+}
diff --git a/src/main/java/com/casic/service/scanner/PressDataScanner.java b/src/main/java/com/casic/service/scanner/PressDataScanner.java
new file mode 100644
index 0000000..6738c38
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/PressDataScanner.java
@@ -0,0 +1,29 @@
+package com.casic.service.scanner;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.DeviceDataMapper;
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class PressDataScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String thresholdValue = alarmLevelConfig.getPressure();
+ List> pressDataMapList = this.deviceDataMapper.getPressureData();
+ pressDataMapList.forEach(
+ pressDataMap -> {
+ String devcode = pressDataMap.get("devcode").toString();
+ String pressdata = pressDataMap.get("pressdata").toString();
+ Integer isAlarm=isAlarm(pressdata,thresholdValue);
+ sendAlarmMsg(devcode,isAlarm);
+ }
+ );
+ }
+
+}
diff --git a/src/main/java/com/casic/service/scanner/TempHumiScanner.java b/src/main/java/com/casic/service/scanner/TempHumiScanner.java
new file mode 100644
index 0000000..a9efc57
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/TempHumiScanner.java
@@ -0,0 +1,34 @@
+package com.casic.service.scanner;
+
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class TempHumiScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String humiThreshold = alarmLevelConfig.getHumi();
+ String tempThreshold = alarmLevelConfig.getTemp();
+ List> pressDataMapList = this.deviceDataMapper.getHumiTemp();
+ pressDataMapList.forEach(
+ pressDataMap -> {
+ String devcode = pressDataMap.get("devcode").toString();
+ String temperatureData = pressDataMap.get("temperature").toString();
+ Integer isTempAlarm = isAlarm(temperatureData, tempThreshold);
+ String humidityData = pressDataMap.get("humidity").toString();
+ Integer isHumiAlarm = isAlarm(humidityData, humiThreshold);
+ if (isHumiAlarm == 0 && isTempAlarm == 0) {
+ sendAlarmMsg(devcode, 0);
+ } else {
+ sendAlarmMsg(devcode, 1);
+ }
+ }
+ );
+ }
+
+}
diff --git a/src/main/java/com/casic/util/Client.java b/src/main/java/com/casic/util/Client.java
deleted file mode 100644
index a416600..0000000
--- a/src/main/java/com/casic/util/Client.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.casic.util;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.net.Socket;
-import java.net.UnknownHostException;
-
-/**
- * @author: njb
- * @Date: 2020/11/26 18:49
- * @desc: 客户端socket
- */
-public class Client {
- public static void main(String[] args) {
- try {
- //发送到8888端口
- Socket socket = new Socket("127.0.0.1", 11321);
- //输出流
- OutputStream outputStream = socket.getOutputStream();
- PrintWriter printWriter = new PrintWriter(outputStream);
- printWriter.write("服务端你好,我是客户端");
- printWriter.flush();
- //关闭资源
- printWriter.close();
- outputStream.close();
- socket.close();
- } catch (UnknownHostException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-}
diff --git a/src/main/java/com/casic/util/ClientTest.java b/src/main/java/com/casic/util/ClientTest.java
new file mode 100644
index 0000000..4c1bf65
--- /dev/null
+++ b/src/main/java/com/casic/util/ClientTest.java
@@ -0,0 +1,34 @@
+package com.casic.util;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.net.Socket;
+import java.net.UnknownHostException;
+
+/**
+ * @author: njb
+ * @Date: 2020/11/26 18:49
+ * @desc: 客户端socket
+ */
+public class ClientTest {
+ public static void main(String[] args) {
+ try {
+ //发送到8888端口
+ Socket socket = new Socket("127.0.0.1", 11321);
+ //输出流
+ OutputStream outputStream = socket.getOutputStream();
+ PrintWriter printWriter = new PrintWriter(outputStream);
+ printWriter.write("服务端你好,我是客户端");
+ printWriter.flush();
+ //关闭资源
+ printWriter.close();
+ outputStream.close();
+ socket.close();
+ } catch (UnknownHostException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/util/Server.java b/src/main/java/com/casic/util/Server.java
deleted file mode 100644
index 50c0957..0000000
--- a/src/main/java/com/casic/util/Server.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.casic.util;
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.ServerSocket;
-import java.net.Socket;
-
-/**
- * @author: njb
- * @Date: 2020/11/26 18:49
- * @desc: 服务器socket
- */
-public class Server {
- public static void main(String[] args) {
- try {
- ServerSocket serverSocket = new ServerSocket(11321);
- System.out.println("----------------服务端执行,開始监听请求----------------");
-
- Socket socket = serverSocket.accept();//開始监听
- InputStream inputStream = socket.getInputStream();
- //获取请求内容
- String info;
- BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
- while ((info = bufferedReader.readLine()) != null) {
- System.out.println("我是服务端,客户端请求为:" + info);
- }
- //关闭资源
- socket.shutdownInput();
- bufferedReader.close();
- inputStream.close();
- socket.close();
- serverSocket.close();
- } catch (Exception exception) {
- exception.printStackTrace();
- }
- }
-}
\ No newline at end of file
diff --git a/src/main/java/com/casic/util/ServerTest.java b/src/main/java/com/casic/util/ServerTest.java
new file mode 100644
index 0000000..53ba687
--- /dev/null
+++ b/src/main/java/com/casic/util/ServerTest.java
@@ -0,0 +1,38 @@
+package com.casic.util;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+/**
+ * @author: njb
+ * @Date: 2020/11/26 18:49
+ * @desc: 服务器socket
+ */
+public class ServerTest {
+ public static void main(String[] args) {
+ try {
+ ServerSocket serverSocket = new ServerSocket(11321);
+ System.out.println("----------------服务端执行,開始监听请求----------------");
+
+ Socket socket = serverSocket.accept();//開始监听
+ InputStream inputStream = socket.getInputStream();
+ //获取请求内容
+ String info;
+ BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+ while ((info = bufferedReader.readLine()) != null) {
+ System.out.println("我是服务端,客户端请求为:" + info);
+ }
+ //关闭资源
+ socket.shutdownInput();
+ bufferedReader.close();
+ inputStream.close();
+ socket.close();
+ serverSocket.close();
+ } catch (Exception exception) {
+ exception.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/casic/util/SpringContextUtil.java b/src/main/java/com/casic/util/SpringContextUtil.java
new file mode 100644
index 0000000..290d6f6
--- /dev/null
+++ b/src/main/java/com/casic/util/SpringContextUtil.java
@@ -0,0 +1,106 @@
+package com.casic.util;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.beans.factory.support.AbstractBeanDefinition;
+import org.springframework.beans.factory.support.BeanDefinitionBuilder;
+import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ForkJoinPool;
+import java.util.function.Function;
+
+/**
+ * @Description: Spring应用上下文工具
+ * @Author: cz
+ * @Date: 2022-04-19
+ */
+@Component
+public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware {
+ /**
+ * Spring应用上下文环境
+ */
+ private static ApplicationContext applicationContext;
+
+ private static ConfigurableListableBeanFactory beanFactory;
+
+ /**
+ * 实现ApplicationContextAware接口的回调方法,设置上下文环境
+ */
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+ SpringContextUtil.applicationContext = applicationContext;
+ }
+
+ @Override
+ public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
+ SpringContextUtil.beanFactory = beanFactory;
+ }
+
+ public static ApplicationContext getApplicationContext() {
+ return applicationContext;
+ }
+
+// public static Object getBean(String beanId) throws BeansException {
+// return applicationContext.getBean(beanId);
+// }
+
+ public static T getBean(Class requiredType) {
+ return (T) applicationContext.getBean(requiredType);
+ }
+
+ @SuppressWarnings("unchecked")
+ public static T getBean(String name) throws BeansException {
+ return (T) beanFactory.getBean(name);
+ }
+
+ public static boolean containsBean(String name) {
+ return beanFactory.containsBean(name);
+ }
+
+ public static T registerBean(String beanName, Class clazz, Function function) {
+ // 生成bean定义
+ BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz);
+ // 执行bean处理函数
+ AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder);
+ BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory;
+ // 判断是否通过beanName注册
+ if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) {
+ beanFactory.registerBeanDefinition(beanName, beanDefinition);
+ return getBean(beanName);
+ } else {
+ // 非命名bean注册
+ String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory);
+ return getBean(name);
+ }
+ }
+
+ public static T registerBean(String beanName, Class clazz, List args, Map property) {
+ return registerBean(beanName, clazz, beanDefinitionBuilder -> {
+ // 放入构造参数
+ if (!CollectionUtils.isEmpty(args)) {
+ args.forEach(beanDefinitionBuilder::addConstructorArgValue);
+ }
+ // 放入属性
+ if (!CollectionUtils.isEmpty(property)) {
+ property.forEach(beanDefinitionBuilder::addPropertyValue);
+ }
+ return beanDefinitionBuilder.getBeanDefinition();
+ });
+ }
+
+ @Bean
+ public ForkJoinPool forkJoinPool() {
+ return new ForkJoinPool(100);
+ }
+
+}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..20205e3
--- /dev/null
+++ b/src/main/resources/application-dev.yml
@@ -0,0 +1,18 @@
+server:
+ port: 11315
+################### spring配置 ###################
+spring:
+ datasource:
+ driverClassName: oracle.jdbc.driver.OracleDriver
+ url: jdbc:oracle:thin:@139.198.18.188:1521:WDMA
+ username: sensor
+ password: sensor
+ jms:
+ pub-sub-domain: false
+
+logging:
+ level.root: error
+ level.com.casic: info
+ file:
+ path: logs/
+ name: missiles.log
\ No newline at end of file
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index d27f7a5..4a7b9ac 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,29 +1,34 @@
-server:
- port: 11315
-################### spring配置 ###################
spring:
- datasource:
- driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://111.198.10.15:11102/smartwell_demos?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&&allowMultiQueries=true&&useSSL=true
- username: root
- password: Casic203!
- jms:
- pub-sub-domain: false
- activemq:
- user:
- password:
- broker-url: tcp://192.168.0.203:61616
- kafka:
- url: http://58.250.71.201:19000/API/Table/GetRTJoinTmpStore
- tableId: 66
- topic: 66
+ profiles:
+ active: dev
+ servlet:
+ multipart:
+ max-file-size: 50MB
+ max-request-size: 80MB
+ mvc:
+ pathmatch:
+ matching-strategy: ant_path_matcher
+mybatis-plus:
+ global-config:
+ enable-sql-runner: true
+ configuration:
+ # 配置结果集属性为空时 是否映射返回结果
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用
+ mapper-locations: classpath:mapper/*.xml
+mybatis:
+ mapper-locations: classpath:mapper/*.xml
+#mybatis-plus:
+# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
-
-
-
-# customer config
-c-activemq:
- queue-name: "hjt.msg.queue"
+casic:
+ alarm:
+ rainfall: 20
+ humi: 10
+ temp: 10
+ pressure: 15
+ flow: 5
+ task:
+ cronTime: 0 */1 * * * ?
xgd:
server-port: 13764
diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml
new file mode 100644
index 0000000..c0c7ac9
--- /dev/null
+++ b/src/main/resources/logback-spring.xml
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${CONSOLE_LOG_PATTERN}
+ utf-8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${CONSOLE_LOG_PATTERN}
+ utf-8
+
+
+
+
+
+
+
+ ${LOG_PATH}/missiles_error.log
+
+
+
+
+
+ ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log
+
+
+
+ 10MB
+
+
+
+
+ true
+
+
+
+ ${FILE_LOG_PATTERN}
+ utf-8
+
+
+
+
+ error
+ ACCEPT
+ DENY
+
+
+
+
+
+
+
+ ${LOG_PATH}/missiles_total.log
+
+
+
+
+
+ ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log
+
+
+
+ 10MB
+
+
+
+
+ true
+
+
+
+ ${FILE_LOG_PATTERN}
+ utf-8
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 10b37d0..cbdc982 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,10 +45,9 @@
- mysql
- mysql-connector-java
- 8.0.16
- compile
+ com.oracle.database.jdbc
+ ojdbc6
+ 11.2.0.4
diff --git a/rain_receiver.iml b/rain_receiver.iml
new file mode 100644
index 0000000..5cde140
--- /dev/null
+++ b/rain_receiver.iml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java
index 71ea928..b5f3ef8 100644
--- a/src/main/java/com/casic/CasicApplication.java
+++ b/src/main/java/com/casic/CasicApplication.java
@@ -20,4 +20,5 @@
log.info("CasicApplication is success!");
SpringApplication.run(CasicApplication.class, args);
}
+
}
diff --git a/src/main/java/com/casic/client/Client.java b/src/main/java/com/casic/client/Client.java
new file mode 100644
index 0000000..8bf0177
--- /dev/null
+++ b/src/main/java/com/casic/client/Client.java
@@ -0,0 +1,34 @@
+package com.casic.client;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class Client {
+
+ @Autowired
+ private ServerPort serverPort;
+
+ public void send(String sendMsg) throws Exception {
+ NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+ try {
+ Bootstrap bootstrap = new Bootstrap();
+ bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class)
+ .handler(new Clientinitializer());
+ ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", serverPort.getPort()).sync();
+ Channel channel = channelFuture.channel();
+ channel.writeAndFlush(sendMsg);
+ } finally {
+ eventLoopGroup.shutdownGracefully();
+ }
+ }
+
+}
+
diff --git a/src/main/java/com/casic/client/ClientHandler.java b/src/main/java/com/casic/client/ClientHandler.java
new file mode 100644
index 0000000..bf5236b
--- /dev/null
+++ b/src/main/java/com/casic/client/ClientHandler.java
@@ -0,0 +1,31 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+
+public class ClientHandler extends SimpleChannelInboundHandler {
+
+ //接收服务端数据&发送数据
+ @Override
+ protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
+
+ System.out.println("客户端接收到的消息: "+msg);
+
+ ctx.writeAndFlush("12232321");
+
+ //完成通信后关闭连接
+ //ctx.close();
+ }
+
+ //和服务器建立连接
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ //ctx.writeAndFlush("在吗!!!!\\r\\n");
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/src/main/java/com/casic/client/Clientinitializer.java b/src/main/java/com/casic/client/Clientinitializer.java
new file mode 100644
index 0000000..c42ac4a
--- /dev/null
+++ b/src/main/java/com/casic/client/Clientinitializer.java
@@ -0,0 +1,24 @@
+package com.casic.client;
+
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.codec.string.StringEncoder;
+import io.netty.util.CharsetUtil;
+
+public class Clientinitializer extends ChannelInitializer {
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ //数据分包,组包,粘包
+ pipeline.addLast(new LengthFieldBasedFrameDecoder(1024,0,1024,0,4));
+ //pipeline.addLast(new LengthFieldPrepender(4));
+ pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));
+ pipeline.addLast(new ClientHandler());
+
+ }
+}
diff --git a/src/main/java/com/casic/config/AlarmLevelConfig.java b/src/main/java/com/casic/config/AlarmLevelConfig.java
new file mode 100644
index 0000000..258ead3
--- /dev/null
+++ b/src/main/java/com/casic/config/AlarmLevelConfig.java
@@ -0,0 +1,18 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.alarm")
+public class AlarmLevelConfig {
+
+ private String rainfall;
+ private String humi;
+ private String temp;
+ private String pressure;
+ private String flow;
+
+}
diff --git a/src/main/java/com/casic/config/ServerPort.java b/src/main/java/com/casic/config/ServerPort.java
new file mode 100644
index 0000000..8980e43
--- /dev/null
+++ b/src/main/java/com/casic/config/ServerPort.java
@@ -0,0 +1,14 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class ServerPort {
+
+ private Integer port;
+
+}
diff --git a/src/main/java/com/casic/config/TaskCronTimeConfig.java b/src/main/java/com/casic/config/TaskCronTimeConfig.java
new file mode 100644
index 0000000..8babe82
--- /dev/null
+++ b/src/main/java/com/casic/config/TaskCronTimeConfig.java
@@ -0,0 +1,16 @@
+package com.casic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "casic.task")
+public class TaskCronTimeConfig {
+
+ private String cronTime;
+
+
+
+}
diff --git a/src/main/java/com/casic/config/task/TaskSchedulingConfig.java b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
new file mode 100644
index 0000000..05e6d40
--- /dev/null
+++ b/src/main/java/com/casic/config/task/TaskSchedulingConfig.java
@@ -0,0 +1,50 @@
+package com.casic.config.task;
+
+import com.casic.service.DeviceDataScanner;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+import org.springframework.scheduling.support.CronTrigger;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class TaskSchedulingConfig implements SchedulingConfigurer {
+
+ @Autowired
+ private List deviceDataScannerList;
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ log.info("扫描定时处理start...");
+ taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
+ //执行定时任务
+ taskRegistrar.addTriggerTask(
+ //设置日期任务
+ getMangerRunnable(""),
+ //2.设置执行周期(Trigger)
+ triggerContext -> new CronTrigger("0 */1 * * * ?").nextExecutionTime(triggerContext)
+ );
+ }
+
+ /**
+ * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值
+ */
+ private Runnable getMangerRunnable(String DeviceType) {
+ return new Runnable() {
+ @Override
+ public void run() {
+ deviceDataScannerList.forEach(
+ deviceDataScanner -> deviceDataScanner.scanDeviceData()
+ );
+ }
+ };
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/AlarmDatagramFlag.java b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
new file mode 100644
index 0000000..4716be3
--- /dev/null
+++ b/src/main/java/com/casic/enums/AlarmDatagramFlag.java
@@ -0,0 +1,8 @@
+package com.casic.enums;
+
+public interface AlarmDatagramFlag {
+
+ String alarmMark="mmmm";
+
+ String rainFallMark="mmmm";
+}
diff --git a/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
new file mode 100644
index 0000000..3c907a9
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelayDevcodeMapEnums.java
@@ -0,0 +1,32 @@
+package com.casic.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 继电器灯和设备编号的枚举关系
+ */
+public enum RelayDevcodeMapEnums {
+
+ RELAY_DEVCODE(new HashMap() {
+ {
+ put("842019010188", "1");
+ put("865328068419943", "2");
+ put("512023010001", "3");
+ put("512023010002", "4");
+ put("512023010003", "5");
+ put("512023010004", "C6");
+ }
+ });
+
+ public Map relayDevcodeMap;
+
+ RelayDevcodeMapEnums(Map relayDevcodeMap) {
+ this.relayDevcodeMap = relayDevcodeMap;
+ }
+
+ public Map getRelayDevcodeMap() {
+ return relayDevcodeMap;
+ }
+
+}
diff --git a/src/main/java/com/casic/enums/RelaySwitchEnums.java b/src/main/java/com/casic/enums/RelaySwitchEnums.java
new file mode 100644
index 0000000..c8ad6b5
--- /dev/null
+++ b/src/main/java/com/casic/enums/RelaySwitchEnums.java
@@ -0,0 +1,18 @@
+package com.casic.enums;
+
+/**
+ * 继电器开关枚举
+ * 报警会打开开关,取消报警会自动关闭开关
+ *
+ */
+public interface RelaySwitchEnums {
+
+
+
+
+
+ String preFix="config,set,doout,";
+
+ String postFix="\r\n";
+
+}
diff --git a/src/main/java/com/casic/handler/ReceiverDecoder.java b/src/main/java/com/casic/handler/ReceiverDecoder.java
deleted file mode 100644
index 0826d29..0000000
--- a/src/main/java/com/casic/handler/ReceiverDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ByteToMessageDecoder;
-import io.netty.handler.codec.MessageToMessageDecoder;
-import lombok.extern.slf4j.Slf4j;
-
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * @description: 将从接口取到的数据编码
- * @author: Stone
- * @create: 2019-01-11 15:15
- **/
-@Slf4j
-public class ReceiverDecoder extends ByteToMessageDecoder {
- @Override
- protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
- if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
-// log.info(" String : " + msg.toString(Charset.defaultCharset()));
-// if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
- pareDeviceHex(msg);
-// out.add(msg);
-// }
- }
- }
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
- String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
- log.info(" devcode : " + devcode);
- byteBuf.resetReaderIndex();//重置位判断
- String valueStr=byteBuf.slice(26, 4).toString(Charset.defaultCharset());
- log.info(" valueStr : " + valueStr);
- long defaultValue = Long.valueOf(valueStr);
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverDomain.java b/src/main/java/com/casic/handler/ReceiverDomain.java
deleted file mode 100644
index f0a89b6..0000000
--- a/src/main/java/com/casic/handler/ReceiverDomain.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.casic.handler;
-
-import io.netty.buffer.ByteBuf;
-import lombok.Data;
-
-/**
- * @description: 环境数据实体类
- * @author: Stone
- * @create: 2019-01-10 22:38
- **/
-@Data
-public class ReceiverDomain {
- private String head;
- private int len;
- private String key;
- private String value;
-
- public ReceiverDomain(ByteBuf bf) {
- }
-
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServer.java b/src/main/java/com/casic/handler/ReceiverServer.java
deleted file mode 100644
index 6894a00..0000000
--- a/src/main/java/com/casic/handler/ReceiverServer.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.casic.handler;
-
-import io.netty.bootstrap.ServerBootstrap;
-import io.netty.channel.ChannelFuture;
-import io.netty.channel.ChannelInitializer;
-import io.netty.channel.ChannelOption;
-import io.netty.channel.EventLoopGroup;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.channel.socket.SocketChannel;
-import io.netty.channel.socket.nio.NioServerSocketChannel;
-import io.netty.handler.codec.LineBasedFrameDecoder;
-import io.netty.handler.codec.string.StringDecoder;
-import io.netty.handler.logging.LogLevel;
-import io.netty.handler.logging.LoggingHandler;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-
-/**
- * @description: 接收客户端传过来的数据,只做打印处理
- * @author: Stone
- * @create: 2019-01-10 19:52
- **/
-@Slf4j
-@Component
-public class ReceiverServer {
-
- @Autowired
- private ReceiverServerHandler receiverServerHandler;
-
- @Value("${xgd.server-port}")
- private int port;
-
-
-
- @PostConstruct
- public void init() {
- this.start();
- }
-
- public void start() {
- EventLoopGroup bossGroup = new NioEventLoopGroup();
- EventLoopGroup workerGroup = new NioEventLoopGroup();
- log.info("server bind port = {}", port);
-
- ServerBootstrap serverBootstrap = new ServerBootstrap();
- serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
- serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
- serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
-
- serverBootstrap.childHandler(new ChannelInitializer() {
- @Override
- protected void initChannel(SocketChannel socketChannel) {
-// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
- socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
- socketChannel.pipeline().addLast(new ReceiverDecoder());
- socketChannel.pipeline().addLast(new StringDecoder());
- socketChannel.pipeline().addLast(receiverServerHandler);
- }
- });
-
- serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
- try {
- ChannelFuture channelFuture = serverBootstrap.bind(port).sync();
- channelFuture.channel().closeFuture().sync();
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- workerGroup.shutdownGracefully();
- bossGroup.shutdownGracefully();
- }
- }
-}
diff --git a/src/main/java/com/casic/handler/ReceiverServerHandler.java b/src/main/java/com/casic/handler/ReceiverServerHandler.java
deleted file mode 100644
index f432e06..0000000
--- a/src/main/java/com/casic/handler/ReceiverServerHandler.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.casic.handler;
-
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelInboundHandlerAdapter;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.javassist.bytecode.ByteArray;
-import org.springframework.stereotype.Component;
-
-/**
- * @description: 消息处理handler
- * @author: Stone
- * @create: 2019-01-10 20:01
- **/
-@Slf4j
-@Component
-@ChannelHandler.Sharable
-public class ReceiverServerHandler extends ChannelInboundHandlerAdapter {
-
- public ReceiverServerHandler() {
- }
-
- @Override
- public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
- super.channelRegistered(ctx);
- }
-
- @Override
- public void channelActive(ChannelHandlerContext ctx) throws Exception {
- super.channelActive(ctx);
- }
-
- @Override
- public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
- super.channelRead(ctx, msg);
-// log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME,(String)msg);
- log.info("[{}] : msg = {}", ctx.channel().remoteAddress(), msg);
- String msgStr = msg.toString();
- // 以固定行分隔符结尾分割,头部可能有不符合接口协议的字段, 去掉
- int idx = msgStr.indexOf("##");
- if (idx >= 0) {
- msgStr = msgStr.substring(idx);
- }
-// msgProducerService.sendMsg(Common.ACTIVEMQ_QUEUE_NAME, msgStr);
- }
-
-// //ByteBuf byteBuf
- public static void main(String[] main) {
- byte[] hexBytes = {(byte) 0x86, 0x53, 0x28, 0x06, (byte) 0x84, 0x19, (byte) 0x94,
- 0x30, (byte) 0xAA, (byte) 0xAA, 0x01, 0x03, (byte) 0x02, 0x02, 0x00, (byte) 0xB8, 0x44};
- ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
- out.writeBytes(hexBytes);
-
- if (ByteBufUtil.hexDump(out).toLowerCase().contains("aaaa")) {
- pareDeviceHex(out);
- }
- }
-
-
- private static void pareDeviceHex(ByteBuf byteBuf) {
- //去掉补位
- String devcode = ByteBufUtil.hexDump(byteBuf.slice(0, 8));
- devcode = devcode.substring(0, devcode.length() - 1);
- //数值读取
- byteBuf.readBytes(12);
- byteBuf.markReaderIndex();
- Integer defaultValueLength = byteBuf.readByte() & 0xff;
- long defaultValue = 0;
- for (int i = 0; i < defaultValueLength; i++) {
- long tempLong = byteBuf.readByte() & 0xff;
- defaultValue = defaultValue * 256 + tempLong;
- }
- log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
-// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
- }
-
-
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
- super.exceptionCaught(ctx, cause);
- cause.printStackTrace();
- ctx.close();
- }
-
-}
diff --git a/src/main/java/com/casic/mapper/DeviceDataMapper.java b/src/main/java/com/casic/mapper/DeviceDataMapper.java
new file mode 100644
index 0000000..be72d19
--- /dev/null
+++ b/src/main/java/com/casic/mapper/DeviceDataMapper.java
@@ -0,0 +1,28 @@
+package com.casic.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface DeviceDataMapper {
+
+
+ /**
+ * 获取压力数据
+ */
+ List> getPressureData();
+
+ /**
+ * 获取流量数据
+ */
+ List> getFlowData();
+
+ /**
+ * 获取温湿度数据
+ */
+ List> getHumiTemp();
+
+
+}
diff --git a/src/main/java/com/casic/mapper/RainFallDataMapper.java b/src/main/java/com/casic/mapper/RainFallDataMapper.java
new file mode 100644
index 0000000..f5c29db
--- /dev/null
+++ b/src/main/java/com/casic/mapper/RainFallDataMapper.java
@@ -0,0 +1,7 @@
+package com.casic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.model.RainFallData;
+
+public interface RainFallDataMapper extends BaseMapper {
+}
diff --git a/src/main/java/com/casic/model/RainFallData.java b/src/main/java/com/casic/model/RainFallData.java
new file mode 100644
index 0000000..fa96673
--- /dev/null
+++ b/src/main/java/com/casic/model/RainFallData.java
@@ -0,0 +1,30 @@
+package com.casic.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@TableName("AD_YL_YLIANG")
+public class RainFallData {
+
+ private String dbid;
+
+ private String scrid;
+
+ private String dstid;
+
+ private String totalyuliang;
+
+ private String curminuteyuliang;
+
+ private String forminuteyuliang;
+
+ private String value;
+
+ private Date logtime;
+
+ private Date uptime;
+
+}
diff --git a/src/main/java/com/casic/model/RelayStatusDTO.java b/src/main/java/com/casic/model/RelayStatusDTO.java
new file mode 100644
index 0000000..b839e0c
--- /dev/null
+++ b/src/main/java/com/casic/model/RelayStatusDTO.java
@@ -0,0 +1,20 @@
+package com.casic.model;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class RelayStatusDTO {
+
+ /***
+ * 通道名称 1 2 3 4 5 6 7 8
+ */
+ private String channelName;
+
+ /***
+ * 开关0,1
+ */
+ private Integer lampSwitch;
+
+}
diff --git a/src/main/java/com/casic/resolver/AlarmDataResolver.java b/src/main/java/com/casic/resolver/AlarmDataResolver.java
new file mode 100644
index 0000000..2c6874b
--- /dev/null
+++ b/src/main/java/com/casic/resolver/AlarmDataResolver.java
@@ -0,0 +1,28 @@
+package com.casic.resolver;
+
+
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class AlarmDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if(msg.contains(alarmMark)){
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ Integer isAlarm = Integer.valueOf(msg.substring(16,17));
+ log.info("设备编号为" + devcode + ",是否报警" + isAlarm);
+ return RelayStatusDTO.builder()
+ .channelName( RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/casic/resolver/DatagramResolver.java b/src/main/java/com/casic/resolver/DatagramResolver.java
new file mode 100644
index 0000000..d00c952
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramResolver.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+import com.casic.model.RelayStatusDTO;
+
+public interface DatagramResolver {
+
+ RelayStatusDTO datagram(String msg);
+
+}
diff --git a/src/main/java/com/casic/resolver/DatagramSupport.java b/src/main/java/com/casic/resolver/DatagramSupport.java
new file mode 100644
index 0000000..1d911a3
--- /dev/null
+++ b/src/main/java/com/casic/resolver/DatagramSupport.java
@@ -0,0 +1,9 @@
+package com.casic.resolver;
+
+public class DatagramSupport {
+
+
+
+
+
+}
diff --git a/src/main/java/com/casic/resolver/RainFallDataResolver.java b/src/main/java/com/casic/resolver/RainFallDataResolver.java
new file mode 100644
index 0000000..8a22899
--- /dev/null
+++ b/src/main/java/com/casic/resolver/RainFallDataResolver.java
@@ -0,0 +1,79 @@
+package com.casic.resolver;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.enums.RelayDevcodeMapEnums;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.model.RelayStatusDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service
+@Slf4j
+public class RainFallDataResolver implements DatagramResolver, AlarmDatagramFlag {
+
+ @Autowired
+ private RainFallDataMapper rainFallDataMapper;
+ @Autowired
+ private AlarmLevelConfig alarmLevelConfig;
+
+ @Override
+ public RelayStatusDTO datagram(String msg) {
+ if (msg.contains(rainFallMark)) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ String defaultValue = msg.substring(26, 30);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ RainFallData rainFallData = initRainFallData(devcode, defaultValue);
+ rainFallDataMapper.insert(rainFallData);
+ Integer isAlarm = isAlarm(String.valueOf(defaultValue), alarmLevelConfig.getRainfall());
+ return RelayStatusDTO.builder()
+ .channelName(RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode))
+ .lampSwitch(isAlarm)
+ .build();
+ }
+ return null;
+
+ }
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ private RainFallData initRainFallData(String devcode, String valueStr) {
+ RainFallData rainFallData = new RainFallData();
+ rainFallData.setDstid(devcode);
+ rainFallData.setTotalyuliang(valueStr);
+ rainFallData.setUptime(new Date());
+ rainFallData.setLogtime(new Date());
+ return rainFallData;
+ }
+
+ // //ByteBuf byteBuf
+ public static void main(String[] main) {
+ pareDeviceHex("8653280684199430AAAA01030200023985");
+ }
+
+ private static void pareDeviceHex(String msg) {
+ //去掉补位
+ String devcode = msg.substring(0, 15);
+ log.info(" devcode : " + devcode);
+ String valueStr = msg.substring(26, 30);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverDecoder.java b/src/main/java/com/casic/server/ReceiverDecoder.java
new file mode 100644
index 0000000..7030790
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverDecoder.java
@@ -0,0 +1,71 @@
+package com.casic.server;
+
+import com.casic.enums.RelaySwitchEnums;
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.ByteToMessageDecoder;
+import lombok.extern.slf4j.Slf4j;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * 自定义解码器
+ *
+ * @description: 将从接口取到的数据编码
+ * @author: cz
+ * @create: 2023-5-10
+ **/
+@Slf4j
+public class ReceiverDecoder extends ByteToMessageDecoder implements RelaySwitchEnums {
+
+
+// final ChannelGroup channels =
+// new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+
+ @Override
+ protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception {
+ if (msg.toString(Charset.defaultCharset()).toLowerCase().contains("aaaa")) {
+ pareDeviceHex(msg);
+ }
+// if(msg.readableBytes()>2){
+// out.add(msg);
+// }
+ }
+
+// @Override
+// public void channelActive(ChannelHandlerContext ctx) throws Exception {
+// channels.add(ctx.channel());
+// super.channelActive(ctx);
+// }
+//
+// @Override
+// public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+// super.channelRead(ctx, msg);
+// ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+// String switchConent = preFix + 1 + "," + 1 + postFix;
+// out.writeBytes(switchConent.getBytes());
+// channels.forEach(
+// channel ->{
+// if(channel!=ctx.channel()) {
+// channel.writeAndFlush(out);
+// }
+// }
+// );
+// }
+
+ private static void pareDeviceHex(ByteBuf byteBuf) {
+ //去掉补位
+ log.info(" String : " + byteBuf.toString(Charset.defaultCharset()));
+ String devcode = byteBuf.slice(0, 15).toString(Charset.defaultCharset());
+ log.info(" devcode : " + devcode);
+ byteBuf.resetReaderIndex();//重置位判断
+ String valueStr = byteBuf.slice(26, 4).toString(Charset.defaultCharset());
+ log.info(" valueStr : " + valueStr);
+ long defaultValue = Long.valueOf(valueStr);
+ log.info("设备编号为" + devcode + ",设备数据为" + defaultValue);
+// System.out.println("设备编号为" + devcode + ",设备数据为" + defaultValue);
+ }
+
+}
diff --git a/src/main/java/com/casic/server/ReceiverServer.java b/src/main/java/com/casic/server/ReceiverServer.java
new file mode 100644
index 0000000..a98e4ca
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServer.java
@@ -0,0 +1,72 @@
+package com.casic.server;
+
+import com.casic.config.ServerPort;
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import io.netty.handler.codec.string.StringDecoder;
+import io.netty.handler.logging.LogLevel;
+import io.netty.handler.logging.LoggingHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * @description: 接收客户端传过来的数据,只做打印处理
+ * @author: Stone
+ * @create: 2019-01-10 19:52
+ **/
+@Slf4j
+@Component
+public class ReceiverServer {
+
+ @Autowired
+ private ReceiverServerHandler receiverServerHandler;
+ @Autowired
+ private ServerPort serverPort;
+
+ @PostConstruct
+ public void init() {
+ this.start();
+ }
+
+ public void start() {
+ EventLoopGroup bossGroup = new NioEventLoopGroup();
+ EventLoopGroup workerGroup = new NioEventLoopGroup();
+ log.info("server bind port = {}", serverPort.getPort());
+
+ ServerBootstrap serverBootstrap = new ServerBootstrap();
+ serverBootstrap = serverBootstrap.group(bossGroup, workerGroup);
+ serverBootstrap = serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024);
+ serverBootstrap = serverBootstrap.channel(NioServerSocketChannel.class);
+
+ serverBootstrap.childHandler(new ChannelInitializer() {
+ @Override
+ protected void initChannel(SocketChannel socketChannel) {
+// socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
+ socketChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
+// socketChannel.pipeline().addLast(new ReceiverDecoder());
+ socketChannel.pipeline().addLast(new StringDecoder());
+ socketChannel.pipeline().addLast(receiverServerHandler);
+ }
+ });
+ serverBootstrap = serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
+ try {
+ ChannelFuture channelFuture = serverBootstrap.bind(serverPort.getPort()).sync();
+ channelFuture.channel().closeFuture().sync();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } finally {
+ workerGroup.shutdownGracefully();
+ bossGroup.shutdownGracefully();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/server/ReceiverServerHandler.java b/src/main/java/com/casic/server/ReceiverServerHandler.java
new file mode 100644
index 0000000..31ac43e
--- /dev/null
+++ b/src/main/java/com/casic/server/ReceiverServerHandler.java
@@ -0,0 +1,103 @@
+package com.casic.server;
+
+
+import com.casic.enums.RelaySwitchEnums;
+import com.casic.model.RelayStatusDTO;
+import com.casic.resolver.RainFallDataResolver;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.channel.group.ChannelGroup;
+import io.netty.channel.group.DefaultChannelGroup;
+import io.netty.util.concurrent.GlobalEventExecutor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * @description: 消息处理handler
+ * @author: Stone
+ * @create: 2019-01-10 20:01
+ **/
+@Slf4j
+@Component
+@ChannelHandler.Sharable
+public class ReceiverServerHandler extends ChannelInboundHandlerAdapter implements RelaySwitchEnums {
+
+ final ChannelGroup channels =
+ new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+ @Autowired
+ private List rainFallDataResolverList;
+
+ public ReceiverServerHandler() {
+ }
+
+ @Override
+ public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
+ super.channelRegistered(ctx);
+ }
+
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) throws Exception {
+ channels.add(ctx.channel());
+ super.channelActive(ctx);
+ }
+
+ @Override
+ public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+ channels.forEach(channel -> {
+ if (channel == ctx.channel()) {
+ channels.remove(channel);
+ }
+ }
+ );
+ super.channelInactive(ctx);
+ }
+
+ /**
+ * 雨量计
+ */
+ @Override
+ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+ if (msg instanceof String) {
+ rainFallDataResolverList.forEach(
+ rainFallDataResolver -> {
+ RelayStatusDTO relayStatusDTO = rainFallDataResolver.datagram(String.valueOf(msg));
+ sendMsg(ctx, relayStatusDTO);
+ }
+ );
+ }
+ super.channelRead(ctx, msg);
+ }
+
+ private void sendMsg(ChannelHandlerContext ctx, RelayStatusDTO relayStatusDTO) {
+ if (!ObjectUtils.isEmpty(relayStatusDTO)) {
+ ByteBuf out = ByteBufAllocator.DEFAULT.heapBuffer();
+ String switchConent = preFix + relayStatusDTO.getChannelName() + "," + relayStatusDTO.getLampSwitch() + postFix;
+ out.writeBytes(switchConent.getBytes());
+ channels.forEach(channel -> {
+ if (channel.isActive()) {
+ if (channel != ctx.channel()) {
+ channel.writeAndFlush(out);
+ }
+ }
+ }
+ );
+ }
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ super.exceptionCaught(ctx, cause);
+ cause.printStackTrace();
+ ctx.close();
+ }
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataScanner.java b/src/main/java/com/casic/service/DeviceDataScanner.java
new file mode 100644
index 0000000..049fa71
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataScanner.java
@@ -0,0 +1,7 @@
+package com.casic.service;
+
+public interface DeviceDataScanner {
+
+ void scanDeviceData();
+
+}
diff --git a/src/main/java/com/casic/service/DeviceDataSupport.java b/src/main/java/com/casic/service/DeviceDataSupport.java
new file mode 100644
index 0000000..93d61ea
--- /dev/null
+++ b/src/main/java/com/casic/service/DeviceDataSupport.java
@@ -0,0 +1,50 @@
+package com.casic.service;
+
+import com.alibaba.druid.util.StringUtils;
+import com.casic.client.Client;
+import com.casic.config.AlarmLevelConfig;
+import com.casic.enums.AlarmDatagramFlag;
+import com.casic.mapper.DeviceDataMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ *
+ */
+@Slf4j
+@Component
+public class DeviceDataSupport implements AlarmDatagramFlag {
+
+ @Autowired
+ protected DeviceDataMapper deviceDataMapper;
+ @Autowired
+ protected AlarmLevelConfig alarmLevelConfig;
+ @Autowired
+ private Client client;
+
+ /**
+ * 比较是否报警 报警/正常 1/0
+ */
+ protected Integer isAlarm(String realData, String thresholdValue) {
+ if (!StringUtils.isEmpty(realData) && StringUtils.isEmpty(thresholdValue)) {
+ if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) {
+ return 1;
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * 发送报警消息
+ */
+ protected void sendAlarmMsg(String devcode, Integer isAlarm) {
+ try {
+ String alarmMsg = devcode + alarmMark + isAlarm;
+ client.send(alarmMsg);
+ } catch (Exception ex) {
+ log.error("消息发送失败,设备编号为{},异常信息{}", devcode, ex.getMessage());
+ }
+ }
+
+}
diff --git a/src/main/java/com/casic/service/RainFallDataService.java b/src/main/java/com/casic/service/RainFallDataService.java
new file mode 100644
index 0000000..6c1a12d
--- /dev/null
+++ b/src/main/java/com/casic/service/RainFallDataService.java
@@ -0,0 +1,6 @@
+package com.casic.service;
+
+public interface RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
new file mode 100644
index 0000000..14dc1eb
--- /dev/null
+++ b/src/main/java/com/casic/service/impl/RainFallDataServiceImpl.java
@@ -0,0 +1,13 @@
+package com.casic.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.RainFallDataMapper;
+import com.casic.model.RainFallData;
+import com.casic.service.RainFallDataService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class RainFallDataServiceImpl extends ServiceImpl implements RainFallDataService {
+
+
+}
diff --git a/src/main/java/com/casic/service/scanner/FlowDataScanner.java b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
new file mode 100644
index 0000000..7ab7228
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/FlowDataScanner.java
@@ -0,0 +1,28 @@
+package com.casic.service.scanner;
+
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class FlowDataScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String thresholdValue = alarmLevelConfig.getFlow();
+ List> flowDataMapList = this.deviceDataMapper.getFlowData();
+ flowDataMapList.forEach(
+ flowDataMap -> {
+ String devcode = flowDataMap.get("devcode").toString();
+ String insdata = flowDataMap.get("insdata").toString();
+ Integer isAlarm = isAlarm(insdata, thresholdValue);
+ sendAlarmMsg(devcode, isAlarm);
+ }
+ );
+ }
+
+
+}
diff --git a/src/main/java/com/casic/service/scanner/PressDataScanner.java b/src/main/java/com/casic/service/scanner/PressDataScanner.java
new file mode 100644
index 0000000..6738c38
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/PressDataScanner.java
@@ -0,0 +1,29 @@
+package com.casic.service.scanner;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.mapper.DeviceDataMapper;
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class PressDataScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String thresholdValue = alarmLevelConfig.getPressure();
+ List> pressDataMapList = this.deviceDataMapper.getPressureData();
+ pressDataMapList.forEach(
+ pressDataMap -> {
+ String devcode = pressDataMap.get("devcode").toString();
+ String pressdata = pressDataMap.get("pressdata").toString();
+ Integer isAlarm=isAlarm(pressdata,thresholdValue);
+ sendAlarmMsg(devcode,isAlarm);
+ }
+ );
+ }
+
+}
diff --git a/src/main/java/com/casic/service/scanner/TempHumiScanner.java b/src/main/java/com/casic/service/scanner/TempHumiScanner.java
new file mode 100644
index 0000000..a9efc57
--- /dev/null
+++ b/src/main/java/com/casic/service/scanner/TempHumiScanner.java
@@ -0,0 +1,34 @@
+package com.casic.service.scanner;
+
+import com.casic.service.DeviceDataScanner;
+import com.casic.service.DeviceDataSupport;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class TempHumiScanner extends DeviceDataSupport implements DeviceDataScanner {
+
+ @Override
+ public void scanDeviceData() {
+ String humiThreshold = alarmLevelConfig.getHumi();
+ String tempThreshold = alarmLevelConfig.getTemp();
+ List> pressDataMapList = this.deviceDataMapper.getHumiTemp();
+ pressDataMapList.forEach(
+ pressDataMap -> {
+ String devcode = pressDataMap.get("devcode").toString();
+ String temperatureData = pressDataMap.get("temperature").toString();
+ Integer isTempAlarm = isAlarm(temperatureData, tempThreshold);
+ String humidityData = pressDataMap.get("humidity").toString();
+ Integer isHumiAlarm = isAlarm(humidityData, humiThreshold);
+ if (isHumiAlarm == 0 && isTempAlarm == 0) {
+ sendAlarmMsg(devcode, 0);
+ } else {
+ sendAlarmMsg(devcode, 1);
+ }
+ }
+ );
+ }
+
+}
diff --git a/src/main/java/com/casic/util/Client.java b/src/main/java/com/casic/util/Client.java
deleted file mode 100644
index a416600..0000000
--- a/src/main/java/com/casic/util/Client.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.casic.util;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.net.Socket;
-import java.net.UnknownHostException;
-
-/**
- * @author: njb
- * @Date: 2020/11/26 18:49
- * @desc: 客户端socket
- */
-public class Client {
- public static void main(String[] args) {
- try {
- //发送到8888端口
- Socket socket = new Socket("127.0.0.1", 11321);
- //输出流
- OutputStream outputStream = socket.getOutputStream();
- PrintWriter printWriter = new PrintWriter(outputStream);
- printWriter.write("服务端你好,我是客户端");
- printWriter.flush();
- //关闭资源
- printWriter.close();
- outputStream.close();
- socket.close();
- } catch (UnknownHostException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-}
diff --git a/src/main/java/com/casic/util/ClientTest.java b/src/main/java/com/casic/util/ClientTest.java
new file mode 100644
index 0000000..4c1bf65
--- /dev/null
+++ b/src/main/java/com/casic/util/ClientTest.java
@@ -0,0 +1,34 @@
+package com.casic.util;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.net.Socket;
+import java.net.UnknownHostException;
+
+/**
+ * @author: njb
+ * @Date: 2020/11/26 18:49
+ * @desc: 客户端socket
+ */
+public class ClientTest {
+ public static void main(String[] args) {
+ try {
+ //发送到8888端口
+ Socket socket = new Socket("127.0.0.1", 11321);
+ //输出流
+ OutputStream outputStream = socket.getOutputStream();
+ PrintWriter printWriter = new PrintWriter(outputStream);
+ printWriter.write("服务端你好,我是客户端");
+ printWriter.flush();
+ //关闭资源
+ printWriter.close();
+ outputStream.close();
+ socket.close();
+ } catch (UnknownHostException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/main/java/com/casic/util/Server.java b/src/main/java/com/casic/util/Server.java
deleted file mode 100644
index 50c0957..0000000
--- a/src/main/java/com/casic/util/Server.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.casic.util;
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.ServerSocket;
-import java.net.Socket;
-
-/**
- * @author: njb
- * @Date: 2020/11/26 18:49
- * @desc: 服务器socket
- */
-public class Server {
- public static void main(String[] args) {
- try {
- ServerSocket serverSocket = new ServerSocket(11321);
- System.out.println("----------------服务端执行,開始监听请求----------------");
-
- Socket socket = serverSocket.accept();//開始监听
- InputStream inputStream = socket.getInputStream();
- //获取请求内容
- String info;
- BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
- while ((info = bufferedReader.readLine()) != null) {
- System.out.println("我是服务端,客户端请求为:" + info);
- }
- //关闭资源
- socket.shutdownInput();
- bufferedReader.close();
- inputStream.close();
- socket.close();
- serverSocket.close();
- } catch (Exception exception) {
- exception.printStackTrace();
- }
- }
-}
\ No newline at end of file
diff --git a/src/main/java/com/casic/util/ServerTest.java b/src/main/java/com/casic/util/ServerTest.java
new file mode 100644
index 0000000..53ba687
--- /dev/null
+++ b/src/main/java/com/casic/util/ServerTest.java
@@ -0,0 +1,38 @@
+package com.casic.util;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+/**
+ * @author: njb
+ * @Date: 2020/11/26 18:49
+ * @desc: 服务器socket
+ */
+public class ServerTest {
+ public static void main(String[] args) {
+ try {
+ ServerSocket serverSocket = new ServerSocket(11321);
+ System.out.println("----------------服务端执行,開始监听请求----------------");
+
+ Socket socket = serverSocket.accept();//開始监听
+ InputStream inputStream = socket.getInputStream();
+ //获取请求内容
+ String info;
+ BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+ while ((info = bufferedReader.readLine()) != null) {
+ System.out.println("我是服务端,客户端请求为:" + info);
+ }
+ //关闭资源
+ socket.shutdownInput();
+ bufferedReader.close();
+ inputStream.close();
+ socket.close();
+ serverSocket.close();
+ } catch (Exception exception) {
+ exception.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/casic/util/SpringContextUtil.java b/src/main/java/com/casic/util/SpringContextUtil.java
new file mode 100644
index 0000000..290d6f6
--- /dev/null
+++ b/src/main/java/com/casic/util/SpringContextUtil.java
@@ -0,0 +1,106 @@
+package com.casic.util;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.beans.factory.support.AbstractBeanDefinition;
+import org.springframework.beans.factory.support.BeanDefinitionBuilder;
+import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ForkJoinPool;
+import java.util.function.Function;
+
+/**
+ * @Description: Spring应用上下文工具
+ * @Author: cz
+ * @Date: 2022-04-19
+ */
+@Component
+public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware {
+ /**
+ * Spring应用上下文环境
+ */
+ private static ApplicationContext applicationContext;
+
+ private static ConfigurableListableBeanFactory beanFactory;
+
+ /**
+ * 实现ApplicationContextAware接口的回调方法,设置上下文环境
+ */
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+ SpringContextUtil.applicationContext = applicationContext;
+ }
+
+ @Override
+ public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
+ SpringContextUtil.beanFactory = beanFactory;
+ }
+
+ public static ApplicationContext getApplicationContext() {
+ return applicationContext;
+ }
+
+// public static Object getBean(String beanId) throws BeansException {
+// return applicationContext.getBean(beanId);
+// }
+
+ public static T getBean(Class requiredType) {
+ return (T) applicationContext.getBean(requiredType);
+ }
+
+ @SuppressWarnings("unchecked")
+ public static T getBean(String name) throws BeansException {
+ return (T) beanFactory.getBean(name);
+ }
+
+ public static boolean containsBean(String name) {
+ return beanFactory.containsBean(name);
+ }
+
+ public static T registerBean(String beanName, Class clazz, Function function) {
+ // 生成bean定义
+ BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz);
+ // 执行bean处理函数
+ AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder);
+ BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory;
+ // 判断是否通过beanName注册
+ if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) {
+ beanFactory.registerBeanDefinition(beanName, beanDefinition);
+ return getBean(beanName);
+ } else {
+ // 非命名bean注册
+ String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory);
+ return getBean(name);
+ }
+ }
+
+ public static T registerBean(String beanName, Class clazz, List args, Map property) {
+ return registerBean(beanName, clazz, beanDefinitionBuilder -> {
+ // 放入构造参数
+ if (!CollectionUtils.isEmpty(args)) {
+ args.forEach(beanDefinitionBuilder::addConstructorArgValue);
+ }
+ // 放入属性
+ if (!CollectionUtils.isEmpty(property)) {
+ property.forEach(beanDefinitionBuilder::addPropertyValue);
+ }
+ return beanDefinitionBuilder.getBeanDefinition();
+ });
+ }
+
+ @Bean
+ public ForkJoinPool forkJoinPool() {
+ return new ForkJoinPool(100);
+ }
+
+}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..20205e3
--- /dev/null
+++ b/src/main/resources/application-dev.yml
@@ -0,0 +1,18 @@
+server:
+ port: 11315
+################### spring配置 ###################
+spring:
+ datasource:
+ driverClassName: oracle.jdbc.driver.OracleDriver
+ url: jdbc:oracle:thin:@139.198.18.188:1521:WDMA
+ username: sensor
+ password: sensor
+ jms:
+ pub-sub-domain: false
+
+logging:
+ level.root: error
+ level.com.casic: info
+ file:
+ path: logs/
+ name: missiles.log
\ No newline at end of file
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index d27f7a5..4a7b9ac 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,29 +1,34 @@
-server:
- port: 11315
-################### spring配置 ###################
spring:
- datasource:
- driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://111.198.10.15:11102/smartwell_demos?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&&allowMultiQueries=true&&useSSL=true
- username: root
- password: Casic203!
- jms:
- pub-sub-domain: false
- activemq:
- user:
- password:
- broker-url: tcp://192.168.0.203:61616
- kafka:
- url: http://58.250.71.201:19000/API/Table/GetRTJoinTmpStore
- tableId: 66
- topic: 66
+ profiles:
+ active: dev
+ servlet:
+ multipart:
+ max-file-size: 50MB
+ max-request-size: 80MB
+ mvc:
+ pathmatch:
+ matching-strategy: ant_path_matcher
+mybatis-plus:
+ global-config:
+ enable-sql-runner: true
+ configuration:
+ # 配置结果集属性为空时 是否映射返回结果
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用
+ mapper-locations: classpath:mapper/*.xml
+mybatis:
+ mapper-locations: classpath:mapper/*.xml
+#mybatis-plus:
+# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
-
-
-
-# customer config
-c-activemq:
- queue-name: "hjt.msg.queue"
+casic:
+ alarm:
+ rainfall: 20
+ humi: 10
+ temp: 10
+ pressure: 15
+ flow: 5
+ task:
+ cronTime: 0 */1 * * * ?
xgd:
server-port: 13764
diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml
new file mode 100644
index 0000000..c0c7ac9
--- /dev/null
+++ b/src/main/resources/logback-spring.xml
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${CONSOLE_LOG_PATTERN}
+ utf-8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${CONSOLE_LOG_PATTERN}
+ utf-8
+
+
+
+
+
+
+
+ ${LOG_PATH}/missiles_error.log
+
+
+
+
+
+ ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log
+
+
+
+ 10MB
+
+
+
+
+ true
+
+
+
+ ${FILE_LOG_PATTERN}
+ utf-8
+
+
+
+
+ error
+ ACCEPT
+ DENY
+
+
+
+
+
+
+
+ ${LOG_PATH}/missiles_total.log
+
+
+
+
+
+ ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log
+
+
+
+ 10MB
+
+
+
+
+ true
+
+
+
+ ${FILE_LOG_PATTERN}
+ utf-8
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/mapper/DeviceMapper.xml b/src/main/resources/mapper/DeviceMapper.xml
new file mode 100644
index 0000000..95c83d2
--- /dev/null
+++ b/src/main/resources/mapper/DeviceMapper.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file