模块拆分 init

This commit is contained in:
2026-08-27 14:53:22 +08:00
parent e6ddea33a2
commit 3ea59551db
15 changed files with 2191 additions and 1399 deletions
+360 -238
View File
@@ -1,4 +1,4 @@
# Gemold - 模具制造管理系统
# geMoldInsight
<div align="center">
@@ -7,319 +7,441 @@
![FastAPI](https://img.shields.io/badge/fastapi-0.100.0-green)
![Vue.js](https://img.shields.io/badge/vue.js-3-green)
![PostgreSQL](https://img.shields.io/badge/postgresql-15-blue)
![License](https://img.shields.io/badge/license-Mit-green)
![License](https://img.shields.io/badge/license-MIT-green)
</div>
## 项目简介
geMoldInsight 是一个面向模具制造场景的综合系统,围绕 **STP/STEP 模型分析、模具方案生成、分析结果沉淀、成品创建、BOM/库存/采购/销售闭环** 展开。
**Gemold** 是一个面向模具制造行业的综合性管理系统,集成了STP文件分析、模具设计建议、用户权限管理和进销存功能。 系统采用现代化的技术栈,提供高效、稳定、易扩展的解决方案。
当前项目已经从早期单体演进为:
### 核心功能
- **gemold(moldinsight)模块**:模具分析、几何处理、批量分析、成本估算、结果导出
- **inventory 模块**:产品、BOM、库存、采购、销售、财务
- **frontend 模块**:Vue 3 前端工程
- **shared 平台层**:配置、数据库、认证、日志、应用工厂
| 功能模块 | 描述 |
|---------|------|
| 🔷 STP文件分析 | 使用PythonOCC解析STP文件,提取几何特征 |
| 📊 模具设计建议 | 自动生成型腔、型芯、工艺参数等设计方案 |
| 🎨 3D可视化 | 实时预览产品模型和模具结构 |
| 👥 用户权限管理 | 完整的角色权限控制系统 |
| 📦 进销存管理 | 库存、供应商、客户管理 |
| 💾 数据持久化 | PostgreSQL + RustFS存储 |
项目当前采用:
> **单仓库 + 单数据库 + 多模块 + 可独立部署**
详细重构方向见:[BACKEND_MODULARIZATION_BLUEPRINT.md](docs/BACKEND_MODULARIZATION_BLUEPRINT.md)
---
## 核心能力
| 模块 | 能力 |
|---|---|
| gemold | STP/STEP 上传、几何分析、特征识别、模具方案、批量分析、成本估算、结果导出 |
| inventory | 成品/物料、BOM、库存、库存流水、采购订单、销售订单、财务、采购建议 |
| integration | 分析结果一键创建成品,打通“模具分析 → 成品 → BOM → 销售/采购/库存” |
| platform | 用户、角色、权限、JWT 鉴权、数据库连接、日志、健康检查 |
---
## 技术栈
### 后端
- **FastAPI** - 笷性能异步Web框架
- **PythonOCC** - 专业CAD几何处理
- **SQLAlchemy** - ORM框架
- **PostgreSQL** - 关系型数据库
- **RustFS** - 高性能文件存储
- **FastAPI**
- **SQLAlchemy 2.0**
- **PostgreSQL**
- **Alembic**
- **Redis**
- **Celery**
- **PythonOCC / trimesh / pyvista**
- **RustFS / MinIO 兼容对象存储**
### 前端
- **Vue.js 3** - 渐进式JavaScript框架
- **Three.js** - 3D可视化库
- **原生CSS** - 白色简约现代风格
- **Vue 3**
- **Vite**
- **TypeScript**
- **Pinia**
- **Vue Router**
- **TDesign Vue Next**
### 基础设施
- **Docker** - 容器化部署
- **Systemd** - 服务管理
- **Conda** - 环境管理
- **Docker / Docker Compose**
- **结构化日志 / request_id**
- **OpenAPI → TypeScript 类型生成**
---
## 项目结构
## 当前项目结构
```
> 下述结构反映的是**当前代码现状**,不是历史单体结构。
```text
geMoldInsight/
├── src/ # 源代码目录
│ ├── main.py # 主程序入口
│ ├── api/ # API路由层
│ │ ├── routes.py # 模具分析API路由聚合
│ │ ├── auth_routes.py # 认证API
│ │ ├── v1/ # MoldInsight API (v1)
│ │ │ ├── upload_router.py # 文件上传
│ │ │ ├── task_router.py # 任务状态查询
│ │ │ └── history_router.py # 分析历史
│ │ └── inventory/ # 进销存API
│ │ ├── product_routes.py # 产品管理
│ │ ├── sales_order_routes.py # 销售订单
│ │ ├── purchase_order_routes.py # 采购订单
│ │ ├── finance_routes.py # 财务管理
│ │ ├── material_routes.py # 物料管理
│ │ └── schemas/ # 请求/响应模型
│ ├── core/ # 核心业务逻辑
│ │ ├── stp_parser.py # STP文件解析
│ │ ├── geometry_analyzer.py # 几何分析
│ │ ├── mesh_generator.py # 网格生成
│ │ ├── mold_generator.py # 普通塑料模具生成
│ │ ├── aluminum_foam_mold.py # 铝泡沫模具生成
│ │ ├── mold_quality_inspector.py # 模具质量检测
│ │ └── ai_mold_assistant.py # AI模具助手
│ ├── models/ # 数据模型
│ │ ├── database.py # SQLAlchemy ORM模型
│ │ └── schemas.py # Pydantic模式
│ ├── services/ # 服务层
│ │ ├── auth_service.py # 认证服务
│ │ ├── processing_service.py # STP处理流程编排
│ │ ├── calculation_service.py # 工程参数计算
│ │ ├── material_service.py # 材料属性管理
│ │ ├── task_query_service.py # 任务状态查询
│ │ ├── storage_integration_rustfs.py # RustFS存储集成
│ │ ├── redis_task_manager.py # Redis任务管理
│ │ └── verification_service.py # FreeCAD几何验证
│ ├── database/ # 数据库管理
│ │ ├── database.py # 数据库连接池
│ │ ├── init_db.py # 数据库初始化
│ │ └── migrate_db.py # 数据库迁移
│ ├── storage/ # 对象存储
│ │ ├── rustfs_storage.py # RustFS S3客户端
│ │ └── object_storage.py # 通用对象存储
│ └── utils/ # 工具类
│ ├── logger.py # 日志工具
│ ├── file_handler.py # 文件处理
│ └── html_generator.py # 3D可视化HTML生成
├── static/ # 前端静态资源
│ ├── vue-app.js # Vue3 SPA应用
│ ├── style.css # 全局样式
│ └── index.html # 入口页面
├── templates/ # Jinja2模板
├── config/ # 配置模块
│ └── settings.py # 环境变量配置
├── scripts/ # 脚本工具
│ ├── db/ # SQL脚本
│ ├── migrations/ # 数据迁移脚本
│ ├── tools/ # 临时检查/清理工具
│ └── verify_stp.py # STP验证脚本
├── docs/ # 项目文档
│ └── deployment/ # 部署相关文档
├── tests/ # 测试用例
├── uploads/ # 上传文件目录 (gitignore)
├── html_output/ # 3D可视化输出 (gitignore)
├── requirements.txt # Python依赖
├── docker-compose.yml # Docker编排配置
├── Dockerfile # Docker构建文件
├── start.sh # Linux启动脚本
├── .env.example # 环境变量模板
└── .env # 环境变量 (gitignore)
├── src/
│ ├── entrypoints/ # 独立部署入口
│ │ ├── moldinsight.py # gemold-only 入口
│ │ └── inventory.py # inventory-only 入口
│ │
│ ├── shared/ # 共享平台层(当前形态)
│ │ ├── app_factory.py # FastAPI 应用工厂
│ │ ├── config/ # 配置
│ │ ├── database/ # DB engine / session / init
│ │ ├── models/ # 共享 ORM 模型(当前最大耦合点)
│ │ ├── services/ # 认证、Redis 等共享服务
│ │ └── utils/ # 日志、文件、HTML 工具
│ │
│ ├── moldinsight/ # gemold 模块
│ │ ├── api/
│ │ ├── core/
│ │ ├── services/
│ │ └── storage/
│ │
│ ├── inventory/ # inventory 模块
│ │ ├── api/
│ │ ├── schemas/
│ │ └── services/
│ │
│ ├── celery_app.py # Celery app
│ ├── celery_tasks.py # gemold 异步任务
│ └── main.py # 旧统一入口(兼容/过渡)
│
├── frontend/ # 独立前端工程
│ ├── src/
│ │ ├── modules/
│ │ │ ├── moldinsight/
│ │ │ ├── inventory/
│ │ │ ├── login/
│ │ │ ├── users/
│ │ │ └── home/
│ │ ├── router/
│ │ ├── shared/
│ │ ├── stores/
│ │ └── types/
│ └── package.json
│
├── alembic/ # Alembic migrations
├── deploy/ # 镜像构建与部署辅助文件
│ ├── Dockerfile.base
│ ├── Dockerfile.moldinsight
│ ├── Dockerfile.inventory
│ └── Dockerfile.celery
│
├── docs/
├── tests/
├── requirements.txt
└── .env.example
```
---
## 模块说明
### 1. gemold(moldinsight)
主要负责:
- STP/STEP 上传与任务管理
- 几何分析与特征识别
- 模具方案、型腔/型芯/工艺建议
- 批量分析
- 成本估算
- 导出与结果查询
- Celery 异步处理
关键目录:
- [src/moldinsight/](src/moldinsight/)
- [src/celery_app.py](src/celery_app.py)
- [src/celery_tasks.py](src/celery_tasks.py)
### 2. inventory
主要负责:
- 成品/物料管理
- BOM
- 库存与库存流水
- 采购订单 / 销售订单
- 财务与对账
- 采购建议推导
关键目录:
- [src/inventory/](src/inventory/)
### 3. frontend
主要负责:
- 模具分析页面
- 进销存页面
- 登录/用户管理
- 统一路由与状态管理
- 基于 OpenAPI 生成类型的前端 API 调用
关键目录:
- [frontend/](frontend/)
### 4. shared(当前平台层)
主要负责:
- 配置
- 数据库连接与 session
- 认证与权限
- 日志与 request_id
- 应用工厂与通用中间件
关键目录:
- [src/shared/](src/shared/)
> 说明:后续会逐步将 `shared` 收敛为更清晰的 `platform` 语义,见 [BACKEND_MODULARIZATION_BLUEPRINT.md](docs/BACKEND_MODULARIZATION_BLUEPRINT.md)。
---
## 部署模式
当前项目设计上支持三种模式:
### 1. unified
一个统一后端同时挂载 gemold + inventory。
适合:
- 本地开发
- 集成环境
- 小团队统一部署
### 2. gemold-only
只部署模具分析后端。
适合:
- 单独开放分析能力
- 分析任务独立扩容
- 文件处理与异步任务独立部署
入口参考:
- [src/entrypoints/moldinsight.py](src/entrypoints/moldinsight.py)
### 3. inventory-only
只部署进销存后端。
适合:
- 仅使用 ERP / 库存能力
- 与 gemold 分开部署节奏
入口参考:
- [src/entrypoints/inventory.py](src/entrypoints/inventory.py)
---
## 快速开始
### 1. 环境要求
- Python 3.10+
- PostgreSQL 13+
- Conda (推荐)
## 1. 环境要求
### 2. 安装依赖
- Python 3.12
- PostgreSQL 15+(服务器已部署或自行提供)
- Redis(服务器已部署或自行提供)
- 对象存储(MinIO / RustFS 兼容;gemold 模块需要,服务器已部署或自行提供)
- Node.js 20+(前端开发需要)
- 推荐使用 `docker-compose.yml` 仅启动项目自身服务,复用服务器已有 PostgreSQL / Redis / 对象存储
---
## 2. 安装后端依赖
```bash
# 创建Conda环境
conda create -n py_3.12 python=3.12
# 激活环境
conda activate py_3.12
# 安装依赖
pip install -r requirements.txt
```
### 3. 配置环境变量
如果需要几何分析能力,还需确保 PythonOCC 运行环境可用。项目中已说明其通常通过 conda 提供,而不是直接由 pip 安装。
创建 `.env` 文件:
---
## 3. 配置环境变量
复制并编辑:
- [`.env.example`](.env.example)
- 部署场景也可参考 [deploy/.env.example](deploy/.env.example)
最少需要关注:
```env
# 数据库配置
DATABASE_URL=postgresql+asyncpg://user:password@localhost:5432/gemold
# 服务配置
SECRET_KEY=your-secret-key-here
HOST=0.0.0.0
PORT=8000
# 管理员配置
DB_HOST=localhost
DB_PORT=5432
DB_NAME=moldinsight
DB_USER=moldinsight_user
DB_PASSWORD=moldinsight_password
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=
SECRET_KEY=change-me
ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin123
ADMIN_PASSWORD=change-me
RUSTFS_ENDPOINT=http://localhost:9000
RUSTFS_ACCESS_KEY=your-access-key
RUSTFS_SECRET_KEY=your-secret-key
```
### 4. 初始化数据库
```bash
python src/database/init_db.py
```
### 5. 启动服务
**Linux:**
```bash
chmod +x start.sh
./start.sh
```
**Windows:**
```cmd
start.bat
```
**Docker:**
```bash
docker-compose up -d
```
### 6. 访问服务
- 服务地址: http://localhost:8000
- 默认管理员: admin / admin123
更多配置项见:
- [settings.py](src/shared/config/settings.py)
- [.env.example](.env.example)
---
## 核心功能详解
## 4. 初始化数据库
### STP文件分析
项目当前使用 Alembic 管理迁移。应用启动时也会执行初始化逻辑,但首次部署建议显式执行迁移流程。
系统使用PythonOCC解析STP文件,提取以下几何特征:
| 特征类型 | 描述 |
|---------|------|
| 边界框 | 产品整体尺寸 |
| 体积 | 产品体积计算 |
| 表面积 | 产品表面积计算 |
| 壁厚 | 壁厚分布分析 |
| 加强筋 | 加强筋位置和密度 |
| 孔洞 | 孔洞和凹槽位置 |
| 倒扣 | 倒扣区域检测 |
| 对称性 | 对称性分析 |
| 重心 | 重心位置计算 |
### 模具设计建议
系统自动生成以下设计建议。
| 建议类型 | 描述 |
|---------|------|
| 型腔数量 | 单腔或多腔建议 |
| 模架尺寸 | 基于产品尺寸推荐 |
| 顶出系统 | 顶针顶出布局 |
| 冷却水路 | 冷却需求分析 |
| 材料选择 | 基于产量推荐材料 |
### 3D可视化
- **点云模型** - 从STP提取的真实几何形状
- **模具型腔** - 型腔和型芯可视化
- **分型面** - 分型面位置显示
- **交互控制** - 旋转、缩放、平移
- **视图切换** - 显示/隐藏各组件
如需查看初始化实现,可参考:
- [init_db.py](src/shared/database/init_db.py)
---
## API文档
## 5. 启动方式
### 认证API
### 方式 A:使用根目录 Compose(推荐)
```
POST /api/auth/login # 用户登录
POST /api/auth/logout # 用户登出
GET /api/auth/me # 获取当前用户信息
当前唯一 Compose 入口:
- [docker-compose.yml](docker-compose.yml)
该 compose 文件**只启动项目自身容器**:
- `moldinsight`
- `moldinsight-celery`
- `inventory`
并通过 `.env` 连接服务器上**已经存在**的:
- PostgreSQL
- Redis
- RustFS / MinIO 兼容对象存储
示例:
```bash
docker compose --profile full up -d
```
### 文件分析API
可选 profile:
- `full`
- `moldinsight`
- `inventory`
```
POST /api/upload # 上传STP文件
POST /api/status/{task_id} # 获取分析状态
GET /api/history # 获取分析历史
> 说明:`docker-compose.yml` 不再重复部署 postgres / redis / minio,而是复用服务器现有基础设施。
### 方式 B:直接启动后端入口
gemold-only:
```bash
uvicorn src.entrypoints.moldinsight:app --reload --host 0.0.0.0 --port 8000
```
### 进销存API
inventory-only:
```bash
uvicorn src.entrypoints.inventory:app --reload --host 0.0.0.0 --port 8001
```
GET /api/inventory/dashboard # 仪表盘数据
GET /api/inventory/products # 产品列表
POST /api/inventory/products # 创建产品
### 方式 C:启动前端
```bash
cd frontend
npm install
npm run dev
```
生产构建:
```bash
cd frontend
npm run build
```
---
## 部署指南
## 健康检查与接口
### Systemd服务 (Linux)
### 健康检查
```bash
# 复制服务文件
sudo cp gemoldinsight.service /etc/systemd/system/
两类后端都通过共享 app factory 暴露健康检查:
# 启用服务
sudo systemctl enable gemoldinsight
- `GET /health`
- `POST /health`
# 启动服务
sudo systemctl start gemoldinsight
```
参考实现:
- [app_factory.py](src/shared/app_factory.py)
### Docker部署
### 认证接口
```bash
# 构建镜像
docker build -t gemold:latest .
- `POST /api/auth/login`
- `POST /api/auth/logout`
- `GET /api/auth/me`
# 启动容器
docker-compose up -d
```
### gemold 典型接口
- `POST /api/upload`
- `POST /api/batch-upload`
- `GET /api/status/{task_id}`
- `GET /api/history`
- `POST /api/cost-estimate`
### inventory 典型接口
- `GET /api/products`
- `GET /api/inventory`
- `GET /api/purchase-orders`
- `GET /api/sales-orders`
- `GET /api/finance/*`
统一契约输出可参考:
- [openapi.json](openapi.json)
- [frontend/src/types/api.ts](frontend/src/types/api.ts)
---
## 开发指南
## 当前架构重点说明
### 代码风格
- 遵循PEP 8规范
- 使用类型注解
- 保持函数简洁
### 1. gemold 与 inventory 已基本模块化
### 提交规范
- feat: 新功能
- fix: 修复bug
- docs: 文档更新
- refactor: 代码重构
- test: 测试相关
当前代码层面,`src/moldinsight/` 与 `src/inventory/` 已基本无直接互相依赖,说明业务边界已经初步成型。
### 2. 当前最大耦合点在 shared + 共享 ORM
需要特别注意:
- [src/shared/models/database.py](src/shared/models/database.py) 同时定义了 identity、gemold、inventory 的 ORM 模型
- [src/shared/app_factory.py](src/shared/app_factory.py) 仍承担较多平台与模块组合职责
这也是下一阶段重构的重点。
### 3. 单数据库是刻意选择
项目不是把 gemold 与 inventory 拆成两个数据库,而是保留一个共享数据库,用于支撑完整业务闭环:
- 分析结果
- 创建成品
- 成品 BOM
- 销售 / 采购 / 库存
典型桥接点:
- `STPFile.product_id -> Product.id`
---
## 开发与演进文档
推荐先阅读:
- [BACKEND_MODULARIZATION_BLUEPRINT.md](docs/BACKEND_MODULARIZATION_BLUEPRINT.md) — 当前模块化重构蓝图
- [EVOLUTION_ROADMAP.md](docs/EVOLUTION_ROADMAP.md) — 历史演进与阶段任务
- [docs/deployment/](docs/deployment/) — 现有部署文档(部分仍在对齐中)
---
## 开发建议
- 新增业务逻辑优先放入对应业务模块,不要继续堆进 `shared`
- 新增 API 时优先考虑模块归属,而不是“能放就放”
- 前端优先通过域 API client 调用接口,而不是散落裸 `/api/...` 路径
- 数据模型改动要同时考虑表归属与 Alembic 迁移影响
---
## 许可证
本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件
---
## 贡献者
感谢所有为这个项目做出贡献的开发者。
---
## 联系方式
- 项目地址: [GitHub](https://github.com/your-org/gemold)
- 问题反馈: [Issues](https://github.com/your-org/gemold/issues)
本项目采用 MIT 许可证,详见 [LICENSE](LICENSE)。