增加标段获取最大水准数据

This commit is contained in:
lhx
2025-11-15 16:36:40 +08:00
parent bde3ebf0cc
commit f8ed6cb5d3
5 changed files with 28 additions and 23 deletions

View File

@@ -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)}") logger.info(f"Starting batch import level data, count: {len(request.data)}")
data_list = request.data data_list = request.data
result = level_service.batch_import_level_data(db, data_list) result = level_service.batch_import_level_data(db, data_list)
logger.info(f"Batch import level data completed: {result['message']}")
return DataImportResponse( return DataImportResponse(
code=ResponseCode.SUCCESS if result.get('success') else ResponseCode.IMPORT_FAILED, code=ResponseCode.SUCCESS if result.get('success') else ResponseCode.IMPORT_FAILED,

View File

@@ -19,7 +19,7 @@ def get_level_data_by_project(request: LevelDataRequest, db: Session = Depends(g
""" """
try: try:
level_service = LevelDataService() 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( return LevelDataListResponse(
code=ResponseCode.SUCCESS, code=ResponseCode.SUCCESS,

View File

@@ -22,6 +22,7 @@ class LevelDataResponse(LevelDataBase):
class LevelDataRequest(BaseModel): class LevelDataRequest(BaseModel):
"""水准数据请求模型""" """水准数据请求模型"""
project_name: str = Field(..., description="标段名称") project_name: str = Field(..., description="标段名称")
nyid_max: Optional[bool] = Field(False, description="是否只获取最新期数的水准数据")
class LevelDataListResponse(BaseModel): class LevelDataListResponse(BaseModel):
"""水准数据列表响应格式""" """水准数据列表响应格式"""

View File

@@ -148,7 +148,7 @@ class LevelDataService(BaseService[LevelData]):
'failed_items': failed_items '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获取全部水准线路 通过project_name获取全部水准线路
业务逻辑: 业务逻辑:
@@ -198,6 +198,12 @@ class LevelDataService(BaseService[LevelData]):
nyid_list = list(set([settlement.NYID for settlement in settlements if settlement.NYID])) nyid_list = list(set([settlement.NYID for settlement in settlements if settlement.NYID]))
logger.info(f"查询到{len(nyid_list)}个期数ID") 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) # 5. 查询水准数据表获取水准数据 (通过NYID)
level_data_list = db.query(LevelData).filter(LevelData.NYID.in_(nyid_list)).all() level_data_list = db.query(LevelData).filter(LevelData.NYID.in_(nyid_list)).all()
if not level_data_list: if not level_data_list:

View File

@@ -337,13 +337,12 @@ class OriginalDataService(BaseService[OriginalData]):
# ===== 性能优化:批量查询沉降数据 ===== # ===== 性能优化:批量查询沉降数据 =====
# 统一转换为字符串处理数据库NYID字段是VARCHAR类型 # 统一转换为字符串处理数据库NYID字段是VARCHAR类型
nyid_list = list(set(str(item.get('NYID')) for item in data if item.get('NYID'))) 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() 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} settlement_map = {s.NYID: s for s in settlements}
missing_nyids = set(nyid_list) - set(settlement_map.keys()) missing_nyids = set(nyid_list) - set(settlement_map.keys())
if missing_nyids: if missing_nyids:
logger.warning(f"[批量导入原始数据] 批量查询settlement数据失败 Nyid: {list(missing_nyids)}")
db.rollback() db.rollback()
return { return {
'success': False, 'success': False,