ty130316261 před 3 roky
rodič
revize
3f3244c739

+ 1 - 2
zd-modules/zd-netty/src/main/java/com/zd/netty/enums/ManufacturerTypeEnum.java

@@ -1,6 +1,5 @@
 package com.zd.netty.enums;
 package com.zd.netty.enums;
 
 
-import com.zd.netty.sdk.DeJuRFIDListenerService;
 import com.zd.netty.sdk.DeJuRFIDService;
 import com.zd.netty.sdk.DeJuRFIDService;
 import com.zd.netty.sdk.WuYuanRFIDService;
 import com.zd.netty.sdk.WuYuanRFIDService;
 import com.zd.netty.service.IService;
 import com.zd.netty.service.IService;
@@ -12,7 +11,7 @@ import lombok.Getter;
 public enum ManufacturerTypeEnum {
 public enum ManufacturerTypeEnum {
 
 
     WU_WEI(1,"无源", WuYuanRFIDService.class),
     WU_WEI(1,"无源", WuYuanRFIDService.class),
-    DE_JU(2,"惠州德聚", DeJuRFIDListenerService.class);
+    DE_JU(2,"惠州德聚",DeJuRFIDService .class);
 
 
     private final Integer code;
     private final Integer code;
     private final String name;
     private final String name;

+ 18 - 138
zd-modules/zd-netty/src/main/java/com/zd/netty/sdk/DeJuRFIDListenerService.java

@@ -30,7 +30,7 @@ public class DeJuRFIDListenerService implements IService {
     @Resource
     @Resource
     private ISendService sendService;
     private ISendService sendService;
 
 
-    private final Map<String, GClient> clientMap = new ConcurrentHashMap<>();
+    private final Map<String, GServer> serverMap = new ConcurrentHashMap<>();
 
 
     AtomicBoolean isAlarm = new AtomicBoolean();
     AtomicBoolean isAlarm = new AtomicBoolean();
 
 
@@ -41,18 +41,14 @@ public class DeJuRFIDListenerService implements IService {
     @Override
     @Override
     public void start(RemoteLabHardware hardware) {
     public void start(RemoteLabHardware hardware) {
         String ipAddress = hardware.getIpAddress();
         String ipAddress = hardware.getIpAddress();
-        if (clientMap.containsKey(ipAddress)){
-            return;
+        GServer server;
+        if (serverMap.containsKey(ipAddress)) {
+            server = serverMap.get(ipAddress);
+        } else {
+            server = new GServer();
         }
         }
-        GServer server = new GServer();
         if (server.open(9190)) {
         if (server.open(9190)) {
-            subscribeServerHandler(server);
-            if (client!=null){
-                clientMap.put(ipAddress,client);
-                setPower(hardware);
-                setInventory(hardware);
-                subscribeHandler(client);
-            }
+            subscribeServerHandler(server, hardware);
             log.info("开始监听");
             log.info("开始监听");
         } else {
         } else {
             log.info("监听失败");
             log.info("监听失败");
@@ -61,19 +57,26 @@ public class DeJuRFIDListenerService implements IService {
 
 
     @Override
     @Override
     public void disconnect(RemoteLabHardware hardware) {
     public void disconnect(RemoteLabHardware hardware) {
-        stop();
-        clientMap.remove(hardware.getIpAddress());
+        String ipAddress = hardware.getIpAddress();
+        if (serverMap.containsKey(ipAddress)) {
+            GServer server = serverMap.get(ipAddress);
+            server.close();
+        }
+        serverMap.remove(hardware.getIpAddress());
     }
     }
 
 
     //订阅监听上报
     //订阅监听上报
-    private void subscribeServerHandler(GServer server) {
+    private void subscribeServerHandler(GServer server, RemoteLabHardware hardware) {
         server.onGClientConnected = (gClient, serialNumber) -> {
         server.onGClientConnected = (gClient, serialNumber) -> {
             log.info(gClient.getName() + "---监听成功");
             log.info(gClient.getName() + "---监听成功");
             client = gClient;//切换连接对象
             client = gClient;//切换连接对象
             client.setSendHeartBeat(true);//开启心跳检测Tcp连接状态
             client.setSendHeartBeat(true);//开启心跳检测Tcp连接状态
             client.setPrint(true);
             client.setPrint(true);
             subscribeTcpHandler();//订阅Tcp断连上报
             subscribeTcpHandler();//订阅Tcp断连上报
-            stop();//测试监听成功的连接是否通信正常
+            DeJuRFIDService.setPower(hardware, client);
+            DeJuRFIDService.setInventory(hardware, client);
+            DeJuRFIDService.subscribeHandler(client);
+//            stop();//测试监听成功的连接是否通信正常
         };
         };
     }
     }
 
 
@@ -94,127 +97,4 @@ public class DeJuRFIDListenerService implements IService {
             log.info(msg.getRtMsg());
             log.info(msg.getRtMsg());
         }
         }
     }
     }
-
-    /**
-     * 订阅6c标签信息上报
-     *
-     * @param client 客户端
-     */
-    private void subscribeHandler(GClient client) {
-        client.onTagEpcLog = (s, logBaseEpcInfo) -> {
-            if (logBaseEpcInfo.getResult() == 0) {
-                log.info("===========》{}", logBaseEpcInfo.getbEpc());
-                //灯带设置
-                if (!isAlarm.get()) {
-                    scheduledExecutorService.execute(() -> {
-                        isAlarm.set(true);
-                        changeGpo(1, client, 10);
-                    });
-                }
-                InventoryTag tag = new InventoryTag();
-                BeanUtils.copyProperties(logBaseEpcInfo, tag);
-                sendService.send(tag);
-            }
-        };
-        client.onTagEpcOver = (s, logBaseEpcOver) -> log.info("HandlerTagEpcOver");
-    }
-
-    private void changeGpo(int state, GClient client, int delayTime) {
-        MsgAppSetGpo msgAppSetGpo = new MsgAppSetGpo();
-        msgAppSetGpo.setGpo1(state);
-        msgAppSetGpo.setGpo2(state);
-
-        client.sendSynMsg(msgAppSetGpo);
-        String status = state == 1 ? "start" : "stop";
-        if (0 == msgAppSetGpo.getRtCode()) {
-            if (state == 1) {
-                stopGpo(client, delayTime);
-            } else {
-                isAlarm.set(false);
-            }
-        } else {
-            log.error("Gpo epc {} error.", status);
-            if (state == 1) {
-                stopGpo(client, delayTime);
-            }
-        }
-    }
-
-    public void stopGpo(GClient client, int delayTime) {
-        scheduledExecutorService.schedule(new TimerTask() {
-            @Override
-            public void run() {
-                changeGpo(0, client, 0);
-            }
-        }, 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.");
-        }
-    }
 }
 }

+ 68 - 56
zd-modules/zd-netty/src/main/java/com/zd/netty/sdk/DeJuRFIDService.java

@@ -28,17 +28,20 @@ import java.util.concurrent.atomic.AtomicBoolean;
 @Service
 @Service
 public class DeJuRFIDService implements IService {
 public class DeJuRFIDService implements IService {
 
 
-    @Resource
-    private ISendService sendService;
+    private static final ISendService sendService = SpringUtils.getBean("sendService");
 
 
-    private final Map<String, GClient> clientMap = new ConcurrentHashMap<>();
+    private static final Map<String, GClient> clientMap = new ConcurrentHashMap<>();
 
 
-    AtomicBoolean isAlarm = new AtomicBoolean();
+    static AtomicBoolean isAlarm = new AtomicBoolean();
 
 
-    private final ScheduledExecutorService scheduledExecutorService = SpringUtils.getBean("scheduledExecutorService");
+    private static final ScheduledExecutorService scheduledExecutorService = SpringUtils.getBean("scheduledExecutorService");
 
 
     @Override
     @Override
     public void start(RemoteLabHardware hardware) {
     public void start(RemoteLabHardware hardware) {
+        open(hardware);
+    }
+
+    private static void open(RemoteLabHardware hardware) {
         GClient client;
         GClient client;
         String ipAddress = hardware.getIpAddress();
         String ipAddress = hardware.getIpAddress();
         if (clientMap.containsKey(ipAddress)) {
         if (clientMap.containsKey(ipAddress)) {
@@ -51,67 +54,72 @@ public class DeJuRFIDService implements IService {
             // 订阅标签上报事件
             // 订阅标签上报事件
             subscribeHandler(client);
             subscribeHandler(client);
             // 功率配置, 将4个天线功率都设置为30dBm.
             // 功率配置, 将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 {
+            MsgBaseSetPower msgBaseSetPower = setPower(hardware, client);
+            if (0 != msgBaseSetPower.getRtCode()) {
                 log.error("Power configuration error.");
                 log.error("Power configuration error.");
                 reset(client);
                 reset(client);
-                disconnect(hardware);
-                start(hardware);
+                close(hardware);
+                open(hardware);
             }
             }
-
             //天线读卡, 读取EPC数据区以及TID数据区
             //天线读卡, 读取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);
+            MsgBaseInventoryEpc msgBaseInventoryEpc = setInventory(hardware, client);
             if (0 != msgBaseInventoryEpc.getRtCode()) {
             if (0 != msgBaseInventoryEpc.getRtCode()) {
                 log.error("Inventory epc error.");
                 log.error("Inventory epc error.");
                 reset(client);
                 reset(client);
-                disconnect(hardware);
-                start(hardware);
+                close(hardware);
+                open(hardware);
             }
             }
         } else {
         } else {
             throw new ServiceException("Connect failure.");
             throw new ServiceException("Connect failure.");
         }
         }
     }
     }
 
 
-    public void reset(GClient client) {
+    public static MsgBaseInventoryEpc setInventory(RemoteLabHardware hardware, GClient client) {
+        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);
+        return msgBaseInventoryEpc;
+    }
+
+    public static MsgBaseSetPower setPower(RemoteLabHardware hardware, GClient client) {
+        Integer uniformPower = hardware.getUniformPower();
+        MsgBaseGetPower msgBaseGetPower = new MsgBaseGetPower();
+        client.sendSynMsg(msgBaseGetPower);
+        MsgBaseSetPower msgBaseSetPower = new MsgBaseSetPower();
+        if (0 == msgBaseGetPower.getRtCode()) {
+            Hashtable<Integer, Integer> dicPower = msgBaseGetPower.getDicPower();
+            Integer integer = dicPower.get(0);
+            if (!Objects.equals(integer, uniformPower)) {
+                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);
+            } else {
+                msgBaseSetPower.setRtCode((byte) 0);
+            }
+        }
+        return msgBaseSetPower;
+    }
+
+    public static void reset(GClient client) {
         MsgAppReset msgAppReset = new MsgAppReset();
         MsgAppReset msgAppReset = new MsgAppReset();
         client.sendSynMsg(msgAppReset);
         client.sendSynMsg(msgAppReset);
         if (0 != msgAppReset.getRtCode()) {
         if (0 != msgAppReset.getRtCode()) {
@@ -121,6 +129,10 @@ public class DeJuRFIDService implements IService {
 
 
     @Override
     @Override
     public void disconnect(RemoteLabHardware hardware) {
     public void disconnect(RemoteLabHardware hardware) {
+        close(hardware);
+    }
+
+    private static void close(RemoteLabHardware hardware) {
         String ipAddress = hardware.getIpAddress();
         String ipAddress = hardware.getIpAddress();
         if (clientMap.containsKey(ipAddress)) {
         if (clientMap.containsKey(ipAddress)) {
             GClient client = clientMap.get(ipAddress);
             GClient client = clientMap.get(ipAddress);
@@ -133,7 +145,7 @@ public class DeJuRFIDService implements IService {
         }
         }
     }
     }
 
 
-    private void changeGpo(int state, GClient client, int delayTime) {
+    private static void changeGpo(int state, GClient client, int delayTime) {
         MsgAppSetGpo msgAppSetGpo = new MsgAppSetGpo();
         MsgAppSetGpo msgAppSetGpo = new MsgAppSetGpo();
         msgAppSetGpo.setGpo1(state);
         msgAppSetGpo.setGpo1(state);
         msgAppSetGpo.setGpo2(state);
         msgAppSetGpo.setGpo2(state);
@@ -154,7 +166,7 @@ public class DeJuRFIDService implements IService {
         }
         }
     }
     }
 
 
-    public void stopGpo(GClient client, int delayTime) {
+    public static void stopGpo(GClient client, int delayTime) {
         scheduledExecutorService.schedule(new TimerTask() {
         scheduledExecutorService.schedule(new TimerTask() {
             @Override
             @Override
             public void run() {
             public void run() {
@@ -168,7 +180,7 @@ public class DeJuRFIDService implements IService {
      *
      *
      * @param client 客户端
      * @param client 客户端
      */
      */
-    private void subscribeHandler(GClient client) {
+    public static void subscribeHandler(GClient client) {
         client.onTagEpcLog = (s, logBaseEpcInfo) -> {
         client.onTagEpcLog = (s, logBaseEpcInfo) -> {
             if (logBaseEpcInfo.getResult() == 0) {
             if (logBaseEpcInfo.getResult() == 0) {
                 log.info("===========》{}", logBaseEpcInfo.getbEpc());
                 log.info("===========》{}", logBaseEpcInfo.getbEpc());

+ 1 - 1
zd-modules/zd-netty/src/main/java/com/zd/netty/service/impl/SendServiceImpl.java

@@ -11,7 +11,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 
 
 @Slf4j
 @Slf4j
-@Service
+@Service(value = "sendService")
 public class SendServiceImpl implements ISendService {
 public class SendServiceImpl implements ISendService {
 
 
     @Resource
     @Resource