67 lines
2.3 KiB
Python
67 lines
2.3 KiB
Python
"""量测数据接口"""
|
||
from fastapi import APIRouter, Depends
|
||
from sqlalchemy.orm import Session
|
||
from pydantic import BaseModel
|
||
from typing import Optional
|
||
from datetime import datetime
|
||
from app.core.database import get_tunnel_db
|
||
from app.core.logging_config import get_logger
|
||
from app.schemas.measurement_data import MeasurementDataBatchImport, MeasurementDataQuery
|
||
from app.schemas.common import BatchImportResponse
|
||
from app.servives.measurement_data_service import MeasurementDataService
|
||
|
||
router = APIRouter(prefix="/measurement_data", tags=["量测数据"])
|
||
logger = get_logger(__name__)
|
||
|
||
class MeasurementByDepartmentQuery(BaseModel):
|
||
"""根据department_id查询量测数据"""
|
||
account_id: int
|
||
department_id: str
|
||
monitoring_time_start: Optional[datetime] = None
|
||
monitoring_time_end: Optional[datetime] = None
|
||
page: int = 1
|
||
page_size: int = 20
|
||
|
||
@router.post("/import", response_model=BatchImportResponse)
|
||
async def batch_import(
|
||
request: MeasurementDataBatchImport,
|
||
db: Session = Depends(get_tunnel_db)
|
||
):
|
||
"""批量导入量测数据"""
|
||
logger.info(f"量测数据导入请求: account_id={request.account_id}, 数据量={len(request.data)}")
|
||
return MeasurementDataService.batch_import(db, request.account_id, request.data)
|
||
|
||
@router.post("/query")
|
||
async def query(
|
||
request: MeasurementDataQuery,
|
||
db: Session = Depends(get_tunnel_db)
|
||
):
|
||
"""查询量测数据"""
|
||
logger.info(f"量测数据查询请求: {request}")
|
||
items, total = MeasurementDataService.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: MeasurementByDepartmentQuery,
|
||
db: Session = Depends(get_tunnel_db)
|
||
):
|
||
"""根据department_id查询量测数据(包含断面里程、围岩级别和观测点名称)"""
|
||
logger.info(f"根据department_id查询量测数据: {request}")
|
||
items, total = MeasurementDataService.query_by_department(
|
||
db, request.account_id, request.department_id,
|
||
request.page, request.page_size,
|
||
request.monitoring_time_start, request.monitoring_time_end
|
||
)
|
||
return {
|
||
"total": total,
|
||
"page": request.page,
|
||
"page_size": request.page_size,
|
||
"items": items
|
||
}
|