|
|
@@ -18,6 +18,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
|
|
import java.util.concurrent.ScheduledExecutorService;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
|
|
/**
|
|
|
* @author Administrator
|
|
|
@@ -31,12 +32,15 @@ public class DeJuRFIDServiceImpl implements IService {
|
|
|
private static final Map<String, GClient> CLIENT_MAP = new ConcurrentHashMap<>();
|
|
|
|
|
|
static AtomicBoolean isAlarm = new AtomicBoolean();
|
|
|
+ static AtomicInteger stopCount = new AtomicInteger();
|
|
|
|
|
|
public static final Integer PORT = 8160;
|
|
|
|
|
|
private static final String HTTP_SEPARATOR = ":";
|
|
|
private static final Integer TIME_OUT = 2000;
|
|
|
|
|
|
+ private static final Integer MAX_RETRY=3;
|
|
|
+
|
|
|
private static final ScheduledExecutorService scheduledExecutorService = SpringUtils.getBean("scheduledExecutorService");
|
|
|
|
|
|
@Override
|
|
|
@@ -53,7 +57,7 @@ public class DeJuRFIDServiceImpl implements IService {
|
|
|
client = new GClient();
|
|
|
CLIENT_MAP.put(ipAddress, client);
|
|
|
}
|
|
|
- if (client.openTcp(ipAddress + HTTP_SEPARATOR+ PORT, TIME_OUT)) {
|
|
|
+ if (client.openTcp(ipAddress + HTTP_SEPARATOR + PORT, TIME_OUT)) {
|
|
|
// 订阅标签上报事件
|
|
|
subscribeHandler(client, hardware);
|
|
|
// 功率配置, 将4个天线功率都设置为30dBm.
|
|
|
@@ -104,9 +108,7 @@ public class DeJuRFIDServiceImpl implements IService {
|
|
|
msgBaseInventoryEpc.setInventoryMode(EnumG.InventoryMode_Inventory);
|
|
|
|
|
|
client.sendSynMsg(msgBaseInventoryEpc);
|
|
|
- if (0 != msgBaseInventoryEpc.getRtCode()) {
|
|
|
- log.info("Inventory epc error.");
|
|
|
- } else {
|
|
|
+ if (0 == msgBaseInventoryEpc.getRtCode()) {
|
|
|
log.info("Inventory epc success.");
|
|
|
}
|
|
|
return msgBaseInventoryEpc;
|
|
|
@@ -119,8 +121,9 @@ public class DeJuRFIDServiceImpl implements IService {
|
|
|
MsgBaseSetPower msgBaseSetPower = new MsgBaseSetPower();
|
|
|
if (0 == msgBaseGetPower.getRtCode()) {
|
|
|
Hashtable<Integer, Integer> dicPower = msgBaseGetPower.getDicPower();
|
|
|
- Integer integer = dicPower.get(0);
|
|
|
- if (!Objects.equals(integer, uniformPower)) {
|
|
|
+ Integer power = dicPower.get(1);
|
|
|
+ log.info("输出功率:==============》{}", power);
|
|
|
+ if (power == null || !Objects.equals(power, uniformPower)) {
|
|
|
Hashtable<Integer, Integer> hashtable = new Hashtable<>();
|
|
|
Integer channels = hardware.getChannels();
|
|
|
for (int i = 1; i <= channels; i++) {
|
|
|
@@ -128,9 +131,16 @@ public class DeJuRFIDServiceImpl implements IService {
|
|
|
}
|
|
|
msgBaseSetPower.setDicPower(hashtable);
|
|
|
client.sendSynMsg(msgBaseSetPower);
|
|
|
+ if (0 == msgBaseSetPower.getRtCode()) {
|
|
|
+ log.info("Power epc success.");
|
|
|
+ } else {
|
|
|
+ log.info("==============设置输出功率失败==============");
|
|
|
+ }
|
|
|
} else {
|
|
|
msgBaseSetPower.setRtCode((byte) 0);
|
|
|
}
|
|
|
+ } else {
|
|
|
+ log.info("==============获取输出功率失败==============");
|
|
|
}
|
|
|
return msgBaseSetPower;
|
|
|
}
|
|
|
@@ -191,16 +201,20 @@ public class DeJuRFIDServiceImpl implements IService {
|
|
|
if (CLIENT_MAP.containsKey(ipAddress)) {
|
|
|
GClient client = CLIENT_MAP.get(ipAddress);
|
|
|
changeGpo(0, client, 0);
|
|
|
- MsgBaseStop msg = new MsgBaseStop();
|
|
|
- // 停止读卡,空闲态
|
|
|
- client.sendSynMsg(msg);
|
|
|
- String result = msg.getRtCode() == 0 ? "成功" : "失败";
|
|
|
- log.info("客户端停止读卡{}", result);
|
|
|
+ stopMsg(client);
|
|
|
client.close();
|
|
|
CLIENT_MAP.remove(ipAddress);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public static void stopMsg(GClient client) {
|
|
|
+ MsgBaseStop msg = new MsgBaseStop();
|
|
|
+ // 停止读卡,空闲态
|
|
|
+ client.sendSynMsg(msg);
|
|
|
+ String result = msg.getRtCode() == 0 ? "成功" : "失败";
|
|
|
+ log.info("客户端停止读卡{}", result);
|
|
|
+ }
|
|
|
+
|
|
|
private static void changeGpo(int state, GClient client, int delayTime) {
|
|
|
MsgAppSetGpo msgAppSetGpo = new MsgAppSetGpo();
|
|
|
msgAppSetGpo.setGpo1(state);
|
|
|
@@ -218,7 +232,9 @@ public class DeJuRFIDServiceImpl implements IService {
|
|
|
}
|
|
|
} else {
|
|
|
log.error("Gpo epc {} error.", status);
|
|
|
- stopGpo(client, delayTime);
|
|
|
+ if (stopCount.getAndIncrement() < MAX_RETRY) {
|
|
|
+ stopGpo(client, delayTime);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -242,7 +258,7 @@ public class DeJuRFIDServiceImpl implements IService {
|
|
|
CLIENT_MAP.computeIfAbsent(ipAddress, f -> client);
|
|
|
client.onTagEpcLog = (s, logBaseEpcInfo) -> {
|
|
|
if (logBaseEpcInfo.getResult() == 0) {
|
|
|
- log.info("===========》{},index: {}", logBaseEpcInfo.getEpc(),logBaseEpcInfo.getAntId());
|
|
|
+ log.info("===========》{},index: {}", logBaseEpcInfo.getEpc(), logBaseEpcInfo.getAntId());
|
|
|
InventoryTag tag = new InventoryTag();
|
|
|
BeanUtils.copyProperties(logBaseEpcInfo, tag);
|
|
|
tag.setRemoteLabHardware(hardware);
|