1.自动更新今日需要抓取数据
2.工况接口返回
This commit is contained in:
@@ -3,7 +3,14 @@ from typing import List, Optional, Dict, Any
|
||||
from ..models.settlement_data import SettlementData
|
||||
from ..models.checkpoint import Checkpoint
|
||||
from .base import BaseService
|
||||
from sqlalchemy.orm import Session
|
||||
from typing import Dict, List
|
||||
from ..models.settlement_data import SettlementData
|
||||
from ..models.level_data import LevelData
|
||||
import logging
|
||||
from datetime import datetime
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
class SettlementDataService(BaseService[SettlementData]):
|
||||
def __init__(self):
|
||||
super().__init__(SettlementData)
|
||||
@@ -340,4 +347,81 @@ class SettlementDataService(BaseService[SettlementData]):
|
||||
'success_count': success_count,
|
||||
'failed_count': failed_count,
|
||||
'failed_items': failed_items
|
||||
}
|
||||
}
|
||||
|
||||
# 根据水准线路编码获取最新的NYID并获取对应的测点数据
|
||||
def get_settlement_by_linecode(
|
||||
self,
|
||||
db: Session,
|
||||
linecode: str,
|
||||
num: int = 1 # 新增参数:控制返回的期数,默认1(最新一期)
|
||||
) -> Dict:
|
||||
"""
|
||||
根据水准线路编码(linecode)查询对应沉降数据,支持按期数筛选
|
||||
关联逻辑:LevelData.linecode → LevelData.NYID → SettlementData.NYID
|
||||
:param db: 数据库会话
|
||||
:param linecode: 目标水准线路编码
|
||||
:param num: 返回的期数(按NYID从大到小排序),默认1(最新一期)
|
||||
:return: 字典格式,包含沉降数据列表,键为 "settlement_data"
|
||||
"""
|
||||
try:
|
||||
logger.info(f"开始查询linecode={linecode}对应的沉降数据(取前{num}期)")
|
||||
|
||||
# 1. 根据linecode查询水准线路表,获取所有关联的NYID(去重后按NYID降序排序)
|
||||
nyid_query = db.query(LevelData.NYID)\
|
||||
.filter(LevelData.linecode == linecode)\
|
||||
.distinct()\
|
||||
.order_by(LevelData.NYID.desc()) # 按NYID降序,确保最新的在前
|
||||
|
||||
# 根据num参数截取前N期的NYID
|
||||
top_nyids = nyid_query.limit(num).all()
|
||||
|
||||
if not top_nyids:
|
||||
logger.warning(f"未查询到linecode={linecode}对应的水准线路记录")
|
||||
return {"settlement_data": []}
|
||||
|
||||
# 提取NYID字符串列表(按降序排列,保持最新的在前)
|
||||
target_nyids = [item.NYID for item in top_nyids]
|
||||
|
||||
# 2. 根据NYID列表查询沉降数据表,按NYID降序、观测时间升序排列
|
||||
settlement_records = db.query(SettlementData)\
|
||||
.filter(SettlementData.NYID.in_(target_nyids))\
|
||||
.order_by(
|
||||
SettlementData.NYID.desc(), # 期数从新到旧
|
||||
SettlementData.MTIME_W.asc() # 同期内按观测时间从早到晚
|
||||
)\
|
||||
.all()
|
||||
|
||||
# 3. 转换模型实例为字典列表(处理日期格式)
|
||||
settlement_data = []
|
||||
for record in settlement_records:
|
||||
record_dict = {
|
||||
"id": record.id,
|
||||
"point_id": record.point_id,
|
||||
"CVALUE": record.CVALUE,
|
||||
"MAVALUE": record.MAVALUE,
|
||||
"MTIME_W": record.MTIME_W.strftime("%Y-%m-%d %H:%M:%S") if record.MTIME_W else None,
|
||||
"NYID": record.NYID,
|
||||
"PRELOADH": record.PRELOADH,
|
||||
"PSTATE": record.PSTATE,
|
||||
"REMARK": record.REMARK,
|
||||
"WORKINFO": record.WORKINFO,
|
||||
"createdate": record.createdate.strftime("%Y-%m-%d %H:%M:%S") if record.createdate else None,
|
||||
"day": record.day,
|
||||
"day_jg": record.day_jg,
|
||||
"isgzjdxz": record.isgzjdxz,
|
||||
"mavalue_bc": record.mavalue_bc,
|
||||
"mavalue_lj": record.mavalue_lj,
|
||||
"sjName": record.sjName,
|
||||
"useflag": record.useflag,
|
||||
"workinfoname": record.workinfoname,
|
||||
"upd_remark": record.upd_remark
|
||||
}
|
||||
settlement_data.append(record_dict)
|
||||
|
||||
logger.info(f"查询完成,linecode={linecode}的前{num}期对应{len(settlement_data)}条沉降数据")
|
||||
return {"settlement_data": settlement_data}
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"查询linecode={linecode}的沉降数据失败:{str(e)}", exc_info=True)
|
||||
raise e
|
||||
Reference in New Issue
Block a user