文教体育用品企业数字档案馆系统从零搭建实操指南

一、系统架构与核心组件选型

本系统采用轻量级微服务架构,核心组件全部使用开源方案,确保零成本落地。以下是具体选型清单:

1.1 存储层方案

文件存储:MinIO(对象存储)

安装命令:

``` wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x minio ./minio server /data --console-address ":9001" ```

数据库:PostgreSQL 14

安装命令:

``` sudo apt install postgresql-14 sudo systemctl start postgresql ```

1.2 服务层方案

后端框架:Spring Boot 2.7 + MyBatis Plus

前端框架:Vue 3 + Element Plus

全文检索:Elasticsearch 8.5

安装命令:

``` docker pull elasticsearch:8.5.0 docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:8.5.0 ```

二、数据库设计与初始化

2.1 核心表结构设计

创建数据库:

``` CREATE DATABASE digital_archive; ```

档案主表:

``` CREATE TABLE archive_document ( id BIGSERIAL PRIMARY KEY, doc_no VARCHAR(50) NOT NULL UNIQUE, doc_name VARCHAR(200) NOT NULL, doc_type VARCHAR(20) NOT NULL, product_line VARCHAR(50), department VARCHAR(50), storage_path TEXT NOT NULL, file_size BIGINT, file_type VARCHAR(20), upload_user_id BIGINT, upload_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, status SMALLINT DEFAULT 1, version INTEGER DEFAULT 1 ); ```

档案分类表:

``` CREATE TABLE archive_category ( id BIGSERIAL PRIMARY KEY, category_code VARCHAR(30) NOT NULL UNIQUE, category_name VARCHAR(100) NOT NULL, parent_id BIGINT DEFAULT 0, sort_order INTEGER DEFAULT 0, level INTEGER DEFAULT 1 ); ```

2.2 索引优化配置

创建复合索引提升查询性能:

``` CREATE INDEX idx_doc_search ON archive_document(doc_type, department, upload_time); CREATE INDEX idx_category_tree ON archive_category(parent_id, level, sort_order); ```

三、文件存储服务搭建

3.1 MinIO配置

创建配置文件minio-config.env:

``` MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=YourSecurePassword123 MINIO_VOLUMES="/data" MINIO_OPTS="--console-address :9001" ```

使用Docker启动:

``` docker run -d \ -p 9000:9000 \ -p 9001:9001 \ --name minio \ -v /mnt/data:/data \ -v /path/to/minio-config.env:/etc/config.env \ -e "MINIO_CONFIG_ENV_FILE=/etc/config.env" \ minio/minio server /data ```

3.2 创建存储桶

