导出数据综合
This commit is contained in:
@@ -4,8 +4,9 @@ from sqlalchemy.orm import Session
|
||||
from typing import Optional, Dict, Any
|
||||
from ..core.database import get_db
|
||||
from ..core.response_code import ResponseCode, ResponseMessage
|
||||
from ..schemas.export_excel import ExportExcelRequest
|
||||
from ..schemas.export_excel import ExportExcelRequest, ExportSettlementRequest
|
||||
from ..services.section_data import SectionDataService
|
||||
from ..services.export_excel import ExportExcelService
|
||||
import logging
|
||||
import pandas as pd
|
||||
from io import BytesIO
|
||||
@@ -18,6 +19,7 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
# 实例化服务类
|
||||
section_service = SectionDataService()
|
||||
export_excel_service = ExportExcelService()
|
||||
|
||||
@router.post("/section_data")
|
||||
def export_section_data(
|
||||
@@ -97,3 +99,52 @@ def export_section_data(
|
||||
"message": f"{ResponseMessage.EXPORT_FAILED}: {str(e)}",
|
||||
"data": None
|
||||
}
|
||||
|
||||
@router.post("/settlement_data")
|
||||
def export_settlement_data(
|
||||
request: ExportSettlementRequest,
|
||||
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_settlement_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 ValueError as ve:
|
||||
logger.warning(f"导出沉降数据失败: {str(ve)}")
|
||||
return {
|
||||
"code": ResponseCode.PARAM_ERROR,
|
||||
"message": str(ve),
|
||||
"data": None
|
||||
}
|
||||
except Exception as e:
|
||||
logger.error(f"导出沉降数据失败: {str(e)}", exc_info=True)
|
||||
return {
|
||||
"code": ResponseCode.EXPORT_FAILED,
|
||||
"message": f"{ResponseMessage.EXPORT_FAILED}: {str(e)}",
|
||||
"data": None
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user