导出接口
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
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user