Merge branch 'main' of http://119.6.225.4:3000/lhx/project
This commit is contained in:
@@ -5,7 +5,7 @@ from typing import Optional, Dict, Any
|
||||
from ..core.database import get_db
|
||||
from ..core.response_code import ResponseCode, ResponseMessage
|
||||
from ..core.exceptions import BusinessException, DataNotFoundException, AccountNotFoundException
|
||||
from ..schemas.export_excel import ExportExcelRequest, ExportSettlementRequest
|
||||
from ..schemas.export_excel import ExportExcelRequest, ExportSettlementRequest, ExportLevelDataRequest
|
||||
from ..services.section_data import SectionDataService
|
||||
from ..services.export_excel import ExportExcelService
|
||||
import logging
|
||||
@@ -175,3 +175,77 @@ def export_settlement_data(
|
||||
}
|
||||
)
|
||||
|
||||
@router.post("/level_data")
|
||||
def export_level_data(
|
||||
request: ExportLevelDataRequest,
|
||||
db: Session = Depends(get_db)
|
||||
):
|
||||
"""导出水准数据Excel文件(以水准数据为主体,包含断面、观测点、沉降、原始数据)"""
|
||||
try:
|
||||
logger.info(f"导出水准数据,请求参数: project_name={request.project_name}")
|
||||
|
||||
# 生成文件名
|
||||
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
||||
filename = f"{request.project_name}_水准数据_{timestamp}.xlsx"
|
||||
|
||||
# 创建临时文件
|
||||
temp_dir = tempfile.gettempdir()
|
||||
file_path = os.path.join(temp_dir, filename)
|
||||
|
||||
# 调用服务层导出数据到文件
|
||||
export_excel_service.export_level_data_to_file(
|
||||
db,
|
||||
project_name=request.project_name,
|
||||
file_path=file_path
|
||||
)
|
||||
|
||||
logger.info(f"成功生成水准数据Excel文件: {file_path}")
|
||||
|
||||
# 返回文件下载响应
|
||||
return FileResponse(
|
||||
path=file_path,
|
||||
filename=filename,
|
||||
media_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
||||
)
|
||||
|
||||
except AccountNotFoundException as e:
|
||||
logger.warning(f"账号不存在: {str(e)}")
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail={
|
||||
"code": e.code,
|
||||
"message": e.message,
|
||||
"data": None
|
||||
}
|
||||
)
|
||||
except DataNotFoundException as e:
|
||||
logger.warning(f"数据不存在: {str(e)}")
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail={
|
||||
"code": e.code,
|
||||
"message": e.message,
|
||||
"data": None
|
||||
}
|
||||
)
|
||||
except BusinessException as e:
|
||||
logger.warning(f"业务异常: {str(e)}")
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail={
|
||||
"code": e.code,
|
||||
"message": e.message,
|
||||
"data": None
|
||||
}
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"导出水准数据失败: {str(e)}", exc_info=True)
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
detail={
|
||||
"code": ResponseCode.EXPORT_FAILED,
|
||||
"message": f"{ResponseMessage.EXPORT_FAILED}: {str(e)}",
|
||||
"data": None
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
34
app/api/level_data.py
Normal file
34
app/api/level_data.py
Normal file
@@ -0,0 +1,34 @@
|
||||
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
|
||||
)
|
||||
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, request.project_name)
|
||||
|
||||
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)}"
|
||||
)
|
||||
Reference in New Issue
Block a user