Files
xian_algorithm_new/app/repositories/rainfall_repository.py
T

55 lines
1.4 KiB
Python
Raw Normal View History

2026-05-05 19:49:12 +08:00
"""
降雨数据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
) -> List[Dict[str, Any]]:
"""
查询指定时间的站点降雨数据(自动查询前12小时)
Args:
query_time: 查询时间
Returns:
站点降雨数据列表
"""
sql = """
SELECT
m.lon,
m.lat,
SUM(m.rainfall_1h::numeric) AS rainfall
FROM xian_meteorology m
WHERE m.datetime BETWEEN (
to_char(timestamp :query_time - interval '12 hours', 'YYYYMMDDHH24MISS')
)::bigint AND (
to_char(timestamp :query_time, 'YYYYMMDDHH24MISS')
)::bigint
GROUP BY m.lon, m.lat
ORDER BY rainfall DESC
"""
params = {
"query_time": query_time
}
try:
result = db_manager.execute_raw_sql(sql, params)
logger.info(f"查询到 {len(result)} 个站点数据")
return result
except Exception as e:
logger.error(f"查询站点降雨数据失败: {e}")
raise