一、基础环境准备与数据库部署
本系统采用前后端分离架构,后端使用Python进行数据分析,前端使用Vue.js展示可视化大屏,数据存储采用MySQL。首先需要确保本地已安装Docker和Docker Compose,这是最快捷的环境部署方式。
1. 创建项目目录结构
在终端执行以下命令,创建项目根目录及必要的子目录:
```bash
mkdir digital_archive_analysis
cd digital_archive_analysis
mkdir backend frontend mysql-data
```
2. 编写Docker Compose配置文件
在项目根目录下创建docker-compose.yml文件,用于一键启动MySQL服务。该配置文件定义了数据库服务、端口映射、初始化脚本以及数据持久化路径。
```yaml
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: archive_db
environment:
MYSQL_ROOT_PASSWORD: root123456
MYSQL_DATABASE: archive_db
MYSQL_USER: archive_user
MYSQL_PASSWORD: archive_pass
ports:
- "3306:3306"
volumes:
- ./mysql-data:/var/lib/mysql
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
command: --default-authentication-plugin=mysql_native_password
```
3. 编写数据库初始化脚本
在项目根目录下创建init.sql文件。此脚本将在容器首次启动时自动执行,用于创建档案表并插入模拟数据,确保系统启动即有数据可分析。
```sql
USE archive_db;
CREATE TABLE IF NOT EXISTS archive_records (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL COMMENT '档案标题',
category VARCHAR(50) NOT NULL COMMENT '档案分类:文书、科技、会计等',
department VARCHAR(50) NOT NULL COMMENT '归档部门',
retention_period VARCHAR(20) NOT NULL COMMENT '保管期限:永久、长期、短期',
create_time DATETIME NOT NULL COMMENT '归档日期',
file_size INT DEFAULT 0 COMMENT '文件大小(KB)',
page_count INT DEFAULT 0 COMMENT '页数'
);
-- 插入模拟数据
INSERT INTO archive_records (title, category, department, retention_period, create_time, file_size, page_count) VALUES
('2020年度财务决算报告', '会计档案', '财务部', '永久', '2021-03-15 10:00:00', 5200, 45),
('2021年研发项目技术图纸A组', '科技档案', '研发一部', '长期', '2022-01-20 14:30:00', 12500, 120),
('2022年公司章程修订版', '文书档案', '办公室', '永久', '2022-05-10 09:15:00', 300, 15),
('2021年员工劳动合同批量', '人事档案', '人力资源部', '长期', '2022-04-01 11:20:00', 8900, 300),
('2022年上半年采购合同汇总', '文书档案', '采购部', '长期', '2022-07-15 16:00:00', 4500, 60),
('2020年基建工程验收报告', '科技档案', '基建部', '永久', '2021-11-30 13:45:00', 7800, 85),
('2022年市场调研分析报告', '文书档案', '市场部', '短期', '2023-01-05 10:30:00', 2100, 25),
('2021年设备维护日志', '科技档案', '生产部', '短期', '2022-12-20 15:10:00', 1500, 12);
```
保存文件后,在终端执行docker-compose up -d启动数据库服务。等待约30秒,确保数据库初始化完成。
二、后端数据分析服务开发
后端采用Python的FastAPI框架,配合Pandas进行高效的数据统计处理。进入backend目录进行操作。
1. 安装Python依赖
首先创建虚拟环境并安装必要的库。创建requirements.txt:
```text
fastapi==0.104.1
uvicorn==0.24.0
pandas==2.1.3
sqlalchemy==2.0.23
pymysql==1.1.0
pydantic==2.5.0
```
执行安装命令:
```bash
cd backend
python3 -m venv venv
source venv/bin/activate Windows系统使用 venv\Scripts\activate
pip install -r requirements.txt
```
2. 编写数据分析核心代码
创建main.py文件。该文件包含数据库连接、两个核心分析接口(档案年度趋势、档案类别分布)的完整逻辑。
```python
from fastapi import FastAPI
from sqlalchemy import create_engine, text
import pandas as pd
from pydantic import BaseModel
from typing import List, Dict, Any
app = FastAPI(title="数字档案馆大数据分析API")
数据库连接配置
注意:host需填写docker容器的IP或主机IP,本地测试通常用localhost或host.docker.internal
DATABASE_URL = "mysql+pymysql://archive_user:archive_pass@localhost:3306/archive_db"
engine = create_engine(DATABASE_URL)
class AnalysisResponse(BaseModel):
status: str
data: List[Dict[str, Any]]
@app.get("/")
def read_root():
return {"message": "Archive Analysis System is Running"}
@app.get("/api/trend/yearly", response_model=AnalysisResponse)
def get_yearly_trend():
"""
统计各年度归档档案数量趋势
"""
query = """
SELECT YEAR(create_time) as year, COUNT() as count
FROM archive_records
GROUP BY YEAR(create_time)
ORDER BY year ASC
"""
try:
df = pd.read_sql(query, engine)
将DataFrame转换为字典列表,方便前端JSON解析
data = df.to_dict(orient='records')
return AnalysisResponse(status="success", data=data)
except Exception as e:
return AnalysisResponse(status="error", data=[{"error": str(e)}])
@app.get("/api/distribution/category", response_model=AnalysisResponse)
def get_category_distribution():
"""
统计不同档案类别的占比情况
"""
query = """
SELECT category, COUNT() as count
FROM archive_records
GROUP BY category
"""
try:
df = pd.read_sql(query, engine)
data = df.to_dict(orient='records')
return AnalysisResponse(status="success", data=data)
except Exception as e:
return AnalysisResponse(status="error", data=[{"error": str(e)}])
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
```
3. 启动后端服务

在backend目录下执行以下命令启动API服务:
```bash
python main.py
```
服务启动后,访问 http://localhost:8000/docs 可看到自动生成的API文档,测试接口确保返回JSON数据正常。
三、前端可视化大屏搭建
前端使用Vue 3和ECharts构建可视化界面。进入frontend目录进行操作。
1. 初始化Vue项目
使用Vite创建项目,并安装ECharts和Axios依赖:
```bash
cd ../frontend
npm create vite@latest archive-dashboard -- --template vue
cd archive-dashboard
npm install
npm install echarts axios
```
2. 编写主页面组件
修改src/App.vue,删除默认内容,编写完整的可视化逻辑。页面包含两个图表:年度归档趋势柱状图和档案类别分布饼图。
```html
```
四、系统启动与效果验证
现在所有组件已开发完毕,按照以下步骤启动前端服务并查看最终效果。
1. 启动前端服务
确保后端服务和Docker数据库均在运行状态。在frontend/archive-dashboard目录下执行:
```bash
npm run dev
```
2. 访问与验证
终端会输出本地访问地址,通常是 http://localhost:5173。使用浏览器访问该地址。
预期效果:
- 页面顶部显示标题“数字档案馆档案大数据分析系统”。
- 左侧展示柱状图,X轴为年份(如2020, 2021, 2022),Y轴为对应的档案数量,直观反映归档工作量变化。
- 右侧展示饼图,显示文书档案、科技档案、会计档案等类别的占比,鼠标悬停可查看具体数值。
3. 常见问题排查
如果页面显示空白或图表不加载,请按以下步骤排查:
- 跨域问题(CORS): 如果浏览器控制台报错CORS,需在后端
main.py中添加from fastapi.middleware.cors import CORSMiddleware并配置允许跨域,或者确保前端请求地址正确。
- 数据库连接失败: 确认Docker容器正在运行,且
main.py中的DATABASE_URL用户名密码与docker-compose.yml中配置的一致。