唐山档案管理系统:从零搭建企业级数字档案库实操指南

一、系统架构与核心技术选型

本系统采用前后端分离架构,前端使用Vue 3 + Element Plus,后端使用Spring Boot 2.7 + MyBatis Plus,数据库使用MySQL 8.0,文件存储使用MinIO对象存储。

1.1 环境要求与版本锁定

确保所有组件版本完全匹配,避免兼容性问题:

  • JDK 17.0.8
  • Node.js 18.16.0
  • MySQL 8.0.33
  • MinIO RELEASE.2023-08-29T23-07-35Z
  • Redis 7.0.12

二、后端服务搭建与配置

2.1 项目初始化与依赖配置

创建Spring Boot项目,pom.xml关键依赖配置:

```xml org.springframework.boot spring-boot-starter-web com.baomidou mybatis-plus-boot-starter 3.5.3.1 mysql mysql-connector-java 8.0.33 io.minio minio 8.5.2 ```

2.2 数据库表结构设计

创建核心档案表结构:

```sql CREATE TABLE `archive_file` ( `id` bigint NOT NULL AUTO_INCREMENT, `file_code` varchar(50) NOT NULL COMMENT '档案编号', `file_name` varchar(200) NOT NULL COMMENT '档案名称', `file_type` varchar(20) NOT NULL COMMENT '档案类型', `department` varchar(100) NOT NULL COMMENT '所属部门', `storage_location` varchar(500) COMMENT '物理存放位置', `digital_path` varchar(500) COMMENT '数字文件路径', `create_time` datetime DEFAULT CURRENT_TIMESTAMP, `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_file_code` (`file_code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `archive_borrow` ( `id` bigint NOT NULL AUTO_INCREMENT, `file_id` bigint NOT NULL, `borrower` varchar(50) NOT NULL, `borrow_time` datetime NOT NULL, `return_time` datetime, `status` tinyint DEFAULT 0 COMMENT '0-借阅中 1-已归还', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ```

2.3 配置文件详解

application.yml完整配置:

```yaml server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/archive_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: root password: your_password driver-class-name: com.mysql.cj.jdbc.Driver redis: host: localhost port: 6379 password: database: 0 minio: endpoint: http://localhost:9000 accessKey: minioadmin secretKey: minioadmin bucketName: archive-files mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: logic-delete-field: deleted logic-delete-value: 1 logic-not-delete-value: 0 ```

2.4 MinIO文件存储配置

创建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(); } } ```

2.5 档案上传接口实现

核心文件上传服务:

```java @Service public class ArchiveService { @Autowired private MinioClient minioClient; @Value("${minio.bucketName}") private String bucketName; public String uploadFile(MultipartFile file, String fileCode) throws Exception { // 检查存储桶是否存在 boolean found = minioClient.bucketExists(BucketExistsArgs.builder() .bucket(bucketName).build()); if (!found) { minioClient.makeBucket(MakeBucketArgs.builder() .bucket(bucketName).build()); } // 生成唯一文件名 String originalFilename = file.getOriginalFilename(); String fileExtension = originalFilename.substring(originalFilename.lastIndexOf(".")); String objectName = fileCode + "_" + System.currentTimeMillis() + fileExtension; // 上传文件 minioClient.putObject( PutObjectArgs.builder() .bucket(bucketName) .object(objectName) .stream(file.getInputStream(), file.getSize(), -1) .contentType(file.getContentType()) .build() ); return objectName; } public String getFileUrl(String objectName) throws Exception { return minioClient.getPresignedObjectUrl( GetPresignedObjectUrlArgs.builder() .method(Method.GET) .bucket(bucketName) .object(objectName) .expiry(60 60 24) // 24小时有效 .build() ); } } ```

2.6 档案检索接口

实现多条件组合查询:

```java @RestController @RequestMapping("/api/archive") public class ArchiveController { @Autowired private ArchiveFileMapper archiveFileMapper; @GetMapping("/search") public List searchArchives( @RequestParam(required = false) String fileCode, @RequestParam(required = false) String fileName, @RequestParam(required = false) String department, @RequestParam(required = false) String fileType) { QueryWrapper wrapper = new QueryWrapper<>(); if (StringUtils.hasText(fileCode)) { wrapper.like("file_code", fileCode); } if (StringUtils.hasText(fileName)) { wrapper.like("file_name", fileName); } if (StringUtils.hasText(department)) { wrapper.eq("department", department); } if (StringUtils.hasText(fileType)) { wrapper.eq("file_type", fileType); } wrapper.orderByDesc("create_time"); return archiveFileMapper.selectList(wrapper); } } ```

三、前端界面开发

3.1 Vue项目初始化

唐山档案管理系统:从零搭建企业级数字档案库实操指南

创建Vue项目并安装必要依赖:

```bash npm create vue@latest archive-frontend cd archive-frontend npm install element-plus @element-plus/icons-vue axios vue-router pinia ```

3.2 档案管理界面实现

档案列表组件:

```vue ```

3.3 档案上传组件

实现文件上传功能:

```vue ```

四、系统部署与运维

4.1 Docker容器化部署

创建后端Dockerfile:

```dockerfile FROM openjdk:17-jdk-slim WORKDIR /app COPY target/archive-system.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"] ```

创建前端Dockerfile:

```dockerfile FROM nginx:alpine COPY dist/ /usr/share/nginx/html/ COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80 ```

Nginx配置文件:

```nginx user nginx; worker_processes auto; events { worker_connections 1024; } http { include /etc/nginx/mime.types; server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html; try_files $uri $uri/ /index.html; } location /api/ { proxy_pass http://backend:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } } ```

4.2 使用docker-compose一键部署

创建docker-compose.yml:

```yaml version: '3.8' services: mysql: image: mysql:8.0.33 environment: MYSQL_ROOT_PASSWORD: your_password MYSQL_DATABASE: archive_db volumes: - mysql_data:/var/lib/mysql ports: - "3306:3306" redis: image: redis:7.0.12-alpine ports: - "6379:6379" minio: image: minio/minio:latest command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin volumes: - minio_data:/data ports: - "9000:9000" - "9001:9001" backend: build: ./backend depends_on: - mysql - redis - minio environment: SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/archive_db SPRING_REDIS_HOST: redis MINIO_ENDPOINT: http://minio:9000 ports: - "8080:8080" frontend: build: ./frontend depends_on: - backend ports: - "80:80" volumes: mysql_data: minio_data: ```

4.3 启动系统

在项目根目录执行:

```bash 构建并启动所有服务 docker-compose up -d 查看服务状态 docker-compose ps 查看日志 docker-compose logs -f backend ```

4.4 系统初始化配置

系统启动后,按顺序执行以下操作:

  1. 访问MinIO控制台:http://localhost:9001,使用minioadmin/minioadmin登录
  2. 创建存储桶:在控制台创建名为archive-files的存储桶
  3. 访问前端界面:http://localhost
  4. 初始化管理员账号:首次访问时使用默认账号admin/admin123登录
  5. 配置部门
AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统