2026-02-11 22:40:35 +08:00
|
|
|
# main.py
|
|
|
|
|
import sys
|
|
|
|
|
import os
|
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
|
|
# 添加项目根目录到Python路径
|
|
|
|
|
project_root = Path(__file__).parent.parent
|
|
|
|
|
src_root = Path(__file__).parent
|
|
|
|
|
sys.path.insert(0, str(project_root))
|
|
|
|
|
sys.path.insert(0, str(src_root))
|
|
|
|
|
|
|
|
|
|
# 确保当前工作目录是项目根目录
|
|
|
|
|
os.chdir(project_root)
|
|
|
|
|
|
|
|
|
|
# 打印调试信息
|
|
|
|
|
print(f"项目根目录: {project_root}")
|
|
|
|
|
print(f"Python路径: {sys.path}")
|
|
|
|
|
print(f"当前工作目录: {os.getcwd()}")
|
|
|
|
|
|
|
|
|
|
# 测试导入配置模块
|
|
|
|
|
try:
|
|
|
|
|
from config.settings import settings
|
|
|
|
|
print("[OK] 配置模块导入成功")
|
|
|
|
|
except ImportError as e:
|
|
|
|
|
print(f"[FAIL] 配置模块导入失败: {e}")
|
|
|
|
|
# 列出当前目录内容
|
|
|
|
|
print("当前目录内容:")
|
|
|
|
|
for item in os.listdir('.'):
|
|
|
|
|
print(f" - {item}")
|
|
|
|
|
# 列出config目录内容
|
|
|
|
|
if os.path.exists('config'):
|
|
|
|
|
print("config目录内容:")
|
|
|
|
|
for item in os.listdir('config'):
|
|
|
|
|
print(f" - {item}")
|
|
|
|
|
raise
|
|
|
|
|
|
|
|
|
|
from fastapi import FastAPI
|
|
|
|
|
from fastapi.staticfiles import StaticFiles
|
|
|
|
|
from fastapi.templating import Jinja2Templates
|
|
|
|
|
import asyncio
|
|
|
|
|
|
|
|
|
|
from api.routes import router
|
2026-03-04 00:47:41 +08:00
|
|
|
from api.auth_routes import router as auth_router
|
|
|
|
|
from api.inventory_routes import router as inventory_router
|
2026-02-11 22:40:35 +08:00
|
|
|
from utils.logger import setup_logging
|
|
|
|
|
from database.init_db import init_database
|
|
|
|
|
|
|
|
|
|
setup_logging()
|
|
|
|
|
|
|
|
|
|
app = FastAPI(
|
2026-03-04 00:47:41 +08:00
|
|
|
title="Gemold - 模具制造管理系统",
|
|
|
|
|
description="模具制造行业综合管理平台,包含模具分析、进销存管理等功能",
|
|
|
|
|
version="4.0.0"
|
2026-02-11 22:40:35 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# 启动时初始化数据库和RustFS
|
|
|
|
|
@app.on_event("startup")
|
|
|
|
|
async def startup_event():
|
|
|
|
|
"""应用启动时初始化数据库和RustFS"""
|
|
|
|
|
# 初始化数据库
|
|
|
|
|
success = await init_database()
|
|
|
|
|
if success:
|
|
|
|
|
print("[OK] 数据库初始化成功")
|
|
|
|
|
else:
|
|
|
|
|
print("[FAIL] 数据库初始化失败,服务将继续运行但数据库功能不可用")
|
|
|
|
|
|
|
|
|
|
# 初始化RustFS连接
|
|
|
|
|
try:
|
|
|
|
|
from storage.rustfs_storage import rustfs_manager
|
|
|
|
|
from config.settings import settings
|
|
|
|
|
|
|
|
|
|
await rustfs_manager.connect(
|
|
|
|
|
endpoint=settings.RUSTFS_ENDPOINT,
|
|
|
|
|
access_key=settings.RUSTFS_ACCESS_KEY,
|
|
|
|
|
secret_key=settings.RUSTFS_SECRET_KEY,
|
|
|
|
|
timeout=settings.RUSTFS_TIMEOUT
|
|
|
|
|
)
|
|
|
|
|
print("[OK] RustFS连接成功")
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"[FAIL] RustFS连接失败: {e}")
|
|
|
|
|
print("[WARN] 文件上传功能将不可用,但其他功能正常")
|
|
|
|
|
|
|
|
|
|
# 创建必要目录
|
|
|
|
|
UPLOAD_DIR = Path("uploads")
|
|
|
|
|
UPLOAD_DIR.mkdir(exist_ok=True)
|
|
|
|
|
TEMPLATES_DIR = Path("templates")
|
|
|
|
|
TEMPLATES_DIR.mkdir(exist_ok=True)
|
|
|
|
|
STATIC_DIR = Path("static")
|
|
|
|
|
STATIC_DIR.mkdir(exist_ok=True)
|
|
|
|
|
HTML_OUTPUT_DIR = Path("html_output")
|
|
|
|
|
HTML_OUTPUT_DIR.mkdir(exist_ok=True)
|
|
|
|
|
|
|
|
|
|
# 挂载静态文件
|
|
|
|
|
import os
|
2026-02-16 01:13:13 +08:00
|
|
|
# 使用当前工作目录下的static文件夹
|
|
|
|
|
static_dir = os.path.join(os.getcwd(), "static")
|
2026-02-11 22:40:35 +08:00
|
|
|
app.mount("/static", StaticFiles(directory=static_dir), name="static")
|
|
|
|
|
|
2026-03-04 00:47:41 +08:00
|
|
|
app.include_router(auth_router)
|
|
|
|
|
app.include_router(inventory_router)
|
2026-02-11 22:40:35 +08:00
|
|
|
app.include_router(router)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@app.get("/health")
|
2026-02-16 01:32:13 +08:00
|
|
|
@app.post("/health")
|
2026-02-11 22:40:35 +08:00
|
|
|
async def health():
|
|
|
|
|
from database.database import db_manager
|
|
|
|
|
return {
|
|
|
|
|
"status": "healthy",
|
2026-03-04 00:47:41 +08:00
|
|
|
"service": "gemold",
|
|
|
|
|
"version": "4.0.0",
|
2026-02-11 22:40:35 +08:00
|
|
|
"database_connected": db_manager.is_connected
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2026-03-04 00:47:41 +08:00
|
|
|
@app.get("/")
|
|
|
|
|
async def root():
|
|
|
|
|
from fastapi.responses import FileResponse
|
|
|
|
|
return FileResponse(os.path.join(os.getcwd(), "static", "index.html"))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@app.get("/moldinsight")
|
|
|
|
|
async def moldinsight():
|
|
|
|
|
from fastapi.responses import FileResponse
|
|
|
|
|
return FileResponse(os.path.join(os.getcwd(), "static", "index.html"))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@app.get("/inventory")
|
|
|
|
|
async def inventory():
|
|
|
|
|
from fastapi.responses import FileResponse
|
|
|
|
|
return FileResponse(os.path.join(os.getcwd(), "static", "index.html"))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@app.get("/users")
|
|
|
|
|
async def users():
|
|
|
|
|
from fastapi.responses import FileResponse
|
|
|
|
|
return FileResponse(os.path.join(os.getcwd(), "static", "index.html"))
|
|
|
|
|
|
|
|
|
|
|
2026-02-11 22:40:35 +08:00
|
|
|
if __name__ == "__main__":
|
|
|
|
|
import uvicorn
|
2026-02-13 00:29:12 +08:00
|
|
|
from config.settings import settings
|
2026-02-11 22:40:35 +08:00
|
|
|
|
2026-03-04 00:47:41 +08:00
|
|
|
print("启动 Gemold 模具制造管理系统 v4.0...")
|
|
|
|
|
print(f"访问 http://localhost:{settings.PORT}")
|
|
|
|
|
print("功能模块:")
|
|
|
|
|
print(" - 首页仪表盘")
|
|
|
|
|
print(" - 用户管理")
|
|
|
|
|
print(" - MoldInsight 模具分析")
|
|
|
|
|
print(" - 进销存管理")
|
2026-02-11 22:40:35 +08:00
|
|
|
|
|
|
|
|
uvicorn.run(
|
|
|
|
|
"main:app",
|
2026-02-13 00:29:12 +08:00
|
|
|
host=settings.HOST,
|
|
|
|
|
port=settings.PORT,
|
2026-02-11 22:40:35 +08:00
|
|
|
reload=True
|
|
|
|
|
)
|