feat(database): 实现数据库功能并优化数据导出

- 新增数据库相关 API 和服务
- 实现数据导出功能,支持导出到 JSON 文件
- 优化数据导入流程,增加数据校验
- 新增数据库页面,展示解析数据和统计信息
- 更新捕获页面,支持导入数据到数据库
This commit is contained in:
hu xiaotong
2025-07-04 12:48:40 +08:00
parent 910e2d4c4d
commit 1b90af57ba
20 changed files with 973 additions and 356312 deletions

View File

@@ -7,7 +7,11 @@
- 🎯 **TCP包抓取** - 实时抓取游戏客户端的TCP通信数据
- 🔍 **数据解析** - 自动解析十六进制数据为可读的装备信息
- 📊 **数据可视化** - 现代化的React界面展示装备数据
- 💾 **数据导出** - 支持导出为JSON格式
- 💾 **数据持久化** - 基于SQLite的本地数据存储支持装备数据的增删改查
- 📤 **数据导出** - 支持导出为JSON格式
- 🔍 **数据搜索** - 支持装备数据的模糊搜索和筛选
- 📈 **数据统计** - 提供装备数据的统计分析功能
- ⚙️ **设置管理** - 应用设置的本地持久化存储
- 🚀 **高性能** - 基于Go语言的高性能网络处理
## 技术栈
@@ -17,6 +21,7 @@
- **Wails v2** - 桌面应用框架
- **gopacket** - 网络包抓取
- **zap** - 结构化日志
- **SQLite** - 本地数据存储
### 前端
- **React 18** - 用户界面框架
@@ -109,6 +114,56 @@ equipment-analyzer/
## 开发指南
### 常见问题解决
#### 1. React严格模式导致的重复调用
在开发模式下React严格模式会导致组件渲染两次这可能导致
- useEffect被重复执行
- 异步操作被重复调用
- 用户提示消息重复显示
**解决方案:**
- **全局消息去重配置**:在`frontend/src/utils/messageConfig.ts`中配置Antd message的全局设置
- **防重复机制**使用缓存机制防止2秒内相同消息重复显示
- **最大显示数量限制**:设置`maxCount: 1`确保同时只显示一个消息
**全局配置:**
```typescript
// frontend/src/utils/messageConfig.ts
import { message } from 'antd';
// 配置全局消息设置,防止重复显示
message.config({
maxCount: 1, // 最多同时显示1个消息
duration: 3, // 消息显示3秒
top: 24, // 距离顶部24px
});
// 防重复消息函数
const messageCache = new Map<string, number>();
const DEBOUNCE_TIME = 2000; // 2秒内相同消息不重复显示
export const showMessage = (type: 'success' | 'error' | 'warning' | 'info', content: string) => {
const messageId = `${type}:${content}`;
const now = Date.now();
// 检查是否在防抖时间内
const lastTime = messageCache.get(messageId);
if (lastTime && now - lastTime < DEBOUNCE_TIME) {
return; // 跳过重复消息
}
// 更新缓存并显示消息
messageCache.set(messageId, now);
message[type](content);
};
```
**使用方法:**
-`main.tsx`中导入配置:`import './utils/messageConfig'`
- 在组件中正常使用`message.success()``message.error()`
- 全局配置会自动防止重复消息显示
### 添加新功能
1. **后端功能**
@@ -121,6 +176,23 @@ equipment-analyzer/
- 使用TypeScript确保类型安全
- 遵循Ant Design设计规范
### 数据库操作
1. **添加新的数据表**
-`internal/model/database.go``initTables()`方法中添加表结构
-`Database`结构体中添加相应的CRUD方法
-`DatabaseService`中添加业务逻辑方法
-`App`中添加API接口方法
2. **数据迁移**
- 数据库结构变更时,在`initTables()`方法中处理版本升级
- 使用事务确保数据一致性
3. **性能优化**
- 为常用查询字段添加索引
- 使用批量操作减少数据库交互
- 合理使用连接池和事务
### 测试
```bash
@@ -147,8 +219,27 @@ make release
make clean
```
## 配置说明
## 数据存储
### 数据库存储
应用使用SQLite数据库进行本地数据持久化数据库文件位置`~/.equipment-analyzer/equipment_analyzer.db`
#### 数据库表结构
- **equipment** - 装备基本信息表
- **equipment_operations** - 装备操作属性表
- **capture_sessions** - 抓包会话记录表
- **raw_packet_data** - 原始数据包表
- **app_settings** - 应用设置表
#### 数据库功能
- ✅ 装备数据的增删改查
- ✅ 批量数据导入导出
- ✅ 装备数据搜索和筛选
- ✅ 数据统计分析
- ✅ 应用设置持久化
- ✅ 抓包会话历史记录
### 配置文件
应用会在用户目录下创建配置文件:`~/.equipment-analyzer/config.json`
```json