煤化工企业档案数字化培训:七天从零搭建完整系统

一、系统架构与核心工具选型

煤化工企业档案管理涉及项目图纸、设备台账、工艺规程等核心资产,本方案采用轻量级B/S架构,无需采购商业软件,通过开源工具实现全流程数字化。

1.1 技术栈清单

  • 文档存储:MinIO(替代FTP,支持S3协议)
  • 元数据管理:PostgreSQL 14(关系型数据库)
  • 全文检索:Elasticsearch 8.x(秒级检索图纸内容)
  • 文档解析:Apache Tika 2.7(解析PDF、CAD等200+格式)
  • 前端框架:Vue 3 + Element Plus
  • 后端框架:Spring Boot 3.0

1.2 硬件最低配置

适用于年增档案5TB以内的中型煤化工厂:

  • 服务器:CPU 8核/内存 32GB/SSD 1TB(系统盘)+ 机械硬盘阵列(根据档案量扩容)
  • 网络:千兆内网,档案上传节点需万兆连接
  • 备份:异地机房或对象存储冷备

二、环境部署:四小时完成基础搭建

2.1 一键安装脚本

在CentOS 7.9服务器上执行:

``` 创建安装目录 mkdir /opt/archive && cd /opt/archive 下载安装包 wget https://repo1.maven.org/maven2/org/apache/tika/tika-server/2.7.0/tika-server-2.7.0.jar wget https://dl.min.io/server/minio/release/linux-amd64/minio wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.8.0-linux-x86_64.tar.gz 安装PostgreSQL sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install -y postgresql14-server sudo /usr/pgsql-14/bin/postgresql-14-setup initdb sudo systemctl start postgresql-14 ```

2.2 关键配置修改

MinIO配置:创建启动脚本/etc/systemd/system/minio.service

``` [Unit] Description=MinIO After=network.target [Service] Type=simple User=root ExecStart=/opt/archive/minio server /data/minio --console-address ":9001" Restart=on-failure [Install] WantedBy=multi-user.target ```

执行systemctl daemon-reload && systemctl start minio,访问http://服务器IP:9001 创建access_key和secret_key。

煤化工企业档案数字化培训:七天从零搭建完整系统

Elasticsearch配置:修改config/elasticsearch.yml

``` cluster.name: archive-cluster node.name: node-1 path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch network.host: 0.0.0.0 http.port: 9200 discovery.type: single-node xpack.security.enabled: false ```

三、数据库设计:煤化工专用字段模板

3.1 核心表结构SQL

``` -- 档案元数据表 CREATE TABLE archive_metadata ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), archive_number VARCHAR(50) NOT NULL UNIQUE, -- 档案编号 title VARCHAR(500) NOT NULL, -- 档案标题 project_code VARCHAR(20), -- 项目代码 unit_name VARCHAR(100), -- 所属装置 equipment_code VARCHAR(50), -- 设备位号 archive_type VARCHAR(20) CHECK (archive_type IN ('设计图纸', '工艺规程', '设备台账', '安全证书', '验收报告')), secret_level VARCHAR(10) CHECK (secret_level IN ('公开', '内部', '秘密', '机密')), file_format VARCHAR(10), -- 文件格式 file_size BIGINT, -- 文件大小(字节) storage_path TEXT NOT NULL, -- MinIO存储路径 upload_user VARCHAR(50), upload_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, keywords TEXT[], -- 关键词数组 INDEX idx_project (project_code), INDEX idx_equipment (equipment_code) ); -- 借阅记录表 CREATE TABLE borrow_records ( id SERIAL PRIMARY KEY, archive_id UUID REFERENCES archive_metadata(id), borrower VARCHAR(50) NOT NULL, borrow_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, return_time TIMESTAMP, borrow_purpose TEXT, approval_status VARCHAR(20) DEFAULT '待审批' ); ```

3.2 煤化工专用字段说明

  • project_code:按“年份+项目类型+序号”规则,如“2023-SXGZ-001”表示2023年技术改造项目
  • equipment_code:遵循企业设备位号规范,如“R-2101A”表示2车间第1套反应器A
  • keywords:必须包含“煤种/工艺/设备类型”组合,如{"褐煤", "气化炉", "压力容器"}

四、核心功能实现:上传、解析、检索全流程

4.1 档案上传接口(Java示例)

``` @PostMapping("/upload") public ResponseEntity uploadArchive( @RequestParam("file") MultipartFile file, @RequestParam("projectCode") String projectCode, @RequestParam("equipmentCode") String equipmentCode) { // 1. 文件存储到MinIO String objectName = UUID.randomUUID() + "_" + file.getOriginalFilename(); minioClient.putObject( PutObjectArgs.builder() .bucket("coal-archive") .object(objectName) .stream(file.getInputStream(), file.getSize(), -1) .contentType(file.getContentType()) .build() ); // 2. 调用Tika提取文本内容(用于全文检索) String content = tika.parseToString(file.getInputStream()); // 3. 元数据存入PostgreSQL ArchiveMetadata metadata = ArchiveMetadata.builder() .archiveNumber(generateArchiveNumber()) .title(file.getOriginalFilename()) .projectCode(projectCode) .equipmentCode(equipmentCode) .storagePath(objectName) .fileSize(file.getSize()) .build(); metadataRepository.save(metadata); // 4. 建立Elasticsearch索引 IndexRequest request = new IndexRequest("archive_index") .id(metadata.getId().toString()) .source(Map.of( "title", metadata.getTitle(), "content", content, "project_code", projectCode, "equipment_code", equipmentCode )); elasticsearchClient.index(request, RequestOptions.DEFAULT); return ResponseEntity.ok(convertToDTO(metadata)); } ```

