线路编码获取point_id
This commit is contained in:
@@ -128,3 +128,32 @@ class CheckpointService(BaseService[Checkpoint]):
|
||||
def get_by_section_ids(self, db: Session, section_ids: List[str]) -> List[Checkpoint]:
|
||||
"""根据多个section_id批量获取观测点数据"""
|
||||
return db.query(Checkpoint).filter(Checkpoint.section_id.in_(section_ids)).all()
|
||||
|
||||
def get_point_ids_by_linecode(self, db: Session, linecode: str) -> List[str]:
|
||||
"""
|
||||
根据水准线路编码获取全部观测点ID
|
||||
业务逻辑:
|
||||
1. linecode在水准数据表(LevelData)查询获取NYID,去重
|
||||
2. NYID在沉降数据表(SettlementData)找到全部沉降数据,提取point_id,去重
|
||||
3. 响应point_id数据集
|
||||
|
||||
使用in查询避免循环查询,提高查询效率
|
||||
"""
|
||||
from ..models.level_data import LevelData
|
||||
from ..models.settlement_data import SettlementData
|
||||
|
||||
# 1. 根据linecode查询水准数据表,获取所有NYID(去重)
|
||||
nyid_query = db.query(LevelData.NYID).filter(LevelData.linecode == linecode).distinct()
|
||||
nyid_list = [result.NYID for result in nyid_query.all() if result.NYID]
|
||||
|
||||
if not nyid_list:
|
||||
return []
|
||||
|
||||
# 2. 根据NYID列表查询沉降数据表,获取所有point_id(去重)
|
||||
point_id_query = db.query(SettlementData.point_id).filter(
|
||||
SettlementData.NYID.in_(nyid_list)
|
||||
).distinct()
|
||||
|
||||
point_id_list = [result.point_id for result in point_id_query.all() if result.point_id]
|
||||
|
||||
return point_id_list
|
||||
|
||||
Reference in New Issue
Block a user