Files
Tunnel/app/api/checkpoint.py
2025-12-12 10:57:31 +08:00

63 lines
2.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""观测点数据接口"""
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from pydantic import BaseModel
from typing import Optional
from app.core.database import get_tunnel_db
from app.core.logging_config import get_logger
from app.schemas.checkpoint import CheckpointBatchImport, CheckpointQuery
from app.schemas.common import BatchImportResponse
from app.servives.checkpoint_service import CheckpointService
router = APIRouter(prefix="/checkpoint", tags=["观测点数据"])
logger = get_logger(__name__)
class CheckpointByDepartmentQuery(BaseModel):
"""根据department_id查询观测点"""
account_id: int
department_id: str
page: int = 1
page_size: int = 20
@router.post("/import", response_model=BatchImportResponse)
async def batch_import(
request: CheckpointBatchImport,
db: Session = Depends(get_tunnel_db)
):
"""批量导入观测点数据"""
logger.info(f"观测点数据导入请求: account_id={request.account_id}, 数据量={len(request.data)}")
return CheckpointService.batch_import(db, request.account_id, request.data)
@router.post("/query")
async def query(
request: CheckpointQuery,
db: Session = Depends(get_tunnel_db)
):
"""查询观测点数据"""
logger.info(f"观测点数据查询请求: {request}")
items, total = CheckpointService.query(db, request)
return {
"total": total,
"page": request.page,
"page_size": request.page_size,
"items": items
}
@router.post("/query_by_department")
async def query_by_department(
request: CheckpointByDepartmentQuery,
db: Session = Depends(get_tunnel_db)
):
"""根据department_id查询观测点数据包含断面里程和围岩级别"""
logger.info(f"根据department_id查询观测点数据: {request}")
items, total = CheckpointService.query_by_department(
db, request.account_id, request.department_id,
request.page, request.page_size
)
return {
"total": total,
"page": request.page,
"page_size": request.page_size,
"items": items
}