增加标段获取最大水准数据
This commit is contained in:
@@ -130,7 +130,6 @@ def batch_import_level_data(request: BatchLevelDataImportRequest, db: Session =
|
||||
logger.info(f"Starting batch import level data, count: {len(request.data)}")
|
||||
data_list = request.data
|
||||
result = level_service.batch_import_level_data(db, data_list)
|
||||
logger.info(f"Batch import level data completed: {result['message']}")
|
||||
|
||||
return DataImportResponse(
|
||||
code=ResponseCode.SUCCESS if result.get('success') else ResponseCode.IMPORT_FAILED,
|
||||
|
||||
@@ -19,7 +19,7 @@ def get_level_data_by_project(request: LevelDataRequest, db: Session = Depends(g
|
||||
"""
|
||||
try:
|
||||
level_service = LevelDataService()
|
||||
level_data_list = level_service.get_level_data_by_project_name(db, request.project_name)
|
||||
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,
|
||||
|
||||
@@ -22,6 +22,7 @@ class LevelDataResponse(LevelDataBase):
|
||||
class LevelDataRequest(BaseModel):
|
||||
"""水准数据请求模型"""
|
||||
project_name: str = Field(..., description="标段名称")
|
||||
nyid_max: Optional[bool] = Field(False, description="是否只获取最新期数的水准数据")
|
||||
|
||||
class LevelDataListResponse(BaseModel):
|
||||
"""水准数据列表响应格式"""
|
||||
|
||||
@@ -148,7 +148,7 @@ class LevelDataService(BaseService[LevelData]):
|
||||
'failed_items': failed_items
|
||||
}
|
||||
|
||||
def get_level_data_by_project_name(self, db: Session, project_name: str) -> List[Dict[str, Any]]:
|
||||
def get_level_data_by_project_name(self, db: Session, project_name: str, nyid_max: bool = False) -> List[Dict[str, Any]]:
|
||||
"""
|
||||
通过project_name获取全部水准线路
|
||||
业务逻辑:
|
||||
@@ -198,6 +198,12 @@ class LevelDataService(BaseService[LevelData]):
|
||||
nyid_list = list(set([settlement.NYID for settlement in settlements if settlement.NYID]))
|
||||
logger.info(f"查询到{len(nyid_list)}个期数ID")
|
||||
|
||||
if nyid_max:
|
||||
# 只获取最新期数的水准数据
|
||||
nyid_list = [max(nyid_list, key=int)]
|
||||
logger.info(f"筛选后只获取最新期数ID: {nyid_list}")
|
||||
level_data_list = db.query(LevelData).filter(LevelData.NYID.in_(nyid_list)).all()
|
||||
else:
|
||||
# 5. 查询水准数据表获取水准数据 (通过NYID)
|
||||
level_data_list = db.query(LevelData).filter(LevelData.NYID.in_(nyid_list)).all()
|
||||
if not level_data_list:
|
||||
|
||||
@@ -337,13 +337,12 @@ class OriginalDataService(BaseService[OriginalData]):
|
||||
# ===== 性能优化:批量查询沉降数据 =====
|
||||
# 统一转换为字符串处理(数据库NYID字段是VARCHAR类型)
|
||||
nyid_list = list(set(str(item.get('NYID')) for item in data if item.get('NYID')))
|
||||
logger.info(f"Querying settlement data for nyid list: {nyid_list}")
|
||||
settlements = db.query(SettlementData).filter(SettlementData.NYID.in_(nyid_list)).all()
|
||||
logger.info(f"Found {len(settlements)} settlement records")
|
||||
settlement_map = {s.NYID: s for s in settlements}
|
||||
missing_nyids = set(nyid_list) - set(settlement_map.keys())
|
||||
|
||||
if missing_nyids:
|
||||
logger.warning(f"[批量导入原始数据] 批量查询settlement数据失败, Nyid: {list(missing_nyids)}")
|
||||
db.rollback()
|
||||
return {
|
||||
'success': False,
|
||||
|
||||
Reference in New Issue
Block a user