from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from typing import List from ..core.database import get_db from ..core.response_code import ResponseCode, ResponseMessage from ..schemas.level_data import ( LevelDataRequest, LevelDataListResponse, LevelDataResponse, BatchDeleteByLinecodesRequest, BatchDeleteByLinecodesResponse ) from ..services.level_data import LevelDataService router = APIRouter(prefix="/level_data", tags=["水准数据"]) @router.post("/get_level_data_by_project", response_model=LevelDataListResponse) def get_level_data_by_project(request: LevelDataRequest, db: Session = Depends(get_db)): """ 通过标段名称获取全部水准线路 """ try: level_service = LevelDataService() level_data_list = level_service.get_level_data_by_project_name(db, project_name=request.project_name, nyid_max=request.nyid_max) return LevelDataListResponse( code=ResponseCode.SUCCESS, message="查询成功", total=len(level_data_list), data=level_data_list ) except Exception as e: raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"查询失败: {str(e)}" ) @router.post("/batch_delete_by_linecodes", response_model=BatchDeleteByLinecodesResponse) def batch_delete_by_linecodes(request: BatchDeleteByLinecodesRequest, db: Session = Depends(get_db)): """ 根据水准线路编码列表批量删除相关数据 删除顺序:原始数据 → 沉降数据 → 观测点数据 → 水准数据 删除前会备份数据为SQL文件 """ try: level_service = LevelDataService() result = level_service.batch_delete_by_linecodes(db, linecodes=request.linecodes) return BatchDeleteByLinecodesResponse( code=0 if result['success'] else 1, message=result['message'], success=result['success'], backup_file=result.get('backup_file'), deleted_counts=result.get('deleted_counts') ) except Exception as e: raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"批量删除失败: {str(e)}" )