重构项目结构
This commit is contained in:
+5
-1
@@ -8,7 +8,7 @@ __pycache__/
|
||||
*.pyo
|
||||
*.pyd
|
||||
|
||||
# IDE 配置(可选)
|
||||
# IDE 配置
|
||||
.idea/
|
||||
.vscode/
|
||||
|
||||
@@ -17,7 +17,11 @@ __pycache__/
|
||||
*.log
|
||||
.env
|
||||
logs/
|
||||
|
||||
# 运行时生成的目录
|
||||
uploads/
|
||||
html_output/
|
||||
|
||||
# 不再需要在 src/ 下跟踪这些
|
||||
src/uploads/
|
||||
src/html_output/
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
|
||||
-107
@@ -1,107 +0,0 @@
|
||||
# 更新日志 (Changelog)
|
||||
|
||||
|
||||
## [4.0.0] - 2026-03-07
|
||||
|
||||
### 新增功能 ✨
|
||||
|
||||
#### 前端重构
|
||||
- **白色简约现代UI** - 完全重构前端为白色简约现代化风格
|
||||
- 緔洁的白色背景配色
|
||||
- 緩和阴影和圆角设计
|
||||
- 娡块化CSS变量系统
|
||||
- 响应式布局优化
|
||||
|
||||
#### 3D可视化
|
||||
- **PythonOCC点云模型** - 从STP文件提取真实点云数据生成3D模型
|
||||
- **模具型腔可视化** - 3D预览显示型腔、型芯、分型面
|
||||
- **交互式控制** - 支持旋转、缩放、平移操作
|
||||
- **视图切换** - 显示/隐藏产品、模具、分型面、点云
|
||||
|
||||
#### 验证工具
|
||||
- **STP验证脚本** - 使用FreeCAD命令行验证几何数据准确性
|
||||
- 对比FreeCAD和PythonOCC的测量结果
|
||||
- 生成详细的验证报告
|
||||
|
||||
#### 分析功能
|
||||
- **产品特征识别** - 检测壁厚、加强筋、孔洞、倒扣等特征
|
||||
- **泡沫包装设计决策** - 噃度、布局、定位结构建议
|
||||
- **模具工程决策** - 型腔数量、模架尺寸、材料选择
|
||||
- **质量指标** - 体积利用率、拓扑复杂度、壁厚均匀性
|
||||
|
||||
### 优化改进 🔧
|
||||
|
||||
#### 数据处理
|
||||
- **点云数据提取优化** - 修复PythonOCC网格提取的正确实现
|
||||
- **数据持久化** - 添加AnalysisMetrics表存储分析指标
|
||||
- **API响应优化** - 修复字段名不匹配问题
|
||||
|
||||
#### 用户体验
|
||||
- **分析摘要显示** - 在结果页面顶部显示分析摘要
|
||||
- **设计建议列表** - 按优先级排序显示所有建议
|
||||
- **关键信息完善** - 显示更多模具参数和制造要求
|
||||
|
||||
### 问题修复 🐛
|
||||
|
||||
- 修复 `getPriorityText` 函数未定义错误
|
||||
- 修复 `controls` 变量初始化顺序错误
|
||||
- 修复 HTML生成器JavaScript语法错误
|
||||
- 修复历史记录API路径重复前缀问题
|
||||
- 修复点云数据传递逻辑错误
|
||||
|
||||
---
|
||||
|
||||
## [3.0.0] - 2026-03-06
|
||||
|
||||
### 新增功能 ✨
|
||||
|
||||
#### 用户系统
|
||||
- **用户认证** - JWT令牌认证机制
|
||||
- **角色权限** - 基于角色的访问控制
|
||||
- **管理员账户** - 支持环境变量配置管理员
|
||||
|
||||
#### 进销存模块
|
||||
- **仪表盘** - 库存概览和统计数据
|
||||
- **产品管理** - 产品CRUD操作
|
||||
- **库存预警** - 低库存提醒功能
|
||||
|
||||
#### 项目架构
|
||||
- **新主页** - Gemold官网主页
|
||||
- **模块化路由** - 分离认证、进销存、分析模块
|
||||
|
||||
### 优化改进 🔧
|
||||
|
||||
- **UI主题** - 从深色主题改为现代蓝紫色渐变
|
||||
- **按钮样式** - 修复按钮大小和可见性问题
|
||||
- **数据库连接** - 优化异步会话管理
|
||||
|
||||
---
|
||||
|
||||
## [2.0.0] - 2026-03-05
|
||||
|
||||
### 新增功能 ✨
|
||||
|
||||
#### 核心分析
|
||||
- **STP文件解析** - 使用PythonOCC解析STP文件
|
||||
- **几何分析** - 计算体积、表面积、边界框等
|
||||
- **模具设计建议** - 自动生成设计建议
|
||||
|
||||
#### Web界面
|
||||
- **文件上传** - 拖拽上传支持
|
||||
- **任务状态** - 实时进度显示
|
||||
- **结果展示** - 分析结果可视化
|
||||
|
||||
#### 数据存储
|
||||
- **PostgreSQL集成** - 数据持久化存储
|
||||
- **RustFS集成** - 文件存储服务
|
||||
|
||||
---
|
||||
|
||||
## [1.0.0] - 2026-03-04
|
||||
|
||||
### 初始版本 🎉
|
||||
|
||||
- 项目初始化
|
||||
- 基础架构搭建
|
||||
- STP文件解析功能
|
||||
- 基础Web界面
|
||||
@@ -55,43 +55,74 @@
|
||||
geMoldInsight/
|
||||
├── src/ # 源代码目录
|
||||
│ ├── main.py # 主程序入口
|
||||
│ ├── api/ # API路由
|
||||
│ │ ├── routes.py # 主API路由
|
||||
│ ├── api/ # API路由层
|
||||
│ │ ├── routes.py # 模具分析API路由聚合
|
||||
│ │ ├── auth_routes.py # 认证API
|
||||
│ │ └── inventory_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 # 模具生成
|
||||
│ │ ├── mold_generator.py # 普通塑料模具生成
|
||||
│ │ ├── aluminum_foam_mold.py # 铝泡沫模具生成
|
||||
│ │ ├── mold_quality_inspector.py # 模具质量检测
|
||||
│ │ └── ai_mold_assistant.py # AI模具助手
|
||||
│ ├── models/ # 数据模型
|
||||
│ │ ├── database.py # 数据库模型
|
||||
│ │ └── schemas.py # 数据模式
|
||||
│ │ ├── database.py # SQLAlchemy ORM模型
|
||||
│ │ └── schemas.py # Pydantic模式
|
||||
│ ├── services/ # 服务层
|
||||
│ │ ├── auth_service.py # 认证服务
|
||||
│ │ ├── storage_service.py # 存储服务
|
||||
│ │ └── storage_integration_rustfs.py # RustFS集成
|
||||
│ │ ├── 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 # 数据库初始化
|
||||
│ │ ├── 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 # HTML生成
|
||||
├── static/ # 静态文件
|
||||
│ ├── vue-app.js # Vue应用
|
||||
│ ├── style.css # 样式文件
|
||||
│ └── index.html # 主页面
|
||||
│ └── 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验证脚本
|
||||
├── uploads/ # 上传文件目录
|
||||
├── html_output/ # 生成的HTML文件
|
||||
├── logs/ # 日志文件
|
||||
├── requirements.txt # 依赖包
|
||||
├── docker-compose.yml # Docker配置
|
||||
├── docs/ # 项目文档
|
||||
│ └── deployment/ # 部署相关文档
|
||||
├── tests/ # 测试用例
|
||||
├── uploads/ # 上传文件目录 (gitignore)
|
||||
├── html_output/ # 3D可视化输出 (gitignore)
|
||||
├── requirements.txt # Python依赖
|
||||
├── docker-compose.yml # Docker编排配置
|
||||
├── Dockerfile # Docker构建文件
|
||||
├── start.sh # Linux启动脚本
|
||||
├── start.bat # Windows启动脚本
|
||||
└── .env # 环境变量
|
||||
├── .env.example # 环境变量模板
|
||||
└── .env # 环境变量 (gitignore)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@@ -1,207 +0,0 @@
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>3D模具几何可视化 - fsa30scy_tc-01-0817.stp</title>
|
||||
<script src="https://cdn.jsdelivr.net/npm/three@0.132.2/build/three.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/three@0.132.2/examples/js/controls/OrbitControls.js"></script>
|
||||
<style>
|
||||
body { margin: 0; overflow: hidden; font-family: Arial, sans-serif; }
|
||||
#container { position: relative; width: 100vw; height: 100vh; }
|
||||
#canvas { display: block; }
|
||||
#info-panel {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
left: 10px;
|
||||
background: rgba(255, 255, 255, 0.9);
|
||||
padding: 15px;
|
||||
border-radius: 8px;
|
||||
max-width: 300px;
|
||||
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
|
||||
}
|
||||
#controls {
|
||||
position: absolute;
|
||||
bottom: 10px;
|
||||
left: 10px;
|
||||
background: rgba(255, 255, 255, 0.9);
|
||||
padding: 10px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
.metric { margin: 5px 0; }
|
||||
.metric-label { font-weight: bold; color: #333; }
|
||||
.metric-value { color: #666; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="container">
|
||||
<canvas id="canvas"></canvas>
|
||||
|
||||
<div id="info-panel">
|
||||
<h3>模具几何信息</h3>
|
||||
<div class="metric">
|
||||
<span class="metric-label">文件名:</span>
|
||||
<span class="metric-value">fsa30scy_tc-01-0817.stp</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="metric-label">体积:</span>
|
||||
<span class="metric-value">1000000.00 mm³</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="metric-label">表面积:</span>
|
||||
<span class="metric-value">60000.00 mm²</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="metric-label">边界框:</span>
|
||||
<span class="metric-value">100.0 × 100.0 × 100.0 mm</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="metric-label">面数:</span>
|
||||
<span class="metric-value">6</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="metric-label">边数:</span>
|
||||
<span class="metric-value">12</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="metric-label">顶点数:</span>
|
||||
<span class="metric-value">8</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="controls">
|
||||
<button onclick="resetView()">重置视图</button>
|
||||
<button onclick="toggleWireframe()">切换线框</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// 初始化Three.js场景
|
||||
const scene = new THREE.Scene();
|
||||
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
|
||||
const renderer = new THREE.WebGLRenderer({ canvas: document.getElementById('canvas') });
|
||||
|
||||
renderer.setSize(window.innerWidth, window.innerHeight);
|
||||
renderer.setClearColor(0xf0f0f0);
|
||||
|
||||
// 添加光源
|
||||
const ambientLight = new THREE.AmbientLight(0x404040);
|
||||
scene.add(ambientLight);
|
||||
|
||||
const directionalLight = new THREE.DirectionalLight(0xffffff, 1);
|
||||
directionalLight.position.set(1, 1, 1);
|
||||
scene.add(directionalLight);
|
||||
|
||||
// 添加坐标轴
|
||||
const axesHelper = new THREE.AxesHelper(50);
|
||||
scene.add(axesHelper);
|
||||
|
||||
// 创建几何体(模拟模具形状)
|
||||
const geometryData = {
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
100.0,
|
||||
100.0,
|
||||
100.0
|
||||
],
|
||||
"dimensions": [
|
||||
100.0,
|
||||
100.0,
|
||||
100.0
|
||||
],
|
||||
"center": [
|
||||
50.0,
|
||||
50.0,
|
||||
50.0
|
||||
]
|
||||
},
|
||||
"volume": 1000000.0,
|
||||
"surface_area": 60000.0,
|
||||
"topology": {
|
||||
"faces": 6,
|
||||
"edges": 12,
|
||||
"vertices": 8
|
||||
},
|
||||
"center_of_mass": [
|
||||
50.0,
|
||||
50.0,
|
||||
50.0
|
||||
],
|
||||
"inertia_properties": {},
|
||||
"analysis_method": "simulated"
|
||||
};
|
||||
|
||||
// 根据边界框创建模拟几何体
|
||||
const bbox = geometryData.bounding_box;
|
||||
if (bbox) {
|
||||
const width = bbox.dimensions ? bbox.dimensions[0] : 100;
|
||||
const height = bbox.dimensions ? bbox.dimensions[1] : 100;
|
||||
const depth = bbox.dimensions ? bbox.dimensions[2] : 100;
|
||||
|
||||
// 创建基础几何体
|
||||
const geometry = new THREE.BoxGeometry(width, height, depth);
|
||||
const material = new THREE.MeshPhongMaterial({
|
||||
color: 0x4CAF50,
|
||||
transparent: true,
|
||||
opacity: 0.8,
|
||||
wireframe: false
|
||||
});
|
||||
|
||||
const mesh = new THREE.Mesh(geometry, material);
|
||||
scene.add(mesh);
|
||||
|
||||
// 添加线框
|
||||
const wireframe = new THREE.WireframeGeometry(geometry);
|
||||
const line = new THREE.LineSegments(wireframe);
|
||||
line.material.depthTest = false;
|
||||
line.material.opacity = 0.25;
|
||||
line.material.transparent = true;
|
||||
scene.add(line);
|
||||
}
|
||||
|
||||
// 设置相机位置
|
||||
camera.position.set(200, 200, 200);
|
||||
camera.lookAt(0, 0, 0);
|
||||
|
||||
// 添加轨道控制器
|
||||
const controls = new THREE.OrbitControls(camera, renderer.domElement);
|
||||
controls.enableDamping = true;
|
||||
controls.dampingFactor = 0.25;
|
||||
|
||||
// 动画循环
|
||||
function animate() {
|
||||
requestAnimationFrame(animate);
|
||||
controls.update();
|
||||
renderer.render(scene, camera);
|
||||
}
|
||||
|
||||
animate();
|
||||
|
||||
// 窗口大小调整
|
||||
window.addEventListener('resize', () => {
|
||||
camera.aspect = window.innerWidth / window.innerHeight;
|
||||
camera.updateProjectionMatrix();
|
||||
renderer.setSize(window.innerWidth, window.innerHeight);
|
||||
});
|
||||
|
||||
// 控制函数
|
||||
function resetView() {
|
||||
controls.reset();
|
||||
}
|
||||
|
||||
function toggleWireframe() {
|
||||
scene.traverse((child) => {
|
||||
if (child.isMesh) {
|
||||
child.material.wireframe = !child.material.wireframe;
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,66 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# MoldInsight 启动脚本 - 修复版
|
||||
# 适用于Linux conda环境
|
||||
|
||||
echo "🚀 启动 MoldInsight 模具几何分析系统..."
|
||||
|
||||
# 检查Python版本
|
||||
python_version=$(python3 -c 'import sys; print(".".join(map(str, sys.version_info[:2])))')
|
||||
echo "📋 Python版本: $python_version"
|
||||
|
||||
# 初始化conda环境
|
||||
echo "🔧 初始化conda环境..."
|
||||
source /opt/anaconda3/etc/profile.d/conda.sh
|
||||
|
||||
# 激活conda环境
|
||||
echo "🔧 激活conda环境..."
|
||||
conda activate moldinsight
|
||||
|
||||
# 验证PythonOCC是否可用
|
||||
echo "🔍 验证PythonOCC..."
|
||||
python3 -c "import OCC; print('✅ PythonOCC可用')" || {
|
||||
echo "❌ PythonOCC不可用,请先安装PythonOCC"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# 检查是否已经安装依赖
|
||||
echo "📦 检查依赖包..."
|
||||
pip install -r requirements.txt
|
||||
|
||||
# 创建必要目录
|
||||
echo "📁 创建必要目录..."
|
||||
mkdir -p uploads html_output logs
|
||||
|
||||
# 检查环境配置文件
|
||||
if [ ! -f ".env" ]; then
|
||||
echo "❌ 错误: 未找到.env配置文件"
|
||||
echo "📋 请创建.env文件并配置数据库连接信息:"
|
||||
echo " 1. 创建.env文件: touch .env"
|
||||
echo " 2. 编辑配置文件: nano .env"
|
||||
echo " 3. 添加数据库配置:"
|
||||
echo " DATABASE_URL=postgresql+asyncpg://username:password@localhost:5432/database_name"
|
||||
echo ""
|
||||
echo "💡 提示: 请根据实际的PostgreSQL连接信息修改上述配置"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "🔧 检查数据库连接..."
|
||||
|
||||
# 启动服务
|
||||
echo "🚀 启动 MoldInsight 服务..."
|
||||
PORT=$(grep '^PORT=' .env 2>/dev/null | cut -d'=' -f2 || echo '8000')
|
||||
echo "🌐 服务将在 http://localhost:${PORT} 启动"
|
||||
echo "📊 功能特性:"
|
||||
echo " - STP文件解析和几何分析"
|
||||
echo " - JSON数据导出"
|
||||
echo " - PostgreSQL数据库存储"
|
||||
echo " - 3D可视化HTML生成"
|
||||
echo " - Web界面文件上传"
|
||||
echo " - 任务状态跟踪"
|
||||
echo ""
|
||||
echo "按 Ctrl+C 停止服务"
|
||||
echo ""
|
||||
|
||||
# 启动应用
|
||||
python3 src/main.py
|
||||
Reference in New Issue
Block a user