综合档案管理系统寄存服务技术架构与实操指南
一、 系统核心目标与架构选型
本指南旨在构建一个具备档案实体寄存管理能力的综合档案管理系统。核心目标是实现档案从入库、上架、盘点、借阅到归还的全生命周期数字化跟踪,确保实体档案位置精准可控。系统采用B/S架构,便于多部门协同。技术栈选择成熟、文档齐全的开源方案,确保零成本落地。
技术栈清单:
- 后端: Spring Boot 2.7.x (Java框架,内嵌Tomcat,部署简单)
- 数据库: MySQL 8.0 (关系型数据库,存储业务数据)
- 前端: Vue.js 3 + Element Plus (前后端分离,界面友好)
- 条码/二维码: ZXing库 (生成与识别档案唯一标识码)
- 服务器: 最低配置2核4G的Linux服务器 (CentOS 7.9或Ubuntu 20.04)
二、 环境准备与基础框架搭建
1. 服务器与数据库初始化
在Linux服务器上执行以下命令,安装必备软件。
安装MySQL数据库:
CentOS
sudo yum install -y mysql-server
sudo systemctl start mysqld
sudo systemctl enable mysqld
Ubuntu
sudo apt update
sudo apt install -y mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql
执行安全初始化并创建数据库:
sudo mysql_secure_installation
根据提示设置root密码,并移除匿名用户等。
mysql -u root -p
输入密码后,执行SQL
CREATE DATABASE archive_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'archive_user'@'%' IDENTIFIED BY 'YourStrongPassword123!';
GRANT ALL PRIVILEGES ON archive_db. TO 'archive_user'@'%';
FLUSH PRIVILEGES;
EXIT;
2. 后端Spring Boot项目初始化
使用Spring Initializr快速生成项目。访问 https://start.spring.io/,选择以下配置:
- Project: Maven Project
- Language: Java
- Spring Boot: 2.7.x
- Dependencies: Spring Web, Spring Data JPA, MySQL Driver, Lombok
点击Generate下载项目压缩包,解压后用IDE(如IntelliJ IDEA)打开。
在src/main/resources/application.yml中配置数据库连接:
spring:
datasource:
url: jdbc:mysql://你的服务器IP:3306/archive_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: archive_user
password: YourStrongPassword123!
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL8Dialect
server:
port: 8080
三、 核心数据模型与实体设计
系统围绕“档案盒”和“档案架”两个核心实体设计。在src/main/java/com/archive/entity目录下创建JPA实体类。
// ArchiveBox.java 档案盒实体
import javax.persistence.;
import java.util.Date;
@Entity
@Table(name = "archive_box")
@Data // Lombok注解,自动生成getter/setter
public class ArchiveBox {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true, nullable = false)
private String boxCode; // 档案盒唯一编号,将生成二维码
private String boxName; // 档案盒名称
private String department; // 所属部门
private String year; // 年份
private String secretLevel; // 密级
private String description; // 描述
@Temporal(TemporalType.TIMESTAMP)
private Date createTime; // 入库时间
private String locationCode; // 当前所在位置编码,关联ArchiveShelf
}
// ArchiveShelf.java 档案架实体
@Entity
@Table(name = "archive_shelf")
@Data
public class ArchiveShelf {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true, nullable = false)
private String shelfCode; // 架位编号,如"A-01-01"
private String area; // 所属区域,如"A区"
private Integer rowNum; // 行号
private Integer columnNum; // 列号
private Integer capacity; // 容量(可放盒数)
private Integer used; // 已用数量
}
四、 核心业务功能实现
1. 档案盒唯一标识码生成
使用ZXing库生成包含boxCode的二维码图片,贴于档案盒上。在pom.xml中添加依赖:
com.google.zxing
core
3.5.1
com.google.zxing
javase
3.5.1
创建工具类QRCodeUtil.java:
import com.google.zxing.BarcodeFormat;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import java.nio.file.Paths;
public class QRCodeUtil {
public static void generateQRCode(String text, String filePath, int width, int height) throws Exception {
QRCodeWriter qrCodeWriter = new QRCodeWriter();
BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
MatrixToImageWriter.writeToPath(bitMatrix, "PNG", Paths.get(filePath));
}
}
在档案盒入库的业务逻辑中调用:
// 生成规则:部门缩写+年份+5位序列号,如"HR202300001"
String boxCode = deptPrefix + year + String.format("%05d", sequence);
String qrPath = "/opt/archive/qrcode/" + boxCode + ".png";
QRCodeUtil.generateQRCode(boxCode, qrPath, 300, 300);
// 将boxCode和qrPath保存到ArchiveBox实体中
2. 档案上架与位置绑定
创建ArchiveBoxService.java,实现核心的“上架”方法:
@Service
public class ArchiveBoxService {
@Autowired
private ArchiveBoxRepository boxRepo;
@Autowired
private ArchiveShelfRepository shelfRepo;
@Transactional
public boolean putOnShelf(Long boxId, String shelfCode) {
ArchiveBox box = boxRepo.findById(boxId).orElseThrow();
ArchiveShelf shelf = shelfRepo.findByShelfCode(shelfCode);
if (shelf == null) {
throw new RuntimeException("架位不存在");
}
if (shelf.getUsed() >= shelf.getCapacity()) {
throw new RuntimeException("该架位已满");
}
// 更新档案盒位置
box.setLocationCode(shelfCode);
boxRepo.save(box);
// 更新架位已用数量
shelf.setUsed(shelf.getUsed() + 1);
shelfRepo.save(shelf);
return true;
}
}
3. 档案盘点与检索
创建ArchiveBoxController.java,提供RESTful API供前端调用。
@RestController
@RequestMapping("/api/box")
public class ArchiveBoxController {
@Autowired
private ArchiveBoxService boxService;
// 根据二维码扫描到的编号查询档案详情
@GetMapping("/detail/{boxCode}")
public ArchiveBox getDetail(@PathVariable String boxCode) {
return boxService.findByBoxCode(boxCode);
}
// 根据架位编号列出该架所有档案
@GetMapping("/onshelf/{shelfCode}")
public List listByShelf(@PathVariable String shelfCode) {
return boxService.findAllByLocationCode(shelfCode);
}
// 综合检索(部门、年份、密级等)
@GetMapping("/search")
public List search(ArchiveBoxQuery query) {
return boxService.search(query);
}
}
五、 前端界面与操作流程
1. 档案入库界面
使用Vue.js + Element Plus创建表单。核心操作是填写档案盒基本信息后,系统自动生成唯一编号和二维码,并提供下载打印。
提交并生成二维码
2. 扫码上架与盘点
准备一台普通安卓手机,安装任何一款免费的二维码扫描APP。操作流程:
- 步骤1:在系统前端点击“扫码上架”功能,页面进入等待扫描状态。
- 步骤2:用手机扫描档案盒上的二维码,获取
boxCode。 - 步骤3:手动在电脑页面输入框内输入扫描得到的编号(或使用蓝牙扫码枪直接传入)。
- 步骤4:系统自动带出档案信息,在下拉框中选择目标架位(如“A-01-01”),点击“确认上架”。
- 步骤5:系统完成位置绑定,并更新架位占用状态。
盘点时,在“架位管理”页面点击具体架位,即可列出该架所有档案盒清单,与实物逐一核对。
六、 系统部署与上线
1. 后端应用打包与运行
在后端项目根目录下执行Maven打包命令:
mvn clean package -DskipTests
将生成的target/archive-system-0.0.1-SNAPSHOT.jar上传至服务器。在服务器上使用nohup命令启动:
nohup java -jar archive-system-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod > app.log 2>&1 &
2. 前端应用构建与部署
在前端项目根目录下安装依赖并构建:
npm install
npm run build
将dist目录下的所有文件,复制到Nginx或Apache的静态资源目录下。配置Nginx反向代理,将API请求转发到后端Spring Boot应用(端口8080)。
Nginx配置示例片段
server {
listen 80;
server_name your-domain.com; 或服务器IP
location / {
root /path/to/frontend/dist;
index index.html;
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
重启Nginx服务后,通过浏览器访问服务器IP或域名,即可开始使用综合档案管理系统。