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

生产设备数字档案馆系统:从零搭建的完整技术方案与实操指南

发布时间:2026年08月18日 09:30:28 浏览量:0

一、系统核心目标与技术选型

生产设备数字档案馆系统需要实现设备档案的电子化、结构化存储与全生命周期管理。核心功能包括设备档案录入、版本管理、关联查询、权限控制与数据可视化。基于以下考量选择技术方案:

二、开发环境搭建

2.1 基础环境准备

安装Docker与Docker Compose,用于快速部署依赖服务:

 Ubuntu系统安装命令
sudo apt update
sudo apt install docker.io docker-compose -y
sudo systemctl start docker
sudo systemctl enable docker

2.2 依赖服务部署

创建docker-compose.yml文件,内容如下:

version: '3.8'
services:
postgres:
image: postgres:15-alpine
environment:
POSTGRES_DB: equipment_archive
POSTGRES_USER: archive_admin
POSTGRES_PASSWORD: Archive@123
ports:
- "5432:5432"
volumes:
- pg_data:/var/lib/postgresql/data
minio:
image: minio/minio:latest
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: minioadmin123
ports:
- "9000:9000"
- "9001:9001"
volumes:
- minio_data:/data
elasticsearch:
image: elasticsearch:8.12.0
environment:
discovery.type: single-node
ES_JAVA_OPTS: "-Xms512m -Xmx512m"
xpack.security.enabled: "false"
ports:
- "9200:9200"
volumes:
- es_data:/usr/share/elasticsearch/data
volumes:
pg_data:
minio_data:
es_data:

执行docker-compose up -d启动所有服务。

三、后端系统实现

3.1 项目初始化

使用Spring Initializr创建项目,依赖选择:Spring Web, Spring Data JPA, PostgreSQL Driver, Lombok。

 项目结构
src/main/java/com/equipment/archive/
├── config/           配置类
├── controller/       控制器
├── entity/           实体类
├── repository/       数据访问层
├── service/          业务层
└── dto/              数据传输对象

3.2 数据库表设计

创建核心实体Equipment,对应数据库表:

@Entity
@Table(name = "equipment")
@Data
public class Equipment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, unique = true)
private String equipmentCode;  // 设备编码
@Column(nullable = false)
private String equipmentName;  // 设备名称
@Column(nullable = false)
private String equipmentType;  // 设备类型
@Column(columnDefinition = "jsonb")
private String specifications; // 技术参数(JSON格式)
@Column(nullable = false)
private LocalDate purchaseDate; // 购置日期
@Column
private String manufacturer;   // 生产厂家
@Column
private String maintenanceRecords; // 维修记录
@Column
private String attachmentIds;  // 关联附件ID列表
@CreatedDate
private LocalDateTime createTime;
@LastModifiedDate
private LocalDateTime updateTime;
}

3.3 文件上传服务实现

创建MinIO配置类:

@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();
}
}

文件上传服务类:

@Service
public class FileStorageService {
@Autowired
private MinioClient minioClient;
private final String BUCKET_NAME = "equipment-files";
@PostConstruct
public void init() throws Exception {
boolean exists = minioClient.bucketExists(
BucketExistsArgs.builder().bucket(BUCKET_NAME).build()
);
if (!exists) {
minioClient.makeBucket(
MakeBucketArgs.builder().bucket(BUCKET_NAME).build()
);
}
}
public String uploadFile(MultipartFile file, String equipmentCode)
throws Exception {
String fileName = equipmentCode + "/" +
System.currentTimeMillis() + "_" +
file.getOriginalFilename();
minioClient.putObject(
PutObjectArgs.builder()
.bucket(BUCKET_NAME)
.object(fileName)
.stream(file.getInputStream(), file.getSize(), -1)
.contentType(file.getContentType())
.build()
);
return fileName;
}
}

3.4 设备档案API接口

创建RESTful API控制器:

生产设备数字档案馆系统:从零搭建的完整技术方案与实操指南

@RestController
@RequestMapping("/api/equipment")
public class EquipmentController {
@Autowired
private EquipmentService equipmentService;
@PostMapping
public ResponseEntity createEquipment(
@RequestBody EquipmentDTO equipmentDTO) {
Equipment equipment = equipmentService.createEquipment(equipmentDTO);
return ResponseEntity.ok(equipment);
}
@PostMapping("/{equipmentCode}/upload")
public ResponseEntity uploadAttachment(
@PathVariable String equipmentCode,
@RequestParam("file") MultipartFile file) {
String fileId = equipmentService.uploadAttachment(
equipmentCode, file);
return ResponseEntity.ok(fileId);
}
@GetMapping("/search")
public ResponseEntity> searchEquipment(
@RequestParam String keyword,
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size) {
List result = equipmentService.search(keyword, page, size);
return ResponseEntity.ok(result);
}
}

