网站首页/ 信息中心/ 档案百科/

固定资产数字档案馆系统搭建与全流程实操指南

发布时间:2026年09月14日 02:05:30 浏览量:0

一、开发环境与基础架构准备

在开始构建固定资产数字档案馆系统之前,我们需要统一技术栈。本指南采用 Spring Boot 3.2 + Vue 3 + MySQL 8.0 + MinIO 的架构。MySQL 用于存储资产元数据,MinIO 用于存储非结构化的档案文件(如扫描件、图片),确保系统具备高性能的文件处理能力。

1.1 基础软件安装

请确保你的开发环境已安装以下软件,并配置好环境变量:

1.2 依赖服务部署(MySQL + MinIO)

为了避免手动安装数据库和对象存储服务的繁琐,我们使用 Docker Compose 一键启动。请在项目根目录下创建 docker-compose.yml 文件,并复制以下内容:

```yaml version: '3.8' services: mysql: image: mysql:8.0 container_name: asset_archive_mysql environment: MYSQL_ROOT_PASSWORD: root123456 MYSQL_DATABASE: asset_archive_db ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql minio: image: minio/minio:latest container_name: asset_archive_minio environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin123 ports: - "9000:9000" - "9001:9001" command: server /data --console-address ":9001" volumes: - minio_data:/data volumes: mysql_data: minio_data: ```

保存文件后,在终端执行以下命令启动服务:

docker-compose up -d

服务启动后,你需要手动在 MinIO 中创建一个 Bucket(存储桶)用于存放档案文件。打开浏览器访问 http://localhost:9001,使用账号 minioadmin / minioadmin123 登录。点击左侧 Buckets -> Create Bucket,命名为 asset-files,并将 Access Policy 设置为 Public(方便后续前端直接预览)。

二、数据库设计与初始化

数据库是系统的核心。我们需要设计一张表来存储固定资产的基本信息及其关联的数字档案路径。

2.1 建表 SQL

连接到本地 MySQL(端口 3306,用户 root,密码 root123456),执行以下 SQL 脚本:

```sql USE asset_archive_db; CREATE TABLE `fixed_asset` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', `asset_code` varchar(50) NOT NULL COMMENT '资产编码', `asset_name` varchar(100) NOT NULL COMMENT '资产名称', `category` varchar(50) DEFAULT NULL COMMENT '资产分类', `purchase_date` date DEFAULT NULL COMMENT '采购日期', `price` decimal(10,2) DEFAULT NULL COMMENT '资产原值', `file_name` varchar(255) DEFAULT NULL COMMENT '档案文件原始名称', `file_url` varchar(500) DEFAULT NULL COMMENT '档案文件MinIO访问路径', `status` tinyint DEFAULT '1' COMMENT '状态 1:在用 0:报废', `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_asset_code` (`asset_code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='固定资产档案表'; ```

三、后端核心功能开发

后端使用 Spring Boot 提供 RESTful API,负责处理业务逻辑和文件上传。

3.1 项目初始化与依赖

使用 Spring Initializr(https://start.spring.io/) 生成项目,选择以下依赖:

生成项目后,在 pom.xml 中手动添加 MinIO 的 Java SDK 依赖:

```xml io.minio minio 8.5.7 ```

3.2 配置文件详解

打开 src/main/resources/application.yml,删除默认内容,填入完整配置:

```yaml server: port: 8080 spring: application: name: asset-archive-system datasource: url: jdbc:mysql://localhost:3306/asset_archive_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: root123456 driver-class-name: com.mysql.cj.jdbc.Driver jpa: hibernate: ddl-auto: update show-sql: true MinIO 自定义配置 minio: endpoint: http://localhost:9000 access-key: minioadmin secret-key: minioadmin123 bucket-name: asset-files ```

3.3 核心代码实现

为了保持简洁,这里直接给出核心的 Entity、Service 和 Controller 代码。

1. 实体类 (FixedAsset.java)

```java package com.example.asset.entity; import jakarta.persistence.; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; @Data @Entity @Table(name = "fixed_asset") public class FixedAsset { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String assetCode; private String assetName; private String category; private LocalDate purchaseDate; private BigDecimal price; // 档案相关字段 private String fileName; private String fileUrl; private Integer status; private LocalDateTime createdAt; } ```

2. 文件上传服务类

固定资产数字档案馆系统搭建与全流程实操指南

创建一个 Service 类专门处理 MinIO 交互。在 src/main/java/com/example/asset/config/MinioConfig.java 中配置 Client:

