|
@@ -1,124 +0,0 @@
|
|
|
-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 {
|
|
|
-
|
|
|
- @Autowired(required = false)
|
|
|
- private RFIDReaderClient rfidReaderClient;
|
|
|
- @Autowired(required = false)
|
|
|
- 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);
|
|
|
- String[] tagIds = tagId.split(",");
|
|
|
- List<String> tagList = rfidReaderClient.readTagsOut();
|
|
|
- execute(tagIds, tagList, AutoDoorClient.AUTO_DOOR_NO.A, true);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * RFID读取任务(室内)
|
|
|
- */
|
|
|
- public void run01() {
|
|
|
- String tagId = iSysConfigService.selectConfigByKey(REDIS_KEY_RFID_TAGID_IN);
|
|
|
- String[] tagIds = tagId.split(",");
|
|
|
- List<String> tagList = rfidReaderClient.readTagsIn();
|
|
|
- execute(tagIds, tagList, AutoDoorClient.AUTO_DOOR_NO.B, false);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 执行任务
|
|
|
- *
|
|
|
- * @param tagIds 需要校验的标签ID
|
|
|
- * @param tagList RFID读取到的tagId
|
|
|
- * @param doorNo 门编号
|
|
|
- * @param isOutdoor 是否墙外的自动门
|
|
|
- */
|
|
|
- public void execute(String[] tagIds, List<String> tagList, AutoDoorClient.AUTO_DOOR_NO doorNo, boolean isOutdoor) {
|
|
|
- if (tagList == null) {
|
|
|
- // 如果没有读到标签 关闭自动门
|
|
|
- // 因为大部分时间都是读不到标签的 所以关门的指令不能一直重复下发
|
|
|
- // 记录关门的次数 超过10次 就不再重复关门
|
|
|
- if (isOutdoor ? closeOutDoorNum < 10 : closeInDoorNum < 10) {
|
|
|
- autoDoorClient.sendClose(doorNo);
|
|
|
-// log.info("发送关门指令!{},{}", isOutdoor, isOutdoor ? closeOutDoorNum : closeInDoorNum);
|
|
|
- if (isOutdoor) {
|
|
|
- // 关闭墙外同时 打开墙里第二层自动门
|
|
|
-// autoDoorClient.sendOpen(AutoDoorClient.AUTO_DOOR_NO.C);
|
|
|
- closeOutDoorNum++;
|
|
|
- } else {
|
|
|
- closeInDoorNum++;
|
|
|
- }
|
|
|
- }
|
|
|
- return;
|
|
|
- }
|
|
|
- boolean contains = false;
|
|
|
- for (String tagId : tagIds) {
|
|
|
- if (contains = tagList.contains(tagId)) {
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- // 如果读到标签 打开自动门
|
|
|
- if (contains) {
|
|
|
- autoDoorClient.sendOpen(doorNo);
|
|
|
- if (isOutdoor) {
|
|
|
- // 打开墙外同时 关闭墙里第二层自动门(应该大部分时间多是关闭的)
|
|
|
-// autoDoorClient.sendClose(AutoDoorClient.AUTO_DOOR_NO.C);
|
|
|
- closeOutDoorNum = 0;
|
|
|
- } else {
|
|
|
- closeInDoorNum = 0;
|
|
|
- }
|
|
|
- } else {
|
|
|
- // 如果没有读到标签 关闭自动门
|
|
|
- // 因为大部分时间都是读不到标签的 所以关门的指令不能一直重复下发
|
|
|
- // 记录关门的次数 超过10次 就不再重复关门
|
|
|
- if (isOutdoor ? closeOutDoorNum < 10 : closeInDoorNum < 10) {
|
|
|
- autoDoorClient.sendClose(doorNo);
|
|
|
-// log.info("发送关门指令!{},{}", isOutdoor, isOutdoor ? closeOutDoorNum : closeInDoorNum);
|
|
|
- if (isOutdoor) {
|
|
|
- // 关闭墙外同时 打开墙里第二层自动门
|
|
|
-// autoDoorClient.sendOpen(AutoDoorClient.AUTO_DOOR_NO.C);
|
|
|
- closeOutDoorNum++;
|
|
|
- } else {
|
|
|
- closeInDoorNum++;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-}
|