"""数字孪生路由。""" from fastapi import APIRouter, Depends, Query from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from app.core.database import get_db from app.core.dependencies import get_current_user from app.models.digital_twin import DigitalTwinModel from app.models.user import User from app.schemas.common import ApiResponse, success from app.services.digital_twin_engine import build_twin_model, simulate_scenario router = APIRouter(prefix="/digital-twins", tags=["digital-twins"]) @router.get("", response_model=ApiResponse[list]) async def list_twins(company_id: str = Query(...), db: AsyncSession = Depends(get_db), user: User = Depends(get_current_user)): """获取数字孪生模型列表。""" result = await db.execute( select(DigitalTwinModel).where(DigitalTwinModel.company_id == company_id) ) items = result.scalars().all() return success(data=[ { "id": str(i.id), "company_id": str(i.company_id), "model_params": i.model_params, "scenarios": i.scenarios, "accuracy_score": i.accuracy_score, } for i in items ]) @router.post("/build", response_model=ApiResponse[dict]) async def build_twin(req: dict, user: User = Depends(get_current_user)): """构建数字孪生模型。""" result = await build_twin_model(req.get("company_data", "")) return success(data=result) @router.post("/simulate", response_model=ApiResponse[dict]) async def simulate(req: dict, user: User = Depends(get_current_user)): """模拟决策场景。""" result = await simulate_scenario(req.get("model_params", {}), req.get("scenario", "")) return success(data=result)