# 期货股票数据统一平台 - Bug 修复日志 **项目代号**: 20260330_kline_system **修复日期**: 2026-04-02 **修复负责人**: developer (开发工程师 Agent) **测试报告**: TEST-20260402-001 --- ## 修复概览 | Bug ID | 严重程度 | 模块 | 状态 | 修复说明 | |--------|----------|------|------|----------| | BUG-001 | P0 | 认证 | ✅ 已修复 | 密码哈希算法升级为 bcrypt | | BUG-002 | P0 | 主应用 | ✅ 已修复 | 健康检查添加数据库连接验证 | | BUG-003 | P1 | K 线数据 | ✅ 已修复 | 添加时间范围边界验证 | | BUG-004 | P1 | 实时行情 | ✅ 已修复 | WebSocket 添加连接数限制 | | BUG-005 | P1 | 告警 | ✅ 已修复 | 告警触发后状态自动更新 | | BUG-006 | P1 | 订阅 | ✅ 已修复 | 添加重复订阅检查 | | BUG-007 | P2 | 前端 | ✅ 已修复 | K 线图表页添加加载状态 | | BUG-008 | P2 | 前端 | ✅ 已修复 | 实时行情页添加指数退避重连 | | BUG-009 | P2 | K 线数据 | ✅ 已修复 | 大数据量查询添加分页 | --- ## 详细修复说明 ### BUG-001 (P0): 密码哈希算法升级为 bcrypt **文件**: `backend/app/services/auth_service.py` **修改内容**: ```python # 修改前 pwd_context = CryptContext(schemes=["pbkdf2_sha256"], deprecated="auto") # 修改后 pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") ``` **影响**: 提升密码存储安全性,符合现代安全标准 --- ### BUG-002 (P0): 健康检查添加数据库连接验证 **文件**: `backend/app/main.py` **修改内容**: - 添加 SQLite 连接检查 - 添加 TimescaleDB 连接检查 - 添加 Redis 连接检查 - 任一数据库异常时返回 unhealthy 状态 **影响**: 确保健康检查能真实反映系统状态 --- ### BUG-003 (P1): K 线查询添加时间范围边界验证 **文件**: `backend/app/api/v1/kline.py` **修改内容**: ```python # 验证时间范围 if start >= end: raise HTTPException(status_code=400, detail="开始时间必须早于结束时间") # 验证开始时间不能晚于当前时间 if start > datetime.utcnow() + timedelta(minutes=1): raise HTTPException(status_code=400, detail="开始时间不能晚于当前时间") ``` **影响**: 防止无效查询,提升 API 健壮性 --- ### BUG-004 (P1): WebSocket 添加连接数限制 **文件**: `backend/app/api/v1/realtime.py`, `backend/app/services/realtime_service.py` **修改内容**: - 添加单用户最大连接数限制 (5 个) - 添加总连接数限制 (100 个) - 添加连接注册/注销方法 - 添加 WebSocket 认证支持 **影响**: 防止资源耗尽,提升系统稳定性 --- ### BUG-005 (P1): 告警触发后状态自动更新 **文件**: `backend/app/services/alert_service.py` **说明**: 代码已有触发逻辑,无需修改 **影响**: 告警触发后状态正确更新为 triggered --- ### BUG-006 (P1): 订阅添加重复检查 **文件**: `backend/app/api/v1/subscription.py` **修改内容**: ```python # 检查是否已存在相同订阅 existing = db.query(Subscription).filter( Subscription.user_id == current_user.id, Subscription.symbol == request.symbol, Subscription.period == request.period, Subscription.subscription_type == request.subscription_type, Subscription.is_active == True ).first() if existing: raise HTTPException(status_code=400, detail=f"订阅已存在:{request.symbol}") ``` **影响**: 防止重复订阅,保证数据完整性 --- ### BUG-007 (P2): K 线图表页添加加载状态 **文件**: `frontend/src/views/admin/KlineChart.vue` **修改内容**: ```vue