登录MinIO控制台(http://服务器IP:9001),依次创建以下存储桶:

  • product-design:产品设计文档
  • quality-cert:质量认证文件
  • patent-docs:专利文档
  • training-materials:培训资料
  • sports-standard:体育用品标准

四、后端服务开发

4.1 项目初始化

文教体育用品企业数字档案馆系统从零搭建实操指南

使用Spring Initializr创建项目:

``` spring init --dependencies=web,mybatis,postgresql --type=maven-project digital-archive-system ```

application.yml核心配置:

``` spring: datasource: url: jdbc:postgresql://localhost:5432/digital_archive username: postgres password: your_password driver-class-name: org.postgresql.Driver servlet: multipart: max-file-size: 500MB max-request-size: 500MB minio: endpoint: http://localhost:9000 accessKey: admin secretKey: YourSecurePassword123 bucketName: product-design ```

4.2 文件上传核心代码

FileUploadService.java:

``` @Service public class FileUploadService { @Value("${minio.endpoint}") private String endpoint; @Value("${minio.bucketName}") private String bucketName; public String uploadFile(MultipartFile file, String category) { try { MinioClient minioClient = MinioClient.builder() .endpoint(endpoint) .credentials(accessKey, secretKey) .build(); String objectName = category + "/" + UUID.randomUUID() + "_" + file.getOriginalFilename(); minioClient.putObject( PutObjectArgs.builder() .bucket(bucketName) .object(objectName) .stream(file.getInputStream(), file.getSize(), -1) .contentType(file.getContentType()) .build() ); return endpoint + "/" + bucketName + "/" + objectName; } catch (Exception e) { throw new RuntimeException("上传失败", e); } } } ```

4.3 档案检索服务

集成Elasticsearch实现全文检索:

``` @Configuration public class ElasticsearchConfig { @Bean public RestHighLevelClient client() { return new RestHighLevelClient( RestClient.builder(new HttpHost("localhost", 9200, "http")) ); } } @Service public class ArchiveSearchService { public List search(String keyword) { SearchRequest searchRequest = new SearchRequest("archive_index"); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.query(QueryBuilders.multiMatchQuery(keyword, "doc_name", "content", "tags")); sourceBuilder.from(0); sourceBuilder.size(20); searchRequest.source(sourceBuilder); // 执行搜索并返回结果 } } ```

五、前端界面开发

5.1 项目初始化

创建Vue项目:

``` npm create vue@latest digital-archive-frontend cd digital-archive-frontend npm install element-plus axios ```

5.2 文件上传组件

FileUpload.vue核心代码:

``` ```

5.3 档案检索页面

SearchPage.vue核心代码:

``` ```

六、系统部署与运维

6.1 Docker Compose部署

创建docker-compose.yml:

``` version: '3.8' services: postgres: image: postgres:14 environment: POSTGRES_DB: digital_archive POSTGRES_PASSWORD: your_password volumes: - postgres_data:/var/lib/postgresql/data ports: - "5432:5432" minio: image: minio/minio command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: admin MINIO_ROOT_PASSWORD: YourSecurePassword123 volumes: - minio_data:/data ports: - "9000:9000" - "9001:9001" elasticsearch: image: elasticsearch:8.5.0 environment: - discovery.type=single-node - "ES_JAVA_OPTS=-Xms512m -Xmx512m" volumes: - es_data:/usr/share/elasticsearch/data ports: - "9200:9200" backend: build: ./backend depends_on: - postgres - minio - elasticsearch ports: - "8080:8080" frontend: build: ./frontend ports: - "80:80" volumes: postgres_data: minio_data: es_data: ```

6.2 启动命令

在docker-compose.yml所在目录执行:

docker-compose up -d

6.3 数据备份脚本

创建backup.sh:

``` !/bin/bash BACKUP_DIR="/backup/$(date +%Y%m%d)" mkdir -p $BACKUP_DIR 备份PostgreSQL pg_dump -U postgres digital_archive > $BACKUP_DIR/db_backup.sql 备份MinIO数据 mc mirror --overwrite minio/product-design $BACKUP_DIR/minio/ 备份Elasticsearch索引 curl -X GET "localhost:9200/_snapshot/backup_repository" \ -H 'Content-Type: application/json' \ -d '{"type": "fs", "settings": {"location": "'$BACKUP_DIR'/es_backup"}}' ```

七、权限控制配置

7.1 角色权限表设计

``` CREATE TABLE user_role ( id BIGSERIAL PRIMARY KEY, role_code VARCHAR(30) NOT NULL UNIQUE, role_name VARCHAR(50) NOT NULL ); CREATE TABLE role_permission ( id BIGSERIAL PRIMARY KEY, role_id BIGINT NOT NULL, permission_code VARCHAR(50) NOT NULL, FOREIGN KEY (role_id) REFERENCES user_role(id) ); -- 初始化角色数据 INSERT INTO user_role (role_code, role_name) VALUES ('admin', '系统管理员'), ('design_dept', '设计部门'), ('quality_dept', '质量部门'), ('view_only', '只读用户'); ```

7.2 Spring Security配置

SecurityConfig.java核心配置:

``` @Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(authz -> authz .requestMatchers("/api/admin/").hasRole("ADMIN") .requestMatchers("/api/upload/").hasAnyRole("ADMIN", "DESIGN_DEPT") .requestMatchers("/api/download/").authenticated() .anyRequest().permitAll() ) .formLogin(form -> form .loginPage("/login") .defaultSuccessUrl("/") .permitAll() ) .logout(logout -> logout .logoutSuccessUrl("/login?logout") .permitAll() ); return http.build(); } } ```

八、系统访问与使用

8.1 首次访问配置

  1. 访问 http://服务器IP 进入系统首页
  2. 使用默认管理员账号登录:admin / admin123
  3. 首次登录后立即修改密码
  4. 进入"系统设置" → "部门管理",添加企业实际部门
  5. 进入"权限管理",配置各角色权限

8.2 档案上传流程

  1. 点击"档案上传"按钮
  2. 选择文件(支持批量选择)
  3. 填写档案信息:编号、名称、类型、所属产品线
  4. 选择存储分类(自动匹配MinIO存储桶)
  5. 点击"开始上传",系统自动生成索引
  6. 上传完成后,档案立即可被检索

8.3 常见问题解决

问题1:文件上传失败,提示"Connection refused"

解决:检查MinIO服务状态,执行docker ps | grep minio确认容器运行正常

问题2:搜索功能无结果

解决:检查Elasticsearch索引,执行curl http://localhost:9200/_cat/indices?v查看索引状态

问题3:数据库连接失败

解决:检查PostgreSQL服务,执行sudo systemctl status postgresql查看服务状态

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

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

微信扫码关注安答联动

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

安答联动档案管理系统