diff --git a/pom.xml b/pom.xml
index 033c242..9f4d69f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,9 +25,17 @@
lombok
+
+
+
+
+
+
+
+
- com.new.reader
- reader-api
+ com.readwriter
+ readwriter
1.0
diff --git a/pom.xml b/pom.xml
index 033c242..9f4d69f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,9 +25,17 @@
lombok
+
+
+
+
+
+
+
+
- com.new.reader
- reader-api
+ com.readwriter
+ readwriter
1.0
diff --git a/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java b/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java
index ad9b6c8..e0ef3be 100644
--- a/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java
+++ b/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java
@@ -2,13 +2,20 @@
import com.casic.missiles.model.ReturnDTO;
import com.casic.missiles.service.IBusinessReadWriterService;
+import com.rfid.API.CommonReader;
+import com.rfid.API.ProtocolVersion;
+import com.rfid.API.Util;
+import com.rfid.API.core.BaseReader;
+import com.rfid.API.entityclass.MemoryBank;
+import com.rfid.API.entityclass.ScanTagParameter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import java.util.Set;
+import java.util.*;
import java.util.concurrent.ExecutionException;
/**
@@ -29,6 +36,7 @@
* TCP连接,需配置和192.168.1.201一个段
* 读取读写器获取标签TID列表,用于标签绑定,前端从结果中选取一个标签传入标签绑定接口
*/
+ @CrossOrigin
@GetMapping("/tId/readList")
public ReturnDTO> tIdNewReadList() {
return readWriterService.tIdNewReadList();
@@ -39,6 +47,7 @@
* USB-HID连接(HID是一种USB通信协议,无需安装驱动就能进行交互)
* 读取读写器获取TID列表,用于标签绑定,前端从结果中选取一个标签传入标签绑定接口
*/
+ @CrossOrigin
@GetMapping("/tId/mini/readList")
public ReturnDTO> tIdMiniReadList() {
return readWriterService.tIdMiniReadList();
@@ -51,6 +60,7 @@
* 二维码由样品编号/设备编号生成
* 扫描收入、扫描检完等,以及大读写器的补充(包括新建委托书和待收入中使用)
*/
+ @CrossOrigin
@GetMapping("/code/gun/readList")
public ReturnDTO> codeGunReadList() {
return readWriterService.codeGunReadList();
@@ -59,6 +69,7 @@
/**
* 有线扫码枪(二维码)和大读写器结合扫描
*/
+ @CrossOrigin
@GetMapping("/gunAndTId/readList")
public ReturnDTO> equipmentLabelReadList() throws ExecutionException, InterruptedException {
return readWriterService.gunAndTIdNewReadList();
@@ -67,6 +78,7 @@
/**
* 大读写器和小读写器识别结合的结果TID列表
*/
+ @CrossOrigin
@GetMapping("/tIdAndMini/readList")
public ReturnDTO> allTidReadList() throws ExecutionException, InterruptedException {
return readWriterService.tIdAndMiniReadList();
@@ -75,8 +87,255 @@
/**
* 大读写器和小读写器和有线扫码枪(二维码)识别结合的结果TID列表
*/
+ @CrossOrigin
@GetMapping("/tIdAndMiniAndGun/readList")
public ReturnDTO> tIdAndMiniAndGun() throws ExecutionException, InterruptedException {
return readWriterService.tIdAndMiniAndGunReadList();
}
+
+
+ public static void main(String[] args) {
+// CommonReader reader = new CommonReader("Reader1", GlobalData.ConnectType.TcpClient.name(), "192.168.1.201:9090");
+ CommonReader reader = new CommonReader("Reader1", "RS232", "COM5:115200");
+
+// CommonReader reader = new CommonReader("Reader1", "USB-HID", "");
+ reader.setProtocol(ProtocolVersion.GRP);
+ reader.setReaderProtocol(ProtocolVersion.GRP);
+ reader.setPortSum(4);
+ reader.connect(false, new BaseReader.IConnectListener() {
+ @Override
+ public void callback(boolean b) {
+ System.out.println("设备连接状态:" + b);
+ }
+ });
+
+
+ if (reader.getIsConnected() == true) {
+ System.out.println("连接成功...");
+ boolean a = reader.BuzzerControl(true, false);
+ System.out.println("**********************");
+ System.out.println("1.查询功率 2.设置功率 3.盘点标签 4.查询GPI状态 5. 开门开灯");
+ while (true) {
+ Scanner input = new Scanner(System.in);
+ System.out.println("请输入菜单编号:");
+ int bh = input.nextInt();
+ if (bh == 1) {
+ HashMap powerList = reader.reader_GetPowerList();
+ for (Byte key : powerList.keySet()) {
+ System.out.println("端口:" + key + " 功率:" + powerList.get(key));
+ }
+ } else if (bh == 2) {
+ HashMap map = new HashMap();
+ System.out.println("输入需要修改的端口:");
+ int k = input.nextInt();
+ byte k1 = (byte) k;
+ System.out.println("输入需要修改的功率:");
+ int v = input.nextByte();
+ byte v1 = (byte) v;
+ map.put(k1, v1);
+ boolean set = reader.reader_SetPowerList(map);
+ System.out.println("功率修改成功");
+ } else if (bh == 3) {
+ //添加标签读取回调
+
+ ScanTagParameter param = new ScanTagParameter();
+ param.antenna = 0x01;
+ param.isLoop = true;
+ param.tidParameter = new byte[]{0,8};
+ boolean b = reader.reader_Inventory(param, (byte) 0x01);
+// System.out.println("开始盘点:" + b);
+// boolean b1 = reader.ScanUserData(0x01,true,2);
+
+// boolean b = reader.ScanEPC(0x01,true);
+ boolean b2 = reader.ScanTID(0x01,true,8);
+// System.out.println("开始盘点:" + b1);
+// reader.OnRxdGpiTriggerState
+
+ reader.OnTagDataReceivedHandle = (gateName, tagData) -> {
+ if (tagData != null && tagData.getEPC() != null) {
+
+ String s = Util.convertByteArrayToHexString(tagData.getTID());
+// String s1 = Util.convertByteArrayToHexString(tagData.getUserData());
+// String s2 = Util.convertByteArrayToHexString(tagData.getTID());
+ System.out.println("1读取到EPC:" + s);
+// System.out.println("用户区:"+s1);
+// System.out.println("TID:"+s2);
+ }
+ };
+ new Timer().schedule(new TimerTask() {
+ @Override
+ public void run() {
+ boolean stop = reader.reader_StopInventory();
+
+ System.out.println("停止盘点:" + stop);
+
+ }
+ }, 2000);
+
+ } else if (bh == 4) {
+
+ // 查询GPI
+ HashMap gpiLis = reader.GetGpi();
+ for (Byte key : gpiLis.keySet()) {
+ System.out.println("gpi " + key + " 电平:" + gpiLis.get(key));
+ }
+ } else if (bh == 5) {
+ /**
+ * 设置单个GPIO参数
+ */
+
+ if (reader != null && reader.getIsConnected()) {
+ HashMap Gpomap = new HashMap<>();
+ Gpomap.put((byte) 1, (byte) 1);
+ Gpomap.put((byte) 2, (byte) 1);
+ if (reader.reader_SetGpo(Gpomap)) {
+ System.out.println("设置成功");
+ new Timer().schedule(new TimerTask() {
+ @Override
+ public void run() {
+ HashMap Gpomap = new HashMap<>();
+ Gpomap.put((byte) 1, (byte) 0);
+ reader.reader_SetGpo(Gpomap);
+ }
+ }, 2000);
+ } else {
+ System.out.println("设置失败");
+ }
+ do {
+ HashMap gpiLis = reader.GetGpi();
+ Byte I1 = 1;
+ Byte gpi1 = gpiLis.get(I1);
+ Byte I2 = 2;
+ Byte gpi2 = gpiLis.get(I2);
+ if (gpi1 == 0 && gpi2 == 0) {
+ //关灯
+ HashMap Gpo2map = new HashMap<>();
+ Gpo2map.put((byte) 2, (byte) 0);
+ reader.reader_SetGpo(Gpo2map);
+
+ //添加标签读取回调'
+
+ ScanTagParameter param = new ScanTagParameter();
+ param.antenna = 0x01;
+ param.isLoop = true;
+ boolean b = reader.reader_Inventory(param, (byte) 0x00);
+ System.out.println("开始盘点:" + b);
+ reader.OnTagDataReceivedHandle = (gateName, tagData) -> {
+ if (tagData != null && tagData.getEPC() != null) {
+
+ String s = Util.convertByteArrayToHexString(tagData.getEPC());
+ System.out.println("读取到EPC:" + s);
+ }
+ };
+ new Timer().schedule(new TimerTask() {
+ @Override
+ public void run() {
+ boolean stop = reader.reader_StopInventory();
+
+ System.out.println("停止盘点:" + stop);
+
+ }
+ }, 2000);
+
+ break;
+
+ } else {
+ System.out.println("查询GPI状态中");
+ }
+
+ } while (true);
+
+
+ } else {
+ System.out.println("设备未连接·");
+ }
+ } else if (bh == 6) {
+ //开锁、开灯
+ if (reader != null && reader.getIsConnected()) {
+ HashMap Gpomap = new HashMap<>();
+ Gpomap.put((byte) 1, (byte) 1);
+ Gpomap.put((byte) 2, (byte) 1);
+ if (reader.reader_SetGpo(Gpomap)) {
+ System.out.println("设置成功");
+ new Timer().schedule(new TimerTask() {
+ @Override
+ public void run() {
+ Gpomap.put((byte) 1, (byte) 0);
+ }
+ }, 2000);
+ } else {
+ System.out.println("设置失败");
+ }
+ } else {
+ System.out.println("设备未连接·");
+ }
+
+ } else if (bh == 7) {
+// ScanTagParameter param = new ScanTagParameter();
+// param.antenna = 0x01;
+// param.isLoop = true;
+// //写标签测试,感应区一次只能写一个标签,如果没有扫瞄到标签,返回 -2;如果扫描到有多个标签,返回-1;如果参数不合法,返回-3;写入成功,返回 0
+// System.out.println("请输入需要写入的EPC:");
+// String Repc = input.next();
+// int i = reader.writeEPC(param, Repc);
+// if (i == 0) {
+// System.out.println("标签写入成功");
+// } else if (i == -1) {
+// System.out.println("扫描到多张标签");
+// } else if (i == -2) {
+// System.out.println("未扫描到标签");
+// } else {
+// System.out.println("EPC输入不合格");
+// }
+// try {
+// Thread.sleep(1000 * 2);
+// } catch (InterruptedException e) {
+// e.printStackTrace();
+// }
+
+
+ } else if (bh == 8) {
+ // 读用户区
+ boolean b = reader.ScanUserData(0x01, true, 2);
+ System.out.println(b);
+
+ reader.OnTagDataReceivedHandle = (gateName, tagData) -> {
+ if (tagData != null && tagData.getUserData() != null) {
+ String s1 = Util.convertByteArrayToHexString(tagData.getUserData());
+ System.out.println("用户区:" + s1);
+ }
+ };
+ new Timer().schedule(new TimerTask() {
+ @Override
+ public void run() {
+ boolean stop = reader.reader_StopInventory();
+
+ System.out.println("停止盘点:" + stop);
+
+ }
+ }, 2000);
+
+ } else if (bh == 9) {
+ // 写用户区
+ ScanTagParameter param = new ScanTagParameter();
+ param.antenna = 0x01;
+ param.isLoop = true;
+
+ int i = reader.writTagData(MemoryBank.UserMemory, param, "00001111");
+ System.out.println("写入用户区:" + i);
+ } else if (bh == 10) {
+ // 查询盘点模式
+ reader.getEpcBasebandParameter();
+
+ } else if (bh == 11) {
+ reader.getIsConnected();
+ }
+ }
+ } else {
+ System.out.println("连接失败...");
+ }
+
+
+ }
+
}
diff --git a/pom.xml b/pom.xml
index 033c242..9f4d69f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,9 +25,17 @@
lombok
+
+
+
+
+
+
+
+
- com.new.reader
- reader-api
+ com.readwriter
+ readwriter
1.0
diff --git a/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java b/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java
index ad9b6c8..e0ef3be 100644
--- a/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java
+++ b/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java
@@ -2,13 +2,20 @@
import com.casic.missiles.model.ReturnDTO;
import com.casic.missiles.service.IBusinessReadWriterService;
+import com.rfid.API.CommonReader;
+import com.rfid.API.ProtocolVersion;
+import com.rfid.API.Util;
+import com.rfid.API.core.BaseReader;
+import com.rfid.API.entityclass.MemoryBank;
+import com.rfid.API.entityclass.ScanTagParameter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import java.util.Set;
+import java.util.*;
import java.util.concurrent.ExecutionException;
/**
@@ -29,6 +36,7 @@
* TCP连接,需配置和192.168.1.201一个段
* 读取读写器获取标签TID列表,用于标签绑定,前端从结果中选取一个标签传入标签绑定接口
*/
+ @CrossOrigin
@GetMapping("/tId/readList")
public ReturnDTO> tIdNewReadList() {
return readWriterService.tIdNewReadList();
@@ -39,6 +47,7 @@
* USB-HID连接(HID是一种USB通信协议,无需安装驱动就能进行交互)
* 读取读写器获取TID列表,用于标签绑定,前端从结果中选取一个标签传入标签绑定接口
*/
+ @CrossOrigin
@GetMapping("/tId/mini/readList")
public ReturnDTO> tIdMiniReadList() {
return readWriterService.tIdMiniReadList();
@@ -51,6 +60,7 @@
* 二维码由样品编号/设备编号生成
* 扫描收入、扫描检完等,以及大读写器的补充(包括新建委托书和待收入中使用)
*/
+ @CrossOrigin
@GetMapping("/code/gun/readList")
public ReturnDTO> codeGunReadList() {
return readWriterService.codeGunReadList();
@@ -59,6 +69,7 @@
/**
* 有线扫码枪(二维码)和大读写器结合扫描
*/
+ @CrossOrigin
@GetMapping("/gunAndTId/readList")
public ReturnDTO> equipmentLabelReadList() throws ExecutionException, InterruptedException {
return readWriterService.gunAndTIdNewReadList();
@@ -67,6 +78,7 @@
/**
* 大读写器和小读写器识别结合的结果TID列表
*/
+ @CrossOrigin
@GetMapping("/tIdAndMini/readList")
public ReturnDTO> allTidReadList() throws ExecutionException, InterruptedException {
return readWriterService.tIdAndMiniReadList();
@@ -75,8 +87,255 @@
/**
* 大读写器和小读写器和有线扫码枪(二维码)识别结合的结果TID列表
*/
+ @CrossOrigin
@GetMapping("/tIdAndMiniAndGun/readList")
public ReturnDTO> tIdAndMiniAndGun() throws ExecutionException, InterruptedException {
return readWriterService.tIdAndMiniAndGunReadList();
}
+
+
+ public static void main(String[] args) {
+// CommonReader reader = new CommonReader("Reader1", GlobalData.ConnectType.TcpClient.name(), "192.168.1.201:9090");
+ CommonReader reader = new CommonReader("Reader1", "RS232", "COM5:115200");
+
+// CommonReader reader = new CommonReader("Reader1", "USB-HID", "");
+ reader.setProtocol(ProtocolVersion.GRP);
+ reader.setReaderProtocol(ProtocolVersion.GRP);
+ reader.setPortSum(4);
+ reader.connect(false, new BaseReader.IConnectListener() {
+ @Override
+ public void callback(boolean b) {
+ System.out.println("设备连接状态:" + b);
+ }
+ });
+
+
+ if (reader.getIsConnected() == true) {
+ System.out.println("连接成功...");
+ boolean a = reader.BuzzerControl(true, false);
+ System.out.println("**********************");
+ System.out.println("1.查询功率 2.设置功率 3.盘点标签 4.查询GPI状态 5. 开门开灯");
+ while (true) {
+ Scanner input = new Scanner(System.in);
+ System.out.println("请输入菜单编号:");
+ int bh = input.nextInt();
+ if (bh == 1) {
+ HashMap powerList = reader.reader_GetPowerList();
+ for (Byte key : powerList.keySet()) {
+ System.out.println("端口:" + key + " 功率:" + powerList.get(key));
+ }
+ } else if (bh == 2) {
+ HashMap map = new HashMap();
+ System.out.println("输入需要修改的端口:");
+ int k = input.nextInt();
+ byte k1 = (byte) k;
+ System.out.println("输入需要修改的功率:");
+ int v = input.nextByte();
+ byte v1 = (byte) v;
+ map.put(k1, v1);
+ boolean set = reader.reader_SetPowerList(map);
+ System.out.println("功率修改成功");
+ } else if (bh == 3) {
+ //添加标签读取回调
+
+ ScanTagParameter param = new ScanTagParameter();
+ param.antenna = 0x01;
+ param.isLoop = true;
+ param.tidParameter = new byte[]{0,8};
+ boolean b = reader.reader_Inventory(param, (byte) 0x01);
+// System.out.println("开始盘点:" + b);
+// boolean b1 = reader.ScanUserData(0x01,true,2);
+
+// boolean b = reader.ScanEPC(0x01,true);
+ boolean b2 = reader.ScanTID(0x01,true,8);
+// System.out.println("开始盘点:" + b1);
+// reader.OnRxdGpiTriggerState
+
+ reader.OnTagDataReceivedHandle = (gateName, tagData) -> {
+ if (tagData != null && tagData.getEPC() != null) {
+
+ String s = Util.convertByteArrayToHexString(tagData.getTID());
+// String s1 = Util.convertByteArrayToHexString(tagData.getUserData());
+// String s2 = Util.convertByteArrayToHexString(tagData.getTID());
+ System.out.println("1读取到EPC:" + s);
+// System.out.println("用户区:"+s1);
+// System.out.println("TID:"+s2);
+ }
+ };
+ new Timer().schedule(new TimerTask() {
+ @Override
+ public void run() {
+ boolean stop = reader.reader_StopInventory();
+
+ System.out.println("停止盘点:" + stop);
+
+ }
+ }, 2000);
+
+ } else if (bh == 4) {
+
+ // 查询GPI
+ HashMap gpiLis = reader.GetGpi();
+ for (Byte key : gpiLis.keySet()) {
+ System.out.println("gpi " + key + " 电平:" + gpiLis.get(key));
+ }
+ } else if (bh == 5) {
+ /**
+ * 设置单个GPIO参数
+ */
+
+ if (reader != null && reader.getIsConnected()) {
+ HashMap Gpomap = new HashMap<>();
+ Gpomap.put((byte) 1, (byte) 1);
+ Gpomap.put((byte) 2, (byte) 1);
+ if (reader.reader_SetGpo(Gpomap)) {
+ System.out.println("设置成功");
+ new Timer().schedule(new TimerTask() {
+ @Override
+ public void run() {
+ HashMap Gpomap = new HashMap<>();
+ Gpomap.put((byte) 1, (byte) 0);
+ reader.reader_SetGpo(Gpomap);
+ }
+ }, 2000);
+ } else {
+ System.out.println("设置失败");
+ }
+ do {
+ HashMap gpiLis = reader.GetGpi();
+ Byte I1 = 1;
+ Byte gpi1 = gpiLis.get(I1);
+ Byte I2 = 2;
+ Byte gpi2 = gpiLis.get(I2);
+ if (gpi1 == 0 && gpi2 == 0) {
+ //关灯
+ HashMap Gpo2map = new HashMap<>();
+ Gpo2map.put((byte) 2, (byte) 0);
+ reader.reader_SetGpo(Gpo2map);
+
+ //添加标签读取回调'
+
+ ScanTagParameter param = new ScanTagParameter();
+ param.antenna = 0x01;
+ param.isLoop = true;
+ boolean b = reader.reader_Inventory(param, (byte) 0x00);
+ System.out.println("开始盘点:" + b);
+ reader.OnTagDataReceivedHandle = (gateName, tagData) -> {
+ if (tagData != null && tagData.getEPC() != null) {
+
+ String s = Util.convertByteArrayToHexString(tagData.getEPC());
+ System.out.println("读取到EPC:" + s);
+ }
+ };
+ new Timer().schedule(new TimerTask() {
+ @Override
+ public void run() {
+ boolean stop = reader.reader_StopInventory();
+
+ System.out.println("停止盘点:" + stop);
+
+ }
+ }, 2000);
+
+ break;
+
+ } else {
+ System.out.println("查询GPI状态中");
+ }
+
+ } while (true);
+
+
+ } else {
+ System.out.println("设备未连接·");
+ }
+ } else if (bh == 6) {
+ //开锁、开灯
+ if (reader != null && reader.getIsConnected()) {
+ HashMap Gpomap = new HashMap<>();
+ Gpomap.put((byte) 1, (byte) 1);
+ Gpomap.put((byte) 2, (byte) 1);
+ if (reader.reader_SetGpo(Gpomap)) {
+ System.out.println("设置成功");
+ new Timer().schedule(new TimerTask() {
+ @Override
+ public void run() {
+ Gpomap.put((byte) 1, (byte) 0);
+ }
+ }, 2000);
+ } else {
+ System.out.println("设置失败");
+ }
+ } else {
+ System.out.println("设备未连接·");
+ }
+
+ } else if (bh == 7) {
+// ScanTagParameter param = new ScanTagParameter();
+// param.antenna = 0x01;
+// param.isLoop = true;
+// //写标签测试,感应区一次只能写一个标签,如果没有扫瞄到标签,返回 -2;如果扫描到有多个标签,返回-1;如果参数不合法,返回-3;写入成功,返回 0
+// System.out.println("请输入需要写入的EPC:");
+// String Repc = input.next();
+// int i = reader.writeEPC(param, Repc);
+// if (i == 0) {
+// System.out.println("标签写入成功");
+// } else if (i == -1) {
+// System.out.println("扫描到多张标签");
+// } else if (i == -2) {
+// System.out.println("未扫描到标签");
+// } else {
+// System.out.println("EPC输入不合格");
+// }
+// try {
+// Thread.sleep(1000 * 2);
+// } catch (InterruptedException e) {
+// e.printStackTrace();
+// }
+
+
+ } else if (bh == 8) {
+ // 读用户区
+ boolean b = reader.ScanUserData(0x01, true, 2);
+ System.out.println(b);
+
+ reader.OnTagDataReceivedHandle = (gateName, tagData) -> {
+ if (tagData != null && tagData.getUserData() != null) {
+ String s1 = Util.convertByteArrayToHexString(tagData.getUserData());
+ System.out.println("用户区:" + s1);
+ }
+ };
+ new Timer().schedule(new TimerTask() {
+ @Override
+ public void run() {
+ boolean stop = reader.reader_StopInventory();
+
+ System.out.println("停止盘点:" + stop);
+
+ }
+ }, 2000);
+
+ } else if (bh == 9) {
+ // 写用户区
+ ScanTagParameter param = new ScanTagParameter();
+ param.antenna = 0x01;
+ param.isLoop = true;
+
+ int i = reader.writTagData(MemoryBank.UserMemory, param, "00001111");
+ System.out.println("写入用户区:" + i);
+ } else if (bh == 10) {
+ // 查询盘点模式
+ reader.getEpcBasebandParameter();
+
+ } else if (bh == 11) {
+ reader.getIsConnected();
+ }
+ }
+ } else {
+ System.out.println("连接失败...");
+ }
+
+
+ }
+
}
diff --git a/src/main/java/com/casic/missiles/service/impl/BusinessReadWriterServiceImpl.java b/src/main/java/com/casic/missiles/service/impl/BusinessReadWriterServiceImpl.java
index c63c48d..9193fe7 100644
--- a/src/main/java/com/casic/missiles/service/impl/BusinessReadWriterServiceImpl.java
+++ b/src/main/java/com/casic/missiles/service/impl/BusinessReadWriterServiceImpl.java
@@ -16,7 +16,7 @@
import com.rfid.API.ProtocolVersion;
import com.rfid.API.Util;
import com.rfid.API.core.BaseReader;
-import com.rfid.ui.GlobalData;
+import com.rfid.API.entityclass.ScanTagParameter;
import gnu.io.SerialPort;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
@@ -48,21 +48,41 @@
@Override
public ReturnDTO> tIdNewReadList() {
- // TODO: 2023/3/21 实际场景若有多个读写器连接需要设计读取实现方案,将ip入库或配置文件
- CommonReader reader = new CommonReader("Reader1", GlobalData.ConnectType.TcpClient.name(), "192.168.1.201:9090");
+ //TCP连接方式(笔记本只有一个网口,内网还要连网线,该方案不可行),实际场景若有多个读写器连接需要设计读取实现方案,将ip入库或配置文件
+// CommonReader reader = new CommonReader("Reader1", GlobalData.ConnectType.TcpClient.name(), "192.168.1.201:9090");
+ CommonReader reader = null;
+ SerialPortUtil serialPortUtil = SerialPortUtil.getSerialPortUtil();
try {
-// CommonReader reader = new CommonReader("Reader1", "RS232", "COM20:115200");
-// CommonReader reader = new CommonReader("Reader1", "USB-HID", "");
- reader.setProtocol(ProtocolVersion.CRP);
- reader.setReaderProtocol(ProtocolVersion.CRP);
-// reader.setPortSum(4);//只对LRP的有效
- reader.connect(false, new BaseReader.IConnectListener() {
- @Override
- public void callback(boolean b) {
-// log.info("大读写器设备连接状态:" + b);
+ List ports = serialPortUtil.findPort();
+ log.info("RFID大读写器,当前可用串口:{}", ports);
+ if (CollectionUtils.isEmpty(ports)) {
+ return ReturnUtil.failed(BusinessExceptionEnum.NO_PROPERLY_CONNECTED.getMessage());
+ }
+ for (String port : ports) {
+ //RS232连接方式
+ CommonReader readerOne = new CommonReader("Reader1", "RS232", port + ":115200");
+// CommonReader readerOne = new CommonReader("Reader1", "RS232", port + "COM:115200");
+// CommonReader reader = new CommonReader("Reader1", "USB-HID", "");
+ if (Objects.nonNull(readerOne)) {
+ reader = readerOne;
+ //RFID厂家最新协议采用GRP
+ reader.setProtocol(ProtocolVersion.GRP);
+ reader.setReaderProtocol(ProtocolVersion.GRP);
+ reader.setPortSum(4);//只对LRP的有效
+ reader.connect(false, new BaseReader.IConnectListener() {
+ @Override
+ public void callback(boolean b) {
+ log.info("大读写器设备连接状态:" + b);
+ }
+ });
+ if (reader.getIsConnected() == false) {
+ continue;
+ }
+ break;
}
- });
+ }
if (reader.getIsConnected() == true) {
+ boolean a = reader.BuzzerControl(true, false);
Set tIds = receiveNewTIds(reader);
if (CollectionUtils.isEmpty(tIds)) {
return ReturnUtil.failed(BusinessExceptionEnum.FAIL_READ_EPC_TID.getCode(), BusinessExceptionEnum.FAIL_READ_EPC_TID.getMessage());
@@ -76,7 +96,9 @@
return ReturnUtil.failed(BusinessExceptionEnum.FAIL_READ_EPC_TID.getCode(), BusinessExceptionEnum.FAIL_READ_EPC_TID.getMessage());
} finally {
//不断开连接,读写器会每秒发送心跳
-// reader.disconnect();
+ if (Objects.nonNull(reader)) {
+ reader.disconnect();
+ }
}
}
@@ -219,13 +241,14 @@
private Set receiveNewTIds(CommonReader reader) throws InterruptedException {
Set tIds = new HashSet<>();
// boolean a = reader.BuzzerControl(true, false);//蜂鸣器协议
-// ScanTagParameter param = new ScanTagParameter();
-// param.antenna = 0x0001;
-// param.isLoop = true;//持续盘点
// boolean b = reader.reader_Inventory(param, (byte) 0x0001);
//四个天线都开填0x0F,需要4个天线都连上才行
- boolean b1 = reader.ScanTID(readWriterConfig.getAntenna(), true, 1111);
- log.info("大读写器开始盘点:" + b1);
+ ScanTagParameter param = new ScanTagParameter();
+ param.antenna = readWriterConfig.getAntenna();
+ param.isLoop = true;
+ param.tidParameter = new byte[]{0,8};
+ boolean b = reader.reader_Inventory(param, (byte) 0x01);
+ log.info("大读写器开始盘点:" + b);
reader.OnTagDataReceivedHandle = (gateName, tagData) -> {
if (tagData != null && tagData.getTID() != null) {
String tid = Util.convertByteArrayToHexString(tagData.getTID());
diff --git a/pom.xml b/pom.xml
index 033c242..9f4d69f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,9 +25,17 @@
lombok
+
+
+
+
+
+
+
+
- com.new.reader
- reader-api
+ com.readwriter
+ readwriter
1.0
diff --git a/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java b/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java
index ad9b6c8..e0ef3be 100644
--- a/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java
+++ b/src/main/java/com/casic/missiles/cotroller/BusinessReadWriterController.java
@@ -2,13 +2,20 @@
import com.casic.missiles.model.ReturnDTO;
import com.casic.missiles.service.IBusinessReadWriterService;
+import com.rfid.API.CommonReader;
+import com.rfid.API.ProtocolVersion;
+import com.rfid.API.Util;
+import com.rfid.API.core.BaseReader;
+import com.rfid.API.entityclass.MemoryBank;
+import com.rfid.API.entityclass.ScanTagParameter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import java.util.Set;
+import java.util.*;
import java.util.concurrent.ExecutionException;
/**
@@ -29,6 +36,7 @@
* TCP连接,需配置和192.168.1.201一个段
* 读取读写器获取标签TID列表,用于标签绑定,前端从结果中选取一个标签传入标签绑定接口
*/
+ @CrossOrigin
@GetMapping("/tId/readList")
public ReturnDTO> tIdNewReadList() {
return readWriterService.tIdNewReadList();
@@ -39,6 +47,7 @@
* USB-HID连接(HID是一种USB通信协议,无需安装驱动就能进行交互)
* 读取读写器获取TID列表,用于标签绑定,前端从结果中选取一个标签传入标签绑定接口
*/
+ @CrossOrigin
@GetMapping("/tId/mini/readList")
public ReturnDTO> tIdMiniReadList() {
return readWriterService.tIdMiniReadList();
@@ -51,6 +60,7 @@
* 二维码由样品编号/设备编号生成
* 扫描收入、扫描检完等,以及大读写器的补充(包括新建委托书和待收入中使用)
*/
+ @CrossOrigin
@GetMapping("/code/gun/readList")
public ReturnDTO> codeGunReadList() {
return readWriterService.codeGunReadList();
@@ -59,6 +69,7 @@
/**
* 有线扫码枪(二维码)和大读写器结合扫描
*/
+ @CrossOrigin
@GetMapping("/gunAndTId/readList")
public ReturnDTO> equipmentLabelReadList() throws ExecutionException, InterruptedException {
return readWriterService.gunAndTIdNewReadList();
@@ -67,6 +78,7 @@
/**
* 大读写器和小读写器识别结合的结果TID列表
*/
+ @CrossOrigin
@GetMapping("/tIdAndMini/readList")
public ReturnDTO> allTidReadList() throws ExecutionException, InterruptedException {
return readWriterService.tIdAndMiniReadList();
@@ -75,8 +87,255 @@
/**
* 大读写器和小读写器和有线扫码枪(二维码)识别结合的结果TID列表
*/
+ @CrossOrigin
@GetMapping("/tIdAndMiniAndGun/readList")
public ReturnDTO> tIdAndMiniAndGun() throws ExecutionException, InterruptedException {
return readWriterService.tIdAndMiniAndGunReadList();
}
+
+
+ public static void main(String[] args) {
+// CommonReader reader = new CommonReader("Reader1", GlobalData.ConnectType.TcpClient.name(), "192.168.1.201:9090");
+ CommonReader reader = new CommonReader("Reader1", "RS232", "COM5:115200");
+
+// CommonReader reader = new CommonReader("Reader1", "USB-HID", "");
+ reader.setProtocol(ProtocolVersion.GRP);
+ reader.setReaderProtocol(ProtocolVersion.GRP);
+ reader.setPortSum(4);
+ reader.connect(false, new BaseReader.IConnectListener() {
+ @Override
+ public void callback(boolean b) {
+ System.out.println("设备连接状态:" + b);
+ }
+ });
+
+
+ if (reader.getIsConnected() == true) {
+ System.out.println("连接成功...");
+ boolean a = reader.BuzzerControl(true, false);
+ System.out.println("**********************");
+ System.out.println("1.查询功率 2.设置功率 3.盘点标签 4.查询GPI状态 5. 开门开灯");
+ while (true) {
+ Scanner input = new Scanner(System.in);
+ System.out.println("请输入菜单编号:");
+ int bh = input.nextInt();
+ if (bh == 1) {
+ HashMap powerList = reader.reader_GetPowerList();
+ for (Byte key : powerList.keySet()) {
+ System.out.println("端口:" + key + " 功率:" + powerList.get(key));
+ }
+ } else if (bh == 2) {
+ HashMap map = new HashMap();
+ System.out.println("输入需要修改的端口:");
+ int k = input.nextInt();
+ byte k1 = (byte) k;
+ System.out.println("输入需要修改的功率:");
+ int v = input.nextByte();
+ byte v1 = (byte) v;
+ map.put(k1, v1);
+ boolean set = reader.reader_SetPowerList(map);
+ System.out.println("功率修改成功");
+ } else if (bh == 3) {
+ //添加标签读取回调
+
+ ScanTagParameter param = new ScanTagParameter();
+ param.antenna = 0x01;
+ param.isLoop = true;
+ param.tidParameter = new byte[]{0,8};
+ boolean b = reader.reader_Inventory(param, (byte) 0x01);
+// System.out.println("开始盘点:" + b);
+// boolean b1 = reader.ScanUserData(0x01,true,2);
+
+// boolean b = reader.ScanEPC(0x01,true);
+ boolean b2 = reader.ScanTID(0x01,true,8);
+// System.out.println("开始盘点:" + b1);
+// reader.OnRxdGpiTriggerState
+
+ reader.OnTagDataReceivedHandle = (gateName, tagData) -> {
+ if (tagData != null && tagData.getEPC() != null) {
+
+ String s = Util.convertByteArrayToHexString(tagData.getTID());
+// String s1 = Util.convertByteArrayToHexString(tagData.getUserData());
+// String s2 = Util.convertByteArrayToHexString(tagData.getTID());
+ System.out.println("1读取到EPC:" + s);
+// System.out.println("用户区:"+s1);
+// System.out.println("TID:"+s2);
+ }
+ };
+ new Timer().schedule(new TimerTask() {
+ @Override
+ public void run() {
+ boolean stop = reader.reader_StopInventory();
+
+ System.out.println("停止盘点:" + stop);
+
+ }
+ }, 2000);
+
+ } else if (bh == 4) {
+
+ // 查询GPI
+ HashMap gpiLis = reader.GetGpi();
+ for (Byte key : gpiLis.keySet()) {
+ System.out.println("gpi " + key + " 电平:" + gpiLis.get(key));
+ }
+ } else if (bh == 5) {
+ /**
+ * 设置单个GPIO参数
+ */
+
+ if (reader != null && reader.getIsConnected()) {
+ HashMap Gpomap = new HashMap<>();
+ Gpomap.put((byte) 1, (byte) 1);
+ Gpomap.put((byte) 2, (byte) 1);
+ if (reader.reader_SetGpo(Gpomap)) {
+ System.out.println("设置成功");
+ new Timer().schedule(new TimerTask() {
+ @Override
+ public void run() {
+ HashMap Gpomap = new HashMap<>();
+ Gpomap.put((byte) 1, (byte) 0);
+ reader.reader_SetGpo(Gpomap);
+ }
+ }, 2000);
+ } else {
+ System.out.println("设置失败");
+ }
+ do {
+ HashMap gpiLis = reader.GetGpi();
+ Byte I1 = 1;
+ Byte gpi1 = gpiLis.get(I1);
+ Byte I2 = 2;
+ Byte gpi2 = gpiLis.get(I2);
+ if (gpi1 == 0 && gpi2 == 0) {
+ //关灯
+ HashMap Gpo2map = new HashMap<>();
+ Gpo2map.put((byte) 2, (byte) 0);
+ reader.reader_SetGpo(Gpo2map);
+
+ //添加标签读取回调'
+
+ ScanTagParameter param = new ScanTagParameter();
+ param.antenna = 0x01;
+ param.isLoop = true;
+ boolean b = reader.reader_Inventory(param, (byte) 0x00);
+ System.out.println("开始盘点:" + b);
+ reader.OnTagDataReceivedHandle = (gateName, tagData) -> {
+ if (tagData != null && tagData.getEPC() != null) {
+
+ String s = Util.convertByteArrayToHexString(tagData.getEPC());
+ System.out.println("读取到EPC:" + s);
+ }
+ };
+ new Timer().schedule(new TimerTask() {
+ @Override
+ public void run() {
+ boolean stop = reader.reader_StopInventory();
+
+ System.out.println("停止盘点:" + stop);
+
+ }
+ }, 2000);
+
+ break;
+
+ } else {
+ System.out.println("查询GPI状态中");
+ }
+
+ } while (true);
+
+
+ } else {
+ System.out.println("设备未连接·");
+ }
+ } else if (bh == 6) {
+ //开锁、开灯
+ if (reader != null && reader.getIsConnected()) {
+ HashMap Gpomap = new HashMap<>();
+ Gpomap.put((byte) 1, (byte) 1);
+ Gpomap.put((byte) 2, (byte) 1);
+ if (reader.reader_SetGpo(Gpomap)) {
+ System.out.println("设置成功");
+ new Timer().schedule(new TimerTask() {
+ @Override
+ public void run() {
+ Gpomap.put((byte) 1, (byte) 0);
+ }
+ }, 2000);
+ } else {
+ System.out.println("设置失败");
+ }
+ } else {
+ System.out.println("设备未连接·");
+ }
+
+ } else if (bh == 7) {
+// ScanTagParameter param = new ScanTagParameter();
+// param.antenna = 0x01;
+// param.isLoop = true;
+// //写标签测试,感应区一次只能写一个标签,如果没有扫瞄到标签,返回 -2;如果扫描到有多个标签,返回-1;如果参数不合法,返回-3;写入成功,返回 0
+// System.out.println("请输入需要写入的EPC:");
+// String Repc = input.next();
+// int i = reader.writeEPC(param, Repc);
+// if (i == 0) {
+// System.out.println("标签写入成功");
+// } else if (i == -1) {
+// System.out.println("扫描到多张标签");
+// } else if (i == -2) {
+// System.out.println("未扫描到标签");
+// } else {
+// System.out.println("EPC输入不合格");
+// }
+// try {
+// Thread.sleep(1000 * 2);
+// } catch (InterruptedException e) {
+// e.printStackTrace();
+// }
+
+
+ } else if (bh == 8) {
+ // 读用户区
+ boolean b = reader.ScanUserData(0x01, true, 2);
+ System.out.println(b);
+
+ reader.OnTagDataReceivedHandle = (gateName, tagData) -> {
+ if (tagData != null && tagData.getUserData() != null) {
+ String s1 = Util.convertByteArrayToHexString(tagData.getUserData());
+ System.out.println("用户区:" + s1);
+ }
+ };
+ new Timer().schedule(new TimerTask() {
+ @Override
+ public void run() {
+ boolean stop = reader.reader_StopInventory();
+
+ System.out.println("停止盘点:" + stop);
+
+ }
+ }, 2000);
+
+ } else if (bh == 9) {
+ // 写用户区
+ ScanTagParameter param = new ScanTagParameter();
+ param.antenna = 0x01;
+ param.isLoop = true;
+
+ int i = reader.writTagData(MemoryBank.UserMemory, param, "00001111");
+ System.out.println("写入用户区:" + i);
+ } else if (bh == 10) {
+ // 查询盘点模式
+ reader.getEpcBasebandParameter();
+
+ } else if (bh == 11) {
+ reader.getIsConnected();
+ }
+ }
+ } else {
+ System.out.println("连接失败...");
+ }
+
+
+ }
+
}
diff --git a/src/main/java/com/casic/missiles/service/impl/BusinessReadWriterServiceImpl.java b/src/main/java/com/casic/missiles/service/impl/BusinessReadWriterServiceImpl.java
index c63c48d..9193fe7 100644
--- a/src/main/java/com/casic/missiles/service/impl/BusinessReadWriterServiceImpl.java
+++ b/src/main/java/com/casic/missiles/service/impl/BusinessReadWriterServiceImpl.java
@@ -16,7 +16,7 @@
import com.rfid.API.ProtocolVersion;
import com.rfid.API.Util;
import com.rfid.API.core.BaseReader;
-import com.rfid.ui.GlobalData;
+import com.rfid.API.entityclass.ScanTagParameter;
import gnu.io.SerialPort;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
@@ -48,21 +48,41 @@
@Override
public ReturnDTO> tIdNewReadList() {
- // TODO: 2023/3/21 实际场景若有多个读写器连接需要设计读取实现方案,将ip入库或配置文件
- CommonReader reader = new CommonReader("Reader1", GlobalData.ConnectType.TcpClient.name(), "192.168.1.201:9090");
+ //TCP连接方式(笔记本只有一个网口,内网还要连网线,该方案不可行),实际场景若有多个读写器连接需要设计读取实现方案,将ip入库或配置文件
+// CommonReader reader = new CommonReader("Reader1", GlobalData.ConnectType.TcpClient.name(), "192.168.1.201:9090");
+ CommonReader reader = null;
+ SerialPortUtil serialPortUtil = SerialPortUtil.getSerialPortUtil();
try {
-// CommonReader reader = new CommonReader("Reader1", "RS232", "COM20:115200");
-// CommonReader reader = new CommonReader("Reader1", "USB-HID", "");
- reader.setProtocol(ProtocolVersion.CRP);
- reader.setReaderProtocol(ProtocolVersion.CRP);
-// reader.setPortSum(4);//只对LRP的有效
- reader.connect(false, new BaseReader.IConnectListener() {
- @Override
- public void callback(boolean b) {
-// log.info("大读写器设备连接状态:" + b);
+ List ports = serialPortUtil.findPort();
+ log.info("RFID大读写器,当前可用串口:{}", ports);
+ if (CollectionUtils.isEmpty(ports)) {
+ return ReturnUtil.failed(BusinessExceptionEnum.NO_PROPERLY_CONNECTED.getMessage());
+ }
+ for (String port : ports) {
+ //RS232连接方式
+ CommonReader readerOne = new CommonReader("Reader1", "RS232", port + ":115200");
+// CommonReader readerOne = new CommonReader("Reader1", "RS232", port + "COM:115200");
+// CommonReader reader = new CommonReader("Reader1", "USB-HID", "");
+ if (Objects.nonNull(readerOne)) {
+ reader = readerOne;
+ //RFID厂家最新协议采用GRP
+ reader.setProtocol(ProtocolVersion.GRP);
+ reader.setReaderProtocol(ProtocolVersion.GRP);
+ reader.setPortSum(4);//只对LRP的有效
+ reader.connect(false, new BaseReader.IConnectListener() {
+ @Override
+ public void callback(boolean b) {
+ log.info("大读写器设备连接状态:" + b);
+ }
+ });
+ if (reader.getIsConnected() == false) {
+ continue;
+ }
+ break;
}
- });
+ }
if (reader.getIsConnected() == true) {
+ boolean a = reader.BuzzerControl(true, false);
Set tIds = receiveNewTIds(reader);
if (CollectionUtils.isEmpty(tIds)) {
return ReturnUtil.failed(BusinessExceptionEnum.FAIL_READ_EPC_TID.getCode(), BusinessExceptionEnum.FAIL_READ_EPC_TID.getMessage());
@@ -76,7 +96,9 @@
return ReturnUtil.failed(BusinessExceptionEnum.FAIL_READ_EPC_TID.getCode(), BusinessExceptionEnum.FAIL_READ_EPC_TID.getMessage());
} finally {
//不断开连接,读写器会每秒发送心跳
-// reader.disconnect();
+ if (Objects.nonNull(reader)) {
+ reader.disconnect();
+ }
}
}
@@ -219,13 +241,14 @@
private Set receiveNewTIds(CommonReader reader) throws InterruptedException {
Set tIds = new HashSet<>();
// boolean a = reader.BuzzerControl(true, false);//蜂鸣器协议
-// ScanTagParameter param = new ScanTagParameter();
-// param.antenna = 0x0001;
-// param.isLoop = true;//持续盘点
// boolean b = reader.reader_Inventory(param, (byte) 0x0001);
//四个天线都开填0x0F,需要4个天线都连上才行
- boolean b1 = reader.ScanTID(readWriterConfig.getAntenna(), true, 1111);
- log.info("大读写器开始盘点:" + b1);
+ ScanTagParameter param = new ScanTagParameter();
+ param.antenna = readWriterConfig.getAntenna();
+ param.isLoop = true;
+ param.tidParameter = new byte[]{0,8};
+ boolean b = reader.reader_Inventory(param, (byte) 0x01);
+ log.info("大读写器开始盘点:" + b);
reader.OnTagDataReceivedHandle = (gateName, tagData) -> {
if (tagData != null && tagData.getTID() != null) {
String tid = Util.convertByteArrayToHexString(tagData.getTID());
diff --git a/src/main/resources/config/application.yml b/src/main/resources/config/application.yml
index 803f3d7..a5090db 100644
--- a/src/main/resources/config/application.yml
+++ b/src/main/resources/config/application.yml
@@ -11,7 +11,11 @@
casic:
readwriter:
- antenna: 0x0001
- readDuration: 3
- miniReadDuration: 3
+# 开启大读写器天线个数,0x01一个,0x0F全开,四个天线都开需要4个天线都连上才行
+ antenna: 0x01
+# 大读写器读取时长(秒)
+ readDuration: 5
+# 小读写器读取时长(秒)
+ miniReadDuration: 5
+# 有线扫码枪监听器接收数据时长(秒)
receiveDuration: 10
\ No newline at end of file