4.2 全文检索实现

Elasticsearch查询DSL模板:

``` GET /archive_index/_search { "query": { "bool": { "must": [ { "multi_match": { "query": "气化炉 压力 异常", "fields": ["title^3", "content", "keywords^2"], "type": "best_fields" } } ], "filter": [ { "term": { "project_code": "2023-SXGZ-001" } }, { "range": { "upload_time": { "gte": "2023-01-01" } } } ] } }, "highlight": { "fields": { "content": { "fragment_size": 150 } } } } ```

五、权限控制:基于角色的四层安全模型

5.1 角色权限表

``` CREATE TABLE role_permissions ( role_id SERIAL PRIMARY KEY, role_name VARCHAR(20) UNIQUE, can_upload BOOLEAN DEFAULT false, can_download BOOLEAN DEFAULT false, can_borrow BOOLEAN DEFAULT false, can_approve_borrow BOOLEAN DEFAULT false, can_delete BOOLEAN DEFAULT false, max_secret_level VARCHAR(10) -- 可访问的最高密级 ); -- 初始化角色数据 INSERT INTO role_permissions VALUES (1, '操作员', true, true, true, false, false, '内部'), (2, '技术员', true, true, true, false, false, '秘密'), (3, '工程师', true, true, true, true, false, '机密'), (4, '档案管理员', true, true, true, true, true, '机密'); ```

5.2 接口权限注解

``` @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @PreAuthorize("hasRole('ENGINEER') or hasRole('ARCHIVE_ADMIN')") public @interface RequireApprovePermission { } // 在借阅审批接口使用 @RequireApprovePermission @PostMapping("/borrow/approve") public void approveBorrow(@RequestParam Long recordId) { // 审批逻辑 } ```

六、培训实操:七天速成计划

6.1 每日培训任务

  • 第一天:环境搭建。学员在虚拟机完成MinIO、PostgreSQL、Elasticsearch安装,创建测试桶和数据库
  • 第二天:档案上传。使用Postman测试上传接口,上传5份不同类型的工艺文件
  • 第三天:元数据管理。通过pgAdmin执行SQL查询,练习按装置、设备、时间组合查询
  • 第四天:全文检索。在Kibana中编写查询语句,检索包含特定关键词的文档
  • 第五天:权限配置。创建不同角色用户,测试权限差异
  • 第六天:备份恢复。配置pg_dump定时备份,练习从备份文件恢复数据
  • 第七天:故障排查。模拟磁盘满、服务宕机、网络中断场景的恢复流程

6.2 考核标准

  • 能在30分钟内完成所有服务启动
  • 能独立编写复杂检索查询(至少3个过滤条件)
  • 能正确配置新装置的权限规则
  • 能使用Wireshark诊断上传速度慢的问题

七、运维监控:确保系统稳定运行

7.1 健康检查脚本

创建/opt/archive/health_check.sh

``` !/bin/bash 检查服务端口 services=("localhost:5432" "localhost:9000" "localhost:9200" "localhost:9998") for service in "${services[@]}"; do if ! nc -z ${service%:} ${service:} 2>/dev/null; then echo "CRITICAL: $service 服务异常" | mail -s "档案系统告警" admin@coalchem.com fi done 检查磁盘使用率 if [ $(df /data | awk 'NR==2 {print $5}' | sed 's/%//') -gt 85 ]; then echo "WARNING: 存储空间超过85%" >> /var/log/archive_monitor.log fi 检查索引完整性 curl -X GET "localhost:9200/_cat/indices?v" | grep -q archive_index if [ $? -ne 0 ]; then systemctl restart elasticsearch fi ```

添加到crontab:/5 /opt/archive/health_check.sh

7.2 备份策略

  • 数据库:每日02:00全量备份,保留30天
    pg_dump -U postgres archive_db | gzip > /backup/archive_$(date +%Y%m%d).sql.gz
  • MinIO对象:每周日同步到异地存储桶
    mc mirror --overwrite /data/minio/coal-archive backup-bucket/coal-archive
  • 配置文件:版本化管理,提交到Git仓库

按照以上步骤实施,可在七天内完成煤化工档案数字化系统的从零搭建到全员培训。系统上线后,档案检索时间可从原来的小时级降至秒级,借阅审批流程从3天缩短至2小时内,且所有操作均有完整审计日志。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

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

微信扫码关注安答联动

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

安答联动档案管理系统