x
This commit is contained in:
@@ -24,4 +24,5 @@ _safe_include("api.v1.upload_router", "上传")
|
||||
_safe_include("api.v1.task_router", "任务")
|
||||
_safe_include("api.v1.history_router", "历史")
|
||||
_safe_include("api.v1.debug_router", "调试")
|
||||
_safe_include("api.v1.cam_router", "CAM")
|
||||
_safe_include("api.v1.advanced_router", "高级")
|
||||
|
||||
@@ -0,0 +1,103 @@
|
||||
from fastapi import APIRouter, Depends, HTTPException, Request
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from datetime import datetime
|
||||
|
||||
from database.database import get_db_session
|
||||
from models.database import User, ProcessingTask
|
||||
from services.auth_service import get_current_active_user
|
||||
from services.cam_bundle_service import cam_bundle_service
|
||||
from services.task_query_service import TaskQueryService
|
||||
from utils.logger import get_logger
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
router = APIRouter()
|
||||
DEFAULT_CAM_PREFERENCES = {
|
||||
"mold_steel": "P20",
|
||||
"surface_quality": "standard",
|
||||
"controller": "fanuc",
|
||||
"include_gcode": False,
|
||||
}
|
||||
|
||||
|
||||
@router.post("/cam/plan")
|
||||
async def generate_cam_plan(
|
||||
request: Request,
|
||||
db_session: AsyncSession = Depends(get_db_session),
|
||||
current_user: User = Depends(get_current_active_user),
|
||||
):
|
||||
"""基于任务分模结果生成 CAM 准备包(MVP)。"""
|
||||
_ = current_user
|
||||
body = await request.json()
|
||||
task_id = body.get("task_id")
|
||||
scheme_id = body.get("scheme_id")
|
||||
|
||||
if not task_id:
|
||||
raise HTTPException(status_code=400, detail="缺少 task_id")
|
||||
|
||||
task_result = await db_session.execute(
|
||||
select(ProcessingTask).where(ProcessingTask.task_id == task_id)
|
||||
)
|
||||
processing_task = task_result.scalar_one_or_none()
|
||||
|
||||
persisted_preferences = {}
|
||||
if processing_task and isinstance(processing_task.parameters, dict):
|
||||
persisted_preferences = (
|
||||
processing_task.parameters.get("cam_preferences", {}) or {}
|
||||
)
|
||||
|
||||
mold_steel = body.get(
|
||||
"mold_steel",
|
||||
persisted_preferences.get("mold_steel", DEFAULT_CAM_PREFERENCES["mold_steel"]),
|
||||
)
|
||||
surface_quality = body.get(
|
||||
"surface_quality",
|
||||
persisted_preferences.get("surface_quality", DEFAULT_CAM_PREFERENCES["surface_quality"]),
|
||||
)
|
||||
controller = body.get(
|
||||
"controller",
|
||||
persisted_preferences.get("controller", DEFAULT_CAM_PREFERENCES["controller"]),
|
||||
)
|
||||
include_gcode = bool(
|
||||
body.get(
|
||||
"include_gcode",
|
||||
persisted_preferences.get("include_gcode", DEFAULT_CAM_PREFERENCES["include_gcode"]),
|
||||
)
|
||||
)
|
||||
|
||||
task_view = await TaskQueryService.get_task_view(db_session, task_id)
|
||||
if not task_view:
|
||||
raise HTTPException(status_code=404, detail="任务不存在")
|
||||
if task_view.get("status") != "completed":
|
||||
raise HTTPException(status_code=400, detail="任务尚未完成,无法生成CAM计划")
|
||||
|
||||
try:
|
||||
data = cam_bundle_service.build_bundle(
|
||||
task_view=task_view,
|
||||
scheme_id=scheme_id,
|
||||
mold_steel=mold_steel,
|
||||
surface_quality=surface_quality,
|
||||
controller=controller,
|
||||
include_gcode=include_gcode,
|
||||
)
|
||||
cam_preferences = {
|
||||
"mold_steel": mold_steel,
|
||||
"surface_quality": surface_quality,
|
||||
"controller": controller,
|
||||
"include_gcode": include_gcode,
|
||||
}
|
||||
if processing_task:
|
||||
parameters = processing_task.parameters if isinstance(processing_task.parameters, dict) else {}
|
||||
parameters["cam_preferences"] = cam_preferences
|
||||
parameters["cam_last_plan"] = {
|
||||
"scheme_id": data.get("scheme_id"),
|
||||
"generated_at": datetime.now().isoformat(),
|
||||
}
|
||||
processing_task.parameters = parameters
|
||||
await db_session.commit()
|
||||
|
||||
return {"status": "success", "data": data, "cam_preferences": cam_preferences}
|
||||
except Exception as exc:
|
||||
logger.error(f"生成CAM准备包失败 task_id={task_id}: {exc}")
|
||||
raise HTTPException(status_code=500, detail=f"生成CAM准备包失败: {exc}")
|
||||
Reference in New Issue
Block a user