From 7e66b026b9b843cd7f672d01486c7e309760f25c Mon Sep 17 00:00:00 2001 From: "2569718930@qq.com" <2569718930@qq.com> Date: Mon, 27 Apr 2026 00:54:24 +0800 Subject: [PATCH] feat: implement AI city forecast streaming hook and utility functions for scan terminal --- .../dashboard/scan-terminal/city-card-decision-utils.ts | 9 +-------- .../dashboard/scan-terminal/use-ai-city-card-data.ts | 4 ++-- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/frontend/components/dashboard/scan-terminal/city-card-decision-utils.ts b/frontend/components/dashboard/scan-terminal/city-card-decision-utils.ts index 98eff311..34583fd1 100644 --- a/frontend/components/dashboard/scan-terminal/city-card-decision-utils.ts +++ b/frontend/components/dashboard/scan-terminal/city-card-decision-utils.ts @@ -281,14 +281,7 @@ export function pickMarketBucketForWeatherCenter( } if (roundedMatch) return roundedMatch; if (!nearest) return isReasonableFallback(selectedBucket) ? selectedBucket : null; - const comparable = normalizeMarketComparableTemp(expectedHigh, tempSymbol, nearest); - const unit = String(nearest.unit || "").toUpperCase(); - const maxReasonableDelta = unit === "F" ? 16 : 8; - if ( - comparable != null && - Number.isFinite(nearestDelta) && - nearestDelta <= maxReasonableDelta - ) { + if (Number.isFinite(nearestDelta) && isReasonableFallback(nearest)) { return nearest; } return isReasonableFallback(selectedBucket) ? selectedBucket : null; diff --git a/frontend/components/dashboard/scan-terminal/use-ai-city-card-data.ts b/frontend/components/dashboard/scan-terminal/use-ai-city-card-data.ts index 40be974b..7dd6dba8 100644 --- a/frontend/components/dashboard/scan-terminal/use-ai-city-card-data.ts +++ b/frontend/components/dashboard/scan-terminal/use-ai-city-card-data.ts @@ -16,7 +16,7 @@ import { normalizeCityKey } from "./decision-utils"; const AI_CITY_FORECAST_CACHE_PREFIX = "polyWeather_aiCityForecast_v3"; const AI_CITY_FORECAST_CACHE_TTL_MS = 60 * 60 * 1000; -const CITY_MARKET_SCAN_CACHE_PREFIX = "polyWeather_cityMarketScan_v2"; +const CITY_MARKET_SCAN_CACHE_PREFIX = "polyWeather_cityMarketScan_v3"; const CITY_MARKET_SCAN_CACHE_TTL_MS = 10 * 60 * 1000; const pendingAiCityForecastRequests = new Map< string, @@ -504,7 +504,7 @@ export function useCityMarketScan({ const cacheKey = buildStorageKey(CITY_MARKET_SCAN_CACHE_PREFIX, [ normalizeCityKey(detailCityName), detail.local_date || "", - "lite", + "full", ]); let cancelled = false; if (detail.market_scan) {