refactor: 将ETF净值和溢价率逻辑下移到TushareSource层

重构说明:
- TushareSource: 新增 fetch_etf_with_nav() 和 _calculate_premium_series()
- UniversalDataFetcher: 简化 fetch_etf_with_nav() 为透传调用
- Flask: 更新注释说明数据层已处理

架构优势:
- 职责分离:TushareSource 封装完整数据获取逻辑
- 可复用性:任何调用 TushareSource 的地方都有净值
- 维护性:业务逻辑集中在数据源层
- 符合单一职责原则
This commit is contained in:
2026-05-23 22:28:21 +08:00
parent 50b5f09d84
commit 2867ae8d21
3 changed files with 113 additions and 86 deletions

View File

@@ -713,19 +713,19 @@ def get_ohlcv():
result['asset_type'] = final_type.value # 使用最终类型
result['adj'] = adj # 返回使用的 adj 参数
# 如果是中国 ETF始终附加净值和溢价率数据(与 adj 无关
# 如果是中国 ETF附加净值和溢价率数据数据层已处理
if final_type == AssetType.CHINA_ETF:
try:
f = get_fetcher()
with f:
# 注意:始终使用原始价格计算溢价率(净值无复权概念)
# 调用 TushareSource 的完整方法
price_df, nav_df, premium_series = f.fetch_etf_with_nav(code, start, end)
# 添加净值数据
if nav_df is not None and len(nav_df) > 0:
result['nav'] = dataframe_to_json(nav_df)
# 添加溢价率数据(使用抽取的函数)
# 添加溢价率数据
premium_result = build_premium_result(premium_series)
if premium_result:
result.update(premium_result)