导出数据综合

This commit is contained in:
lhx
2025-11-07 18:11:22 +08:00
parent 6922423dcf
commit 5ee83477e3
3 changed files with 236 additions and 1 deletions

View File

@@ -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
}