# IoT设备数据本地存储方案

## 概述

本方案实现了将外部API接口返回的IoT设备数据存储到本地数据库表中，并提供定时同步和手动同步功能。

## 数据库表结构

### 1. iot_device_data（设备数据表）
存储所有IoT设备的实时数据，包括：
- 设备基本信息（ID、类型、名称）
- 设备状态（电量、温度、步数等）
- 位置信息（经纬度、海拔）
- 信号信息（信号强度、GPS状态）
- 时间信息（更新时间、创建时间）

### 2. iot_sync_log（同步日志表）
记录数据同步的详细日志，包括：
- 同步类型（自动/手动）
- 同步状态（成功/失败）
- 同步统计（总数、成功数、失败数）
- 错误信息

## 核心组件

### 1. 数据同步服务（IotDeviceSyncService）
- 负责从外部API获取数据
- 数据转换和映射
- 批量插入/更新本地数据库
- 同步日志记录

### 2. 定时任务（IotDeviceSyncJob）
- 每5分钟自动同步一次数据
- 确保数据的实时性

### 3. 手动同步接口（IotDeviceSyncController）
- 提供手动触发同步的API接口
- 支持立即同步数据

### 4. 数据查询接口（IotDeviceProxyController）
- 从本地数据库查询设备数据
- 支持分页和条件查询
- 保持与前端接口的兼容性

## 部署步骤

### 1. 执行数据库脚本
```sql
-- 执行 add_iot_device_table.sql 创建表结构
```

### 2. 重启后端服务
确保新的实体类、Mapper、Service等组件被正确加载。

### 3. 验证功能
- 访问手动同步接口：`POST /api/iotSync/sync`
- 检查数据库中的数据
- 验证前端页面数据展示

## API接口

### 手动同步接口
```
POST /api/iotSync/sync
```
手动触发数据同步

### 设备数据查询接口
```
POST /api/iotDevice/queryList
```
从本地数据库查询设备数据（保持原有接口格式）

## 数据流程

1. **定时同步**：每5分钟自动从外部API获取最新数据
2. **数据转换**：将API返回的JSON数据转换为数据库实体
3. **数据存储**：插入新设备或更新现有设备数据
4. **前端查询**：前端页面从本地数据库查询数据
5. **日志记录**：记录每次同步的详细日志

## 优势

1. **性能提升**：前端查询本地数据库，响应更快
2. **数据稳定**：不依赖外部API的可用性
3. **历史数据**：可以保存设备的历史状态数据
4. **离线查询**：即使外部API不可用，也能查询本地数据
5. **数据统计**：可以基于本地数据进行统计分析

## 注意事项

1. **数据一致性**：定时同步可能存在5分钟的数据延迟
2. **存储空间**：需要定期清理历史数据，避免数据库过大
3. **同步监控**：建议监控同步日志，及时发现同步失败的情况
4. **数据备份**：建议定期备份设备数据表

## 扩展功能

1. **数据清理**：可以添加定时清理过期数据的任务
2. **数据统计**：可以基于本地数据生成设备状态统计报表
3. **告警功能**：可以基于设备状态数据实现告警功能
4. **数据导出**：可以添加数据导出功能
