日喀则档案管理系统:从零搭建可落地的数字化档案平台
一、系统架构与核心技术选型
本系统采用前后端分离架构,确保系统可维护性和扩展性。前端使用Vue 3 + Element Plus,后端使用Spring Boot 2.7 + MyBatis Plus,数据库使用MySQL 8.0,文件存储采用MinIO。
1.1 环境准备清单
在开始前,请确保已安装以下软件:
- JDK 17:必须使用17或更高版本
- Node.js 18.17.0
- MySQL 8.0.33
- Maven 3.8.6
1.2 MySQL数据库初始化
创建数据库和用户:
```sql CREATE DATABASE rkz_archive CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'archive_admin'@'%' IDENTIFIED BY 'Archive@2024'; GRANT ALL PRIVILEGES ON rkz_archive. TO 'archive_admin'@'%'; FLUSH PRIVILEGES; ```二、后端服务搭建
2.1 项目结构初始化
使用Spring Initializr创建项目,依赖选择:
- Spring Web
- MyBatis Framework
- MySQL Driver
- Lombok
- Validation
2.2 application.yml核心配置
在src/main/resources/application.yml中配置:
```yaml server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/rkz_archive?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: archive_admin password: Archive@2024 driver-class-name: com.mysql.cj.jdbc.Driver servlet: multipart: max-file-size: 100MB max-request-size: 200MB mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: logic-delete-field: is_deleted logic-delete-value: 1 logic-not-delete-value: 0 ```2.3 档案实体类定义
创建Archive实体类:
```java @Data @TableName("archive") public class Archive { @TableId(type = IdType.AUTO) private Long id; private String archiveNumber; // 档案编号 private String title; // 档案标题 private String category; // 档案类别 private String department; // 所属部门 private String keeper; // 保管人 @JsonFormat(pattern = "yyyy-MM-dd") private Date createDate; // 建档日期 private Integer retentionYears; // 保管年限 private String storageLocation; // 存放位置 private String digitalPath; // 数字化文件路径 @TableLogic private Integer isDeleted; } ```2.4 档案管理Service实现
创建ArchiveService接口和实现:
```java @Service public class ArchiveServiceImpl extends ServiceImpl三、前端界面开发
3.1 Vue项目初始化
创建Vue项目:
```bash npm create vue@latest rkz-archive-frontend cd rkz-archive-frontend npm install element-plus axios vue-router pinia ```3.2 档案列表组件
创建src/views/ArchiveList.vue:
```vue
档案列表
新增档案
3.3 API接口配置
创建src/api/archive.js:
```javascript import request from '@/utils/request' export function searchArchives(params) { return request({ url: '/api/archives/search', method: 'get', params }) } export function getArchiveById(id) { return request({ url: `/api/archives/${id}`, method: 'get' }) } export function createArchive(data) { return request({ url: '/api/archives', method: 'post', data }) } export function updateArchive(id, data) { return request({ url: `/api/archives/${id}`, method: 'put', data }) } export function deleteArchive(id) { return request({ url: `/api/archives/${id}`, method: 'delete' }) } ```四、文件存储配置
4.1 MinIO安装与配置

使用Docker安装MinIO:
```bash docker run -d \ -p 9000:9000 \ -p 9001:9001 \ --name minio \ -v /data/minio/data:/data \ -v /data/minio/config:/root/.minio \ -e "MINIO_ROOT_USER=admin" \ -e "MINIO_ROOT_PASSWORD=minio123456" \ minio/minio server /data --console-address ":9001" ```4.2 Spring Boot集成MinIO
添加依赖:
```xml配置MinIO客户端:
```java @Configuration public class MinioConfig { @Value("${minio.endpoint}") private String endpoint; @Value("${minio.accessKey}") private String accessKey; @Value("${minio.secretKey}") private String secretKey; @Bean public MinioClient minioClient() { return MinioClient.builder() .endpoint(endpoint) .credentials(accessKey, secretKey) .build(); } } ```五、系统部署与运维
5.1 数据库表结构初始化
创建archive表:
```sql CREATE TABLE archive ( id BIGINT PRIMARY KEY AUTO_INCREMENT, archive_number VARCHAR(50) NOT NULL COMMENT '档案编号', title VARCHAR(200) NOT NULL COMMENT '档案标题', category VARCHAR(50) NOT NULL COMMENT '档案类别', department VARCHAR(100) COMMENT '所属部门', keeper VARCHAR(50) COMMENT '保管人', create_date DATE NOT NULL COMMENT '建档日期', retention_years INT DEFAULT 10 COMMENT '保管年限', storage_location VARCHAR(200) COMMENT '存放位置', digital_path VARCHAR(500) COMMENT '数字化文件路径', is_deleted TINYINT DEFAULT 0 COMMENT '逻辑删除', create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_archive_number (archive_number), INDEX idx_category (category), INDEX idx_create_date (create_date), INDEX idx_keeper (keeper) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='档案主表'; ```5.2 后端服务打包部署
打包Spring Boot应用:
```bash mvn clean package -DskipTests ```创建Dockerfile:
```dockerfile FROM openjdk:17-jdk-slim WORKDIR /app COPY target/archive-system-0.0.1-SNAPSHOT.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"] ```构建并运行容器:
```bash docker build -t archive-backend . docker run -d --name archive-backend -p 8080:8080 archive-backend ```5.3 前端项目部署
构建生产版本:
```bash npm run build ```使用Nginx部署:
```nginx server { listen 80; server_name archive.yourdomain.com; location / { root /var/www/archive-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; } } ```六、系统测试与验证
6.1 功能测试清单
部署完成后,按顺序测试以下功能:
- 数据库连接测试:登录MySQL验证archive表是否创建成功
- 后端接口测试:访问http://localhost:8080/api/archives/search测试接口是否正常
- 前端页面测试:访问部署地址验证页面是否正常加载
- 档案新增测试:通过前端界面添加一条测试档案
- 文件上传测试:上传一个PDF文件验证MinIO存储是否正常
- 档案查询测试:使用不同条件搜索档案验证查询功能
6.2 常见问题排查
遇到问题时,按以下步骤排查:
- 数据库连接失败:检查MySQL服务是否启动,用户权限是否正确
- 前端无法访问后端:检查Nginx配置中的proxy_pass地址是否正确
- 文件上传失败:检查MinIO服务状态和存储桶是否创建
- 页面样式异常:检查Element Plus是否正常引入,CSS是否加载