|
@@ -2,10 +2,13 @@ package com.ruoyi.ams.agv.ndc.thread;
|
|
|
|
|
|
import com.ruoyi.hard.modbus.tcp.AutoDoorClient;
|
|
|
import com.ruoyi.hard.rfid.RFIDReaderClient;
|
|
|
+import com.ruoyi.system.service.ISysConfigService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
@Slf4j
|
|
|
@Service
|
|
|
public class AutoRfidReaderTask {
|
|
@@ -14,10 +17,82 @@ public class AutoRfidReaderTask {
|
|
|
private RFIDReaderClient rfidReaderClient;
|
|
|
@Autowired
|
|
|
private AutoDoorClient autoDoorClient;
|
|
|
+ @Autowired
|
|
|
+ private ISysConfigService iSysConfigService;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * redis-key(RFID标签ID,墙外)
|
|
|
+ */
|
|
|
+ public static final String REDIS_KEY_RFID_TAGID_OUT = "sys.rfid.tag.out";
|
|
|
+ /**
|
|
|
+ * redis-key(RFID标签ID,室内)
|
|
|
+ */
|
|
|
+ public static final String REDIS_KEY_RFID_TAGID_IN = "sys.rfid.tag.in";
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 关门次数,每次关门会累加一次,但是开门会初始化为0
|
|
|
+ */
|
|
|
+ private int closeOutDoorNum = 10;
|
|
|
+ private int closeInDoorNum = 10;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 关门上限,因为大部分时间都是读不到标签的 所以关门的指令不能一直重复下发
|
|
|
+ */
|
|
|
+ private int closeDoorMax = 10;
|
|
|
|
|
|
+ /**
|
|
|
+ * RFID读取任务(墙外)
|
|
|
+ */
|
|
|
public void run() {
|
|
|
+ String tagId = iSysConfigService.selectConfigByKey(REDIS_KEY_RFID_TAGID_OUT);
|
|
|
+ List<String> tagList = rfidReaderClient.readTagsOut();
|
|
|
+ execute(tagId, tagList, true);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ * RFID读取任务(室内)
|
|
|
+ */
|
|
|
public void run01() {
|
|
|
+ String tagId = iSysConfigService.selectConfigByKey(REDIS_KEY_RFID_TAGID_IN);
|
|
|
+ List<String> tagList = rfidReaderClient.readTagsIn();
|
|
|
+ execute(tagId, tagList, false);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 执行任务
|
|
|
+ *
|
|
|
+ * @param tagId 需要校验的标签ID
|
|
|
+ * @param tagList RFID读取到的tagId
|
|
|
+ * @param isOutdoor 是否墙外的自动门
|
|
|
+ */
|
|
|
+ public void execute(String tagId, List<String> tagList, boolean isOutdoor) {
|
|
|
+ if (tagList == null) {
|
|
|
+ // 如果没有读到标签 关闭自动门
|
|
|
+ // 因为大部分时间都是读不到标签的 所以关门的指令不能一直重复下发
|
|
|
+ // 记录关门的次数 超过10次 就不再重复关门
|
|
|
+ if (isOutdoor ? closeOutDoorNum < 10 : closeInDoorNum < 10) {
|
|
|
+ autoDoorClient.sendClose(isOutdoor);
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ boolean contains = tagList.contains(tagId);
|
|
|
+ // 如果读到标签 打开自动门
|
|
|
+ if (contains) {
|
|
|
+ autoDoorClient.sendOpen(isOutdoor);
|
|
|
+ if (isOutdoor) {
|
|
|
+ closeOutDoorNum = 0;
|
|
|
+ } else {
|
|
|
+ closeInDoorNum = 0;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 如果没有读到标签 关闭自动门
|
|
|
+ // 因为大部分时间都是读不到标签的 所以关门的指令不能一直重复下发
|
|
|
+ // 记录关门的次数 超过10次 就不再重复关门
|
|
|
+ if (isOutdoor ? closeOutDoorNum < 10 : closeInDoorNum < 10) {
|
|
|
+ autoDoorClient.sendClose(isOutdoor);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
}
|