From 270866da2d70cbea4dbba9ad476b16abe92a7d78 Mon Sep 17 00:00:00 2001 From: zzlgreat Date: Wed, 4 Feb 2026 20:35:48 +0800 Subject: [PATCH] update pay promo --- app.py | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/app.py b/app.py index 293774fd..b8d16d7a 100755 --- a/app.py +++ b/app.py @@ -9225,6 +9225,33 @@ def get_flex_screen_quotes(): # 查询深交所股票实时行情 if szse_stock_codes: try: + # 先从 ea_trade 获取正确的昨收价(实时表的 prev_close 可能不准确) + # 昨收价 = 上一交易日的收盘价(F007N) + szse_prev_close_map = {} + with engine.connect() as conn: + if szse_stock_codes: + # 获取上一交易日 + prev_day_result = conn.execute(text(""" + SELECT EXCHANGE_DATE FROM trading_days + WHERE EXCHANGE_DATE < CURDATE() + ORDER BY EXCHANGE_DATE DESC LIMIT 1 + """)).fetchone() + + if prev_day_result: + prev_day = prev_day_result[0] + placeholders = ','.join([f':code{i}' for i in range(len(szse_stock_codes))]) + params = {f'code{i}': code for i, code in enumerate(szse_stock_codes)} + params['trade_date'] = prev_day + + # 获取上一交易日的收盘价(F007N)作为今日昨收 + prev_result = conn.execute(text(f""" + SELECT SECCODE, F007N as close_price + FROM ea_trade + WHERE SECCODE IN ({placeholders}) AND TRADEDATE = :trade_date + """), params).fetchall() + + szse_prev_close_map = {row[0]: float(row[1]) if row[1] else 0 for row in prev_result} + order_book_cols = "" if include_order_book: order_book_cols = """, @@ -9261,7 +9288,8 @@ def get_flex_screen_quotes(): security_id = row[0] full_code = f"{security_id}.SZ" last_px = float(row[1]) if row[1] else 0 - prev_close = float(row[2]) if row[2] else 0 + # 优先使用 ea_trade 的昨收价,回退到实时表的 prev_close + prev_close = szse_prev_close_map.get(security_id) or (float(row[2]) if row[2] else 0) change = last_px - prev_close if last_px and prev_close else 0 change_pct = (change / prev_close * 100) if prev_close else 0 @@ -9354,6 +9382,33 @@ def get_flex_screen_quotes(): # 查询上交所实时行情(如果有 sse_stock_realtime 表) if sse_codes: try: + # 先从 ea_trade 获取正确的昨收价(实时表的 prev_close 可能不准确) + # 昨收价 = 上一交易日的收盘价(F007N) + sse_prev_close_map = {} + with engine.connect() as conn: + if sse_codes: + # 获取上一交易日 + prev_day_result = conn.execute(text(""" + SELECT EXCHANGE_DATE FROM trading_days + WHERE EXCHANGE_DATE < CURDATE() + ORDER BY EXCHANGE_DATE DESC LIMIT 1 + """)).fetchone() + + if prev_day_result: + prev_day = prev_day_result[0] + placeholders = ','.join([f':code{i}' for i in range(len(sse_codes))]) + params = {f'code{i}': code for i, code in enumerate(sse_codes)} + params['trade_date'] = prev_day + + # 获取上一交易日的收盘价(F007N)作为今日昨收 + prev_result = conn.execute(text(f""" + SELECT SECCODE, F007N as close_price + FROM ea_trade + WHERE SECCODE IN ({placeholders}) AND TRADEDATE = :trade_date + """), params).fetchall() + + sse_prev_close_map = {row[0]: float(row[1]) if row[1] else 0 for row in prev_result} + sse_query = """ SELECT security_id, @@ -9377,7 +9432,8 @@ def get_flex_screen_quotes(): security_id = row[0] full_code = f"{security_id}.SH" last_px = float(row[1]) if row[1] else 0 - prev_close = float(row[2]) if row[2] else 0 + # 优先使用 ea_trade 的昨收价,回退到实时表的 prev_close + prev_close = sse_prev_close_map.get(security_id) or (float(row[2]) if row[2] else 0) change = last_px - prev_close if last_px and prev_close else 0 change_pct = (change / prev_close * 100) if prev_close else 0