日喀则档案管理系统:从零搭建可落地的数字化档案平台

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

本系统采用前后端分离架构,确保系统可维护性和扩展性。前端使用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 implements ArchiveService { @Autowired private MinioClient minioClient; @Override public String uploadFile(MultipartFile file) throws Exception { String fileName = UUID.randomUUID() + "_" + file.getOriginalFilename(); minioClient.putObject( PutObjectArgs.builder() .bucket("archive-files") .object(fileName) .stream(file.getInputStream(), file.getSize(), -1) .contentType(file.getContentType()) .build() ); return fileName; } @Override public Page searchArchives(String keyword, String category, Date startDate, Date endDate, Page page) { QueryWrapper wrapper = new QueryWrapper<>(); if (StringUtils.hasText(keyword)) { wrapper.like("title", keyword) .or().like("archive_number", keyword) .or().like("keeper", keyword); } if (StringUtils.hasText(category)) { wrapper.eq("category", category); } if (startDate != null && endDate != null) { wrapper.between("create_date", startDate, endDate); } return this.page(page, wrapper); } } ```

三、前端界面开发

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 io.minio minio 8.5.2 ```

配置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 常见问题排查

遇到问题时,按以下步骤排查:

  1. 数据库连接失败:检查MySQL服务是否启动,用户权限是否正确
  2. 前端无法访问后端:检查Nginx配置中的proxy_pass地址是否正确
  3. 文件上传失败:检查MinIO服务状态和存储桶是否创建
  4. 页面样式异常:检查Element Plus是否正常引入,CSS是否加载
AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

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

微信扫码关注安答联动

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

安答联动档案管理系统