Files
railway_cloud/app/api/level_data.py
2026-01-07 10:43:43 +08:00

61 lines
2.3 KiB
Python

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)}"
)