Forráskód Böngészése

修复接收数据程序的bug。

zhuoning 3 éve
szülő
commit
c01841aa84
16 módosított fájl, 436 hozzáadás és 31 törlés
  1. 2 2
      huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/listener/ManageListener.java
  2. 1 0
      huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/HuimvEartag2InputApplication.java
  3. 29 0
      huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/server/DeviceHandler.java
  4. 76 0
      huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/server/EartagServer.java
  5. 122 0
      huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/server/EartagServerHandler.java
  6. 60 16
      huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/server/EartagServerHandler2.java
  7. 42 0
      huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/server/MyChannelInitializer.java
  8. 29 0
      huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/server/MyHandler.java
  9. 1 1
      huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/service/impl/DataServiceImpl.java
  10. 26 0
      huimv-eartag2-platform/huimv-eartag2-input/src/test/java/com/huimv/eartag2/utils/StringButterTest.java
  11. 3 2
      huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/controller/DeviceRegisterController.java
  12. 4 0
      huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/service/ICacheService.java
  13. 2 2
      huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/service/IDeviceRegisterService.java
  14. 12 1
      huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/service/impl/CacheServiceImpl.java
  15. 15 7
      huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/service/impl/DeviceRegisterServiceImpl.java
  16. 12 0
      huimv-eartag2-platform/huimv-eartag2-manage/src/test/java/com/huimv/eartag2/manage/utils/CacheTest.java

+ 2 - 2
huimv-eartag2-platform/huimv-eartag2-device/src/main/java/com/huimv/eartag2/device/listener/ManageListener.java

@@ -69,11 +69,11 @@ public class ManageListener {
         System.out.println("deviceRegisterJo>>"+deviceRegisterJo.toJSONString());
 //        System.out.println("同步设备注册信息>>"+deviceRegisterJo);
         //{计算有效耳标总数并存储到缓存}
-        deviceService.countEffectiveDeviceTotal(deviceRegisterJo);
+//        deviceService.countEffectiveDeviceTotal(deviceRegisterJo);
         System.out.println("4.");
 
         //{计算设备和耳标总状态}
-        deviceService.countFarmAllStatus(deviceRegisterJo);
+//        deviceService.countFarmAllStatus(deviceRegisterJo);
         System.out.println("5.");
     }
 

+ 1 - 0
huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/HuimvEartag2InputApplication.java

@@ -1,5 +1,6 @@
 package com.huimv.eartag2;
 
+import com.huimv.eartag2.server.EartagServer;
 import com.huimv.eartag2.server.EartagServer2;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;

+ 29 - 0
huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/server/DeviceHandler.java

@@ -0,0 +1,29 @@
+package com.huimv.eartag2.server;
+
+import io.netty.channel.ChannelDuplexHandler;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelPromise;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+@Component
+@ChannelHandler.Sharable
+public class DeviceHandler extends ChannelDuplexHandler {
+    @Override
+    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+        //在这里可以处理硬件发送过来的数据
+        System.out.println("数据对象长度:" + ((byte[]) msg).length);
+    }
+    @Override
+    public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
+        super.write(ctx, msg, promise);
+    }
+}

+ 76 - 0
huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/server/EartagServer.java

@@ -0,0 +1,76 @@
+package com.huimv.eartag2.server;
+
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.channel.*;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+@Component
+public class EartagServer {
+    @Autowired
+    private EartagServerHandler serverHandler;
+    //监听端口
+    private int port = 8012;
+    //创建构造方法
+    public EartagServer(){
+    }
+
+    public static void main(String[] args) throws InterruptedException {
+        new EartagServer2().run();
+    }
+/**
+ *
+ * 功能描述: 启动方法前台多个服务  处理多个线程
+ *
+ * @param:
+ * @return:
+ * @auther: LiGang
+ * @date: 2019/3/26 11:31
+ */
+    /**
+     * 启动流程
+     */
+    public void start() throws InterruptedException {
+        //配置服务端线程组
+        EventLoopGroup bossGroup=new NioEventLoopGroup();
+        EventLoopGroup workGroup=new NioEventLoopGroup();
+
+        try{
+            //引导整个server的启动
+            ServerBootstrap serverBootstrap = new ServerBootstrap();
+            serverBootstrap.group(bossGroup,workGroup)
+                    .channel(NioServerSocketChannel.class)    //指定处理的连接类型
+                    .childHandler(new ChannelInitializer<SocketChannel>() {
+                        @Override
+                        protected void initChannel(SocketChannel socketChannel) throws Exception {
+                            socketChannel.pipeline().addLast(serverHandler);
+                        }
+                    })
+//                    .option(ChannelOption.RCVBUF_ALLOCATOR,new FixedRecvByteBufAllocator(2*1024*1024))
+//                    .childOption(ChannelOption.RCVBUF_ALLOCATOR, new AdaptiveRecvByteBufAllocator(64, 1024, 64*1024))
+            ;
+
+            System.out.println("# 耳标及采集器设备数据接收服务器已经启动。#");
+            System.out.println("# 准备接收数据:");
+            //绑定端口,同步等待成功
+            ChannelFuture cf = serverBootstrap.bind(port).sync();
+            // 等待服务端监听端口关闭
+            cf.channel().closeFuture().sync();
+        }finally {
+            //优雅的退出
+            bossGroup.shutdownGracefully();
+            workGroup.shutdownGracefully();
+        }
+    }
+}

