Files
lhbfx/docs/技术文档.md

341 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# lhbfx 技术文档
## 1. 技术栈
### 1.1 前端
- Vue 3
- TypeScript
- Vite
### 1.2 后端
- FastAPI
- PyMySQL
- PyYAML
- Requests / BeautifulSoup
### 1.3 数据库
- MySQL
## 2. 工程结构
```text
longhubang/
├─ backend/
│ ├─ config.example.yaml
│ ├─ pyproject.toml
│ ├─ scripts/
│ └─ src/lhbfx/
├─ frontend/
│ ├─ package.json
│ ├─ vite.config.ts
│ └─ src/
├─ docs/
├─ start-dev.ps1
├─ .gitignore
└─ README.md
```
## 3. 后端架构
### 3.1 入口
- `backend/scripts/run_api.py`
- `backend/src/lhbfx/app.py`
`app.py` 提供 API 路由与前端静态文件挂载能力。
### 3.2 配置
- 运行时配置文件:`backend/config.yaml`
- 示例配置文件:`backend/config.example.yaml`
为避免泄露本地敏感信息,实际 `config.yaml` 已加入 `.gitignore`
### 3.3 数据层
数据库相关逻辑集中在:
- `backend/src/lhbfx/db.py`
- `backend/src/lhbfx/schema.sql`
- `backend/src/lhbfx/queries.py`
当前主要表:
- `stocks`
- `lhb_overview`
- `lhb_detail_seats`
- `warning_events`
- `watchlist_entries`
- `traders`
- `trader_seats`
### 3.4 数据处理管线
`backend/src/lhbfx/pipeline.py` 负责:
- 龙虎榜日度导入
- 席位匹配
- 预警生成
- 管线状态统计
配套脚本位于 `backend/scripts/`
- `init_db.py`
- `import_ths_daily.py`
- `import_ths_year.py`
- `generate_warnings.py`
- `rematch_traders.py`
### 3.5 首页关键接口
#### `/api/actions`
用途:
- 为首页左侧关注池流水和右侧候选区提供原始操作数据
当前返回字段包括:
- 股票代码、股票名称
- 游资名称
- 买入、卖出、净额
- 当前价格、涨跌幅
- 行业、市场、总市值、流通市值
- 操作方向
#### `/api/watchlist`
用途:
- 保存和读取用户关注池
行为:
- `GET /api/watchlist`:获取当前关注池
- `POST /api/watchlist`:加入关注
- `DELETE /api/watchlist/{stock_code}`:取消关注并删除记录
## 4. 前端架构
### 4.1 前端入口
- `frontend/src/main.ts`
- `frontend/src/App.vue`
`App.vue` 负责页面切换、初始化数据和页面级事件绑定。
### 4.2 数据管理
`frontend/src/composables/useDashboardData.ts` 是首页和多页面共享数据的核心数据层,负责:
- 获取摘要数据
- 获取预警数据
- 获取游资列表
- 获取首页操作流水
- 获取和维护关注池
### 4.3 页面组件
- `HomeControlScreen.vue`:首页总控台
- `TraderDetailScreen.vue`:游资详情,采用单列全宽股票列表,支持时间、名称、净额连续增大筛选,并展示行业、板块、总市值、净额和预警标签
- `StockDetailScreen.vue`:个股详情
- `WarningCenterScreen.vue`:预警中心
首页当前拆分重点组件:
- `frontend/src/components/home/CandidateWatchCard.vue`
### 4.4 首页展示逻辑
#### 左侧关注池与操作流水
在前端中按以下维度合并:
- 股票
- 日期
- 游资
- 标准化席位名
用于解决同一席位同时出现在买入榜与卖出榜时被拆成两条的问题。
#### 右侧待加入关注
候选列表卡片设计目标:
- 固定高度
- 同屏显示更多
- 信息完整
- 净额优先
## 5. 启动与运行
### 5.1 一键启动
使用根目录脚本:
```powershell
powershell -ExecutionPolicy Bypass -File .\start-dev.ps1
```
### 5.2 手动启动
后端:
```powershell
python backend/scripts/run_api.py
```
前端:
```powershell
cd frontend
npm install
npm run dev -- --host 127.0.0.1 --port 5173
```
## 6. 仓库管理建议
### 6.1 已加入忽略项
- `frontend/node_modules/`
- `frontend/dist/`
- `logs/`
- `output/`
- `.playwright-cli/`
- `backend/config.yaml`
### 6.2 行尾与文本规则
仓库已添加 `.gitattributes`
- 默认文本文件统一由 git 管理行尾
- Windows 脚本保留 `crlf`
## 7. 测试与验证建议
当前建议至少执行三类验证:
### 7.1 静态验证
- `npm run build`
- `python -m compileall backend/src`
### 7.2 接口验证
- `GET /api/actions`
- `GET /api/watchlist`
- `GET /api/stocks/{stock_code}`
### 7.3 页面验证
建议引入或固化以下检查:
- 首页强制刷新后布局是否完整
- 关注池流水是否正确合并
- 候选卡片是否在固定高度内完整显示
- 关键页面至少保留一份 Playwright 截图回归
## 8. 当前技术债
目前仍需持续处理的问题:
- 历史文档与部分配置存在中文乱码
- 部分来源数据原始字段编码不稳定
- 页面样式近期经历多轮快速调整,仍建议补视觉回归测试
## 9. 定时更新与邮件报送方案
为满足“每天下午 17:00 自动更新并发送盘后邮件”的新增需求,建议增加一个独立的调度与报送模块。
### 9.1 调度方式
建议采用以下任一方式:
- 服务器 `cron`
- Windows 任务计划程序
- 后续统一接入独立任务调度器
默认调度时间:
- 每天下午 `17:00`
### 9.2 推荐执行流程
每日任务执行顺序建议如下:
1. 拉取当日龙虎榜与行情数据
2. 更新数据库
3. 重新生成预警数据
4. 统计关注池情况
5. 统计待加入关注候选列表
6. 生成 PDF 日报
7. 发送邮件正文与附件
8. 记录执行日志
### 9.3 建议新增模块
建议新增以下能力:
- `backend/scripts/daily_report.py`
- 串联数据更新、统计、PDF 生成、邮件发送
- `backend/src/lhbfx/reporting.py`
- 负责报表数据整理
- `backend/src/lhbfx/mailer.py`
- 负责 SMTP 或邮件服务发送
- `backend/src/lhbfx/pdf_export.py`
- 负责 PDF 生成
### 9.4 配置项建议
建议在配置文件中新增:
- 是否启用邮件报送
- SMTP 主机
- SMTP 端口
- 发件人账号
- 发件人密码或授权码
- 收件人列表
- 抄送列表
- 日报输出目录
- 调度时间
### 9.5 PDF 生成建议
PDF 附件可以通过以下方式生成:
- 基于 HTML 模板渲染后导出 PDF
- 或直接使用 Python PDF 库生成结构化报告
推荐内容结构:
1. 标题页
2. 数据更新时间
3. 关注池总览
4. 关注池流水摘要
5. 今日待加入关注列表
6. 风险与预警摘要
### 9.6 邮件正文建议
正文采用简洁摘要形式,便于手机查看:
- 今日关注池概况
- 今日关注池重点动作
- 今日待加入关注候选
- 风险提示
- 附件说明
### 9.7 测试建议
新增该需求后,应补充以下验证:
- 17:00 定时任务是否被正确触发
- 更新失败时是否生成错误日志
- PDF 是否成功生成
- 邮件正文是否包含关键摘要
- 附件是否能正常打开
- 多收件人场景是否发送成功