移除 city_daily_max 表及 upsert 逻辑,日最高已改用 intraday_path_snapshots_store
This commit is contained in:
@@ -377,17 +377,6 @@ class SettlementSourceMixin:
|
|||||||
)
|
)
|
||||||
except Exception:
|
except Exception:
|
||||||
logger.exception("airport_obs_log append failed for cwa")
|
logger.exception("airport_obs_log append failed for cwa")
|
||||||
try:
|
|
||||||
from src.database.db_manager import DBManager
|
|
||||||
today = datetime.now().strftime("%Y-%m-%d")
|
|
||||||
tc = payload["current"]["temp"]
|
|
||||||
if tc is not None:
|
|
||||||
DBManager().upsert_daily_max(
|
|
||||||
icao="466920", temp_c=tc, obs_date=today,
|
|
||||||
obs_time=str(obs_time_raw or "").strip(),
|
|
||||||
)
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
return payload
|
return payload
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
logger.warning(f"CWA settlement fetch failed: {exc}")
|
logger.warning(f"CWA settlement fetch failed: {exc}")
|
||||||
|
|||||||
@@ -883,19 +883,6 @@ class WeatherDataCollector(OpenMeteoCacheMixin, SettlementSourceMixin, MetarSour
|
|||||||
)
|
)
|
||||||
except Exception:
|
except Exception:
|
||||||
logger.exception("airport_obs_log append failed for metar cluster city={}", city_lower)
|
logger.exception("airport_obs_log append failed for metar cluster city={}", city_lower)
|
||||||
# 更新日最高
|
|
||||||
try:
|
|
||||||
today = datetime.now().strftime("%Y-%m-%d")
|
|
||||||
for row in cluster_data:
|
|
||||||
icao = row.get("icao")
|
|
||||||
temp_c = row.get("temp_c") if "temp_c" in row else row.get("temp")
|
|
||||||
if icao and temp_c is not None:
|
|
||||||
DBManager().upsert_daily_max(
|
|
||||||
icao=icao, temp_c=temp_c, obs_date=today,
|
|
||||||
obs_time=str(row.get("obs_time") or ""),
|
|
||||||
)
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def _attach_china_official_nearby(
|
def _attach_china_official_nearby(
|
||||||
self, results: Dict, city_lower: str, use_fahrenheit: bool
|
self, results: Dict, city_lower: str, use_fahrenheit: bool
|
||||||
@@ -944,15 +931,6 @@ class WeatherDataCollector(OpenMeteoCacheMixin, SettlementSourceMixin, MetarSour
|
|||||||
)
|
)
|
||||||
except Exception:
|
except Exception:
|
||||||
logger.exception("airport_obs_log append failed for jma city={}", city_lower)
|
logger.exception("airport_obs_log append failed for jma city={}", city_lower)
|
||||||
try:
|
|
||||||
today = datetime.now().strftime("%Y-%m-%d")
|
|
||||||
if icao and row.get("temp") is not None:
|
|
||||||
DBManager().upsert_daily_max(
|
|
||||||
icao=icao, temp_c=row.get("temp"), obs_date=today,
|
|
||||||
obs_time=str(row.get("obs_time") or ""),
|
|
||||||
)
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def _attach_knmi_official_nearby(
|
def _attach_knmi_official_nearby(
|
||||||
self, results: Dict, city_lower: str, use_fahrenheit: bool
|
self, results: Dict, city_lower: str, use_fahrenheit: bool
|
||||||
@@ -978,17 +956,6 @@ class WeatherDataCollector(OpenMeteoCacheMixin, SettlementSourceMixin, MetarSour
|
|||||||
)
|
)
|
||||||
except Exception:
|
except Exception:
|
||||||
logger.exception("airport_obs_log append failed for knmi city={}", city_lower)
|
logger.exception("airport_obs_log append failed for knmi city={}", city_lower)
|
||||||
try:
|
|
||||||
today = datetime.now().strftime("%Y-%m-%d")
|
|
||||||
icao_kn = str(rows[0].get("icao") or "EHAM") if rows else ""
|
|
||||||
temp_kn = rows[0].get("temp") if rows else None
|
|
||||||
if icao_kn and temp_kn is not None:
|
|
||||||
DBManager().upsert_daily_max(
|
|
||||||
icao=icao_kn, temp_c=temp_kn, obs_date=today,
|
|
||||||
obs_time=str(rows[0].get("obs_time") or ""),
|
|
||||||
)
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def _attach_fmi_official_nearby(
|
def _attach_fmi_official_nearby(
|
||||||
self, results: Dict, city_lower: str, use_fahrenheit: bool
|
self, results: Dict, city_lower: str, use_fahrenheit: bool
|
||||||
@@ -1015,15 +982,6 @@ class WeatherDataCollector(OpenMeteoCacheMixin, SettlementSourceMixin, MetarSour
|
|||||||
)
|
)
|
||||||
except Exception:
|
except Exception:
|
||||||
logger.exception("airport_obs_log append failed for fmi city={}", city_lower)
|
logger.exception("airport_obs_log append failed for fmi city={}", city_lower)
|
||||||
try:
|
|
||||||
today = datetime.now().strftime("%Y-%m-%d")
|
|
||||||
if icao and row.get("temp") is not None:
|
|
||||||
DBManager().upsert_daily_max(
|
|
||||||
icao=icao, temp_c=row.get("temp"), obs_date=today,
|
|
||||||
obs_time=str(row.get("obs_time") or ""),
|
|
||||||
)
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def _attach_hko_obs_official_nearby(
|
def _attach_hko_obs_official_nearby(
|
||||||
self, results: Dict, city_lower: str, use_fahrenheit: bool
|
self, results: Dict, city_lower: str, use_fahrenheit: bool
|
||||||
@@ -1049,17 +1007,6 @@ class WeatherDataCollector(OpenMeteoCacheMixin, SettlementSourceMixin, MetarSour
|
|||||||
)
|
)
|
||||||
except Exception:
|
except Exception:
|
||||||
logger.exception("airport_obs_log append failed for hko_obs city={}", city_lower)
|
logger.exception("airport_obs_log append failed for hko_obs city={}", city_lower)
|
||||||
try:
|
|
||||||
today = datetime.now().strftime("%Y-%m-%d")
|
|
||||||
icao_hk = str(rows[0].get("icao") or "HKO") if rows else ""
|
|
||||||
temp_hk = rows[0].get("temp") if rows else None
|
|
||||||
if icao_hk and temp_hk is not None:
|
|
||||||
DBManager().upsert_daily_max(
|
|
||||||
icao=icao_hk, temp_c=temp_hk, obs_date=today,
|
|
||||||
obs_time=str(rows[0].get("obs_time") or ""),
|
|
||||||
)
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def _attach_korean_amos_data(
|
def _attach_korean_amos_data(
|
||||||
self, results: Dict, city_lower: str, use_fahrenheit: bool
|
self, results: Dict, city_lower: str, use_fahrenheit: bool
|
||||||
@@ -1100,18 +1047,6 @@ class WeatherDataCollector(OpenMeteoCacheMixin, SettlementSourceMixin, MetarSour
|
|||||||
)
|
)
|
||||||
except Exception:
|
except Exception:
|
||||||
logger.exception("airport_obs_log append failed for amos city={}", city_lower)
|
logger.exception("airport_obs_log append failed for amos city={}", city_lower)
|
||||||
# 更新日最高
|
|
||||||
try:
|
|
||||||
today = datetime.now().strftime("%Y-%m-%d")
|
|
||||||
icao = amos_data.get("icao") or ""
|
|
||||||
temp_c = amos_data.get("temp_c")
|
|
||||||
if icao and temp_c is not None:
|
|
||||||
DBManager().upsert_daily_max(
|
|
||||||
icao=icao, temp_c=temp_c, obs_date=today,
|
|
||||||
obs_time=amos_data.get("observation_time") or "",
|
|
||||||
)
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
else:
|
else:
|
||||||
logger.warning("AMOS: no data returned for city={}", city_lower)
|
logger.warning("AMOS: no data returned for city={}", city_lower)
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
|
|||||||
@@ -295,15 +295,6 @@ class DBManager:
|
|||||||
conn.execute(
|
conn.execute(
|
||||||
"CREATE INDEX IF NOT EXISTS idx_airport_obs_log_icao_time ON airport_obs_log(icao, created_at DESC)"
|
"CREATE INDEX IF NOT EXISTS idx_airport_obs_log_icao_time ON airport_obs_log(icao, created_at DESC)"
|
||||||
)
|
)
|
||||||
conn.execute("""
|
|
||||||
CREATE TABLE IF NOT EXISTS city_daily_max (
|
|
||||||
icao TEXT PRIMARY KEY,
|
|
||||||
max_temp REAL NOT NULL,
|
|
||||||
obs_date TEXT NOT NULL,
|
|
||||||
max_time TEXT,
|
|
||||||
updated_at TEXT NOT NULL
|
|
||||||
)
|
|
||||||
""")
|
|
||||||
self._ensure_column(conn, "users", "daily_points", "INTEGER DEFAULT 0")
|
self._ensure_column(conn, "users", "daily_points", "INTEGER DEFAULT 0")
|
||||||
self._ensure_column(conn, "users", "daily_points_date", "TEXT")
|
self._ensure_column(conn, "users", "daily_points_date", "TEXT")
|
||||||
self._ensure_column(conn, "users", "weekly_points", "INTEGER DEFAULT 0")
|
self._ensure_column(conn, "users", "weekly_points", "INTEGER DEFAULT 0")
|
||||||
@@ -1889,26 +1880,3 @@ class DBManager:
|
|||||||
(str(icao).strip().upper(), str(-int(minutes))),
|
(str(icao).strip().upper(), str(-int(minutes))),
|
||||||
).fetchall()
|
).fetchall()
|
||||||
return [dict(r) for r in rows]
|
return [dict(r) for r in rows]
|
||||||
|
|
||||||
def upsert_daily_max(
|
|
||||||
self, *, icao: str, temp_c: float, obs_date: str,
|
|
||||||
max_time: Optional[str] = None, obs_time: str = "",
|
|
||||||
) -> None:
|
|
||||||
"""Only update if temp_c exceeds stored max for the same date."""
|
|
||||||
with self._get_connection() as conn:
|
|
||||||
row = conn.execute(
|
|
||||||
"SELECT max_temp, obs_date FROM city_daily_max WHERE icao = ?",
|
|
||||||
(str(icao).strip().upper(),),
|
|
||||||
).fetchone()
|
|
||||||
if row and row[1] == obs_date:
|
|
||||||
if temp_c <= (row[0] or -999.0):
|
|
||||||
return # not a new high
|
|
||||||
# new day or new high: upsert
|
|
||||||
conn.execute(
|
|
||||||
"""INSERT OR REPLACE INTO city_daily_max
|
|
||||||
(icao, max_temp, obs_date, max_time, updated_at)
|
|
||||||
VALUES (?, ?, ?, ?, ?)""",
|
|
||||||
(str(icao).strip().upper(), temp_c, obs_date,
|
|
||||||
max_time or "", obs_time or datetime.now().isoformat()),
|
|
||||||
)
|
|
||||||
conn.commit()
|
|
||||||
|
|||||||
Reference in New Issue
Block a user