网站首页/ 信息中心/ 技术指南/

基于RFID电子标签的数字档案馆系统搭建实操指南

发布时间:2026年06月07日 18:16:47 浏览量:0

一、 系统架构与环境准备

本指南将基于Java Spring Boot后端与Vue3前端,搭建一套具备电子标签(RFID)录入、绑定及档案盘点功能的数字档案馆系统。硬件层面将以超高频(UHF)RFID读写器为例,通过串口通信进行集成。请确保你的开发环境已安装JDK 17、Node.js 16+及MySQL 8.0数据库。

1.1 数据库初始化

首先在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' ); ```

二、 后端服务开发(Spring Boot)

后端负责提供档案管理的RESTful API,并启动一个后台线程持续监听RFID读写器的串口数据,实现实时盘点。

2.1 项目依赖配置

创建Maven项目,在pom.xml中引入必要的依赖。特别注意引入jssc用于串口通信,这是连接RFID读写器的核心库。

```xml org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-data-jpa com.mysql mysql-connector-j runtime org.scream3r jssc 2.8.0 org.projectlombok lombok true ```

2.2 数据库连接配置

src/main/resources/application.yml中配置数据库连接参数。请根据实际情况修改usernamepassword

```yaml server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/digital_archive_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver jpa: hibernate: ddl-auto: update show-sql: true RFID串口配置 rfid: port-name: COM3 Windows下通常是COM3,Linux下是/dev/ttyUSB0 baud-rate: 115200 超高频RFID常用波特率 ```

2.3 核心实体类与Repository

创建Archive实体类和对应的ArchiveRepository

```java package com.example.archive.entity; import jakarta.persistence.; import lombok.Data; @Data @Entity @Table(name = "t_archive") public class Archive { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String archiveCode; private String archiveName; @Column(unique = true) private String rfidEpc; private String location; } ``` ```java package com.example.archive.repository; import com.example.archive.entity.Archive; import org.springframework.data.jpa.repository.JpaRepository; import java.util.Optional; public interface ArchiveRepository extends JpaRepository { Optional findByRfidEpc(String epc); } ```

2.4 RFID串口监听服务

这是系统的核心部分。该服务在启动时打开指定串口,循环读取数据流。当读写器感应到标签时,会发送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(); } } } } ```

2.5 档案管理接口

提供简单的ArchiveController用于前端录入档案和绑定标签。

```java package com.example.archive.controller; import com.example.archive.entity.Archive; import com.example.archive.repository.ArchiveRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.; import java.util.List; @RestController @RequestMapping("/api/archives") @CrossOrigin public class ArchiveController { @Autowired private ArchiveRepository repository; @PostMapping public Archive addArchive(@RequestBody Archive archive) { return repository.save(archive); } @GetMapping public List list() { return repository.findAll(); } // 手动绑定标签接口 @PostMapping("/bind") public Archive bindTag(@RequestParam Long id, @RequestParam String epc) { Archive archive = repository.findById(id).orElseThrow(); archive.setRfidEpc(epc); return repository.save(archive); } } ```

三、 前端界面开发(Vue 3)

基于RFID电子标签的数字档案馆系统搭建实操指南

前端使用Vue 3和Element Plus构建,提供档案录入表单和实时盘点展示界面。

3.1 项目初始化

在终端执行以下命令创建Vue项目并安装依赖。

```bash npm create vue@latest archive-frontend cd archive-frontend npm install npm install element-plus axios ```

3.2 档案录入与绑定页面

修改src/App.vue,编写完整的业务逻辑。这里我们直接在主组件中实现录入和列表展示。

```html ```

3.3 配置后端接口代理

在项目根目录创建vite.config.js(如果未自动生成),配置代理解决跨域问题。

```javascript import { fileURLToPath, URL } from 'node:url' import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' export default defineConfig({ plugins: [vue()], resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)) } }, server: { proxy: { '/api': { target: 'http://localhost:8080', changeOrigin: true } } } }) ```

四、 系统运行与实操测试

代码编写完毕,现在启动系统进行验证。

4.1 启动后端服务

在IDEA中运行ArchiveApplication主类,或使用Maven命令打包运行。观察控制台输出,确认看到“RFID监听服务已启动”字样。如果报错提示找不到端口,请检查USB读写器是否插入并修改application.yml中的端口号。

4.2 启动前端服务

在终端进入前端目录,执行:

```bash npm run dev ```

浏览器访问控制台显示的Local地址(通常是 http://localhost:5173)。

4.3 实操流程验证

  1. 录入档案: 在前端页面输入档案编号“DOC-001”,题名“2023年度财务报表”,点击提交。此时列表显示“未绑定”。
  2. 获取EPC: 拿起一个超高频RFID电子标签,使用手持机或连接在电脑上的读写器读取其EPC码(假设读取到的EPC为“E200341201234567890”)。如果使用串口读写器,将标签靠近读写器,后端控制台应打印出检测到的EPC Hex数据。
  3. 绑定标签: 将读取到的EPC码填入前端表单的“RFID EPC”输入框,再次点击提交(或调用绑定接口)。列表状态应变为绿色“已绑定”。
  4. 智能盘点验证: 再次将标签靠近连接后端的读写器。后端控制台应解析出EPC,并在数据库中查询到对应的“2023年度财务报表”档案信息,实现档案实物的自动识别。
数字档案馆系统学籍数字档案馆系统实用操作指南
数字档案馆系统学籍数字档案馆系统实用操作指南
上个月我闺蜜评中级职称,需要提供当年的本科学籍档案证明。她跑了三趟原学校档案馆,人家说十年前的纸质档案,早就挪去郊外的仓库了。要调档得提前一周预约,还得本人签字才能调,给她急得连着两晚睡不着。后来才知...
2026年06月07日 18:16:47
微信咨询
电话联系
QQ客服
微信咨询一对一服务
服务热线: 028-8744 4417
QQ客服: 2305721818