- 移动42个文档文件到 docs/ 目录 - 更新 .gitignore 允许 docs/ 下的 .md 文件 - 删除根目录下的重复文档文件 📁 文档分类: - StockDetailPanel 重构文档(3个) - PostHog 集成文档(6个) - 系统架构和API文档(33个) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
8.1 KiB
8.1 KiB
消息推送系统整合 - 测试指南
📋 整合完成清单
✅ 统一事件名称
- Mock 和真实 Socket.IO 都使用
new_event事件名 - 移除了
trade_notification事件名
✅ 数据适配器
- 创建了
adaptEventToNotification函数 - 自动识别后端事件格式并转换为前端通知格式
- 重要性映射:S → urgent, A → important, B/C → normal
✅ NotificationContext 升级
- 监听
new_event事件 - 自动使用适配器转换事件数据
- 支持 Mock 和 Real 模式无缝切换
✅ EventList 实时推送
- 集成
useEventNotificationsHook - 实时更新事件列表
- Toast 通知提示
- WebSocket 连接状态指示器
🧪 测试步骤
1. 测试 Mock 模式(开发环境)
1.1 配置环境变量
确保 .env 文件包含以下配置:
REACT_APP_USE_MOCK_SOCKET=true
# 或者
REACT_APP_ENABLE_MOCK=true
1.2 启动应用
npm start
1.3 验证功能
a) 右下角通知卡片
- 启动后等待 3 秒,应该看到 "连接成功" 系统通知
- 每隔 60 秒会自动推送 1-2 条模拟消息
- 通知类型包括:
- 📢 公告通知(蓝色)
- 📈 股票动向(红/绿色,根据涨跌)
- 📰 事件动向(橙色)
- 📊 分析报告(紫色)
b) 事件列表页面
- 访问事件列表页面(Community/Events)
- 顶部应显示 "🟢 实时推送已开启"
- 收到新事件时:
- 右上角显示 Toast 通知
- 事件自动添加到列表顶部
- 无重复添加
c) 控制台日志 打开浏览器控制台,应该看到:
[Socket Service] Using MOCK Socket Service
NotificationContext: Socket connected
EventList: 收到新事件推送
2. 测试 Real 模式(生产环境)
2.1 配置环境变量
修改 .env 文件:
REACT_APP_USE_MOCK_SOCKET=false
# 或删除该配置项
2.2 启动后端 Flask 服务
python app_2.py
确保后端已启动 Socket.IO 服务并监听事件推送。
2.3 启动前端应用
npm start
2.4 创建测试事件(后端)
使用后端提供的测试脚本:
python test_create_event.py
2.5 验证功能
a) WebSocket 连接
- 检查控制台:
[Socket Service] Using REAL Socket Service - 事件列表顶部显示 "🟢 实时推送已开启"
b) 事件推送流程
- 运行
test_create_event.py创建新事件 - 后端轮询检测到新事件(最多等待 30 秒)
- 后端通过 Socket.IO 推送
new_event - 前端接收事件并转换格式
- 同时显示:
- 右下角通知卡片
- 事件列表 Toast 提示
- 事件添加到列表顶部
c) 数据格式验证 在控制台查看事件对象,应包含:
{
id: 123,
type: "event_alert", // 适配器转换后
priority: "urgent", // importance: S → urgent
title: "事件标题",
content: "事件描述",
clickable: true,
link: "/event-detail/123",
extra: {
eventType: "tech",
importance: "S",
// ... 更多后端字段
}
}
🔍 验证清单
功能验证
- Mock 模式下收到模拟通知
- Real 模式下收到真实后端推送
- 通知卡片正确显示(类型、颜色、内容)
- 事件列表实时更新
- Toast 通知正常弹出
- 连接状态指示器正确显示
- 点击通知可跳转到详情页
- 无重复事件添加
数据验证
- 后端事件格式正确转换
- 重要性映射正确(S/A/B/C → urgent/important/normal)
- 时间戳正确显示
- 链接路径正确生成
- 所有字段完整保留在 extra 中
性能验证
- 事件列表最多保留 100 条
- 通知自动关闭(紧急=不关闭,重要=30s,普通=15s)
- WebSocket 自动重连
- 无内存泄漏
🐛 常见问题排查
Q1: Mock 模式下没有收到通知?
A: 检查:
- 环境变量
REACT_APP_USE_MOCK_SOCKET=true是否设置 - 控制台是否显示 "Using MOCK Socket Service"
- 是否等待了 3 秒(首次通知延迟)
Q2: Real 模式下无法连接?
A: 检查:
- Flask 后端是否启动:
python app_2.py - API_BASE_URL 是否正确配置
- CORS 设置是否包含前端域名
- 控制台是否有连接错误
Q3: 收到重复通知?
A: 检查:
- 是否多次渲染了 EventList 组件
- 是否在多个地方调用了
useEventNotifications - 控制台日志中是否有 "事件已存在,跳过添加"
Q4: 通知卡片样式异常?
A: 检查:
- 事件的
type字段是否正确 - 是否缺少必要的字段(title, content)
NOTIFICATION_TYPE_CONFIGS是否定义了该类型
Q5: 事件列表不更新?
A: 检查:
- WebSocket 连接状态(顶部 Badge)
onNewEvent回调是否触发(控制台日志)setLocalEvents是否正确执行
📊 测试数据示例
Mock 模拟数据类型
公告通知
{
type: "announcement",
priority: "urgent",
title: "贵州茅台发布2024年度财报公告",
content: "2024年度营收同比增长15.2%..."
}
股票动向
{
type: "stock_alert",
priority: "urgent",
title: "您关注的股票触发预警",
extra: {
stockCode: "300750",
priceChange: "+5.2%"
}
}
事件动向
{
type: "event_alert",
priority: "important",
title: "央行宣布降准0.5个百分点",
extra: {
eventId: "evt001",
sectors: ["银行", "地产", "基建"]
}
}
分析报告
{
type: "analysis_report",
priority: "important",
title: "医药行业深度报告:创新药迎来政策拐点",
author: {
name: "李明",
organization: "中信证券"
}
}
真实后端事件格式
{
id: 123,
title: "新能源汽车补贴政策延期",
description: "财政部宣布新能源汽车购置补贴政策延长至2024年底",
event_type: "policy",
importance: "S",
status: "active",
created_at: "2025-01-21T14:30:00",
hot_score: 95.5,
view_count: 1234,
related_avg_chg: 5.2,
related_max_chg: 15.8,
keywords: ["新能源", "补贴", "政策"]
}
🎯 下一步建议
1. 用户设置
允许用户控制通知偏好:
<Switch
isChecked={enableNotifications}
onChange={handleToggle}
>
启用实时通知
</Switch>
2. 通知过滤
按重要性、类型过滤通知:
useEventNotifications({
eventType: 'tech', // 只订阅科技类
importance: 'S', // 只订阅 S 级
enabled: true
})
3. 声音提示
添加音效提醒:
onNewEvent: (event) => {
if (event.priority === 'urgent') {
new Audio('/alert.mp3').play();
}
}
4. 桌面通知
利用浏览器通知 API:
if (Notification.permission === 'granted') {
new Notification(event.title, {
body: event.content,
icon: '/logo.png'
});
}
📝 技术说明
架构优势
- 统一接口:Mock 和 Real 完全相同的 API
- 自动适配:智能识别数据格式并转换
- 解耦设计:通知系统和事件列表独立工作
- 向后兼容:不影响现有功能
关键文件
src/services/mockSocketService.js- Mock Socket 服务src/services/socketService.js- 真实 Socket.IO 服务src/services/socket/index.js- 统一导出src/contexts/NotificationContext.js- 通知上下文(含适配器)src/hooks/useEventNotifications.js- React Hooksrc/views/Community/components/EventList.js- 事件列表集成
数据流
后端创建事件
↓
后端轮询检测(30秒)
↓
Socket.IO 推送 new_event
↓
前端 socketService 接收
↓
NotificationContext 监听并适配
↓
同时触发:
├─ NotificationContainer(右下角卡片)
└─ EventList onNewEvent(Toast + 列表更新)
✅ 整合完成
所有代码和功能已经就绪!你现在可以:
- ✅ 在 Mock 模式下测试实时推送
- ✅ 在 Real 模式下连接后端
- ✅ 查看右下角通知卡片
- ✅ 体验事件列表实时更新
- ✅ 随时切换 Mock/Real 模式
祝测试顺利!🎉