فهرست منبع

增加对未注册采集器设备的校验。

zhuoning 3 سال پیش
والد
کامیت
b52b7c1c18

+ 29 - 19
huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/server/EartagServerHandler2.java

@@ -63,7 +63,6 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
             JSONArray askJa = getPerData(clientAskText);
             for (int a = 0; a < askJa.size(); a++) {
                 String askText = askJa.getString(a);
-                System.out.println("## Test dataInputFlow>>"+dataInputFlow);
                 if (dataInputFlow == 1) {
                     //{处理请求内容}
                     handleAskText(askText, ctx);
@@ -76,14 +75,13 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
     }
 
     /**
-     * @Method      : handleAskText2
-     * @Description : 
-     * @Params      : [askText, ctx]
-     * @Return      : void
-     * 
-     * @Author      : ZhuoNing
-     * @Date        : 2022/3/23       
-     * @Time        : 18:08
+     * @Method : handleAskText2
+     * @Description :
+     * @Params : [askText, ctx]
+     * @Return : void
+     * @Author : ZhuoNing
+     * @Date : 2022/3/23
+     * @Time : 18:08
      */
     private void handleAskText2(String askText, ChannelHandlerContext ctx) throws ParseException {
         String[] dataArray = askText.split("\\+");
@@ -103,14 +101,14 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
                 //处理获取设备编码命令
                 //{读取设备编码}
                 String deviceCode = dataService.getDeviceCodeByChipId(idCode);
-                log.info("芯片id>>"+idCode+" ,deviceCode>>"+deviceCode);
-                if(deviceCode != null){
+                log.info("芯片id>>" + idCode + " ,deviceCode>>" + deviceCode);
+                if (deviceCode != null) {
                     System.out.println("==>2.1");
                     String answer = "hm+1+0+" + deviceCode + "+123+8+end";
                     log.info("##获取设备编码-应答数据>>" + answer);
                     ctx.writeAndFlush(Unpooled.copiedBuffer(answer.getBytes()));
                     System.out.println("==>2.2");
-                }else{
+                } else {
                     log.error("检测到未注册的非法采集器设备,已舍弃请求.");
                 }
                 System.out.println("==>3");
@@ -150,11 +148,14 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
         } else if (cmdHeader.trim().equalsIgnoreCase("zj")) {
             System.out.println("==>7");
             //耳标应答数据(不需要应答)
-            if(cmd.trim().equalsIgnoreCase("ffffffffffffffff") || cmd.trim().equalsIgnoreCase("0000000000000000")){
-                log.error("舍弃掉未配置耳标号的耳标,"+askText+"");
-            }else{
-                //{发送到耳标处理消息队列}
-                dataService.sendEartagMQ(map);
+            if (checkValidEarmark(cmd)) {
+                log.error("舍弃掉未配置耳标号的耳标," + askText + "");
+            } else {
+                //{检查设备是否在处于工作状态或待机状态}
+                if (dataService.isWorkStatusDevice(idCode)) {
+                    //{发送到耳标处理消息队列}
+                    dataService.sendEartagMQ(map);
+                }
             }
             System.out.println("==>7.1");
         } else {
@@ -163,6 +164,15 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
         }
     }
 
+    //检查无效耳标
+    public boolean checkValidEarmark(String earmark) {
+        if (earmark.trim().equalsIgnoreCase("ffffffffffffffff") || earmark.trim().equalsIgnoreCase("0000000000000000")) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
     /**
      * @Method : handleAskText
      * @Description : 处理请求内容
@@ -179,8 +189,8 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
         String idCode = dataArray[1];
         String cmd = dataArray[2];
         //{先判断是否已经注册,未注册的非法设备都过滤掉}
-        boolean validStatus= dataService.isValidDevice(cmdHeader, idCode, cmd);
-        System.out.println("## validStatus>>"+validStatus);
+        boolean validStatus = dataService.isValidDevice(cmdHeader, idCode, cmd);
+        System.out.println("## validStatus>>" + validStatus);
         if (validStatus) {
             System.out.println("-->1");
             //{处理应答}

+ 3 - 0
huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/service/IDataService.java

@@ -27,4 +27,7 @@ public interface IDataService {
 
     //发送耳标消息
     void sendDeviceMQ(Map map);
+
+    //判断是否是工作状态的设备
+    boolean isWorkStatusDevice(String idCode);
 }

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

@@ -11,6 +11,7 @@ import com.huimv.eartag2.common.dao.repo.EartagEnvRepo;
 import com.huimv.eartag2.common.dao.repo.EartagHeartbeatRepo;
 import com.huimv.eartag2.common.dao.repo.EartagRawRepo;
 import com.huimv.eartag2.common.mq.Const;
+import com.huimv.eartag2.common.utils.BizConst;
 import com.huimv.eartag2.producer.Producer;
 import com.huimv.eartag2.service.IDataService;
 import com.huimv.eartag2.service.IDeviceService;
@@ -273,9 +274,12 @@ public class DataServiceImpl implements IDataService {
                 log.error("舍弃掉未配置耳标号的耳标,"+askText+"");
             }else{
                 System.out.println("-->3.4");
-                //发送到耳标处理消息队列
-                rabbitTemplate.convertAndSend(Const.EXCHANGE_ASK_EARTAG, Const.ROUTING_KEY_ASK_EARTAG, map);
-                System.out.println("## --> 发送耳标处理模块.");
+                //{检查设备是否在处于工作状态或待机状态}
+                if(isWorkStatusDevice(cmdHeader)){
+                    //发送到耳标处理消息队列
+                    rabbitTemplate.convertAndSend(Const.EXCHANGE_ASK_EARTAG, Const.ROUTING_KEY_ASK_EARTAG, map);
+                    System.out.println("## --> 发送耳标处理模块.");
+                }
             }
         }
         System.out.println("-->3.5");
@@ -529,6 +533,24 @@ public class DataServiceImpl implements IDataService {
         rabbitTemplate.convertAndSend(Const.EXCHANGE_ASK_DEVICE, Const.ROUTING_KEY_ASK_DEVICE, map);
     }
 
+    @Override
+    public boolean isWorkStatusDevice(String idCode) {
+        String key = BizConst.DEVICE_REGISTER_PREFIX+idCode;
+        String hashKey = "deviceStatus";
+        Object deviceStatusObj = redisTemplate.opsForHash().get(key,hashKey);
+        System.out.println("## deviceStatusObj>>"+deviceStatusObj);
+        if(deviceStatusObj == null){
+            return false;
+        }else{
+            String deviceStatus = deviceStatusObj.toString();
+            if(deviceStatus.trim().equalsIgnoreCase("0") || deviceStatus.trim().equalsIgnoreCase("1")){
+                return true;
+            }else{
+                return false;
+            }
+        }
+    }
+
     /**
      * 解析接收数据
      */

+ 10 - 0
huimv-eartag2-platform/huimv-eartag2-input/src/test/java/com/huimv/eartag2/DataTest.java

@@ -1,7 +1,9 @@
 package com.huimv.eartag2;
 
 import com.alibaba.fastjson.JSONArray;
+import com.huimv.eartag2.service.IDataService;
 import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 
 import java.util.regex.Matcher;
@@ -17,6 +19,14 @@ import java.util.regex.Pattern;
  **/
 @SpringBootTest
 public class DataTest {
+    @Autowired
+    private IDataService dataService;
+
+    @Test
+    public void test2(){
+        boolean result = dataService.isWorkStatusDevice("2020072399998661");
+        System.out.println("result>>"+result);
+    }
 
     @Test
     public void test1(){