在开始构建大庆档案管理系统之前,必须确保开发环境配置准确。本系统采用Spring Boot 3.2 + Vue 3 + MySQL 8.0技术栈。请严格按照以下步骤执行环境初始化。
首先检查并安装以下必要软件,直接使用命令行或下载指定版本:
brew install openjdk@17
https://nodejs.org/dist/v18.19.0/node-v18.19.0-x64.msihttps://dev.mysql.com/get/mysql-installer-community-8.0.36.0.msihttps://dlcdn.apache.org/maven/maven-3/3.9.6/binaries/apache-maven-3.9.6-bin.tar.gz打开MySQL客户端(如Navicat或命令行),执行以下SQL脚本创建数据库及核心表。此表结构设计涵盖了档案编号、标题、密级、存储路径等核心字段。
```sql
-- 创建数据库
CREATE DATABASE IF NOT EXISTS daqing_archive_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE daqing_archive_db;
-- 创建档案主表
CREATE TABLE t_sys_archive (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
archive_no VARCHAR(50) NOT NULL UNIQUE COMMENT '档案编号,唯一索引',
title VARCHAR(200) NOT NULL COMMENT '档案标题',
category VARCHAR(50) DEFAULT 'DEFAULT' COMMENT '档案分类(文书/科技/财务等)',
secret_level VARCHAR(20) DEFAULT 'INTERNAL' COMMENT '密级(公开/内部/机密)',
file_path VARCHAR(500) COMMENT '物理文件存储路径',
file_size BIGINT DEFAULT 0 COMMENT '文件大小(字节)',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '归档时间',
creator VARCHAR(50) DEFAULT 'admin' COMMENT '创建人'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='大庆档案管理系统-档案主表';
```
使用Spring Initializr创建项目,或在IDEA中直接创建Maven项目。以下配置文件和依赖是系统运行的核心,缺一不可。
在pom.xml中引入以下依赖。注意版本号必须兼容,避免启动报错。
```xml
```
在src/main/resources/application.yml中配置数据库连接及文件上传路径。请务必修改MySQL的用户名和密码。
```yaml
server:
port: 8080
spring:
application:
name: daqing-archive-system
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/daqing_archive_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: 123456 请修改为实际密码
servlet:
multipart:
max-file-size: 100MB
max-request-size: 100MB
file-size-threshold: 10MB
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
file:
upload-path: D:/daqing_archive_files/ Windows路径,Linux请改为 /var/daqing_archive_files/
```
本部分包含实体类、数据层及控制层代码,实现档案的CRUD(增删改查)及文件上传功能。
创建com.daqing.archive.entity.Archive类。
```java
package com.daqing.archive.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class Archive {
@TableId(type = IdType.AUTO)
private Long id;
private String archiveNo;
private String title;
private String category;
private String secretLevel;
private String filePath;
private Long fileSize;
private LocalDateTime createTime;
private String creator;
}
```
创建com.daqing.archive.mapper.ArchiveMapper接口。
```java
package com.daqing.archive.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.daqing.archive.entity.Archive;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ArchiveMapper extends BaseMapper
}
```
创建com.daqing.archive.controller.ArchiveController。此代码处理文件流存储和数据库记录写入,是系统的核心逻辑。
```java
package com.daqing.archive.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.daqing.archive.entity.Archive;
import com.daqing.archive.mapper.ArchiveMapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@RestController
@RequestMapping("/api/archive")
@CrossOrigin(origins = "") // 允许前端跨域访问
public class ArchiveController {
private final ArchiveMapper archiveMapper;
@Value("${file.upload-path}")
private String uploadPath;
public ArchiveController(ArchiveMapper archiveMapper) {
this.archiveMapper = archiveMapper;
}
// 文件上传并归档
@PostMapping("/upload")
public Map
@RequestParam("title") String title,
@RequestParam("category") String category) {
Map
try {
// 1. 创建存储目录
File dir = new File(uploadPath);
if (!dir.exists()) dir.mkdirs();
// 2. 生成唯一文件名
String originalFilename = file.getOriginalFilename();
String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
String newFileName = UUID.randomUUID().toString() + extension;
String destPath = Paths.get(uploadPath, newFileName).toString();
// 3. 保存文件
file.transferTo(new File(destPath));
// 4. 构建数据库实体
Archive archive = new Archive();
archive.setArchiveNo("DQ-" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
archive.setTitle(title);
archive.setCategory(category);
archive.setFilePath(destPath);
archive.setFileSize(file.getSize());
archive.setCreateTime(LocalDateTime.now());
archive.setCreator("Admin");
// 5. 入库
archiveMapper.insert(archive);
result.put("code", 200);
result.put("message", "归档成功");
result.put("data", archive);
} catch (IOException e) {
result.put("code", 500);
result.put("message", "文件上传失败: " + e.getMessage());
}
return result;
}
// 分页查询档案列表
@GetMapping("/list")
public Map
@RequestParam(defaultValue = "10") int size) {
Map
Page
Page
result.put("code", 200);
result.put("data", archivePage.getRecords());
result.put("total", archivePage.getTotal());
return result;
}
}
```
前端使用Vue 3配合Element Plus组件库,实现文件拖拽上传和档案列表展示。
在终端执行以下命令创建Vue项目并安装依赖:
npm create vue@latest daqing-archive-web
cd daqing-archive-web
npm install element-plus axios
修改src/App.vue,直接复制以下代码。该代码集成了Element Plus的表格和上传组件,并封装了Axios请求。
```html
drag action="http://localhost:8080/api/archive/upload" :data="{ title: form.title, category: form.category }" :on-success="handleSuccess" style="margin-top: 10px;" >
<