fix: fund-flow 路由补充东方财富 kline 成交额

腾讯 fqkline 仅返回 6 个字段(date/open/close/high/low/volume),
不含成交额,导致 fund-flow 路由补充的 turnover 始终为 0。

在路由层额外调用 eastmoney.fetch_kline_history 获取成交额映射,
优先使用东方财富的成交额数据补充,腾讯 kline_map 作为兜底。

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Sakurasan
2026-07-24 21:14:09 +08:00
co-authored by Claude
parent 28ecc4d138
commit b107a12798
+10 -2
View File
@@ -201,12 +201,20 @@ async def stock_fund_flow(
if not data: if not data:
raise HTTPException(status_code=404, detail="未获取到资金流向数据") raise HTTPException(status_code=404, detail="未获取到资金流向数据")
# 从腾讯 K 线补充成交额/收盘价/涨跌幅 # 从腾讯 K 线补充收盘价/涨跌幅
kline_map = await tencent.fetch_kline_map(code, days) kline_map = await tencent.fetch_kline_map(code, days)
# 从东方财富 K 线补充成交额(腾讯 fqkline 不含成交额字段)
em_klines = await eastmoney.fetch_kline_history(code, days)
em_kline_map = {}
if em_klines:
for k in em_klines:
if k.get("turnover"):
em_kline_map[k["date"]] = k["turnover"]
for d in data: for d in data:
ki = kline_map.get(d["date"], {}) ki = kline_map.get(d["date"], {})
if d.get("turnover", 0) == 0: if d.get("turnover", 0) == 0:
d["turnover"] = ki.get("turnover", 0) # 优先从东方财富 kline 拿成交额,其次腾讯
d["turnover"] = em_kline_map.get(d["date"], ki.get("turnover", 0))
if d.get("closePrice", 0) == 0: if d.get("closePrice", 0) == 0:
d["closePrice"] = ki.get("close", 0) d["closePrice"] = ki.get("close", 0)
if d.get("changePercent", 0) == 0: if d.get("changePercent", 0) == 0: