增加标段获取最大水准数据
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)}")
|
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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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):
|
||||||
"""水准数据列表响应格式"""
|
"""水准数据列表响应格式"""
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user