```java package com.example.asset.config; import io.minio.MinioClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MinioConfig { @Value("${minio.endpoint}") private String endpoint; @Value("${minio.access-key}") private String accessKey; @Value("${minio.secret-key}") private String secretKey; @Bean public MinioClient minioClient() { return MinioClient.builder() .endpoint(endpoint) .credentials(accessKey, secretKey) .build(); } } ```

3. 业务逻辑与控制器

创建 AssetController.java,实现资产保存和文件上传的接口:

```java package com.example.asset.controller; import com.example.asset.entity.FixedAsset; import io.minio.MinioClient; import io.minio.PutObjectArgs; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.; import org.springframework.web.multipart.MultipartFile; import java.io.InputStream; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.UUID; @RestController @RequestMapping("/api/assets") public class AssetController { @Autowired private MinioClient minioClient; @Value("${minio.bucket-name}") private String bucketName; @Value("${minio.endpoint}") private String endpoint; // 简单的JPA Repository注入,实际开发建议单独定义Repository接口 @Autowired private jakarta.persistence.EntityManager entityManager; @PostMapping("/upload") public String uploadAsset(@RequestParam("file") MultipartFile file, @RequestParam("assetCode") String assetCode, @RequestParam("assetName") String assetName) { try { // 1. 上传文件到 MinIO String fileName = UUID.randomUUID() + "_" + file.getOriginalFilename(); InputStream inputStream = file.getInputStream(); minioClient.putObject( PutObjectArgs.builder() .bucket(bucketName) .object(fileName) .stream(inputStream, file.getSize(), -1) .contentType(file.getContentType()) .build() ); String fileUrl = endpoint + "/" + bucketName + "/" + fileName; // 2. 保存元数据到 MySQL FixedAsset asset = new FixedAsset(); asset.setAssetCode(assetCode); asset.setAssetName(assetName); asset.setFileName(file.getOriginalFilename()); asset.setFileUrl(fileUrl); asset.setPurchaseDate(LocalDate.now()); asset.setStatus(1); asset.setCreatedAt(LocalDateTime.now()); entityManager.persist(asset); return "上传成功,文件URL: " + fileUrl; } catch (Exception e) { e.printStackTrace(); return "上传失败: " + e.getMessage(); } } } ```

四、前端界面与交互实现

前端使用 Vue 3 配合 Element Plus 组件库,实现一个可视化的资产录入页面。

4.1 项目搭建

在终端执行以下命令创建 Vue 项目:

npm create vue@latest asset-archive-web

安装依赖时,选择 Router 和 Pinia(默认配置即可)。进入项目目录并安装 Element Plus 和 Axios:

npm install element-plus axios

4.2 资产录入与档案上传

修改 src/App.vue,直接在此文件中编写完整的上传逻辑代码:

```html ```

五、系统启动与验证

至此,所有代码已就绪。现在我们将整个系统运行起来。

5.1 启动后端服务

在 IDE(如 IntelliJ IDEA)中打开 Spring Boot 项目,找到包含 main 方法的启动类,运行 AssetArchiveSystemApplication。确保控制台看到 Tomcat started on port(s): 8080 的日志。

5.2 启动前端服务

在终端进入前端项目目录,执行:

npm run dev

终端会输出一个本地访问地址,通常是 http://localhost:5173

5.3 功能实操验证

  1. 打开浏览器访问前端地址。
  2. 录入数据:输入资产编码 TEST-001,资产名称 测试服务器
  3. 上传文件:点击选择文件,上传任意一张图片或 PDF 文档作为数字档案。
  4. 点击提交:观察页面提示“上传成功”。
  5. 数据核对
    • 登录 MySQL:SELECT FROM fixed_asset; 查看记录是否插入。
    • 登录 MinIO 控制台:查看 asset-files 桶中是否存在新上传的文件。

如果以上步骤均顺畅通过,说明固定资产数字档案馆系统的 MVP(最小可行性产品)已成功落地。你可以在此基础上扩展查询列表、报废流程等高级功能。

档案制度建设能提升工作效率?这3个落地方法帮你少加班
档案制度建设能提升工作效率?这3个落地方法帮你少加班
很多公司行政部、档案室管理员可能都遇过这种事:找一份旧合同翻遍整个储物间,员工调档案要等半小时,年底归档忙到凌晨还错漏百出?其实,别总怪“人手不够”,先看你的档案制度有没有“隐形漏洞”。今天就结合我服...
2026年09月14日 02:05:30
微信咨询
电话联系
QQ客服
微信咨询一对一服务
服务热线: 028-8744 4417
QQ客服: 2305721818