From 8a7b5637c1e8dd31207edb5ee80cc543aad4be45 Mon Sep 17 00:00:00 2001 From: lhx Date: Sun, 16 Nov 2025 14:27:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=8F=82=E6=95=B0=E6=A3=80?= =?UTF-8?q?=E9=AA=8C=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/level_data.py | 2 +- app/services/settlement_data.py | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/app/services/level_data.py b/app/services/level_data.py index 35ee07a..5c7588b 100644 --- a/app/services/level_data.py +++ b/app/services/level_data.py @@ -168,7 +168,7 @@ class LevelDataService(BaseService[LevelData]): try: level_data_list = [ LevelData( - linecode=item.get('linecode'), + linecode=str(item.get('linecode')), # 统一转换为字符串 benchmarkids=item.get('benchmarkids'), wsphigh=item.get('wsphigh'), mtype=item.get('mtype'), diff --git a/app/services/settlement_data.py b/app/services/settlement_data.py index c6ae766..f42f03d 100644 --- a/app/services/settlement_data.py +++ b/app/services/settlement_data.py @@ -373,7 +373,8 @@ class SettlementDataService(BaseService[SettlementData]): failed_items = [] # ===== 性能优化1:批量查询观测点数据(IN查询) ===== - point_id_list = list(set(item.get('point_id') for item in data if item.get('point_id'))) + # 统一转换为字符串处理(数据库point_id字段是VARCHAR类型) + point_id_list = list(set(str(item.get('point_id')) for item in data if item.get('point_id'))) logger.info(f"Checking {len(point_id_list)} unique point_ids in checkpoint data") checkpoints = db.query(Checkpoint).filter(Checkpoint.point_id.in_(point_id_list)).all() checkpoint_map = {c.point_id: c for c in checkpoints} @@ -381,7 +382,7 @@ class SettlementDataService(BaseService[SettlementData]): # 记录缺失的观测点 for item_data in data: - point_id = item_data.get('point_id') + point_id = str(item_data.get('point_id')) # 统一转换为字符串 if point_id in missing_point_ids: failed_count += 1 failed_items.append({ @@ -402,8 +403,8 @@ class SettlementDataService(BaseService[SettlementData]): } # ===== 性能优化2:批量查询现有沉降数据(IN查询) ===== - # 只查询有效的观测点数据 - valid_items = [item for item in data if item.get('point_id') not in missing_point_ids] + # 只查询有效的观测点数据(注意:需要转换为字符串比较) + valid_items = [item for item in data if str(item.get('point_id')) not in missing_point_ids] if valid_items: # 使用组合键 (point_id, NYID) 查询现有数据 existing_data = db.query(SettlementData).filter( @@ -421,8 +422,8 @@ class SettlementDataService(BaseService[SettlementData]): to_insert = [] for item_data in valid_items: - point_id = item_data.get('point_id') - nyid = str(item_data.get('NYID')) + point_id = str(item_data.get('point_id')) # 统一转换为字符串 + nyid = str(item_data.get('NYID')) # 统一转换为字符串 # 构建组合键 key = f"{point_id}_{nyid}" @@ -449,7 +450,7 @@ class SettlementDataService(BaseService[SettlementData]): try: settlement_data_list = [ SettlementData( - point_id=item.get('point_id'), + point_id=str(item.get('point_id')), # 统一转换为字符串 CVALUE=item.get('CVALUE'), MAVALUE=item.get('MAVALUE'), MTIME_W=item.get('MTIME_W'),