Files
biz_firstpage/doc/market-ranking-ai-pick-code-review.md

3.5 KiB

市场排名与 AI 选期代码审查问题记录

审查基线:499b084。记录日期:2026-07-28。

本文件记录静态代码审查发现的问题。当前 HAR 无法独立构建,修复后仍需在宿主工程完成编译和业务回归。

1. 市场排名空响应仍展示旧缓存

状态:待修复;优先级:高

MarketRankingNodeComponent.updateCardData() 命中 Tab 缓存后,仅在没有缓存时才用 HTTP 返回结果替换 cardData。当接口成功返回空数组时,旧榜单仍会显示,且空合约列表不会建立新的行情订阅,页面可能长期停留在旧数据。

  • 证据:src/main/ets/market-ranking/MarketRankingNodeComponent.ets:183-213
  • 建议:将成功的 HTTP 响应视为权威结果;空数组应清空页面和对应缓存。非空响应可按新合约列表保留匹配的旧行情值。
  • 验证:先加载非空榜单,再让刷新接口返回空数组,页面应进入空状态且不再接收旧订阅回调。

2. HTTP 合约字段缺少运行时校验

状态:待修复;优先级:高

两个 Fetcher 都通过类型断言直接使用 JSON,未校验合约代码、市场和名称。市场排名点击处仅排除 undefined,无法拦截 null 或空字符串;AI 选期点击和行情订阅均未做防御。

  • 证据:
    • src/main/ets/market-ranking/MarketRankingDataFetcher.ets:47-51
    • src/main/ets/market-ranking/MarketRankingNodeComponent.ets:634-638
    • src/main/ets/ai-pick/AiPickDataFetcher.ets:102-108
    • src/main/ets/ai-pick/AiPickNodeComponent.ets:709-711
  • 建议:在 Fetcher 边界过滤或拒绝非法数据;点击跳转前再次校验代码和市场均为非空字符串。
  • 验证:覆盖字段缺失、null、空字符串和错误数组结构,确保不崩溃、不发送非法 4106 请求。

3. 最新价精度被转换或固定

状态:待修复;优先级:中

行情客户端将价格字符串转换为 number。AI 选期随后固定保留两位小数,可能把三位或更多精度的合约价格舍入;市场排名也会丢失尾随精度。

  • 证据:
    • src/main/ets/node/clients/AiPickHqRequestClient.ets:122-130
    • src/main/ets/ai-pick/AiPickUtils.ets:161-163
    • src/main/ets/node/clients/MarketRankingHqRequestClient.ets:120-130
  • 建议:保留行情层格式化后的价格字符串,或使用宿主统一的合约精度格式化能力。
  • 验证:选择整数、一位、两位和三位小数精度的合约,与宿主行情页逐项对比。

4. 多语言资源未覆盖

状态:待修复;优先级:中

市场排名和 AI 选期文案只存在于 base 中文资源中,zh_CNen_US 未定义对应条目;本地卡片配置中的中文标题和说明还会优先于资源文案。

  • 证据:
    • src/main/resources/base/element/string.json:204-309
    • src/main/resources/zh_CN/element/string.json
    • src/main/resources/en_US/element/string.json
    • src/main/resources/rawfile/first_page_cards_config.json:96-140
  • 建议:按仓库约定补齐三套字符串资源,并明确静态卡片配置的本地化策略;大数单位等展示文本也应纳入资源管理。
  • 验证:切换中文和英文系统语言,检查标题、Tab、空状态、说明弹层、主力标签和数值单位。

测试缺口

当前测试仅包含模板示例。后续至少应覆盖缓存后空响应、非法合约字段、异步旧回调失效、价格精度,以及市场排名指标与周期参数映射。