本指南将基于Java Spring Boot后端与Vue3前端,搭建一套具备电子标签(RFID)录入、绑定及档案盘点功能的数字档案馆系统。硬件层面将以超高频(UHF)RFID读写器为例,通过串口通信进行集成。请确保你的开发环境已安装JDK 17、Node.js 16+及MySQL 8.0数据库。
首先在MySQL中执行以下SQL,建立数据库表结构。我们需要两张表:t_archive(存储档案基础信息)和t_rfid_log(存储标签扫描流水)。
```sql CREATE DATABASE digital_archive_db DEFAULT CHARSET utf8mb4; USE digital_archive_db; -- 档案基础表 CREATE TABLE t_archive ( id BIGINT AUTO_INCREMENT PRIMARY KEY, archive_code VARCHAR(50) NOT NULL COMMENT '档案编号', archive_name VARCHAR(200) NOT NULL COMMENT '档案题名', rfid_epc VARCHAR(100) UNIQUE COMMENT '绑定的RFID标签EPC', location VARCHAR(100) COMMENT '存放位置', create_time DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 标签扫描流水表 CREATE TABLE t_rfid_log ( id BIGINT AUTO_INCREMENT PRIMARY KEY, epc VARCHAR(100) NOT NULL COMMENT '扫描到的EPC', scan_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '扫描时间', reader_id VARCHAR(50) COMMENT '读写器ID' ); ```后端负责提供档案管理的RESTful API,并启动一个后台线程持续监听RFID读写器的串口数据,实现实时盘点。
创建Maven项目,在pom.xml中引入必要的依赖。特别注意引入jssc用于串口通信,这是连接RFID读写器的核心库。
在src/main/resources/application.yml中配置数据库连接参数。请根据实际情况修改username和password。
创建Archive实体类和对应的ArchiveRepository。
这是系统的核心部分。该服务在启动时打开指定串口,循环读取数据流。当读写器感应到标签时,会发送EPC码,我们需要解析十六进制数据并入库。
```java package com.example.archive.service; import com.example.archive.entity.Archive; import com.example.archive.repository.ArchiveRepository; import jssc.SerialPort; import jssc.SerialPortEvent; import jssc.SerialPortEventListener; import jssc.SerialPortException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Service; import jakarta.annotation.PreDestroy; @Service public class RfidListenerService implements CommandLineRunner { @Value("${rfid.port-name}") private String portName; @Value("${rfid.baud-rate}") private int baudRate; @Autowired private ArchiveRepository archiveRepository; private SerialPort serialPort; @Override public void run(String... args) { // 系统启动后自动执行 startListening(); } private void startListening() { serialPort = new SerialPort(portName); try { serialPort.openPort(); serialPort.setParams(baudRate, 8, 1, 0); serialPort.addEventListener(new SerialPortEventListener() { @Override public void serialEvent(SerialPortEvent event) { if (event.isRXCHAR() && event.getEventValue() > 0) { try { byte[] receivedData = serialPort.readBytes(event.getEventValue()); parseAndSaveEpc(receivedData); } catch (SerialPortException e) { e.printStackTrace(); } } } }); System.out.println("RFID监听服务已启动,端口: " + portName); } catch (SerialPortException e) { System.err.println("无法打开串口 " + portName + ",请检查硬件连接。"); } } private void parseAndSaveEpc(byte[] data) { // 注意:此处逻辑需根据具体读写器协议调整 // 假设数据包含EPC的Hex字符串,此处简化演示将字节数组转为Hex StringBuilder hexString = new StringBuilder(); for (byte b : data) { hexString.append(String.format("%02X", b)); } String epc = hexString.toString(); System.out.println("检测到EPC: " + epc); // 此处省略将EPC写入 t_rfid_log 表的代码,实际开发请插入 Log 实体 // 实际业务中,可以通过WebSocket推送到前端显示档案详情 Archive archive = archiveRepository.findByRfidEpc(epc).orElse(null); if (archive != null) { System.out.println("识别档案: " + archive.getArchiveName()); } } @PreDestroy public void stopListening() { if (serialPort != null && serialPort.isOpened()) { try { serialPort.closePort(); } catch (SerialPortException e) { e.printStackTrace(); } } } } ```提供简单的ArchiveController用于前端录入档案和绑定标签。

前端使用Vue 3和Element Plus构建,提供档案录入表单和实时盘点展示界面。
在终端执行以下命令创建Vue项目并安装依赖。
```bash npm create vue@latest archive-frontend cd archive-frontend npm install npm install element-plus axios ```修改src/App.vue,编写完整的业务逻辑。这里我们直接在主组件中实现录入和列表展示。
在项目根目录创建vite.config.js(如果未自动生成),配置代理解决跨域问题。
代码编写完毕,现在启动系统进行验证。
在IDEA中运行ArchiveApplication主类,或使用Maven命令打包运行。观察控制台输出,确认看到“RFID监听服务已启动”字样。如果报错提示找不到端口,请检查USB读写器是否插入并修改application.yml中的端口号。
在终端进入前端目录,执行:
```bash npm run dev ```浏览器访问控制台显示的Local地址(通常是 http://localhost:5173)。