hecheng 3 anni fa
parent
commit
71b6ed2191

+ 2 - 0
zd-api/zd-api-system/src/main/java/com/zd/system/api/netty/RemoteNettyService.java

@@ -34,6 +34,8 @@ public interface RemoteNettyService {
 
     /**
      * 开启设备警报
+     * @param hardware 设备参数
+     * @return R
      */
     @ApiOperation("开启设备警报")
     @PostMapping("/frid/alarm")

+ 4 - 2
zd-modules/zd-chemical/src/main/java/com/zd/chemical/service/impl/HxpStockServiceImpl.java

@@ -8,6 +8,7 @@ import com.zd.chemical.domain.vo.*;
 import com.zd.chemical.mapper.*;
 import com.zd.chemical.service.*;
 import com.zd.chemical.util.SmsSydUtil;
+import com.zd.common.core.domain.R;
 import com.zd.common.core.domain.per.PerPrefix;
 import com.zd.common.core.exception.ServiceException;
 import com.zd.common.core.utils.DateUtils;
@@ -23,6 +24,7 @@ import com.zd.system.api.domain.InventoryTag;
 import com.zd.system.api.domain.SysDictData;
 import com.zd.system.api.laboratory.RemoteLaboratoryService;
 import com.zd.system.api.laboratory.RemoteMessageContentService;
+import com.zd.system.api.laboratory.domain.RemoteLabHardware;
 import com.zd.system.api.netty.RemoteNettyService;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -327,11 +329,11 @@ public class HxpStockServiceImpl implements IHxpStockService {
         }else {
             logger.error("RFID 检测到违规触发报警: " + JSONUtil.toJsonStr(hxpStock));
             //触发RFID警报
-            /*RemoteLabHardware hardware = tag.getRemoteLabHardware();
+            RemoteLabHardware hardware = tag.getRemoteLabHardware();
             if (hardware!=null){
                 R<Boolean> alarm = remoteNettyService.alarm(hardware);//RFID设备报警
                 logger.info("==================>{},{}",alarm.getCode(),alarm.getMsg());
-            }*/
+            }
             // 如果非领用状态,做报警台账
             // 0.检测实验室声光报警器是否使用- 使用则直接调用触发- 否则跳过
             Map<String,Object> subInfo = hxpUserecordMapper.selectSubInfoById(hxpStock.getSubId());

+ 1 - 2
zd-modules/zd-netty/src/main/java/com/zd/netty/controller/FridDeviceController.java

@@ -53,8 +53,7 @@ public class FridDeviceController {
     @ApiOperation("开启设备警报")
     @PostMapping("/alarm")
     public R<Boolean> alarm(@RequestBody RemoteLabHardware hardware) {
-        service.alarm(hardware);
-        return R.ok();
+        return R.ok(service.alarm(hardware));
     }
 
     /**

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

@@ -77,8 +77,8 @@ public class DeJuRFIDClientImpl implements IService {
     }
 
     @Override
-    public void alarm(RemoteLabHardware hardware) {
-        service.alarm(hardware);
+    public boolean alarm(RemoteLabHardware hardware) {
+        return service.alarm(hardware);
     }
 
     /**

+ 23 - 11
zd-modules/zd-netty/src/main/java/com/zd/netty/sdk/DeJuRFIDServerImpl.java

@@ -33,8 +33,8 @@ public class DeJuRFIDServerImpl implements IService {
     private final Map<String, GClient> clientMap = new ConcurrentHashMap<>();
 
     private final Map<String, Boolean> alarmMap = new ConcurrentHashMap<>();
-    static AtomicInteger stopCount = new AtomicInteger();
 
+    private final Map<String, Integer> stopMap = new ConcurrentHashMap<>();
     public static final Integer PORT = 8160;
 
     private static final String HTTP_SEPARATOR = ":";
@@ -191,21 +191,24 @@ public class DeJuRFIDServerImpl implements IService {
     }
 
     @Override
-    public void alarm(RemoteLabHardware hardware) {
+    public boolean alarm(RemoteLabHardware hardware) {
         //灯带设置
         String ipAddress = hardware.getIpAddress();
         if (clientMap.containsKey(ipAddress)) {
             GClient client = clientMap.get(ipAddress);
             boolean alarm = false;
-            if (alarmMap.containsKey(ipAddress)) {
-                alarm = alarmMap.get(ipAddress);
-            }
-            log.info("报警状态:==============》{},设备IP:{}", alarm, ipAddress);
-            if (!alarm) {
-                alarmMap.putIfAbsent(ipAddress,true);
-                changeGpo(ipAddress, 1, client, 10);
+            synchronized (this.alarmMap){
+                if (alarmMap.containsKey(ipAddress)) {
+                    alarm = alarmMap.get(ipAddress);
+                }
+                log.info("报警状态:==============》{},设备IP:{}", alarm, ipAddress);
+                if (!alarm) {
+                    alarmMap.putIfAbsent(ipAddress,true);
+                    return changeGpo(ipAddress, 1, client, 10);
+                }
             }
         }
+        return false;
     }
 
     public void close(RemoteLabHardware hardware) {
@@ -227,7 +230,7 @@ public class DeJuRFIDServerImpl implements IService {
         log.info("客户端停止读卡{}", result);
     }
 
-    private void changeGpo(String ipAddress, int state, GClient client, int delayTime) {
+    private boolean changeGpo(String ipAddress, int state, GClient client, int delayTime) {
         MsgAppSetGpo msgAppSetGpo = new MsgAppSetGpo();
         msgAppSetGpo.setGpo1(state);
         msgAppSetGpo.setGpo2(state);
@@ -241,12 +244,20 @@ public class DeJuRFIDServerImpl implements IService {
                 stopGpo(ipAddress, client, delayTime);
             } else {
                 alarmMap.remove(ipAddress);
+                stopMap.remove(ipAddress);
             }
+            return true;
         } else {
             log.info("Gpo epc {} error.", status);
-            if (stopCount.getAndIncrement() < MAX_RETRY) {
+            if (stopMap.containsKey(ipAddress)){
+                stopMap.put(ipAddress,stopMap.get(ipAddress)+1);
+            }else {
+                stopMap.put(ipAddress,1);
+            }
+            if (stopMap.get(ipAddress) <= MAX_RETRY) {
                 stopGpo(ipAddress, client, delayTime);
             }
+            return false;
         }
     }
 
@@ -277,6 +288,7 @@ public class DeJuRFIDServerImpl implements IService {
                 Long replySerialNumber = logBaseEpcInfo.getReplySerialNumber();
                 log.info("===========》读取器设备编码:{},replySerialNumber: {}", readerSerialNumber, replySerialNumber);
                 tag.setSerialNumber(client.getSerialNumber());
+                tag.setRemoteLabHardware(redisTemplate.opsForValue().get(client.getSerialNumber()));
                 sendService.send(tag);
             }
         };

+ 2 - 1
zd-modules/zd-netty/src/main/java/com/zd/netty/sdk/WuYuanRFIDServiceImpl.java

@@ -118,8 +118,9 @@ public class WuYuanRFIDServiceImpl implements IService {
     }
 
     @Override
-    public void alarm(RemoteLabHardware hardware) {
+    public boolean alarm(RemoteLabHardware hardware) {
         // TODO document why this method is empty
+        return false;
     }
 
     public Boolean deviceStatus(RemoteLabHardware hardware) {

+ 7 - 3
zd-modules/zd-netty/src/main/java/com/zd/netty/service/IFridService.java

@@ -2,6 +2,9 @@ package com.zd.netty.service;
 
 import com.zd.system.api.laboratory.domain.RemoteLabHardware;
 
+/**
+ * @author Administrator
+ */
 public interface IFridService {
     /**
      * 启动RFID扫描器
@@ -16,8 +19,9 @@ public interface IFridService {
     void stop(RemoteLabHardware hardware);
 
     /**
-     * 关闭RFID扫描器
-     * @param hardware  设备数据
+     * 启动警报
+     * @param hardware 设备数据
+     * @return boolean
      */
-    void alarm(RemoteLabHardware hardware);
+    boolean alarm(RemoteLabHardware hardware);
 }

+ 5 - 1
zd-modules/zd-netty/src/main/java/com/zd/netty/service/IService.java

@@ -4,22 +4,26 @@ import com.zd.system.api.laboratory.domain.RemoteLabHardware;
 
 /**
  * RFID接口类
+ * @author Administrator
  */
 public interface IService {
 
     /**
      * 启动RFID读写器
+     * @param hardware 设备数据
      */
     void start(RemoteLabHardware hardware);
 
     /**
      * 断开RFID读写器
+     * @param hardware 设备数据
      */
     void disconnect(RemoteLabHardware hardware);
 
     /**
      * 启动警报
      * @param hardware 设备数据
+     * @return boolean
      */
-    void alarm(RemoteLabHardware hardware);
+    boolean alarm(RemoteLabHardware hardware);
 }

+ 2 - 2
zd-modules/zd-netty/src/main/java/com/zd/netty/service/impl/FridServiceImpl.java

@@ -52,7 +52,7 @@ public class FridServiceImpl implements IFridService {
     }
 
     @Override
-    public void alarm(RemoteLabHardware hardware) {
-        rfidService(hardware.getManufacturerType()).alarm(hardware);
+    public boolean alarm(RemoteLabHardware hardware) {
+       return rfidService(hardware.getManufacturerType()).alarm(hardware);
     }
 }

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

@@ -36,10 +36,6 @@ public class SendServiceImpl implements ISendService {
     @Resource
     private RedisTemplate<String,RemoteLabHardware> redisTemplate;
 
-    @Resource
-    private IFridService fridService;
-
-
     @Override
     public boolean send(InventoryTag tag) {
         String serialNumber = tag.getSerialNumber();
@@ -51,11 +47,7 @@ public class SendServiceImpl implements ISendService {
                 int antId = tag.getAntId();
                 String uniformPower = hardware.getUniformPower();
                 String[] uniformPowers = uniformPower.split(",");
-                boolean b = handleTag(tag, antId, uniformPowers);
-                if (b){
-                    fridService.alarm(hardware);
-                }
-                return b;
+                return handleTag(tag, antId, uniformPowers);
             }
             log.info("=========未获取到设备信息=========");
         }