|
@@ -12,9 +12,12 @@ import com.payne.reader.bean.send.*;
|
|
|
import com.payne.reader.process.ReaderImpl;
|
|
import com.payne.reader.process.ReaderImpl;
|
|
|
import com.zd.common.core.enums.HardwareOperate;
|
|
import com.zd.common.core.enums.HardwareOperate;
|
|
|
import com.zd.common.core.exception.ServiceException;
|
|
import com.zd.common.core.exception.ServiceException;
|
|
|
|
|
+import com.zd.common.core.utils.SpringUtils;
|
|
|
import com.zd.netty.base.FridConsumer;
|
|
import com.zd.netty.base.FridConsumer;
|
|
|
|
|
+import com.zd.netty.enums.ManufacturerTypeEnum;
|
|
|
import com.zd.netty.service.IFridService;
|
|
import com.zd.netty.service.IFridService;
|
|
|
import com.zd.netty.service.ISendService;
|
|
import com.zd.netty.service.ISendService;
|
|
|
|
|
+import com.zd.netty.service.IService;
|
|
|
import com.zd.system.api.airbottle.RemoteAirBottleService;
|
|
import com.zd.system.api.airbottle.RemoteAirBottleService;
|
|
|
import com.zd.system.api.laboratory.RemoteLaboratoryService;
|
|
import com.zd.system.api.laboratory.RemoteLaboratoryService;
|
|
|
import com.zd.system.api.laboratory.domain.RemoteLabHardware;
|
|
import com.zd.system.api.laboratory.domain.RemoteLabHardware;
|
|
@@ -30,221 +33,18 @@ import java.util.concurrent.ConcurrentHashMap;
|
|
|
@Slf4j
|
|
@Slf4j
|
|
|
public class FridServiceImpl implements IFridService {
|
|
public class FridServiceImpl implements IFridService {
|
|
|
|
|
|
|
|
- private final Map<String, Reader> readerMap = new ConcurrentHashMap<>();
|
|
|
|
|
- private final Map<String, NetworkHandle> handleMap = new ConcurrentHashMap<>();
|
|
|
|
|
- private static final String MSG = "请先连接设备";
|
|
|
|
|
- private static final String SCANNER_MSG = "服务已断开,请检查连接状态正常后重启程序:";
|
|
|
|
|
- @Resource
|
|
|
|
|
- private FridConsumer fridConsumer;
|
|
|
|
|
- @Resource
|
|
|
|
|
- private ISendService sendService;
|
|
|
|
|
- @Resource
|
|
|
|
|
- private RemoteLaboratoryService laboratoryService;
|
|
|
|
|
|
|
|
|
|
- @Override
|
|
|
|
|
- public void connect(String host, Integer port) {
|
|
|
|
|
- Reader reader = null;
|
|
|
|
|
- if (readerMap.containsKey(host)) {
|
|
|
|
|
- reader = readerMap.get(host);
|
|
|
|
|
- }
|
|
|
|
|
- if (reader != null && reader.isConnected()) {
|
|
|
|
|
- throw new ServiceException("设备已连接");
|
|
|
|
|
- }
|
|
|
|
|
- if (reader == null) {
|
|
|
|
|
- reader = ReaderImpl.create(AntennaCount.FOUR_CHANNELS);
|
|
|
|
|
- }
|
|
|
|
|
- NetworkHandle handle;
|
|
|
|
|
- if (handleMap.containsKey(host)) {
|
|
|
|
|
- handle = handleMap.get(host);
|
|
|
|
|
- } else {
|
|
|
|
|
- handle = new NetworkHandle(host, port);
|
|
|
|
|
- handleMap.put(host, handle);
|
|
|
|
|
- }
|
|
|
|
|
- if (reader.connect(handle)) {
|
|
|
|
|
- reader.getFirmwareVersion(version -> log.info("==========================reader1 version:\t" + version.getVersion()),
|
|
|
|
|
- failure -> errorMsg(failure, (byte) -1, "版本获取异常:", host));
|
|
|
|
|
- } else {
|
|
|
|
|
- throw new ServiceException("读写器连接失败");
|
|
|
|
|
- }
|
|
|
|
|
- if (!readerMap.containsKey(host)) {
|
|
|
|
|
- readerMap.put(host, reader);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public Boolean setDevice(Integer uniformPower, String ipAddress) {
|
|
|
|
|
- Reader reader;
|
|
|
|
|
- if (readerMap.containsKey(ipAddress)) {
|
|
|
|
|
- reader = readerMap.get(ipAddress);
|
|
|
|
|
- } else {
|
|
|
|
|
- throw new ServiceException(MSG);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- stopMonitor(ipAddress);
|
|
|
|
|
- reader.setOutputPowerUniformly(
|
|
|
|
|
- (byte) Integer.parseInt(Integer.toHexString(uniformPower)),
|
|
|
|
|
- true,
|
|
|
|
|
- success -> successMsg(success, "设置读写器的射频输出功率"),
|
|
|
|
|
- failure -> errorMsg(failure, (byte) -1, "设置读写器的射频输出功率失败:", ipAddress));
|
|
|
|
|
-
|
|
|
|
|
- reader.setOutputPower(
|
|
|
|
|
- OutputPowerConfig.outputPower(new PowerFourAntenna.Builder().build()),
|
|
|
|
|
- success -> successMsg(success, "设置每个天线的射频输出功率"),
|
|
|
|
|
- failure -> errorMsg(failure, (byte) -1, "设置每个天线的射频输出功率失败:", ipAddress));
|
|
|
|
|
-
|
|
|
|
|
- reader.setFrequencyRegion(
|
|
|
|
|
- new FreqNormal.Builder().build(),
|
|
|
|
|
- success -> successMsg(success, "设置读写器的工作频率范围"),
|
|
|
|
|
- failure -> errorMsg(failure, (byte) -1, "设置读写器的工作频率范围失败:", ipAddress));
|
|
|
|
|
-
|
|
|
|
|
- reader.setRfLinkProfile(
|
|
|
|
|
- ProfileId.Profile1,
|
|
|
|
|
- success -> successMsg(success, "设置射频链路配置"),
|
|
|
|
|
- failure -> errorMsg(failure, (byte) -1, "设置射频链路配置失败:", ipAddress));
|
|
|
|
|
-
|
|
|
|
|
- return true;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public void startMonitor(byte index, String ipAddress) {
|
|
|
|
|
- RemoteLabHardware hardware = new RemoteLabHardware();
|
|
|
|
|
- hardware.setSessionIndex(index);
|
|
|
|
|
- hardware.setIpAddress(ipAddress);
|
|
|
|
|
- hardware.setChannels(4);
|
|
|
|
|
- startMonitorChannels(hardware);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public void startMonitorChannels(RemoteLabHardware hardware) {
|
|
|
|
|
- String ipAddress = hardware.getIpAddress();
|
|
|
|
|
- if (!StringUtils.hasLength(ipAddress)){
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- Integer port = hardware.getPort();
|
|
|
|
|
- port=port==null?4001:port;
|
|
|
|
|
- Integer uniformPower = hardware.getUniformPower();
|
|
|
|
|
- uniformPower=uniformPower==null?33:uniformPower;
|
|
|
|
|
- Integer channels = hardware.getChannels();
|
|
|
|
|
- channels=channels==null?1:channels;
|
|
|
|
|
- Byte sessionIndex = hardware.getSessionIndex();
|
|
|
|
|
- sessionIndex=sessionIndex==null?0:sessionIndex;
|
|
|
|
|
- if (Boolean.FALSE.equals(deviceStatus(ipAddress))){
|
|
|
|
|
- connect(ipAddress,port);
|
|
|
|
|
- setDevice(uniformPower,ipAddress);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- Reader reader;
|
|
|
|
|
- if (readerMap.containsKey(ipAddress)) {
|
|
|
|
|
- reader = readerMap.get(ipAddress);
|
|
|
|
|
- } else {
|
|
|
|
|
- throw new ServiceException(MSG);
|
|
|
|
|
- }
|
|
|
|
|
- if (reader == null || !reader.isConnected()) {
|
|
|
|
|
- throw new ServiceException(MSG);
|
|
|
|
|
- }
|
|
|
|
|
- stopMonitor(ipAddress);
|
|
|
|
|
- Session session = Session.valueOf(sessionIndex);
|
|
|
|
|
- BaseInventory inventory;
|
|
|
|
|
- switch (channels){
|
|
|
|
|
- case 4:
|
|
|
|
|
- inventory=new FastSwitchFourAntennaInventory.Builder().session(session)
|
|
|
|
|
- .build();
|
|
|
|
|
- break;
|
|
|
|
|
- case 8:
|
|
|
|
|
- inventory=new FastSwitchEightAntennaInventory.Builder().session(session)
|
|
|
|
|
- .build();
|
|
|
|
|
- break;
|
|
|
|
|
- case 16:
|
|
|
|
|
- inventory=new FastSwitchSixteenAntennaInventory.Builder().session(session)
|
|
|
|
|
- .build();
|
|
|
|
|
- break;
|
|
|
|
|
- case 1:
|
|
|
|
|
- default:
|
|
|
|
|
- inventory=new FastSwitchSingleAntennaInventory.Builder().session(session)
|
|
|
|
|
- .build();
|
|
|
|
|
-
|
|
|
|
|
- }
|
|
|
|
|
- log.info("============================>" + session);
|
|
|
|
|
-
|
|
|
|
|
- Byte index = sessionIndex;
|
|
|
|
|
- InventoryConfig config = new InventoryConfig.Builder()
|
|
|
|
|
- .setInventory(inventory)
|
|
|
|
|
- .setOnInventoryTagSuccess(fridConsumer)
|
|
|
|
|
- .setOnFailure(failure -> errorMsg(failure, index, SCANNER_MSG, ipAddress))//读取失败
|
|
|
|
|
- .build();
|
|
|
|
|
- reader.setInventoryConfig(config);
|
|
|
|
|
- reader.startInventory(true);//true -- 开启循环调用
|
|
|
|
|
- laboratoryService.update(HardwareOperate.OPEN,ipAddress);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- private void errorMsg(Failure failure, byte index, String msg, String ipAddress) {
|
|
|
|
|
- byte errorCode = failure.getErrorCode();
|
|
|
|
|
- if (errorCode == -34 && msg.equals(SCANNER_MSG) && index != -1) {
|
|
|
|
|
- deviceRestart(index, ipAddress);
|
|
|
|
|
- }
|
|
|
|
|
- if (errorCode == -79) {
|
|
|
|
|
- sendService.sendError(msg + "\t" + failure);
|
|
|
|
|
- stopMonitor(ipAddress);
|
|
|
|
|
- disconnect(ipAddress);
|
|
|
|
|
- if (index != -1) {
|
|
|
|
|
- deviceRestart(index, ipAddress);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- private void successMsg(Success success, String msg) {
|
|
|
|
|
- log.info("=========================={}:\t {}", msg, success.toString());
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public Boolean disconnect(String ipAddress) {
|
|
|
|
|
- Reader reader = null;
|
|
|
|
|
- stopMonitor(ipAddress);
|
|
|
|
|
- if (readerMap.containsKey(ipAddress)) {
|
|
|
|
|
- reader = readerMap.get(ipAddress);
|
|
|
|
|
- }
|
|
|
|
|
- if (reader != null && reader.isConnected()) {
|
|
|
|
|
- reader.disconnect();
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- handleMap.remove(ipAddress);
|
|
|
|
|
- readerMap.remove(ipAddress);
|
|
|
|
|
- return true;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public Boolean stopMonitor(String ipAddress) {
|
|
|
|
|
- Reader reader = null;
|
|
|
|
|
- if (readerMap.containsKey(ipAddress)) {
|
|
|
|
|
- reader = readerMap.get(ipAddress);
|
|
|
|
|
- }
|
|
|
|
|
- if (reader != null && reader.isConnected()) {
|
|
|
|
|
- reader.stopInventory();
|
|
|
|
|
- }
|
|
|
|
|
- laboratoryService.update(HardwareOperate.CLOSE,ipAddress);
|
|
|
|
|
- return true;
|
|
|
|
|
|
|
+ private IService rfidService(Integer type) {
|
|
|
|
|
+ return SpringUtils.getBean(ManufacturerTypeEnum.matchByValue(type).getService());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
- public Boolean deviceStatus(String ipAddress) {
|
|
|
|
|
- Reader reader = null;
|
|
|
|
|
- if (readerMap.containsKey(ipAddress)) {
|
|
|
|
|
- reader = readerMap.get(ipAddress);
|
|
|
|
|
- }
|
|
|
|
|
- return reader != null && reader.isConnected();
|
|
|
|
|
|
|
+ public void start(RemoteLabHardware hardware) {
|
|
|
|
|
+ rfidService(hardware.getManufacturerType()).start(hardware);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
- public void deviceRestart(byte index, String ipAddress) {
|
|
|
|
|
- connect(ipAddress, 4001);
|
|
|
|
|
- if (readerMap.containsKey(ipAddress)) {
|
|
|
|
|
- Reader reader = readerMap.get(ipAddress);
|
|
|
|
|
- if (reader.isConnected()) {
|
|
|
|
|
- sendService.sendError("重连成功");
|
|
|
|
|
- startMonitor(index, ipAddress);
|
|
|
|
|
- }
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- throw new ServiceException("设备未连接");
|
|
|
|
|
|
|
+ public void stop(RemoteLabHardware hardware) {
|
|
|
|
|
+ rfidService(hardware.getManufacturerType()).disconnect(hardware);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|