四、前端管理界面开发

4.1 项目初始化

创建Vue项目并安装依赖:

npm create vue@latest equipment-archive-frontend
cd equipment-archive-frontend
npm install element-plus axios vue-router

4.2 设备档案管理页面

创建设备列表组件EquipmentList.vue:


4.3 文件上传组件

创建文件上传组件FileUpload.vue:


五、系统部署与配置

5.1 应用配置文件

创建application.yml配置文件:

server:
port: 8080
spring:
datasource:
url: jdbc:postgresql://localhost:5432/equipment_archive
username: archive_admin
password: Archive@123
driver-class-name: org.postgresql.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true
properties:
hibernate:
format_sql: true
dialect: org.hibernate.dialect.PostgreSQLDialect
minio:
endpoint: http://localhost:9000
accessKey: minioadmin
secretKey: minioadmin123
elasticsearch:
uris: http://localhost:9200
logging:
level:
com.equipment.archive: DEBUG

5.2 Nginx反向代理配置

配置Nginx统一访问入口:

server {
listen 80;
server_name equipment-archive.local;
location /api/ {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location / {
root /var/www/equipment-archive-frontend/dist;
index index.html;
try_files $uri $uri/ /index.html;
}
}

5.3 启动脚本

创建启动脚本start.sh:

!/bin/bash
启动后端服务
cd backend
nohup java -jar equipment-archive-0.0.1-SNAPSHOT.jar > backend.log 2>&1 &
启动前端服务
cd ../frontend
nohup npm run dev > frontend.log 2>&1 &
echo "系统启动完成"
echo "后端服务日志: backend/backend.log"
echo "前端服务日志: frontend/frontend.log"

执行chmod +x start.sh添加执行权限,然后运行./start.sh启动系统。

六、数据迁移与初始化

6.1 历史数据导入

创建数据导入脚本import_data.py:

import pandas as pd
import requests
import json
读取Excel格式的历史设备数据
df = pd.read_excel('historical_equipment.xlsx')
base_url = 'http://localhost:8080/api/equipment'
for _, row in df.iterrows():
equipment_data = {
'equipmentCode': str(row['设备编码']),
'equipmentName': row['设备名称'],
'equipmentType': row['设备类型'],
'specifications': json.dumps({
'功率': row['功率'],
'转速': row['转速'],
'电压': row['电压']
}),
'purchaseDate': row['购置日期'].strftime('%Y-%m-%d'),
'manufacturer': row['生产厂家']
}
response = requests.post(base_url, json=equipment_data)
if response.status_code == 200:
print(f"导入成功: {row['设备编码']}")
else:
print(f"导入失败: {row['设备编码']} - {response.text}")

6.2 创建初始用户与权限

执行SQL脚本创建管理员用户:

INSERT INTO users (username, password, role, created_at)
VALUES (
'admin',
'$2a$10$YourHashedPasswordHere',
'ADMIN',
NOW()
);
-- 创建权限表
CREATE TABLE permissions (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES users(id),
equipment_type VARCHAR(50),
can_view BOOLEAN DEFAULT true,
can_edit BOOLEAN DEFAULT false,
can_delete BOOLEAN DEFAULT false
);
-- 为管理员分配全部权限
INSERT INTO permissions (user_id, equipment_type, can_view, can_edit, can_delete)
VALUES (1, 'ALL', true, true, true);

七、系统监控与维护

7.1 日志配置

配置Logback日志系统:




logs/equipment-archive.log

logs/equipment-archive.%d{yyyy-MM-dd}.log
30


%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
        
太原档案数字化服务流程是怎样的?大概需要多少钱?
太原档案数字化服务流程是怎样的?大概需要多少钱?
太原档案数字化服务通常包含需求分析、方案制定、现场整理、扫描加工、数据挂接、验收交付等核心流程,费用根据档案数量、纸张状况、数字化标准等因素综合计算,2026年市场价格范围大致在每页0.5元至2元之间...
2026年08月18日 09:30:28
微信咨询
电话联系
QQ客服
微信咨询一对一服务
服务热线: 028-8744 4417
QQ客服: 2305721818