+ 122 - 0
huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/server/EartagServerHandler.java

@@ -0,0 +1,122 @@
+package com.huimv.eartag2.server;
+
+import com.alibaba.fastjson.JSONArray;
+import com.huimv.eartag2.common.mq.Const;
+import com.huimv.eartag2.service.IDataService;
+import com.huimv.eartag2.service.IDeviceService;
+import com.huimv.eartag2.utils.DateUtil2;
+import com.huimv.eartag2.utils.RegexUtil;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
+import io.netty.channel.ChannelHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.util.CharsetUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+@ChannelHandler.Sharable
+@Component
+@Slf4j
+public class EartagServerHandler extends ChannelInboundHandlerAdapter {
+    @Autowired
+    private IDataService dataService;
+    @Autowired
+    private DateUtil2 dateUtil;
+    @Autowired
+    private RegexUtil regexUtil;
+    @Autowired
+    private IDeviceService deviceService;
+    @Value("${data.input.flow}")
+    private Integer dataInputFlow;
+    private StringBuilder sb = null;
+    private Integer num = 0;
+
+    public void save(String text){
+        if(this.sb == null){
+            sb = new StringBuilder();
+        }
+        sb.append(text);
+    }
+
+    @Override
+    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+        ByteBuf data = (ByteBuf) msg;
+        ++num;
+        String clientAskText = data.toString(CharsetUtil.UTF_8);
+//        System.out.println(num+"次, 客户端消息clientAskText>>"+clientAskText);
+//        System.out.println("客户端请求内容长度>>"+clientAskText.length());
+        save(clientAskText);
+//        System.out.println("sb.length>>"+sb.length());
+
+    }
+
+    //        clientAskText = clientAskText.replaceAll("\r","").replaceAll("\n","");
+//        System.out.println("### 服务端接收数据 >>" + clientAskText);
+//        //TEST-saveRawData()
+////        deviceService.saveRawData(clientAskText);
+//        //{}
+//        int countPlus = regexUtil.countPlus(clientAskText);
+//        if (countPlus < 4) {
+//            System.out.println("当前数据为不完整数据,故丢弃.>>" + clientAskText);
+//        } else {
+//            //--处理客户端请求数据
+//            //{拆分粘包数据}
+//            JSONArray askJa = getPerData(clientAskText);
+//            for (int a = 0; a < askJa.size(); a++) {
+//                String askText = askJa.getString(a);
+//                /////////////////////////////////////////////////////////////
+//                //TEST-saveRawData()
+////                deviceService.saveRawData(askText);
+//                /////////////////////////////////////////////////////////////
+//                if (dataInputFlow == 1) {
+//                    //{处理请求内容}
+//                    handleAskText(askText, ctx);
+//                } else {
+//                    //{处理请求内容2}
+//                    handleAskText2(askText, ctx);
+//                }
+//            }
+//        }
+
+    @Override
+    public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
+//        ctx.writeAndFlush("111");
+//        System.out.println("EchoServerHandle channelReadComplete");
+//        ctx.close();
+
+        if(sb.toString().indexOf("end") != -1){
+            System.out.println("sb.toString()>>"+sb.toString());
+            System.out.println("sb.length>>"+sb.length());
+            System.out.println("输入完成.");
+            sb.delete(0,sb.length());
+            num = 0;
+            System.out.println("清空sb实例. 长度>>"+sb.length());
+        }
+
+    }
+
+    @Override
+    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+        cause.printStackTrace();
+        ctx.close();
+
+    }
+}

