From fe3ac8bfd4a0f3e000e733553d825a8b7756d953 Mon Sep 17 00:00:00 2001 From: whm <973418690@qq.com> Date: Wed, 19 Nov 2025 11:13:15 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=96=B0=E5=A2=9E=E9=80=9A=E8=BF=87point=5Fi?= =?UTF-8?q?d=E8=8E=B7=E5=8F=96=E6=B2=89=E9=99=8D=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/comprehensive_data.py | 34 +++++++++++++++++++++++++++++++ app/schemas/comprehensive_data.py | 3 ++- app/services/settlement_data.py | 4 +++- 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/app/api/comprehensive_data.py b/app/api/comprehensive_data.py index 897cc60..69d3da1 100644 --- a/app/api/comprehensive_data.py +++ b/app/api/comprehensive_data.py @@ -505,6 +505,40 @@ def get_settlement_by_nyid( total=0, data=[] ) + +@router.post("/get_settlement_by_point", response_model=DataResponse) +def get_settlement_by_point( + request: NYIDRequest, # 假设定义了接收nyid的请求模型 + db: Session = Depends(get_db) +): + try: + nyid = request.NYID # 从请求体中获取nyid + point_id = request.point_id # 从请求体中获取point_id + logger.info(f"接口请求:根据nyid={nyid}和point_id={point_id}查询沉降数据") + + settlement = SettlementDataService() + # 获取模型实例列表 + checkpoint_instances = settlement.get_by_point_id(db, point_id=point_id) + # 转为字典列表(核心修正) + checkpoint_data = [instance.__dict__ for instance in checkpoint_instances] + # 清理 SQLAlchemy 内部属性(可选,避免多余字段) + checkpoint_data = [{k: v for k, v in item.items() if not k.startswith('_sa_')} for item in checkpoint_data] + + return DataResponse( + code=ResponseCode.SUCCESS, + message=f"查询成功,共获取{len(checkpoint_data)}条沉降数据,nyid={nyid}", + total=len(checkpoint_data), + data=checkpoint_data + ) + + except Exception as e: + logger.error(f"查询沉降数据失败:{str(e)}", exc_info=True) + return DataResponse( + code=ResponseCode.QUERY_FAILED, + message=f"查询失败:{str(e)}", + total=0, + data=[] + ) @router.post("/get_today_data", response_model=DataResponse) def get_today_data(request: TodayDataRequest, db: Session = Depends(get_db)): """接口:通过POST请求触发调度器中的 scheduled_get_max_nyid_by_point_id 定时任务""" diff --git a/app/schemas/comprehensive_data.py b/app/schemas/comprehensive_data.py index 6141df0..1b5b321 100644 --- a/app/schemas/comprehensive_data.py +++ b/app/schemas/comprehensive_data.py @@ -22,7 +22,8 @@ class LevelDataImportRequest(BaseModel): createDate: Optional[str] = None # 水准数据导入请求 class NYIDRequest(BaseModel): - NYID: str + NYID: Optional[str] = None + point_id: Optional[str] = None # 今日数据请求 class TodayDataRequest(BaseModel): account_id: str diff --git a/app/services/settlement_data.py b/app/services/settlement_data.py index 251e24a..77960df 100644 --- a/app/services/settlement_data.py +++ b/app/services/settlement_data.py @@ -29,7 +29,9 @@ class SettlementDataService(BaseService[SettlementData]): def get_by_nyid(self, db: Session, nyid: str) -> List[SettlementData]: """根据期数ID获取沉降数据""" return self.get_by_field(db, "NYID", nyid) - + def get_by_nyid_and_point_id(self, db: Session, nyid: str, point_id: str) -> List[SettlementData]: + """根据期数ID和观测点ID获取沉降数据""" + return self.get_by_field(db, "NYID", nyid, "point_id", point_id) def get_by_point_and_nyid(self, db: Session, point_id: str = None, nyid: str = None) -> Optional[SettlementData]: """根据观测点ID和期数ID获取沉降数据""" return db.query(SettlementData).filter(