35 lines
3.1 KiB
Markdown
35 lines
3.1 KiB
Markdown
|
|
## 调研结论(可行性:具备)
|
|||
|
|
|
|||
|
|
**现状**
|
|||
|
|
- 详情面板 `zhixing-web/src/features/selection/components/signal-detail-panel.tsx` 只展示名称/代码/价格/指标,无行业板块;`SelectionStockResult` 类型也无相关字段。
|
|||
|
|
- 后端 `market_stock` 表没同步 tushare `stock_basic.industry`;但项目已有 **sector_radar 模块**,通过 tushare `dc_index`/`dc_member` 每日同步"行业板块 + 概念板块"的成分股快照到 PostgreSQL 表 `sector_radar_membership`(trade_date + sector_type=industry/concept + sector_code/name + stock_code),只是目前只暴露了板块级 rankings 端点,**没有"按股票反查所属板块"的接口**——这就是缺口的全部。
|
|||
|
|
- 已确认决策:数据口径复用 sector_radar(DC 行业+概念);仅详情面板展示,列表行不动。
|
|||
|
|
|
|||
|
|
## 实施方案
|
|||
|
|
|
|||
|
|
### 第 0 步:数据验证(前置)
|
|||
|
|
启动 docker compose 的 PostgreSQL,检查 `sector_radar_membership` 按交易日的覆盖情况。若选股目标日期无快照,运行现有 CLI `sector-radar-build` 回补。若 dc_member 接口因 tushare 积分不足失败,回退方案是给 `market_stock` 加 `stock_basic.industry` 列(Alembic 迁移),届时向你说明。
|
|||
|
|
|
|||
|
|
### 后端(sector_radar 模块内新增"按股票反查",不跨模块读表)
|
|||
|
|
1. `modules/sector_radar/infrastructure/postgres.py`:新增读查询——按 `stock_code` 查 `membership_status='available'` 且 `trade_date <= 目标日` 的最近可用快照(带出实际 membership 的 trade_date,point-in-time 语义,不用最新日期冒充历史)。
|
|||
|
|
2. `modules/sector_radar/application/read.py`:新增用例,输入 `ts_code + trade_date`,返回按类型分组的板块列表(industry 全部、concept 排序后默认截断 20 个)。
|
|||
|
|
3. `modules/sector_radar/presentation/http.py`:新增端点
|
|||
|
|
`GET /api/v1/sector-radar/stocks/{ts_code}/membership?trade_date=YYYY-MM-DD&limit=20`
|
|||
|
|
响应:`{ ts_code, trade_date, membership_trade_date, industries: [{code,name}], concepts: [{code,name}], concept_total }`,遵循 http-api-contracts spec(Pydantic 边界模型)。
|
|||
|
|
|
|||
|
|
### 前端(selection feature)
|
|||
|
|
4. 新增 API 调用 + TanStack Query hook(`enabled: !!stock`,按 `stock.target_trade_date` 查询,随详情面板选中切换)。
|
|||
|
|
5. `signal-detail-panel.tsx`:股票名/代码/价格下方新增两行展示——
|
|||
|
|
- **行业**:行业标签(通常 1 个)
|
|||
|
|
- **所属板块**:概念板块 chips,最多显示 8 个 + "等 N 个"
|
|||
|
|
加载中显示占位文案,无数据时静默隐藏(不打扰无板块数据的股票)。
|
|||
|
|
|
|||
|
|
### 测试与验证
|
|||
|
|
- 后端:读用例单测(命中/无快照/截断)+ http 端点测试,参照 sector_radar 现有测试。
|
|||
|
|
- 前端:vitest 组件测试 + typecheck/lint。
|
|||
|
|
- 端到端:起 server + web,在 `/selection` 选一只股票确认行业与板块正确显示、无数据股票正常降级。
|
|||
|
|
|
|||
|
|
### 涉及文件
|
|||
|
|
- `zhixing-server/.../modules/sector_radar/{application/read.py, infrastructure/postgres.py, presentation/http.py}`
|
|||
|
|
- `zhixing-web/src/features/selection/api/*`(新 query)
|
|||
|
|
- `zhixing-web/src/features/selection/components/signal-detail-panel.tsx`
|