+ 60 - 16
huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/server/EartagServerHandler2.java

@@ -46,16 +46,73 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
     private IDeviceService deviceService;
     @Value("${data.input.flow}")
     private Integer dataInputFlow;
+    private StringBuilder askTextSb = null;
+    private int num = 0;
 
+    //
+    public void saveClientAsk(String text){
+        if(this.askTextSb == null){
+            askTextSb = new StringBuilder();
+        }
+        askTextSb.append(text);
+    }
 
     @Override
     public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
         ByteBuf data = (ByteBuf) msg;
         String clientAskText = data.toString(CharsetUtil.UTF_8);
+//        System.out.println((++num)+"次, 客户端消息clientAskText>>"+clientAskText);
+        //保存实例内的客户端请求
+        saveClientAsk(clientAskText);
+    }
+
+    @Override
+    public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
+//        ctx.writeAndFlush("111");
+//        System.out.println("EchoServerHandle channelReadComplete");
+        if(askTextSb.toString().indexOf("end") != -1){
+//            System.out.println("askTextSb.内容()>>"+askTextSb.toString());
+//            System.out.println("askTextSb.内容长度>>"+askTextSb.length());
+//            System.out.println("输入完成.");
+            // 处理客户端消息
+            handleClientMessage(askTextSb.toString(),ctx);
+//            handleClientMessage2(askTextSb.toString(),ctx);
+            //清空重置;
+            askTextSb.delete(0,askTextSb.length());
+            num = 0;
+//            System.out.println("清空sb实例. 长度>>"+askTextSb.length());
+        }
+    }
+
+    private void handleClientMessage2(String text, ChannelHandlerContext ctx) {
+        System.out.println("text >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+text);
+    }
+
+    @Override
+    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+        cause.printStackTrace();
+        ctx.close();
+    }
+
+    /**
+     * @Method      : handleClientMessage
+     * @Description : 处理请求小心
+     * @Params      : [clientAskText, ctx]
+     * @Return      : void
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2022/3/28       
+     * @Time        : 17:36
+     */
+    private void handleClientMessage(String clientAskText,ChannelHandlerContext ctx) throws ParseException {
+//        System.out.println("## clientAskText>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> "+clientAskText);
         clientAskText = clientAskText.replaceAll("\r","").replaceAll("\n","");
         System.out.println("### 服务端接收数据 >>" + clientAskText);
+        /////////////////////////////////////////////////////////////
         //TEST-saveRawData()
 //        deviceService.saveRawData(clientAskText);
+        /////////////////////////////////////////////////////////////
+
         //{}
         int countPlus = regexUtil.countPlus(clientAskText);
         if (countPlus < 4) {
@@ -70,7 +127,6 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
                 //TEST-saveRawData()
 //                deviceService.saveRawData(askText);
                 /////////////////////////////////////////////////////////////
-
                 if (dataInputFlow == 1) {
                     //{处理请求内容}
                     handleAskText(askText, ctx);
@@ -109,7 +165,7 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
                 //处理获取设备编码命令
                 //{读取设备编码}
                 String deviceCode = dataService.getDeviceCodeByChipId(idCode);
-                log.info("芯片id>>" + idCode + " ,deviceCode>>" + deviceCode);
+                log.info("获取设备编码结果 芯片id>>" + idCode + " ,deviceCode>>" + deviceCode);
                 if (deviceCode != null) {
                     String answer = "hm+1+0+" + deviceCode + "+123+8+end";
                     log.info(">>返回命令1设备编码-应答数据>>" + answer);
@@ -140,7 +196,7 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
                     dataService.sendDeviceMQ(map);
                     System.out.println("有效设备编码");
                 } else {
-                    System.out.println("##心跳包-无效设备编码 idCode=" + idCode);
+                    System.out.println("##心跳包-无效设备编码(" + idCode+"),请求拒绝。");
                 }
             } else if (cmd.trim().equalsIgnoreCase("4")) {
                 System.out.println("==>命令4请求 askText>>" + askText);
@@ -155,7 +211,7 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
                     dataService.sendDeviceMQ(map);
                     System.out.println("有效设备编码");
                 } else {
-                    System.out.println("##环境温度-无效设备编码 idCode=" + idCode);
+                    System.out.println("##环境温度-无效设备编码(" + idCode+"),请求拒绝。");
                 }
             } else {
                 System.out.println("==>未知命令");
@@ -321,16 +377,4 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
         return dataJa;
     }
 
-    @Override
-    public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
-//        ctx.writeAndFlush("111");
-//        System.out.println("EchoServerHandle channelReadComplete");
-    }
-
-    @Override
-    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
-        cause.printStackTrace();
-        ctx.close();
-
-    }
 }

