Files
xian_algorithm_new/app/repositories/rainfall_repository.py
T
2026-05-06 13:07:58 +08:00

56 lines
1.5 KiB
Python

"""
降雨数据Repository - 数据访问层
"""
from typing import List, Dict, Any
from datetime import datetime
from app.core.database import db_manager
from app.utils.logger import setup_logging
logger = setup_logging()
class RainfallRepository:
"""降雨数据仓储类"""
@staticmethod
def query_stations_rainfall(
query_time: datetime,
duration: int = 12
) -> List[Dict[str, Any]]:
"""
查询指定时间的站点降雨数据(自动查询前12小时或24小时)
Args:
query_time: 查询时间
duration: 持续时间(12或24小时)
Returns:
站点降雨数据列表
"""
sql = f"""
SELECT
lon,
lat,
SUM(rainfall_1h::numeric) AS rainfall
FROM xian_meteorology
WHERE datetime BETWEEN (
to_char(timestamp :query_time - interval '{duration} hours', 'YYYYMMDDHH24MISS')
)::bigint AND (
to_char(timestamp :query_time, 'YYYYMMDDHH24MISS')
)::bigint
GROUP BY lon, lat
"""
params = {
"query_time": query_time
}
try:
result = db_manager.execute_raw_sql(sql, params)
logger.info(f"查询到 {len(result)} 个站点数据({duration}小时)")
return result
except Exception as e:
logger.error(f"查询站点降雨数据失败: {e}")
raise