feat: v2.0.0 done

This commit is contained in:
2026-01-15 15:59:38 +08:00
parent 5b50c9750f
commit 9fa12cb7f5
26 changed files with 1498 additions and 2037 deletions
+106 -102
View File
@@ -1,112 +1,133 @@
# CapacityReport - 容量报表处理程序
# CapacityReport - 容量报表处理系统
容量报表数据处理系统,支持 Excel/CSV 文件上传、数据提取、清洗和导入 MySQL 数据库。
支持 Excel/CSV 文件上传、数据提取、清洗和导入 MySQL 数据库。
## 技术栈
- **后端**: FastAPI + Uvicorn + Supervisor
- **前端**: 原生 JavaScript + HTML/CSS
- **数据库**: MySQL (PyMySQL + SQLAlchemy)
- **数据库**: MySQL 8.0+ (PyMySQL + SQLAlchemy)
- **数据处理**: Pandas + OpenPyXL
- **部署**: Docker + Supervisor
- **部署**: Docker + Docker Compose
## 系统架构
## 数据库要求
```mermaid
graph TB
A[浏览器] -->|HTTP| B[FastAPI]
B -->|静态文件| C[Static Files]
B -->|API请求| D[业务逻辑层]
D -->|数据处理| E[DataProcessor]
D -->|数据管理| F[DatabaseManager]
D -->|历史记录| G[HistoryManager]
E -->|批量插入| H[MySQL]
F -->|连接池| H
I[Supervisor] -->|管理进程| J[Uvicorn]
J -->|运行| B
- **MySQL**: >= 8.0, < 9.0
- **字符集**: utf8mb4
- **必需功能**: LOAD DATA LOCAL INFILE
## 目录结构
```
CapaReport/
├── app/ # 应用代码
│ ├── main.py # FastAPI 入口
│ ├── processor.py # 数据处理
│ ├── database.py # 数据库管理
│ ├── history.py # 历史记录
│ └── config.py # 配置管理
├── build/ # 构建脚本和配置
│ ├── build.py # 统一构建脚本
│ ├── Dockerfile # Docker 镜像定义
│ ├── docker-compose.yml # Docker Compose 编排
│ └── mysql/ # MySQL 配置
├── static/ # 前端静态文件
│ ├── index.html
│ ├── css/
│ └── js/
├── Configure.json # 应用配置
├── ReportScript.sql # SQL 处理脚本
├── requirements.txt # Python 依赖
└── supervisord.conf # Supervisor 配置
```
## 核心模块
## 本地运行
- `app/main.py` - FastAPI 应用入口,API 路由
- `app/processor.py` - 数据处理核心(ZIP解压、Excel转CSV、CSV导入)
- `app/database.py` - 数据库连接与批量插入
- `app/history.py` - 处理历史记录管理
- `app/config.py` - 配置管理
### 前置要求
## 数据流程
- Python >= 3.10, < 3.14
- MySQL >= 8.0, < 9.0
```mermaid
flowchart TD
A[上传文件] --> B{文件类型}
B -->|ZIP| C[解压ZIP]
B -->|Excel| D[Excel转CSV]
B -->|CSV| E[直接处理]
C --> D
D --> F[字段映射]
E --> F
F --> G[数据清洗]
G --> H[批量插入MySQL]
H --> I[执行SQL脚本]
I --> J[生成结果表]
```
## 上传处理时序
```mermaid
sequenceDiagram
participant U as 用户
participant F as 前端
participant A as FastAPI
participant P as DataProcessor
participant D as MySQL
U->>F: 选择文件上传
F->>A: POST /api/upload
A->>A: 保存文件到 cache/
A->>F: 返回 task_id
F->>A: POST /api/process/start
A->>P: 启动处理任务
P->>P: 解压ZIP/处理Excel
P->>P: 读取CSV并清洗
P->>D: 批量插入数据
P->>D: 执行SQL脚本
P->>A: 返回处理结果
A->>F: 推送日志更新
F->>U: 显示处理进度
```
## 部署
### Docker 部署
### 安装依赖
```bash
docker build -t capareport .
docker run -d --restart=always -p 9081:9081 capareport
```
### Windows 部署
```bash
# 安装依赖
pip install -r requirements.txt
```
# 启动服务(自动重启模式)
### 配置数据库
编辑 `Configure.json`,设置 MySQL 连接信息:
```json
{
"MySQL_DBInfo": {
"host": "127.0.0.1",
"port": 3306,
"user": "root",
"passwd": "your_password",
"dbname": "CapacityReport"
}
}
```
### 启动服务
**Windows**:
```bash
run.bat
```
### Linux 部署
**Linux**:
```bash
# 使用 Supervisor
supervisord -c supervisord.conf
```
访问: http://localhost:9081
## Docker 编译与部署
### 构建部署包
```bash
python build/build.py
```
选择构建类型:
- `1` - 完整部署包(MySQL + 应用)
- `2` - 更新包(仅应用)
输出文件在 `dist/` 目录:
- `capacity-report-full.tar.gz` - 完整部署包
- `capacity-report-update.tar.gz` - 更新包
### 部署
**完整部署**:
```bash
tar -xzf capacity-report-full.tar.gz
cd capacity-report-full
sh deploy.sh
```
**更新应用**:
```bash
tar -xzf capacity-report-update.tar.gz
cd capacity-report-update
sh update.sh
```
### 配置说明
Docker 环境配置在 `build/build.py` 文件头部:
- 默认镜像版本
- 数据库账号密码
- 端口映射
部署包中的 `Configure.json` 会自动更新为 Docker 环境配置。
## 配置
配置文件: `Configure.json`
`Configure.json` 主要配置项:
- `MySQL_DBInfo` - 数据库连接信息
- `SheetFilter` - Excel Sheet 过滤规则
@@ -116,24 +137,7 @@ supervisord -c supervisord.conf
- `POST /api/upload` - 上传文件
- `POST /api/process/start` - 启动处理
- `POST /api/process/status` - 查询处理状态
- `POST /api/history` - 获取历史记录
- `GET /api/process/status` - 查询状态
- `GET /api/history` - 获取历史记录
- `POST /api/service/restart` - 重启服务
- `GET /api/service/status` - 服务状态
## 目录结构
```
CapaReport/
├── app/ # 应用代码
│ ├── main.py # FastAPI 入口
│ ├── processor.py # 数据处理
│ ├── database.py # 数据库管理
│ ├── history.py # 历史记录
│ └── config.py # 配置管理
├── static/ # 前端静态文件
├── cache/ # 临时文件目录
├── Configure.json # 配置文件
├── Dockerfile # Docker 配置
└── supervisord.conf # Supervisor 配置
```
- `GET /api/health` - 健康检查