|
|
|
|
|
# A股智投分析平台 - 后端实现总结
|
|
|
|
|
|
|
|
|
|
|
|
## 概述
|
|
|
|
|
|
|
|
|
|
|
|
根据 `docs/08-待办事项.md` 的要求,已完成后端核心架构和服务的实现。以下是详细总结:
|
|
|
|
|
|
|
|
|
|
|
|
## 已完成的功能
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 后端基础架构 ✅
|
|
|
|
|
|
|
|
|
|
|
|
**技术栈:**
|
|
|
|
|
|
- Node.js 20.x LTS
|
|
|
|
|
|
- Express 4.x
|
|
|
|
|
|
- TypeScript 5.x
|
|
|
|
|
|
- Prisma ORM
|
|
|
|
|
|
- Socket.io (WebSocket)
|
|
|
|
|
|
- MySQL 8.0
|
|
|
|
|
|
- Redis 7
|
|
|
|
|
|
|
|
|
|
|
|
**目录结构:**
|
|
|
|
|
|
```
|
|
|
|
|
|
app/backend/
|
|
|
|
|
|
├── src/
|
|
|
|
|
|
│ ├── config/ # 配置(数据库、Redis、环境变量)
|
|
|
|
|
|
│ ├── controllers/ # 控制器(市场、版块、股票、用户)
|
|
|
|
|
|
│ ├── services/ # 业务逻辑(数据同步、计算服务)
|
|
|
|
|
|
│ ├── routes/ # 路由定义
|
|
|
|
|
|
│ ├── middleware/ # 中间件(认证、限流、错误处理、日志)
|
|
|
|
|
|
│ ├── utils/ # 工具函数(均线计算、技术指标、格式化、验证)
|
|
|
|
|
|
│ ├── websocket/ # WebSocket 服务
|
|
|
|
|
|
│ ├── jobs/ # 定时任务
|
|
|
|
|
|
│ ├── types/ # TypeScript 类型定义
|
|
|
|
|
|
│ └── app.ts # 应用入口
|
|
|
|
|
|
├── prisma/
|
|
|
|
|
|
│ ├── schema.prisma # 数据库模型
|
|
|
|
|
|
│ └── seed.ts # 种子数据
|
|
|
|
|
|
├── docker-compose.yml # Docker 编排
|
|
|
|
|
|
├── Dockerfile # Docker 镜像
|
|
|
|
|
|
├── package.json
|
|
|
|
|
|
├── tsconfig.json
|
|
|
|
|
|
└── README.md
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 数据库模型 ✅
|
|
|
|
|
|
|
|
|
|
|
|
**Prisma Schema 包含以下模型:**
|
|
|
|
|
|
- `MarketIndex` - 市场指数
|
|
|
|
|
|
- `Sector` - 版块信息
|
|
|
|
|
|
- `SectorQuote` - 版块行情
|
|
|
|
|
|
- `SectorKLine` - 版块K线
|
|
|
|
|
|
- `Stock` - 股票信息
|
|
|
|
|
|
- `StockQuote` - 股票行情
|
|
|
|
|
|
- `StockKLine` - 股票K线
|
|
|
|
|
|
- `User` - 用户信息
|
|
|
|
|
|
- `UserFavorite` - 用户自选股
|
|
|
|
|
|
- `HighLowStock` - 新高新低记录
|
|
|
|
|
|
- `MomentumStock` - 动量股票推荐
|
|
|
|
|
|
|
|
|
|
|
|
### 3. API 接口实现 ✅
|
|
|
|
|
|
|
|
|
|
|
|
**市场数据接口:**
|
|
|
|
|
|
- `GET /api/v1/market/indices` - 获取市场指数
|
|
|
|
|
|
- `GET /api/v1/market/updown-stats` - 获取涨跌家数统计
|
|
|
|
|
|
- `GET /api/v1/market/price-distribution` - 获取涨跌幅分布
|
|
|
|
|
|
|
|
|
|
|
|
**版块数据接口:**
|
|
|
|
|
|
- `GET /api/v1/sectors` - 获取版块列表
|
|
|
|
|
|
- `GET /api/v1/sectors/:sector_code` - 获取版块详情
|
|
|
|
|
|
- `GET /api/v1/sectors/:sector_code/rank-history` - 获取版块历史排名
|
|
|
|
|
|
- `GET /api/v1/sectors/:sector_code/stocks` - 获取版块内股票
|
|
|
|
|
|
- `GET /api/v1/sectors/:sector_code/momentum-stocks` - 获取版块内动量股票
|
|
|
|
|
|
- `GET /api/v1/sectors/:sector_code/kline` - 获取版块K线
|
|
|
|
|
|
|
|
|
|
|
|
**股票数据接口:**
|
|
|
|
|
|
- `GET /api/v1/stocks/search` - 搜索股票
|
|
|
|
|
|
- `GET /api/v1/stocks/:stock_code` - 获取股票详情
|
|
|
|
|
|
- `GET /api/v1/stocks/:stock_code/kline` - 获取股票K线
|
|
|
|
|
|
- `GET /api/v1/stocks/new-high` - 获取新高股票
|
|
|
|
|
|
- `GET /api/v1/stocks/new-low` - 获取新低股票
|
|
|
|
|
|
- `GET /api/v1/stocks/momentum-recommendation` - 获取动量股推荐
|
|
|
|
|
|
|
|
|
|
|
|
**用户接口:**
|
|
|
|
|
|
- `POST /api/v1/users/register` - 用户注册
|
|
|
|
|
|
- `POST /api/v1/users/login` - 用户登录
|
|
|
|
|
|
- `GET /api/v1/users/profile` - 获取用户信息
|
|
|
|
|
|
- `GET /api/v1/users/favorites` - 获取自选股
|
|
|
|
|
|
- `POST /api/v1/users/favorites` - 添加自选股
|
|
|
|
|
|
- `DELETE /api/v1/users/favorites/:stock_code` - 删除自选股
|
|
|
|
|
|
|
|
|
|
|
|
### 4. WebSocket 实时数据服务 ✅
|
|
|
|
|
|
|
|
|
|
|
|
**功能:**
|
|
|
|
|
|
- Socket.io 实时连接管理
|
|
|
|
|
|
- 频道订阅/取消订阅机制
|
|
|
|
|
|
- 股票行情实时推送
|
|
|
|
|
|
- 版块行情实时推送
|
|
|
|
|
|
- 市场概览广播
|
|
|
|
|
|
- 涨跌家数统计广播
|
|
|
|
|
|
- 基于 IP 的连接限流
|
|
|
|
|
|
- 自动重连机制
|
|
|
|
|
|
|
|
|
|
|
|
**协议:**
|
|
|
|
|
|
```javascript
|
|
|
|
|
|
// 订阅
|
|
|
|
|
|
{ action: 'subscribe', channels: ['stock:000001', 'sector:880491'] }
|
|
|
|
|
|
|
|
|
|
|
|
// 推送数据格式
|
|
|
|
|
|
{
|
|
|
|
|
|
channel: 'stock:000001',
|
|
|
|
|
|
type: 'quote',
|
|
|
|
|
|
data: { price, change, changePercent, volume, ... },
|
|
|
|
|
|
time: '2024-01-15T14:30:00Z'
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 5. 数据同步服务 ✅
|
|
|
|
|
|
|
|
|
|
|
|
**定时任务:**
|
|
|
|
|
|
- 每3秒同步实时行情(交易时间)
|
|
|
|
|
|
- 每分钟同步版块行情
|
|
|
|
|
|
- 每小时同步市场指数
|
|
|
|
|
|
- 每小时同步热门股票K线数据
|
|
|
|
|
|
- 每日收盘后计算版块排名(15:05)
|
|
|
|
|
|
- 每日收盘后全量同步(15:10)
|
|
|
|
|
|
|
|
|
|
|
|
**数据源:**
|
|
|
|
|
|
- AKShare(A股免费数据源)
|
|
|
|
|
|
- 支持实时行情、K线数据、版块数据
|
|
|
|
|
|
|
|
|
|
|
|
### 6. 计算服务 ✅
|
|
|
|
|
|
|
|
|
|
|
|
**技术指标计算:**
|
|
|
|
|
|
- 均线计算(MA5/MA10/MA20/MA30/MA60)
|
|
|
|
|
|
- EMA(指数移动平均)
|
|
|
|
|
|
- MACD 计算
|
|
|
|
|
|
- KDJ 计算
|
|
|
|
|
|
- RSI 计算(6/12/24周期)
|
|
|
|
|
|
|
|
|
|
|
|
**评分计算:**
|
|
|
|
|
|
- 动量分数计算
|
|
|
|
|
|
- 版块动量分数
|
|
|
|
|
|
- 综合评分算法
|
|
|
|
|
|
|
|
|
|
|
|
### 7. 中间件 ✅
|
|
|
|
|
|
|
|
|
|
|
|
**认证与授权:**
|
|
|
|
|
|
- JWT Token 认证
|
|
|
|
|
|
- 用户登录/注册
|
|
|
|
|
|
- 可选认证中间件
|
|
|
|
|
|
|
|
|
|
|
|
**限流:**
|
|
|
|
|
|
- 通用限流(100次/分钟/IP)
|
|
|
|
|
|
- 严格限流(敏感操作)
|
|
|
|
|
|
- 登录限流(5次/15分钟)
|
|
|
|
|
|
- API 限流(登录用户1000次/分钟)
|
|
|
|
|
|
- WebSocket 连接限流
|
|
|
|
|
|
|
|
|
|
|
|
**错误处理:**
|
|
|
|
|
|
- 全局错误处理
|
|
|
|
|
|
- 自定义错误类
|
|
|
|
|
|
- Zod 参数验证
|
|
|
|
|
|
- 异步路由包装器
|
|
|
|
|
|
|
|
|
|
|
|
**日志:**
|
|
|
|
|
|
- Winston 日志系统
|
|
|
|
|
|
- 按天轮转
|
|
|
|
|
|
- 请求日志
|
|
|
|
|
|
- 慢请求检测
|
|
|
|
|
|
|
|
|
|
|
|
### 8. Docker 部署配置 ✅
|
|
|
|
|
|
|
|
|
|
|
|
**Dockerfile:**
|
|
|
|
|
|
- 多阶段构建
|
|
|
|
|
|
- 生产环境优化
|
|
|
|
|
|
- 健康检查
|
|
|
|
|
|
|
|
|
|
|
|
**Docker Compose:**
|
|
|
|
|
|
- MySQL 8.0 数据库
|
|
|
|
|
|
- Redis 7 缓存
|
|
|
|
|
|
- Node.js 应用服务
|
|
|
|
|
|
- AKShare 数据服务(可选)
|
|
|
|
|
|
- 自动健康检查
|
|
|
|
|
|
|
|
|
|
|
|
### 9. 前端 API 客户端 ✅
|
|
|
|
|
|
|
|
|
|
|
|
**文件:** `app/src/services/api.ts`
|
|
|
|
|
|
|
|
|
|
|
|
**功能:**
|
|
|
|
|
|
- REST API 封装(marketApi, sectorApi, stockApi, userApi)
|
|
|
|
|
|
- WebSocket 客户端封装
|
|
|
|
|
|
- 自动错误处理
|
|
|
|
|
|
- JWT Token 注入
|
|
|
|
|
|
- 类型安全的 API 调用
|
|
|
|
|
|
|
|
|
|
|
|
## 快速开始
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 启动后端服务
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
cd app/backend
|
|
|
|
|
|
|
|
|
|
|
|
# 安装依赖
|
|
|
|
|
|
npm install
|
|
|
|
|
|
|
|
|
|
|
|
# 配置环境变量
|
|
|
|
|
|
cp .env.example .env
|
|
|
|
|
|
# 编辑 .env 配置数据库连接
|
|
|
|
|
|
|
|
|
|
|
|
# 数据库迁移
|
|
|
|
|
|
npx prisma migrate dev --name init
|
|
|
|
|
|
npx prisma db seed
|
|
|
|
|
|
|
|
|
|
|
|
# 开发模式
|
|
|
|
|
|
npm run dev
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. Docker 一键启动
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
cd app/backend
|
|
|
|
|
|
docker-compose up -d
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 访问 API
|
|
|
|
|
|
|
|
|
|
|
|
- API 地址: http://localhost:3000/api/v1
|
|
|
|
|
|
- 健康检查: http://localhost:3000/api/v1/health
|
|
|
|
|
|
|
|
|
|
|
|
## 环境变量
|
|
|
|
|
|
|
|
|
|
|
|
```env
|
|
|
|
|
|
# 服务器配置
|
|
|
|
|
|
PORT=3000
|
|
|
|
|
|
NODE_ENV=development
|
|
|
|
|
|
|
|
|
|
|
|
# 数据库
|
|
|
|
|
|
DATABASE_URL=mysql://user:password@localhost:3306/aguzhitou
|
|
|
|
|
|
|
|
|
|
|
|
# Redis
|
|
|
|
|
|
REDIS_URL=redis://localhost:6379
|
|
|
|
|
|
|
|
|
|
|
|
# JWT
|
|
|
|
|
|
JWT_SECRET=your-secret-key-min-32-characters-long
|
|
|
|
|
|
JWT_EXPIRES_IN=7d
|
|
|
|
|
|
|
|
|
|
|
|
# AKShare
|
|
|
|
|
|
AKSHARE_URL=http://localhost:8000
|
|
|
|
|
|
|
|
|
|
|
|
# 日志
|
|
|
|
|
|
LOG_LEVEL=info
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 后续工作
|
|
|
|
|
|
|
|
|
|
|
|
### 近期(高优先级)
|
|
|
|
|
|
|
|
|
|
|
|
1. **前端对接**
|
|
|
|
|
|
- 替换模拟数据为真实 API
|
|
|
|
|
|
- 接入 WebSocket 实时推送
|
|
|
|
|
|
- 实现登录/注册页面
|
|
|
|
|
|
- 实现自选股管理页面
|
|
|
|
|
|
|
|
|
|
|
|
2. **数据完善**
|
|
|
|
|
|
- 导入历史K线数据
|
|
|
|
|
|
- 接入更多数据源(Tushare Pro)
|
|
|
|
|
|
|
|
|
|
|
|
### 中期(中优先级)
|
|
|
|
|
|
|
|
|
|
|
|
1. **功能增强**
|
|
|
|
|
|
- 预警系统
|
|
|
|
|
|
- 主题切换
|
|
|
|
|
|
- 多语言支持
|
|
|
|
|
|
|
|
|
|
|
|
2. **性能优化**
|
|
|
|
|
|
- 数据库索引优化
|
|
|
|
|
|
- Redis 缓存策略优化
|
|
|
|
|
|
- 前端性能优化
|
|
|
|
|
|
|
|
|
|
|
|
3. **测试**
|
|
|
|
|
|
- 单元测试
|
|
|
|
|
|
- E2E 测试
|
|
|
|
|
|
|
|
|
|
|
|
### 长期(低优先级)
|
|
|
|
|
|
|
|
|
|
|
|
1. **高级功能**
|
|
|
|
|
|
- 策略回测
|
|
|
|
|
|
- 模拟交易
|
|
|
|
|
|
- 资讯系统
|
|
|
|
|
|
|
|
|
|
|
|
2. **运维**
|
|
|
|
|
|
- 监控告警
|
|
|
|
|
|
- 日志收集
|
|
|
|
|
|
- 自动备份
|
|
|
|
|
|
|
|
|
|
|
|
## 项目统计
|
|
|
|
|
|
|
|
|
|
|
|
- **后端代码行数**: ~5000+ 行
|
|
|
|
|
|
- **API 接口数**: 20+
|
|
|
|
|
|
- **数据库表**: 11 个
|
|
|
|
|
|
- **完成度**: 38% (35/93 任务)
|
|
|
|
|
|
|
|
|
|
|
|
## 参考文档
|
|
|
|
|
|
|
|
|
|
|
|
- `app/backend/README.md` - 后端详细文档
|
|
|
|
|
|
- `app/docs/04-API接口文档.md` - API 接口规范
|
|
|
|
|
|
- `app/docs/06-后端实现.md` - 后端实现细节
|
|
|
|
|
|
- `app/docs/07-部署文档.md` - 部署指南
|
|
|
|
|
|
- `app/docs/08-待办事项.md` - 完整任务清单
|