hecheng лет назад: 3
Родитель
Сommit
5d333d56e6

+ 10 - 8
zd-modules/zd-netty/src/main/java/com/zd/netty/sdk/DeJuRFIDClientImpl.java

@@ -89,11 +89,11 @@ public class DeJuRFIDClientImpl implements IService {
      */
     public void subscribeServerHandler(GServer server, RemoteLabHardware hardware) {
         server.onGClientConnected = (client, serialNumber) -> {
+            redisTemplate.opsForValue().set(client.getSerialNumber(),hardware);
             client.setSendHeartBeat(true);//开启心跳检测Tcp连接状态
+            subscribeTcpHandler(client);//订阅Tcp断连上报
             client.setPrint(true);
-            subscribeTcpHandler(client, hardware);//订阅Tcp断连上报
             reSet(hardware, client);
-            redisTemplate.opsForValue().set(client.getSerialNumber(),hardware);
             service.subscribeHandler(client, hardware);
             remoteLaboratoryService.update(HardwareOperate.OPEN, hardware.getIpAddress());
             log.info(client.getName() + "---监听成功");
@@ -129,15 +129,17 @@ public class DeJuRFIDClientImpl implements IService {
      * 订阅TCP断开连接上报
      *
      * @param client   客户端对象
-     * @param hardware 设备对象
      */
-    private void subscribeTcpHandler(GClient client, RemoteLabHardware hardware) {
+    private void subscribeTcpHandler(GClient client) {
+        RemoteLabHardware labHardware = redisTemplate.opsForValue().get(client.getSerialNumber());
         client.onDisconnected = s -> {
             log.info("连接" + s + "已断开");
-            disconnect(hardware);
-            remoteLaboratoryService.update(HardwareOperate.CLOSE, hardware.getIpAddress());
-            log.info("连接" + s + "重连中。。。");
-            start(hardware);
+            if (labHardware!=null){
+                disconnect(labHardware);
+                remoteLaboratoryService.update(HardwareOperate.CLOSE, labHardware.getIpAddress());
+                log.info("连接" + s + "重连中。。。");
+                start(labHardware);
+            }
         };
     }
 }

+ 17 - 13
zd-modules/zd-netty/src/main/java/com/zd/netty/sdk/DeJuRFIDServerImpl.java

@@ -35,9 +35,6 @@ public class DeJuRFIDServerImpl implements IService {
     private final Map<String, Boolean> alarmMap = new ConcurrentHashMap<>();
 
     private final Map<String, Integer> stopMap = new ConcurrentHashMap<>();
-    public static final Integer PORT = 8160;
-
-    private static final String HTTP_SEPARATOR = ":";
     private static final Integer TIME_OUT = 2000;
 
     private static final Integer MAX_RETRY = 3;
@@ -61,7 +58,7 @@ public class DeJuRFIDServerImpl implements IService {
             client = new GClient();
             clientMap.put(ipAddress, client);
         }
-        if (client.openTcp(ipAddress + HTTP_SEPARATOR + PORT, TIME_OUT)) {
+        if (client.openTcp(ipAddress, TIME_OUT)) {
             stopMsg(client);
             // 功率配置, 将4个天线功率都设置为30dBm.
             MsgBaseSetPower msgBaseSetPower = setPower(hardware, client);
@@ -281,15 +278,22 @@ public class DeJuRFIDServerImpl implements IService {
         clientMap.computeIfAbsent(ipAddress, f -> client);
         client.onTagEpcLog = (s, logBaseEpcInfo) -> {
             if (logBaseEpcInfo.getResult() == 0) {
-                log.info("===========》{},index: {}", logBaseEpcInfo.getEpc(), logBaseEpcInfo.getAntId());
-                InventoryTag tag = new InventoryTag();
-                BeanUtils.copyProperties(logBaseEpcInfo, tag);
-                String readerSerialNumber = logBaseEpcInfo.getReaderSerialNumber();
-                Long replySerialNumber = logBaseEpcInfo.getReplySerialNumber();
-                log.info("===========》读取器设备编码:{},replySerialNumber: {}", readerSerialNumber, replySerialNumber);
-                tag.setSerialNumber(client.getSerialNumber());
-                tag.setRemoteLabHardware(redisTemplate.opsForValue().get(client.getSerialNumber()));
-                sendService.send(tag);
+                int antId = logBaseEpcInfo.getAntId();
+                String epc = logBaseEpcInfo.getEpc();
+                String key=epc+antId;
+                if (Boolean.FALSE.equals(redisTemplate.hasKey(key))){
+                    log.info("===========》{},index: {}", epc, antId);
+                    redisTemplate.opsForValue().set(key,hardware,30,TimeUnit.SECONDS);
+                    scheduledExecutorService.execute(()->{
+                        InventoryTag tag = new InventoryTag();
+                        BeanUtils.copyProperties(logBaseEpcInfo, tag);
+                        String readerSerialNumber = logBaseEpcInfo.getReaderSerialNumber();
+                        log.info("===========》读取器设备编码:{}", readerSerialNumber);
+                        tag.setSerialNumber(client.getSerialNumber());
+                        tag.setRemoteLabHardware(redisTemplate.opsForValue().get(client.getSerialNumber()));
+                        sendService.send(tag);
+                    });
+                }
             }
         };
         client.onTagEpcOver = (s, logBaseEpcOver) -> log.info("HandlerTagEpcOver");