Forráskód Böngészése

RFID开关门逻辑优化

k 2 éve
szülő
commit
d8e15a76a3

+ 20 - 8
warewms-ams/src/main/java/com/ruoyi/ams/agv/ndc/thread/AutoRfidReaderTask.java

@@ -72,7 +72,7 @@ public class AutoRfidReaderTask {
     /**
      * 执行任务
      *
-     * @param tagIds     需要校验的标签ID
+     * @param tagIds    需要校验的标签ID
      * @param tagList   RFID读取到的tagId
      * @param doorNo    门编号
      * @param isOutdoor 是否墙外的自动门
@@ -85,7 +85,7 @@ public class AutoRfidReaderTask {
                     log.error("自动门打开之后的20秒钟之内不可以关门!");
                     return;
                 }
-            }else {
+            } else {
                 if (redisCache.getCacheObject("IN_DOOR_OPEN") != null) {
                     log.error("自动门打开之后的20秒钟之内不可以关门!");
                     return;
@@ -94,7 +94,7 @@ public class AutoRfidReaderTask {
             // 如果没有读到标签 关闭自动门
             // 因为大部分时间都是读不到标签的 所以关门的指令不能一直重复下发
             // 记录关门的次数 超过5次 就不再重复关门
-            if (isOutdoor ? closeOutDoorNum < closeDoorMax : closeInDoorNum < closeDoorMax) {
+            if (isOutdoor ? closeOutDoorNum <= closeDoorMax : closeInDoorNum <= closeDoorMax) {
                 autoDoorClient.sendClose(doorNo);
 //                log.info("发送关门指令!{},{}", isOutdoor, isOutdoor ? closeOutDoorNum : closeInDoorNum);
                 if (isOutdoor) {
@@ -109,7 +109,7 @@ public class AutoRfidReaderTask {
         }
         if (isOutdoor) {
             log.info("墙外RFID读取到标签:" + JSON.toJSONString(tagList));
-        }else {
+        } else {
             log.info("墙内RFID读取到标签:" + JSON.toJSONString(tagList));
         }
         boolean contains = false;
@@ -126,21 +126,33 @@ public class AutoRfidReaderTask {
 //                autoDoorClient.sendClose(AutoDoorClient.AUTO_DOOR_NO.C);
                 closeOutDoorNum = 0;
                 // 设置按钮盒有效时间
-                redisCache.setCacheObject("BUTTON_BOX_VALID","",10, TimeUnit.MINUTES);
+                redisCache.setCacheObject("BUTTON_BOX_VALID", "", 10, TimeUnit.MINUTES);
                 // 设定开门有效时间 这个时间内就算RFID没有扫描到标签,门也不可以关上
-                redisCache.setCacheObject("OUT_DOOR_OPEN","",20, TimeUnit.SECONDS);
+                redisCache.setCacheObject("OUT_DOOR_OPEN", "", 20, TimeUnit.SECONDS);
             } else {
                 closeInDoorNum = 0;
                 // 关闭警报灯
                 warningLightClient.closeWarningLight();
                 // 设定开门有效时间 这个时间内就算RFID没有扫描到标签,门也不可以关上
-                redisCache.setCacheObject("IN_DOOR_OPEN","",20, TimeUnit.SECONDS);
+                redisCache.setCacheObject("IN_DOOR_OPEN", "", 20, TimeUnit.SECONDS);
             }
         } else {
+            // 自动门打开之后的五秒钟之内不可以关门
+            if (isOutdoor) {
+                if (redisCache.getCacheObject("OUT_DOOR_OPEN") != null) {
+                    log.error("自动门打开之后的20秒钟之内不可以关门!");
+                    return;
+                }
+            } else {
+                if (redisCache.getCacheObject("IN_DOOR_OPEN") != null) {
+                    log.error("自动门打开之后的20秒钟之内不可以关门!");
+                    return;
+                }
+            }
             // 如果没有读到标签 关闭自动门
             // 因为大部分时间都是读不到标签的 所以关门的指令不能一直重复下发
             // 记录关门的次数 超过10次 就不再重复关门
-            if (isOutdoor ? closeOutDoorNum < 10 : closeInDoorNum < 10) {
+            if (isOutdoor ? closeOutDoorNum <= closeDoorMax : closeInDoorNum <= closeDoorMax) {
                 autoDoorClient.sendClose(doorNo);
 //                log.info("发送关门指令!{},{}", isOutdoor, isOutdoor ? closeOutDoorNum : closeInDoorNum);
                 if (isOutdoor) {