1. 项目背景与需求分析
档案管理一直是企事业单位日常运营中的重要环节。传统纸质档案管理方式存在诸多痛点:物理存储空间占用大、检索效率低下、易受环境因素损坏、共享流转困难等。我曾参与过某大型企业的档案数字化改造项目,亲眼目睹了员工为了找一份三年前的合同档案,需要翻遍十几个文件柜的窘境。这种低效的管理模式在数字化时代已经显得格格不入。
随着Web技术的发展,前后端分离架构逐渐成为企业级应用开发的主流选择。这种架构模式将前端展示层与后端业务逻辑彻底解耦,让专业的人做专业的事——前端工程师专注于用户体验和交互设计,后端工程师则聚焦于业务逻辑和数据处理。在我经手的多个档案系统项目中,采用前后端分离架构后,开发效率平均提升40%以上,系统响应速度提升60%,且更易于后续的功能扩展。
本系统正是基于这样的背景设计开发的,主要解决以下几个核心问题:
- 档案数字化存储:将纸质档案电子化,支持PDF、Word、Excel等多种格式上传存储
- 智能检索:支持多条件组合查询,包括档案名称、类型、时间范围等维度
- 权限管控:细粒度的权限管理体系,确保档案访问安全
- 操作追溯:完整的操作日志记录,满足审计要求
- 高可用性:支持高并发访问,保证系统稳定运行
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术选型与架构设计
2.1 后端技术栈
选择Spring Boot作为后端框架主要基于以下几个考量:
- 快速启动:内嵌Tomcat服务器,无需单独部署WAR包
- 自动配置:通过starter依赖简化了各种中间件的集成
- 生产就绪:自带健康检查、指标监控等企业级特性
- 生态丰富:与MyBatis、Redis等常用组件无缝集成
数据库选用MySQL 8.0版本,主要看中其:
- 完善的ACID事务支持
- 良好的JSON数据类型处理能力
- 优秀的读写性能表现
- 成熟的备份恢复机制
在数据访问层,我们采用MyBatis-Plus而非原生MyBatis,主要因为它:
- 提供了通用的CRUD接口,减少30%以上的样板代码
- 强大的条件构造器,简化复杂查询编写
- 支持Lambda表达式,避免硬编码字段名
- 内置分页插件,轻松实现分页查询
2.2 前端技术栈
Vue.js作为前端框架的优势在于:
- 渐进式框架:可以从小型功能逐步扩展到完整SPA应用
- 响应式编程:数据驱动视图,自动处理DOM更新
- 组件化开发:提高代码复用率和可维护性
- 丰富的生态:Vue Router、Vuex、Axios等配套工具完善
UI组件库选用Element UI,因为它:
- 提供了丰富的企业级UI组件
- 完善的文档和社区支持
- 高度可定制的主题系统
- 良好的TypeScript支持
2.3 系统架构设计
整体采用经典的三层架构:
code复制表示层(Vue.js) ←HTTP→ 业务逻辑层(Spring Boot) ←JDBC→ 数据访问层(MySQL)
前后端通过RESTful API交互,接口设计遵循以下原则:
- 使用HTTP动词表达操作意图(GET/POST/PUT/DELETE)
- 资源使用名词复数形式(如/archives)
- 状态码准确反映操作结果(200/400/401/500等)
- 响应数据统一采用JSON格式
3. 核心功能实现
3.1 用户权限管理
权限系统采用RBAC(基于角色的访问控制)模型,核心表结构如下:
sql复制CREATE TABLE `sys_user` (
`user_id` varchar(32) NOT NULL COMMENT '用户ID',
`username` varchar(50) NOT NULL COMMENT '用户名',
`password` varchar(100) NOT NULL COMMENT '加密密码',
`salt` varchar(20) DEFAULT NULL COMMENT '加密盐值',
`status` tinyint(1) DEFAULT '1' COMMENT '状态(0-禁用,1-正常)',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`user_id`),
UNIQUE KEY `idx_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统用户表';
CREATE TABLE `sys_role` (
`role_id` varchar(32) NOT NULL COMMENT '角色ID',
`role_name` varchar(100) NOT NULL COMMENT '角色名称',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';
CREATE TABLE `sys_user_role` (
`id` varchar(32) NOT NULL COMMENT 'ID',
`user_id` varchar(32) NOT NULL COMMENT '用户ID',
`role_id` varchar(32) NOT NULL COMMENT '角色ID',
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联表';
密码加密采用SHA-256加盐算法,核心Java实现:
java复制public class PasswordUtils {
private static final SecureRandom random = new SecureRandom();
private static final String CHARACTERS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
public static String generateSalt(int length) {
StringBuilder sb = new StringBuilder(length);
for (int i = 0; i < length; i++) {
sb.append(CHARACTERS.charAt(random.nextInt(CHARACTERS.length())));
