From 3adefc622509b5ce2cc2d187c765b7b097fd28fc Mon Sep 17 00:00:00 2001 From: zzlgreat Date: Wed, 10 Dec 2025 14:40:35 +0800 Subject: [PATCH] update pay ui --- __pycache__/app.cpython-310.pyc | Bin 380295 -> 408938 bytes app.py | 88 +++-- .../FlexScreen/hooks/useRealtimeQuote.ts | 311 ++++++++++-------- .../components/FlexScreen/hooks/utils.ts | 58 +--- .../components/FlexScreen/types.ts | 45 ++- 5 files changed, 294 insertions(+), 208 deletions(-) diff --git a/__pycache__/app.cpython-310.pyc b/__pycache__/app.cpython-310.pyc index 4f57ded374001fcf956c28edb19db82dd59738c6..9733ad91224ae4b5c632754dd39cce576eb55f36 100644 GIT binary patch delta 130573 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 VynnK!It9+b^}5J~FG3an{{SEg+dTjP delta 104513 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
}&-_$la)punQx6rOC(?UQewXk%|#*-4m*Fza-=( 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 Sz8dcbQ{-xLWWnhw)%QQ{1qzJ- diff --git a/app.py b/app.py index cdfdbe86..e54f3e4d 100755 --- a/app.py +++ b/app.py @@ -6519,6 +6519,22 @@ def get_batch_kline_data(): results = {} if chart_type == 'timeline': + # 批量获取昨收价(从 MySQL ea_trade 表) + prev_close_map = {} + target_date_str = target_date.strftime('%Y%m%d') + with engine.connect() as conn: + base_codes = list(set([code.split('.')[0] for code in codes])) + if base_codes: + placeholders = ','.join([f':code{i}' for i in range(len(base_codes))]) + params = {f'code{i}': code for i, code in enumerate(base_codes)} + params['trade_date'] = target_date_str + result = conn.execute(text(f""" + SELECT SECCODE, F007N FROM ea_trade + WHERE SECCODE IN ({placeholders}) AND TRADEDATE = :trade_date AND F007N > 0 + """), params).fetchall() + for row in result: + prev_close_map[row[0]] = float(row[1]) + # 批量查询分时数据(使用标准化代码查询 ClickHouse) batch_data = client.execute(""" SELECT code, timestamp, close, volume @@ -6532,16 +6548,35 @@ def get_batch_kline_data(): 'end': end_time }) - # 按股票代码分组(标准化代码 -> 数据列表) + # 按股票代码分组,同时计算均价和涨跌幅 stock_data = {} + stock_accum = {} # 用于计算均价的累计值 for row in batch_data: norm_code = row[0] + base_code = norm_code.split('.')[0] + price = float(row[2]) + volume = float(row[3]) + if norm_code not in stock_data: stock_data[norm_code] = [] + stock_accum[norm_code] = {'total_amount': 0, 'total_volume': 0} + + # 累计计算均价 + stock_accum[norm_code]['total_amount'] += price * volume + stock_accum[norm_code]['total_volume'] += volume + total_vol = stock_accum[norm_code]['total_volume'] + avg_price = stock_accum[norm_code]['total_amount'] / total_vol if total_vol > 0 else price + + # 计算涨跌幅 + prev_close = prev_close_map.get(base_code) + change_percent = ((price - prev_close) / prev_close * 100) if prev_close and prev_close > 0 else 0 + stock_data[norm_code].append({ 'time': row[1].strftime('%H:%M'), - 'price': float(row[2]), - 'volume': float(row[3]) + 'price': price, + 'avg_price': round(avg_price, 2), + 'volume': volume, + 'change_percent': round(change_percent, 2) }) # 组装结果(使用原始代码作为 key 返回) @@ -6550,13 +6585,15 @@ def get_batch_kline_data(): base_code = orig_code.split('.')[0] stock_name = stock_names.get(base_code, f'股票{base_code}') data_list = stock_data.get(norm_code, []) + prev_close = prev_close_map.get(base_code) results[orig_code] = { 'code': orig_code, 'name': stock_name, 'data': data_list, 'trade_date': target_date.strftime('%Y-%m-%d'), - 'type': 'timeline' + 'type': 'timeline', + 'prev_close': prev_close } elif chart_type == 'daily': @@ -7634,23 +7671,36 @@ def get_timeline_data(stock_code, event_datetime, stock_name): 'type': 'timeline' }) - # 获取昨收盘价 - prev_close_query = """ - SELECT close - FROM stock_minute - WHERE code = %(code)s - AND timestamp \ - < %(start)s - ORDER BY timestamp DESC - LIMIT 1 \ - """ + # 获取昨收盘价 - 优先从 MySQL ea_trade 表获取(更可靠) + prev_close = None + base_code = stock_code.split('.')[0] + target_date_str = target_date.strftime('%Y%m%d') - prev_close_result = client.execute(prev_close_query, { - 'code': stock_code, - 'start': datetime.combine(target_date, dt_time(9, 30)) - }) + try: + with engine.connect() as conn: + # F007N 是昨收价字段 + result = conn.execute(text(""" + SELECT F007N FROM ea_trade + WHERE SECCODE = :code AND TRADEDATE = :trade_date AND F007N > 0 + """), {'code': base_code, 'trade_date': target_date_str}).fetchone() + if result and result[0]: + prev_close = float(result[0]) + except Exception as e: + logger.warning(f"从 ea_trade 获取昨收价失败: {e}") - prev_close = float(prev_close_result[0][0]) if prev_close_result else None + # 如果 MySQL 没有数据,回退到 ClickHouse + if prev_close is None: + prev_close_query = """ + SELECT close FROM stock_minute + WHERE code = %(code)s AND timestamp < %(start)s + ORDER BY timestamp DESC LIMIT 1 + """ + prev_close_result = client.execute(prev_close_query, { + 'code': stock_code, + 'start': datetime.combine(target_date, dt_time(9, 30)) + }) + if prev_close_result: + prev_close = float(prev_close_result[0][0]) data = client.execute( """ diff --git a/src/views/StockOverview/components/FlexScreen/hooks/useRealtimeQuote.ts b/src/views/StockOverview/components/FlexScreen/hooks/useRealtimeQuote.ts index 09687696..1b093826 100644 --- a/src/views/StockOverview/components/FlexScreen/hooks/useRealtimeQuote.ts +++ b/src/views/StockOverview/components/FlexScreen/hooks/useRealtimeQuote.ts @@ -3,11 +3,11 @@ * 管理上交所和深交所 WebSocket 连接,获取实时行情数据 * * 连接方式: - * - 生产环境 (HTTPS): 通过 Nginx 代理使用 wss:// (如 wss://valuefrontier.cn/ws/sse) + * - 生产环境 (HTTPS): 通过 Nginx 代理使用 wss:// * - 开发环境 (HTTP): 直连 ws:// * * 上交所 (SSE): 需主动订阅,提供五档行情 - * 深交所 (SZSE): 自动推送,提供十档行情 + * 深交所 (SZSE): v4.0 API - 需主动订阅,提供十档行情 */ import { useState, useEffect, useRef, useCallback } from 'react'; @@ -34,8 +34,6 @@ import type { /** * 处理上交所消息 - * 注意:上交所返回的 code 不带后缀,但通过 msg.type 区分 'stock' 和 'index' - * 存储时使用带后缀的完整代码作为 key(如 000001.SH) */ const handleSSEMessage = ( msg: SSEMessage, @@ -49,10 +47,8 @@ const handleSSEMessage = ( const data = msg.data || {}; const updated: QuotesMap = { ...prevQuotes }; let hasUpdate = false; - const isIndex = msg.type === 'index'; Object.entries(data).forEach(([code, quote]: [string, SSEQuoteItem]) => { - // 生成带后缀的完整代码(上交所统一用 .SH) const fullCode = code.includes('.') ? code : `${code}.SH`; if (subscribedCodes.has(code) || subscribedCodes.has(fullCode)) { @@ -83,9 +79,7 @@ const handleSSEMessage = ( }; /** - * 处理深交所实时消息 - * 注意:深交所返回的 security_id 可能带后缀也可能不带 - * 存储时统一使用带后缀的完整代码作为 key(如 000001.SZ) + * 处理深交所实时消息 (realtime) */ const handleSZSERealtimeMessage = ( msg: SZSERealtimeMessage, @@ -94,7 +88,6 @@ const handleSZSERealtimeMessage = ( ): QuotesMap | null => { const { category, data, timestamp } = msg; const rawCode = data.security_id; - // 生成带后缀的完整代码(深交所统一用 .SZ) const fullCode = rawCode.includes('.') ? rawCode : `${rawCode}.SZ`; if (!subscribedCodes.has(rawCode) && !subscribedCodes.has(fullCode)) { @@ -106,48 +99,8 @@ const handleSZSERealtimeMessage = ( switch (category) { case 'stock': { const stockData = data as SZSEStockData; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const rawData = data as any; // 用于检查替代字段名 - - // 调试日志:检查深交所返回的盘口原始数据(临时使用 warn 级别方便调试) - if (!stockData.bids || stockData.bids.length === 0) { - logger.warn('FlexScreen', `SZSE股票数据无盘口 ${fullCode}`, { - hasBids: !!stockData.bids, - hasAsks: !!stockData.asks, - bidsLength: stockData.bids?.length || 0, - asksLength: stockData.asks?.length || 0, - // 检查替代字段名 - hasBidPrices: !!rawData.bid_prices, - hasAskPrices: !!rawData.ask_prices, - dataKeys: Object.keys(stockData), // 查看服务端实际返回了哪些字段 - }); - } - - // 优先使用 bids/asks 对象数组格式,如果不存在则尝试 bid_prices/ask_prices 分离数组格式 - let bidPrices: number[] = []; - let bidVolumes: number[] = []; - let askPrices: number[] = []; - let askVolumes: number[] = []; - - if (stockData.bids && stockData.bids.length > 0) { - const extracted = extractOrderBook(stockData.bids); - bidPrices = extracted.prices; - bidVolumes = extracted.volumes; - } else if (rawData.bid_prices && Array.isArray(rawData.bid_prices)) { - // 替代格式:bid_prices 和 bid_volumes 分离 - bidPrices = rawData.bid_prices; - bidVolumes = rawData.bid_volumes || []; - } - - if (stockData.asks && stockData.asks.length > 0) { - const extracted = extractOrderBook(stockData.asks); - askPrices = extracted.prices; - askVolumes = extracted.volumes; - } else if (rawData.ask_prices && Array.isArray(rawData.ask_prices)) { - // 替代格式:ask_prices 和 ask_volumes 分离 - askPrices = rawData.ask_prices; - askVolumes = rawData.ask_volumes || []; - } + const { prices: bidPrices, volumes: bidVolumes } = extractOrderBook(stockData.bids); + const { prices: askPrices, volumes: askVolumes } = extractOrderBook(stockData.asks); updated[fullCode] = { code: fullCode, @@ -292,8 +245,8 @@ const handleSZSERealtimeMessage = ( }; /** - * 处理深交所快照消息 - * 存储时统一使用带后缀的完整代码作为 key + * 处理深交所快照消息 (snapshot) + * 订阅后首次返回的批量数据 */ const handleSZSESnapshotMessage = ( msg: SZSESnapshotMessage, @@ -310,43 +263,8 @@ const handleSZSESnapshotMessage = ( if (subscribedCodes.has(rawCode) || subscribedCodes.has(fullCode)) { hasUpdate = true; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const rawData = s as any; // 用于检查替代字段名 - - // 调试日志:检查快照消息中的盘口数据(无盘口时警告) - if (!s.bids || s.bids.length === 0) { - logger.warn('FlexScreen', `SZSE快照股票数据无盘口 ${fullCode}`, { - hasBids: !!s.bids, - hasAsks: !!s.asks, - hasBidPrices: !!rawData.bid_prices, - hasAskPrices: !!rawData.ask_prices, - dataKeys: Object.keys(s), - }); - } - - // 优先使用 bids/asks 对象数组格式,如果不存在则尝试 bid_prices/ask_prices 分离数组格式 - let bidPrices: number[] = []; - let bidVolumes: number[] = []; - let askPrices: number[] = []; - let askVolumes: number[] = []; - - if (s.bids && s.bids.length > 0) { - const extracted = extractOrderBook(s.bids); - bidPrices = extracted.prices; - bidVolumes = extracted.volumes; - } else if (rawData.bid_prices && Array.isArray(rawData.bid_prices)) { - bidPrices = rawData.bid_prices; - bidVolumes = rawData.bid_volumes || []; - } - - if (s.asks && s.asks.length > 0) { - const extracted = extractOrderBook(s.asks); - askPrices = extracted.prices; - askVolumes = extracted.volumes; - } else if (rawData.ask_prices && Array.isArray(rawData.ask_prices)) { - askPrices = rawData.ask_prices; - askVolumes = rawData.ask_volumes || []; - } + const { prices: bidPrices, volumes: bidVolumes } = extractOrderBook(s.bids); + const { prices: askPrices, volumes: askVolumes } = extractOrderBook(s.asks); updated[fullCode] = { code: fullCode, @@ -433,7 +351,7 @@ const handleSZSESnapshotMessage = ( /** * 实时行情 Hook - * @param codes - 订阅的证券代码列表 + * @param codes - 订阅的证券代码列表(带后缀,如 000001.SZ) */ export const useRealtimeQuote = (codes: string[] = []): UseRealtimeQuoteReturn => { const [quotes, setQuotes] = useState({}); @@ -442,6 +360,11 @@ export const useRealtimeQuote = (codes: string[] = []): UseRealtimeQuoteReturn = const wsRefs = useRef>({ SSE: null, SZSE: null }); const heartbeatRefs = useRef>({ SSE: null, SZSE: null }); const reconnectRefs = useRef>({ SSE: null, SZSE: null }); + // 深交所 WebSocket 就绪状态(收到 welcome 消息后才能订阅) + const szseReadyRef = useRef(false); + // 待发送的深交所订阅队列(在 welcome 之前收到的订阅请求) + const szsePendingSubscribeRef = useRef([]); + const subscribedCodes = useRef>>({ SSE: new Set(), SZSE: new Set(), @@ -459,50 +382,123 @@ export const useRealtimeQuote = (codes: string[] = []): UseRealtimeQuoteReturn = heartbeatRefs.current[exchange] = setInterval(() => { const ws = wsRefs.current[exchange]; if (ws && ws.readyState === WebSocket.OPEN) { - const msg = exchange === 'SSE' ? { action: 'ping' } : { type: 'ping' }; - ws.send(JSON.stringify(msg)); + ws.send(JSON.stringify({ type: 'ping' })); } }, HEARTBEAT_INTERVAL); }, [stopHeartbeat]); + /** + * 发送深交所订阅请求 + * 格式:{ type: 'subscribe', securities: ['000001', '000002'] } + */ + const sendSZSESubscribe = useCallback((baseCodes: string[]) => { + const ws = wsRefs.current.SZSE; + if (ws && ws.readyState === WebSocket.OPEN && baseCodes.length > 0) { + ws.send(JSON.stringify({ + type: 'subscribe', + securities: baseCodes, + })); + logger.info('FlexScreen', `SZSE 发送订阅请求`, { securities: baseCodes }); + } + }, []); + + /** + * 处理消息 + */ const handleMessage = useCallback((exchange: Exchange, msg: SSEMessage | SZSEMessage) => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const anyMsg = msg as any; + + // 心跳响应 if (msg.type === 'pong') return; if (exchange === 'SSE') { const result = handleSSEMessage( msg as SSEMessage, subscribedCodes.current.SSE, - {} // Will be merged with current state + {} ); if (result) { setQuotes(prev => ({ ...prev, ...result })); } } else { - if (msg.type === 'realtime') { - setQuotes(prev => { - const result = handleSZSERealtimeMessage( - msg as SZSERealtimeMessage, - subscribedCodes.current.SZSE, - prev - ); - return result || prev; - }); - } else if (msg.type === 'snapshot') { - setQuotes(prev => { - const result = handleSZSESnapshotMessage( - msg as SZSESnapshotMessage, - subscribedCodes.current.SZSE, - prev - ); - return result || prev; - }); + // 深交所消息处理 + switch (msg.type) { + case 'welcome': + // 收到欢迎消息,深交所 WebSocket 就绪 + logger.info('FlexScreen', 'SZSE WebSocket 就绪,可以订阅'); + szseReadyRef.current = true; + + // 发送之前待处理的订阅请求 + if (szsePendingSubscribeRef.current.length > 0) { + sendSZSESubscribe(szsePendingSubscribeRef.current); + szsePendingSubscribeRef.current = []; + } else { + // 如果已有订阅的代码,立即发送订阅 + const currentCodes = Array.from(subscribedCodes.current.SZSE).map(c => normalizeCode(c)); + if (currentCodes.length > 0) { + sendSZSESubscribe(currentCodes); + } + } + break; + + case 'subscribed': + // 订阅成功确认 + logger.info('FlexScreen', 'SZSE 订阅成功', { + securities: anyMsg.securities, + categories: anyMsg.categories, + }); + break; + + case 'unsubscribed': + // 取消订阅确认 + logger.info('FlexScreen', 'SZSE 取消订阅成功'); + break; + + case 'snapshot': + // 快照消息(订阅后首次返回的批量数据) + setQuotes(prev => { + const result = handleSZSESnapshotMessage( + msg as SZSESnapshotMessage, + subscribedCodes.current.SZSE, + prev + ); + return result || prev; + }); + break; + + case 'realtime': + // 实时行情推送 + setQuotes(prev => { + const result = handleSZSERealtimeMessage( + msg as SZSERealtimeMessage, + subscribedCodes.current.SZSE, + prev + ); + return result || prev; + }); + break; + + case 'query_result': + case 'query_batch_result': + // 查询结果(目前不处理) + break; + + case 'error': + logger.error('FlexScreen', 'SZSE WebSocket 错误', { message: anyMsg.message }); + break; + + default: + // 未知消息类型 + break; } } - }, []); + }, [sendSZSESubscribe]); + /** + * 创建 WebSocket 连接 + */ const createConnection = useCallback((exchange: Exchange) => { - // 防御性检查:确保 HTTPS 页面不会意外连接 ws://(Mixed Content 安全错误) - // 正常情况下 WS_CONFIG 会自动根据协议返回正确的 URL,这里是备用保护 const isHttps = typeof window !== 'undefined' && window.location.protocol === 'https:'; const wsUrl = WS_CONFIG[exchange]; const isInsecureWs = wsUrl.startsWith('ws://'); @@ -519,6 +515,11 @@ export const useRealtimeQuote = (codes: string[] = []): UseRealtimeQuoteReturn = wsRefs.current[exchange]!.close(); } + // 重置深交所就绪状态 + if (exchange === 'SZSE') { + szseReadyRef.current = false; + } + try { const ws = new WebSocket(wsUrl); wsRefs.current[exchange] = ws; @@ -528,7 +529,7 @@ export const useRealtimeQuote = (codes: string[] = []): UseRealtimeQuoteReturn = setConnected(prev => ({ ...prev, [exchange]: true })); if (exchange === 'SSE') { - // subscribedCodes 存的是带后缀的完整代码,发送给 WS 需要去掉后缀 + // 上交所:连接后立即发送订阅 const fullCodes = Array.from(subscribedCodes.current.SSE); const baseCodes = fullCodes.map(c => normalizeCode(c)); if (baseCodes.length > 0) { @@ -539,6 +540,7 @@ export const useRealtimeQuote = (codes: string[] = []): UseRealtimeQuoteReturn = })); } } + // 深交所:等待 welcome 消息后再订阅 startHeartbeat(exchange); }; @@ -561,7 +563,12 @@ export const useRealtimeQuote = (codes: string[] = []): UseRealtimeQuoteReturn = setConnected(prev => ({ ...prev, [exchange]: false })); stopHeartbeat(exchange); - // 自动重连(仅在非 HTTPS + ws:// 场景下) + // 重置深交所就绪状态 + if (exchange === 'SZSE') { + szseReadyRef.current = false; + } + + // 自动重连 if (!reconnectRefs.current[exchange] && subscribedCodes.current[exchange].size > 0) { reconnectRefs.current[exchange] = setTimeout(() => { reconnectRefs.current[exchange] = null; @@ -577,43 +584,67 @@ export const useRealtimeQuote = (codes: string[] = []): UseRealtimeQuoteReturn = } }, [startHeartbeat, stopHeartbeat, handleMessage]); + /** + * 订阅单个证券 + */ const subscribe = useCallback((code: string) => { const exchange = getExchange(code); - // 确保使用带后缀的完整代码 const fullCode = code.includes('.') ? code : `${code}.${exchange === 'SSE' ? 'SH' : 'SZ'}`; const baseCode = normalizeCode(code); subscribedCodes.current[exchange].add(fullCode); const ws = wsRefs.current[exchange]; - if (exchange === 'SSE' && ws && ws.readyState === WebSocket.OPEN) { - ws.send(JSON.stringify({ - action: 'subscribe', - channels: ['stock', 'index'], - codes: [baseCode], // 发送给 WS 用不带后缀的代码 - })); + + if (exchange === 'SSE') { + if (ws && ws.readyState === WebSocket.OPEN) { + ws.send(JSON.stringify({ + action: 'subscribe', + channels: ['stock', 'index'], + codes: [baseCode], + })); + } + } else { + // 深交所 + if (ws && ws.readyState === WebSocket.OPEN && szseReadyRef.current) { + sendSZSESubscribe([baseCode]); + } else if (ws && ws.readyState === WebSocket.OPEN) { + // WebSocket 已连接但未收到 welcome,加入待处理队列 + szsePendingSubscribeRef.current.push(baseCode); + } } if (!ws || ws.readyState !== WebSocket.OPEN) { createConnection(exchange); } - }, [createConnection]); + }, [createConnection, sendSZSESubscribe]); + /** + * 取消订阅 + */ const unsubscribe = useCallback((code: string) => { const exchange = getExchange(code); - // 确保使用带后缀的完整代码 const fullCode = code.includes('.') ? code : `${code}.${exchange === 'SSE' ? 'SH' : 'SZ'}`; + const baseCode = normalizeCode(code); subscribedCodes.current[exchange].delete(fullCode); + // 发送取消订阅请求(深交所) + const ws = wsRefs.current[exchange]; + if (exchange === 'SZSE' && ws && ws.readyState === WebSocket.OPEN) { + ws.send(JSON.stringify({ + type: 'unsubscribe', + securities: [baseCode], + })); + } + setQuotes(prev => { const updated = { ...prev }; - delete updated[fullCode]; // 删除时也用带后缀的 key + delete updated[fullCode]; return updated; }); if (subscribedCodes.current[exchange].size === 0) { - const ws = wsRefs.current[exchange]; if (ws) { ws.close(); wsRefs.current[exchange] = null; @@ -622,17 +653,14 @@ export const useRealtimeQuote = (codes: string[] = []): UseRealtimeQuoteReturn = }, []); // 初始化和 codes 变化处理 - // 注意:codes 现在是带后缀的完整代码(如 000001.SH) useEffect(() => { if (!codes || codes.length === 0) return; - // 使用带后缀的完整代码作为内部 key const newSseCodes = new Set(); const newSzseCodes = new Set(); codes.forEach(code => { const exchange = getExchange(code); - // 确保代码带后缀 const fullCode = code.includes('.') ? code : `${code}.${exchange === 'SSE' ? 'SH' : 'SZ'}`; if (exchange === 'SSE') { newSseCodes.add(fullCode); @@ -644,7 +672,6 @@ export const useRealtimeQuote = (codes: string[] = []): UseRealtimeQuoteReturn = // 更新上交所订阅 const oldSseCodes = subscribedCodes.current.SSE; const sseToAdd = [...newSseCodes].filter(c => !oldSseCodes.has(c)); - // 发送给 WebSocket 的代码需要去掉后缀 const sseToAddBase = sseToAdd.map(c => normalizeCode(c)); if (sseToAdd.length > 0 || newSseCodes.size !== oldSseCodes.size) { @@ -672,13 +699,23 @@ export const useRealtimeQuote = (codes: string[] = []): UseRealtimeQuoteReturn = // 更新深交所订阅 const oldSzseCodes = subscribedCodes.current.SZSE; const szseToAdd = [...newSzseCodes].filter(c => !oldSzseCodes.has(c)); + const szseToAddBase = szseToAdd.map(c => normalizeCode(c)); if (szseToAdd.length > 0 || newSzseCodes.size !== oldSzseCodes.size) { subscribedCodes.current.SZSE = newSzseCodes; const ws = wsRefs.current.SZSE; - if (szseToAdd.length > 0 && (!ws || ws.readyState !== WebSocket.OPEN)) { - createConnection('SZSE'); + if (szseToAdd.length > 0) { + if (ws && ws.readyState === WebSocket.OPEN && szseReadyRef.current) { + // WebSocket 已就绪,直接发送订阅 + sendSZSESubscribe(szseToAddBase); + } else if (ws && ws.readyState === WebSocket.OPEN) { + // WebSocket 已连接但未就绪,加入待处理队列 + szsePendingSubscribeRef.current.push(...szseToAddBase); + } else { + // WebSocket 未连接,创建连接 + createConnection('SZSE'); + } } if (newSzseCodes.size === 0 && ws) { @@ -687,7 +724,7 @@ export const useRealtimeQuote = (codes: string[] = []): UseRealtimeQuoteReturn = } } - // 清理已取消订阅的 quotes(使用带后缀的完整代码) + // 清理已取消订阅的 quotes const allNewCodes = new Set([...newSseCodes, ...newSzseCodes]); setQuotes(prev => { const updated: QuotesMap = {}; @@ -698,7 +735,7 @@ export const useRealtimeQuote = (codes: string[] = []): UseRealtimeQuoteReturn = }); return updated; }); - }, [codes, createConnection]); + }, [codes, createConnection, sendSZSESubscribe]); // 清理 useEffect(() => { diff --git a/src/views/StockOverview/components/FlexScreen/hooks/utils.ts b/src/views/StockOverview/components/FlexScreen/hooks/utils.ts index dcc54890..ca45dd49 100644 --- a/src/views/StockOverview/components/FlexScreen/hooks/utils.ts +++ b/src/views/StockOverview/components/FlexScreen/hooks/utils.ts @@ -75,65 +75,21 @@ export const normalizeCode = (code: string): string => { return code.split('.')[0]; }; -/** - * 盘口数据可能的格式(根据不同的 WebSocket 服务端实现) - */ -type OrderBookInput = - | OrderBookLevel[] // 格式1: [{price, volume}, ...] - | Array<[number, number]> // 格式2: [[price, volume], ...] - | { prices: number[]; volumes: number[] } // 格式3: {prices: [...], volumes: [...]} - | undefined; - /** * 从深交所 bids/asks 数组提取价格和量数组 - * 支持多种可能的数据格式 - * @param orderBook - 盘口数据,支持多种格式 + * 格式:[{price, volume}, ...] + * @param orderBook - 盘口数组 * @returns { prices, volumes } */ export const extractOrderBook = ( - orderBook: OrderBookInput + orderBook: OrderBookLevel[] | undefined ): { prices: number[]; volumes: number[] } => { - if (!orderBook) { + if (!orderBook || !Array.isArray(orderBook) || orderBook.length === 0) { return { prices: [], volumes: [] }; } - - // 格式3: 已经是 {prices, volumes} 结构 - if (!Array.isArray(orderBook) && 'prices' in orderBook && 'volumes' in orderBook) { - return { - prices: orderBook.prices || [], - volumes: orderBook.volumes || [], - }; - } - - // 必须是数组才能继续 - if (!Array.isArray(orderBook) || orderBook.length === 0) { - return { prices: [], volumes: [] }; - } - - const firstItem = orderBook[0]; - - // 格式2: [[price, volume], ...] - if (Array.isArray(firstItem)) { - const prices = orderBook.map((item: unknown) => { - const arr = item as [number, number]; - return arr[0] || 0; - }); - const volumes = orderBook.map((item: unknown) => { - const arr = item as [number, number]; - return arr[1] || 0; - }); - return { prices, volumes }; - } - - // 格式1: [{price, volume}, ...] (标准格式) - if (typeof firstItem === 'object' && firstItem !== null) { - const typedBook = orderBook as OrderBookLevel[]; - const prices = typedBook.map(item => item.price || 0); - const volumes = typedBook.map(item => item.volume || 0); - return { prices, volumes }; - } - - return { prices: [], volumes: [] }; + const prices = orderBook.map(item => item.price || 0); + const volumes = orderBook.map(item => item.volume || 0); + return { prices, volumes }; }; /** diff --git a/src/views/StockOverview/components/FlexScreen/types.ts b/src/views/StockOverview/components/FlexScreen/types.ts index 796290f3..7430b842 100644 --- a/src/views/StockOverview/components/FlexScreen/types.ts +++ b/src/views/StockOverview/components/FlexScreen/types.ts @@ -265,8 +265,51 @@ export interface SZSESnapshotMessage { }; } +/** 深交所欢迎消息 */ +export interface SZSEWelcomeMessage { + type: 'welcome'; + message: string; + timestamp: string; + usage?: Record; + categories?: string[]; +} + +/** 深交所订阅确认消息 */ +export interface SZSESubscribedMessage { + type: 'subscribed'; + securities?: string[]; + categories?: string[]; + all?: boolean; + incremental_only?: boolean; + message?: string; +} + +/** 深交所取消订阅确认消息 */ +export interface SZSEUnsubscribedMessage { + type: 'unsubscribed'; + securities?: string[]; + categories?: string[]; + remaining_securities?: string[]; + remaining_categories?: string[]; +} + +/** 深交所错误消息 */ +export interface SZSEErrorMessage { + type: 'error'; + message: string; +} + /** 深交所消息类型 */ -export type SZSEMessage = SZSERealtimeMessage | SZSESnapshotMessage | { type: 'pong' }; +export type SZSEMessage = + | SZSERealtimeMessage + | SZSESnapshotMessage + | SZSEWelcomeMessage + | SZSESubscribedMessage + | SZSEUnsubscribedMessage + | SZSEErrorMessage + | { type: 'pong'; timestamp?: string } + | { type: 'query_result'; security_id: string; found: boolean; data: unknown } + | { type: 'query_batch_result'; count: number; found: number; data: Record }; // ==================== 组件 Props 类型 ====================