From b9177fcbf0f419042f339ef487aa5060aae630e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=B7=E5=B0=8F=E5=89=8D?= Date: Fri, 23 Jan 2026 14:54:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0ios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 48 insertions(+), 9 deletions(-) diff --git a/app.py b/app.py index 013956df..94318828 100755 --- a/app.py +++ b/app.py @@ -18308,18 +18308,57 @@ def get_market_summary(seccode): with engine.connect() as conn: pledge_result = conn.execute(pledge_query, {'seccode': seccode}).fetchone() + # 构建基础数据 + latest_trade = { + 'date': format_date(trade_result.TRADEDATE) if trade_result else None, + 'close': format_decimal(trade_result.F007N) if trade_result else None, + 'change_percent': format_decimal(trade_result.F010N) if trade_result else None, + 'volume': format_decimal(trade_result.F004N) if trade_result else None, + 'amount': format_decimal(trade_result.F011N) if trade_result else None, + 'pe_ratio': format_decimal(trade_result.F026N) if trade_result else None, + 'turnover_rate': format_decimal(trade_result.F012N) if trade_result else None, + } if trade_result else None + + # 交易时间内从 ClickHouse 获取实时价格 + if latest_trade: + now = beijing_now() + current_date = now.date() + current_time = now.time() + + morning_start = dt_time(9, 30) + morning_end = dt_time(11, 30) + afternoon_start = dt_time(13, 0) + afternoon_end = dt_time(15, 0) + + is_trading_time = ( + current_date in trading_days_set and + ((morning_start <= current_time <= morning_end) or + (afternoon_start <= current_time <= afternoon_end) or + (morning_end < current_time < afternoon_start)) + ) + + if is_trading_time: + try: + # 标准化股票代码 + if seccode.startswith('6'): + full_code = f"{seccode}.SH" + elif seccode.startswith(('8', '9', '4')): + full_code = f"{seccode}.BJ" + else: + full_code = f"{seccode}.SZ" + + cached_price = get_latest_price_with_cache(full_code) + if cached_price and cached_price.get('price') and cached_price['price'] > 0: + latest_trade['close'] = cached_price['price'] + latest_trade['change_percent'] = cached_price.get('change_pct') or latest_trade['change_percent'] + print(f"[market-summary] 实时价格更新: {full_code} -> {cached_price['price']} ({cached_price.get('change_pct', 0):+.2f}%)") + except Exception as e: + print(f"[market-summary] 获取实时价格失败: {e}") + summary = { 'stock_code': seccode, 'stock_name': trade_result.SECNAME if trade_result else None, - 'latest_trade': { - 'date': format_date(trade_result.TRADEDATE) if trade_result else None, - 'close': format_decimal(trade_result.F007N) if trade_result else None, - 'change_percent': format_decimal(trade_result.F010N) if trade_result else None, - 'volume': format_decimal(trade_result.F004N) if trade_result else None, - 'amount': format_decimal(trade_result.F011N) if trade_result else None, - 'pe_ratio': format_decimal(trade_result.F026N) if trade_result else None, - 'turnover_rate': format_decimal(trade_result.F012N) if trade_result else None, - } if trade_result else None, + 'latest_trade': latest_trade, 'latest_funding': { 'date': format_date(funding_result.TRADEDATE) if funding_result else None, 'financing_balance': format_decimal(funding_result.F001N) if funding_result else None,