+ 42 - 0
huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/server/MyChannelInitializer.java

@@ -0,0 +1,42 @@
+package com.huimv.eartag2.server;
+
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelDuplexHandler;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInitializer;
+import io.netty.handler.timeout.IdleState;
+import io.netty.handler.timeout.IdleStateEvent;
+import io.netty.handler.timeout.IdleStateHandler;
+
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+public class MyChannelInitializer extends ChannelInitializer<Channel> {
+    @Override
+    public void initChannel(Channel channel) {
+        channel.pipeline().addLast("idleStateHandler", new IdleStateHandler(60, 30, 0));
+//        channel.pipeline().addLast("myHandler", new MyHandler());
+    }
+}
+
+//public class MyHandler extends ChannelDuplexHandler {
+//    @Override
+//    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
+//        if (evt instanceof IdleStateEvent) {
+//            IdleStateEvent e = (IdleStateEvent) evt;
+//            if (e.state() == IdleState.READER_IDLE) {
+//                ctx.close();
+//            } else if (e.state() == IdleState.WRITER_IDLE) {
+//                ctx.writeAndFlush(new PingMessage());
+//            }
+//        }
+//    }
+//}
+//ServerBootstrap bootstrap = ...;
+//bootstrap.childHandler(new MyChannelInitializer());

+ 29 - 0
huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/server/MyHandler.java

@@ -0,0 +1,29 @@
+package com.huimv.eartag2.server;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.timeout.IdleState;
+import io.netty.handler.timeout.IdleStateEvent;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+//public class MyHandler extends ChannelDuplexHandler {
+//    @Override
+//    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
+//        if (evt instanceof IdleStateEvent) {
+//            IdleStateEvent e = (IdleStateEvent) evt;
+//            if (e.state() == IdleState.READER_IDLE) {
+//                ctx.close();
+//            } else if (e.state() == IdleState.WRITER_IDLE) {
+//                ctx.writeAndFlush(new PingMessage());
+//            }
+//        }
+//    }
+//    ServerBootstrap bootstrap = ...;
+//    bootstrap.childHandler(new MyChannelInitializer());
+//}

+ 1 - 1
huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/service/impl/DataServiceImpl.java

@@ -526,7 +526,7 @@ public class DataServiceImpl implements IDataService {
 
         //{根据芯片id读取设备编码}
         String deviceCode = deviceService.getDeviceCodeByChipId(chipId);
-        System.out.println("chipId>>" + chipId + " ,deviceCode>>" + deviceCode);
+//        System.out.println("chipId>>" + chipId + " ,deviceCode>>" + deviceCode);
         return deviceCode;
     }
 

+ 26 - 0
huimv-eartag2-platform/huimv-eartag2-input/src/test/java/com/huimv/eartag2/utils/StringButterTest.java

@@ -0,0 +1,26 @@
+package com.huimv.eartag2.utils;
+
+import org.junit.Test;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+public class StringButterTest {
+
+    @Test
+    public void testLeng(){
+        StringBuilder sb = new StringBuilder();
+        sb.append("1");
+        sb.append("2");
+        sb.append("3");
+        sb.append("4");
+        sb.append("-");
+        System.out.println("sb>>"+sb.toString());
+        System.out.println("length>>"+sb.length());
+    }
+}

+ 3 - 2
huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/controller/DeviceRegisterController.java

@@ -1,6 +1,7 @@
 package com.huimv.eartag2.manage.controller;
 
 import com.alibaba.fastjson.JSONObject;
+import com.huimv.eartag2.common.utils.DateUtil;
 import com.huimv.eartag2.common.utils.Result;
 import com.huimv.eartag2.common.utils.ResultCode;
 import com.huimv.eartag2.manage.service.IDeviceRegisterService;
