From b9c8f90cbc51512b62b91be795d59ac75479fbbe Mon Sep 17 00:00:00 2001 From: xucheng Date: Thu, 8 Jan 2026 21:01:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E6=95=B0=E6=8D=AE=E6=BA=90?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/api/routes.py | 20 +- backend/app/schemas.py | 2 + backend/app/services/analysis_service.py | 6 +- frontend/src/app/analysis/[id]/page.tsx | 27 +- frontend/src/components/search-stock.tsx | 254 ++++++-- frontend/src/lib/api.ts | 4 +- run_fetcher.py | 21 +- server.log | Bin 0 -> 58304 bytes src/fetchers/alphavantage_us_client.py | 172 ++++++ src/fetchers/cn_fetcher.py | 244 +------- src/fetchers/factory.py | 18 +- src/fetchers/hk_fetcher.py | 733 +---------------------- src/fetchers/ifind_hk_client.py | 699 +++++++++++++++++++++ src/fetchers/ifind_int_client.py | 556 +++++++++++++++++ src/fetchers/jp_fetcher.py | 505 +--------------- src/fetchers/tushare_cn_client.py | 242 ++++++++ src/fetchers/us_fetcher.py | 241 +++----- src/fetchers/vn_fetcher.py | 464 +------------- src/reporting/base_generator.py | 6 +- src/reporting/cn_report_generator.py | 17 +- src/reporting/hk_report_generator.py | 17 +- src/reporting/jp_report_generator.py | 17 +- src/reporting/us_report_generator.py | 21 +- src/reporting/vn_report_generator.py | 18 +- src/strategies/cn_strategy.py | 4 +- src/strategies/hk_strategy.py | 4 +- src/strategies/jp_strategy.py | 4 +- src/strategies/us_strategy.py | 10 +- src/strategies/vn_strategy.py | 4 +- 29 files changed, 2198 insertions(+), 2132 deletions(-) create mode 100644 server.log create mode 100644 src/fetchers/alphavantage_us_client.py create mode 100644 src/fetchers/ifind_hk_client.py create mode 100644 src/fetchers/ifind_int_client.py create mode 100644 src/fetchers/tushare_cn_client.py diff --git a/backend/app/api/routes.py b/backend/app/api/routes.py index 1b8c337..d9bfc95 100644 --- a/backend/app/api/routes.py +++ b/backend/app/api/routes.py @@ -42,9 +42,12 @@ async def search_stock(request: StockSearchRequest, db: AsyncSession = Depends(g @router.post("/analyze", response_model=ReportResponse) async def start_analysis(request: AnalysisRequest, background_tasks: BackgroundTasks, db: AsyncSession = Depends(get_db)): - # Get AI model setting - model_setting = await db.get(Setting, "AI_MODEL") - model = model_setting.value if model_setting else "gemini-2.0-flash" + # Get AI model + if request.model: + model = request.model + else: + model_setting = await db.get(Setting, "AI_MODEL") + model = model_setting.value if model_setting else "gemini-2.0-flash" new_report = Report( market=request.market, @@ -71,7 +74,8 @@ async def start_analysis(request: AnalysisRequest, background_tasks: BackgroundT new_report.id, request.market, request.symbol, - api_key + api_key, + request.data_source ) # Re-fetch with selectinload to avoid lazy loading issues @@ -122,12 +126,18 @@ async def get_report_html(report_id: int, db: AsyncSession = Depends(get_db)): except Exception as e: financial_html = f"

加载财务图表时出错: {str(e)}

" + # If content is not ready, add auto-refresh meta tag + meta_refresh = "" + if "财务图表尚未生成" in financial_html: + meta_refresh = '' + # Only return financial charts, no analysis sections final_html = f""" + {meta_refresh} {report.company_name} - 财务数据