ty130316261 3 anos atrás
pai
commit
af35e43a25

+ 78 - 6
zd-modules/zd-netty/src/main/java/com/zd/netty/sdk/DeJuRFIDListenerService.java

@@ -2,8 +2,7 @@ package com.zd.netty.sdk;
 
 import com.gg.reader.api.dal.GClient;
 import com.gg.reader.api.dal.GServer;
-import com.gg.reader.api.protocol.gx.MsgAppSetGpo;
-import com.gg.reader.api.protocol.gx.MsgBaseStop;
+import com.gg.reader.api.protocol.gx.*;
 import com.zd.common.core.utils.SpringUtils;
 import com.zd.netty.service.ISendService;
 import com.zd.netty.service.IService;
@@ -14,7 +13,9 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.Hashtable;
 import java.util.Map;
+import java.util.Objects;
 import java.util.TimerTask;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ScheduledExecutorService;
@@ -33,7 +34,7 @@ public class DeJuRFIDListenerService implements IService {
 
     AtomicBoolean isAlarm = new AtomicBoolean();
 
-    static GClient client;
+    GClient client;
 
     private final ScheduledExecutorService scheduledExecutorService = SpringUtils.getBean("scheduledExecutorService");
 
@@ -48,6 +49,9 @@ public class DeJuRFIDListenerService implements IService {
             subscribeServerHandler(server);
             if (client!=null){
                 clientMap.put(ipAddress,client);
+                setPower(hardware);
+                setInventory(hardware);
+                subscribeHandler(client);
             }
             log.info("开始监听");
         } else {
@@ -69,20 +73,19 @@ public class DeJuRFIDListenerService implements IService {
             client.setSendHeartBeat(true);//开启心跳检测Tcp连接状态
             client.setPrint(true);
             subscribeTcpHandler();//订阅Tcp断连上报
-            subscribeHandler(client);
             stop();//测试监听成功的连接是否通信正常
         };
     }
 
     //订阅TCP断开连接上报
-    private static void subscribeTcpHandler() {
+    private void subscribeTcpHandler() {
         client.onDisconnected = s -> {
             log.info("连接" + s + "已断开");
             client.close();//释放当前连接资源
         };
     }
 
-    private static void stop() {
+    private void stop() {
         MsgBaseStop msg = new MsgBaseStop();
         client.sendSynMsg(msg);
         if (0x00 == msg.getRtCode()) {
@@ -145,4 +148,73 @@ public class DeJuRFIDListenerService implements IService {
             }
         }, delayTime, TimeUnit.SECONDS);
     }
+
+    private void setPower(RemoteLabHardware hardware){
+        // 功率配置, 将4个天线功率都设置为30dBm.
+        Integer uniformPower = hardware.getUniformPower();
+        MsgBaseGetPower msgBaseGetPower = new MsgBaseGetPower();
+        client.sendSynMsg(msgBaseGetPower);
+        if (0 == msgBaseGetPower.getRtCode()) {
+            Hashtable<Integer, Integer> dicPower = msgBaseGetPower.getDicPower();
+            Integer integer = dicPower.get(0);
+            if (!Objects.equals(integer, uniformPower)) {
+                MsgBaseSetPower msgBaseSetPower = new MsgBaseSetPower();
+                Hashtable<Integer, Integer> hashtable = new Hashtable<>();
+
+                Integer channels = hardware.getChannels();
+                for (int i = 1; i <= channels; i++) {
+                    hashtable.put(i, uniformPower);
+                }
+                msgBaseSetPower.setDicPower(hashtable);
+                client.sendSynMsg(msgBaseSetPower);
+                if (0 != msgBaseSetPower.getRtCode()) {
+                    log.error("Power configuration error.");
+                    reset(client);
+                    disconnect(hardware);
+                    start(hardware);
+                }
+            }
+        } else {
+            log.error("Power configuration error.");
+            reset(client);
+            disconnect(hardware);
+            start(hardware);
+        }
+    }
+
+    private void setInventory(RemoteLabHardware hardware){
+        //天线读卡, 读取EPC数据区以及TID数据区
+        MsgBaseInventoryEpc msgBaseInventoryEpc = new MsgBaseInventoryEpc();
+        switch (hardware.getChannels()) {
+            case 4:
+                msgBaseInventoryEpc.setAntennaEnable(EnumG.AntennaNo_1 | EnumG.AntennaNo_2 | EnumG.AntennaNo_3 | EnumG.AntennaNo_4);
+                break;
+            case 8:
+                msgBaseInventoryEpc.setAntennaEnable(EnumG.AntennaNo_1 | EnumG.AntennaNo_2 | EnumG.AntennaNo_3 | EnumG.AntennaNo_4 | EnumG.AntennaNo_5 | EnumG.AntennaNo_6 | EnumG.AntennaNo_7 | EnumG.AntennaNo_8);
+                break;
+            case 16:
+                msgBaseInventoryEpc.setAntennaEnable(EnumG.AntennaNo_1 | EnumG.AntennaNo_2 | EnumG.AntennaNo_3 | EnumG.AntennaNo_4 | EnumG.AntennaNo_5 | EnumG.AntennaNo_6 | EnumG.AntennaNo_7 | EnumG.AntennaNo_8 | EnumG.AntennaNo_9 | EnumG.AntennaNo_10 | EnumG.AntennaNo_11 | EnumG.AntennaNo_12 | EnumG.AntennaNo_13 | EnumG.AntennaNo_14 | EnumG.AntennaNo_15 | EnumG.AntennaNo_16);
+                break;
+            case 1:
+            default:
+                msgBaseInventoryEpc.setAntennaEnable(EnumG.AntennaNo_1);
+        }
+        msgBaseInventoryEpc.setInventoryMode(EnumG.InventoryMode_Inventory);
+
+        client.sendSynMsg(msgBaseInventoryEpc);
+        if (0 != msgBaseInventoryEpc.getRtCode()) {
+            log.error("Inventory epc error.");
+            reset(client);
+            disconnect(hardware);
+            start(hardware);
+        }
+    }
+
+    public void reset(GClient client) {
+        MsgAppReset msgAppReset = new MsgAppReset();
+        client.sendSynMsg(msgAppReset);
+        if (0 != msgAppReset.getRtCode()) {
+            log.error("Reset epc error.");
+        }
+    }
 }