@@ -71,7 +72,7 @@ public class DeviceRegisterController {
                              @RequestParam(value = "deviceAlias",required = false) String deviceAlias,
                              @RequestParam(value = "location",required = false) String location,
                              @RequestParam(value = "remark",required = false) String remark,
-                             @RequestParam(value = "id",required = true) Integer id){
+                             @RequestParam(value = "id",required = true) Integer id) throws ParseException {
 
         log.info("(editDevice).deviceCode>>"+deviceCode);
         log.info("(editDevice).chipId>>"+chipId);
@@ -112,7 +113,7 @@ public class DeviceRegisterController {
 
     @GetMapping("/setDeviceStatus")
     public Result setDeviceStatus(@RequestParam(value = "id",required = true) Integer id,
-                               @RequestParam(value = "deviceStatus",required = true) Integer deviceStatus){
+                               @RequestParam(value = "deviceStatus",required = true) Integer deviceStatus) throws ParseException {
         log.info("(setDeviceStatus).id>>"+id);
         log.info("(setDeviceStatus).deviceStatus>>"+deviceStatus);
         //{注销设备}

+ 4 - 0
huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/service/ICacheService.java

@@ -50,4 +50,8 @@ public interface ICacheService {
     void deleteChipIdHashCache(String chipId);
 
     void getDeviceCodeSetCache();
+
+    void deleteOnlineDeviceSet(String farmId, String deviceCode, String todayDateText);
+
+    void putOnlineDeviceSet(String farmId, String deviceCode, String todayDateText);
 }

+ 2 - 2
huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/service/IDeviceRegisterService.java

@@ -9,7 +9,7 @@ public interface IDeviceRegisterService {
     Result addDevice(String chipId, String deviceCode, Integer deviceStatus, Integer activeStatus, String deviceAlias, String location, String remark, String farmId) throws ParseException;
 
     //编辑设备
-    Result editDevice(String chipId, String deviceCode, Integer lastDeviceStatus, Integer deviceStatus, Integer activeStatus, String deviceAlias, String location, String remark, Integer id);
+    Result editDevice(String chipId, String deviceCode, Integer lastDeviceStatus, Integer deviceStatus, Integer activeStatus, String deviceAlias, String location, String remark, Integer id) throws ParseException;
 
     //移除设备
     Result removeDevice(String ids);
@@ -21,5 +21,5 @@ public interface IDeviceRegisterService {
     Result removeBatchDevice(String ids);
 
     //注销设备
-    Result setDeviceStatus(Integer id, Integer deviceStatus);
+    Result setDeviceStatus(Integer id, Integer deviceStatus) throws ParseException;
 }

+ 12 - 1
huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/service/impl/CacheServiceImpl.java

@@ -15,7 +15,6 @@ import org.springframework.stereotype.Service;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.TimeUnit;
 
 /**
  * @Project : huimv.shiwan
@@ -184,4 +183,16 @@ public class CacheServiceImpl implements ICacheService {
         Set<String> resultSet = redisTemplate.opsForSet().members(setKey);
         System.out.println("## resultSet>>"+resultSet);
     }
+
+    @Override
+    public void deleteOnlineDeviceSet(String farmId, String deviceCode, String todayDateText) {
+        String setKey = BizConst.SET_FARM_DEVICE_ONLINE_PREFIX + farmId+":"+todayDateText;
+        redisTemplate.opsForSet().remove(setKey,deviceCode);
+    }
+
+    @Override
+    public void putOnlineDeviceSet(String farmId, String deviceCode, String todayDateText) {
+        String setKey = BizConst.SET_FARM_DEVICE_ONLINE_PREFIX + farmId+":"+todayDateText;
+        redisTemplate.opsForSet().add(setKey,deviceCode);
+    }
 }

+ 15 - 7
huimv-eartag2-platform/huimv-eartag2-manage/src/main/java/com/huimv/eartag2/manage/service/impl/DeviceRegisterServiceImpl.java

@@ -66,15 +66,13 @@ public class DeviceRegisterServiceImpl implements IDeviceRegisterService {
         deviceRegisterEntity.setCreateDate(new java.sql.Date(todayDate.getTime()));
         deviceRegisterRepo.saveAndFlush(deviceRegisterEntity);
 
-        System.out.println("1.");
         //{设置工作状态}
         setDeviceWorkStatus(deviceRegisterEntity);
-        System.out.println("1.1");
         return new Result(ResultCode.SUCCESS);
     }
 
     @Override
-    public Result editDevice(String chipId, String deviceCode, Integer lastDeviceStatus, Integer deviceStatus, Integer activeStatus, String deviceAlias, String location, String remark, Integer id) {
+    public Result editDevice(String chipId, String deviceCode, Integer lastDeviceStatus, Integer deviceStatus, Integer activeStatus, String deviceAlias, String location, String remark, Integer id) throws ParseException {
         //
 //        EartagDeviceRegisterEntity deviceRegisterEntity = deviceRegisterRepo.getById(id);
         EartagDeviceRegisterEntity deviceRegisterEntity = deviceRegisterRepo.getDeviceRegister(deviceCode);
@@ -177,7 +175,7 @@ public class DeviceRegisterServiceImpl implements IDeviceRegisterService {
     }
 
     @Override
-    public Result setDeviceStatus(Integer id, Integer deviceStatus) {
+    public Result setDeviceStatus(Integer id, Integer deviceStatus) throws ParseException {
         System.out.println("## <setDeviceStatus> id="+id);
         System.out.println("## <setDeviceStatus> deviceStatus="+deviceStatus);
         //
@@ -201,21 +199,25 @@ public class DeviceRegisterServiceImpl implements IDeviceRegisterService {
     }
 
     //设置工作状态
-    private void setDeviceWorkStatus(EartagDeviceRegisterEntity deviceRegisterEntity) {
+    private void setDeviceWorkStatus(EartagDeviceRegisterEntity deviceRegisterEntity) throws ParseException {
         String deviceCode = deviceRegisterEntity.getDeviceCode();
         String chipId = deviceRegisterEntity.getChipId();
+        String farmId = deviceRegisterEntity.getFarmId();
+        DateUtil dateUtil = new DateUtil();
         //设置设备注册信息缓存
         cacheService.putDeviceRegister(deviceCode,deviceRegisterEntity);
         //{将该设备编号加入到集合Set当中}
         cacheService.putAllDeviceSet(deviceCode);
         //{将芯片ID和设备编码加入缓存}
         cacheService.putChipIdToCache(chipId,deviceCode);
+        //{将该设备编码加入到在线设备集合当中}
+        cacheService.putOnlineDeviceSet(farmId,deviceCode,dateUtil.getTodayDateText());
 
         //{将最新设备数量加入到缓存}--MQ异步处理
 //        Integer deviceStatus = 1;
 //        cacheService.putDeviceTotal_(getDeviceSum(deviceRegisterEntity.getFarmId(),deviceStatus),deviceRegisterEntity.getFarmId());
 
-        //{异步处理-设备注册信息}
+        //{MQ异步处理-设备注册信息}
         producer.sendSyncDeviceRegister(JSONObject.toJSONString(deviceRegisterEntity));
     }
 
@@ -228,13 +230,19 @@ public class DeviceRegisterServiceImpl implements IDeviceRegisterService {
     }
 
     //设置注销状态
-    private void setDeviceCancelStatus(EartagDeviceRegisterEntity deviceRegisterEntity) {
+    private void setDeviceCancelStatus(EartagDeviceRegisterEntity deviceRegisterEntity) throws ParseException {
+        //
+        DateUtil dateUtil = new DateUtil();
+        String todayDateText = dateUtil.getTodayDateText();
         String deviceCode = deviceRegisterEntity.getDeviceCode();
         String chipId = deviceRegisterEntity.getChipId();
+        String farmId = deviceRegisterEntity.getFarmId();
         //删除设备注册消息
         cacheService.deleteDeviceRegister(deviceCode);
         //{从集合Set当中删除设备编号}
         cacheService.deleteDeviceCodeSetCache(deviceCode);
+        //{从在线设备集合中删除该设备编码}
+        cacheService.deleteOnlineDeviceSet(farmId,deviceCode,todayDateText);
         if(chipId != null){
             //{删除芯片ID缓存}
             cacheService.deleteChipIdHashCache(chipId);

+ 12 - 0
huimv-eartag2-platform/huimv-eartag2-manage/src/test/java/com/huimv/eartag2/manage/utils/CacheTest.java

@@ -7,6 +7,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.data.redis.core.RedisTemplate;
 
+import java.util.Set;
+
 /**
  * @Project : huimv.shiwan
  * @Package : com.huimv.biosafety.uface.controller
@@ -68,4 +70,14 @@ public class CacheTest {
             System.out.println("验证 obj="+obj.toString());
         }
     }
+
+    @Test
+    public void testGetDeviceOnlineSum(){
+        String farmId = "101";
+        String todayDateText = "2022-03-25";
+        String setKey = BizConst.SET_FARM_DEVICE_ONLINE_PREFIX + farmId+":"+todayDateText;
+        Set<String> resultSet = redisTemplate.opsForSet().members(setKey);
+        System.out.println("resultSet="+resultSet.toString());
+        System.out.println("验证 resultSet.size="+resultSet.size());
+    }
 }