# air-compressor Backend **Repository Path**: yangduoji/air-compressor-backend ## Basic Information - **Project Name**: air-compressor Backend - **Description**: 后端代码 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-07-06 - **Last Updated**: 2026-07-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 空压机智能监控平台 - 后端系统 ## 一、项目概述 本项目是一个**工厂空压机智能监控平台的后端系统**,负责接收模拟器推送的设备实时数据,存储到数据库,并通过REST API和WebSocket向前端提供数据查询和实时推送服务。 ### 1.1 系统架构 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 前端展示层 │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │ │ │ 设备监控大屏 │ │ 实时数据图表 │ │ 告警管理面板 │ │ │ └──────────────┘ └──────────────┘ └──────────────────────┘ │ └───────────────────┬────────────────────────────────────────────┘ │ ┌───────────┼───────────┐ │ WebSocket │ REST API │ └───────────┴───────────┘ │ ┌───────────────────▼────────────────────────────────────────────┐ │ 后端服务层 │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │ │ │ │ │ 认证服务 │ │ 数据处理 │ │ 告警检测引擎 │ │ │ │ │ │ JWT Token │ │ JSON解析 │ │ 阈值判断 │ │ │ │ │ └─────────────┘ └─────────────┘ └─────────────────┘ │ │ │ └──────────────────────────────────────────────────────────┘ │ └────────────────────────────────────────────────────────────────┘ │ ▼ ┌────────────────────────────────────────────────────────────────┐ │ 数据持久层 │ │ ┌──────────────┐ ┌──────────────┐ ┌─────────────────────┐ │ │ │ device │ │ device_data │ │ alarm_record │ │ │ │ 设备基础信息 │ │ 实时数据记录 │ │ 告警记录 │ │ │ └──────────────┘ └──────────────┘ └─────────────────────┘ │ └────────────────────────────────────────────────────────────────┘ │ ▼ ┌────────────────────────────────────────────────────────────────┐ │ MySQL数据库 │ └────────────────────────────────────────────────────────────────┘ ``` ### 1.2 核心功能 | 功能模块 | 功能描述 | 状态 | |----------|----------|------| | 数据接收 | 接收模拟器推送的设备实时数据(支持GET/POST) | ✅ 已实现 | | 数据存储 | 将设备信息和实时数据存储到MySQL数据库 | ✅ 已实现 | | 实时推送 | 通过WebSocket向前端推送设备实时状态 | ✅ 已实现 | | 告警检测 | 根据阈值自动检测温度超温和压力异常 | ✅ 已实现 | | 设备管理 | 查询设备列表、详情、历史数据、统计信息 | ✅ 已实现 | | 用户认证 | JWT令牌认证,保护API接口 | ✅ 已实现 | --- ## 二、技术栈 | 分类 | 技术 | 版本 | |------|------|------| | 语言 | Java | 8+ | | 框架 | Spring Boot | 2.7.0 | | 数据库 | MySQL | 8.0+ | | 认证 | JWT (jjwt) | 0.11.5 | | WebSocket | Spring WebSocket | 2.7.0 | | ORM | Spring Data JPA | 2.7.0 | | 构建工具 | Maven | 3.8+ | --- ## 三、项目结构 ``` src/main/java/com/netscanner/getinf/ ├── config/ # 配置类 │ ├── CorsConfig.java # CORS跨域配置 │ ├── SecurityConfig.java # Spring Security配置 │ └── WebSocketConfig.java # WebSocket配置 ├── controller/ # 控制器层 │ ├── AuthController.java # 用户认证接口 │ ├── DeviceReportController.java # 设备数据上报接口 │ ├── MonitorController.java # 设备查询接口 │ └── SimulatorController.java # 模拟器数据推送接口 ├── entity/ # 数据库实体 │ ├── AlarmRecordEntity.java # 告警记录实体 │ ├── DeviceDataEntity.java # 设备数据实体 │ └── DeviceEntity.java # 设备实体 ├── filter/ # 过滤器 │ └── JwtAuthenticationFilter.java # JWT认证过滤器 ├── handler/ # 异常处理器 │ └── JwtAuthenticationEntryPoint.java # 401异常处理 ├── model/ # 数据模型 │ ├── AlarmRecord.java # 告警记录模型 │ ├── ApiResponse.java # API响应模型 │ ├── Device.java # 设备模型 │ ├── HistoryData.java # 历史数据模型 │ ├── Result.java # 统一响应封装 │ └── SimulatorDataDTO.java # 模拟器数据DTO ├── repository/ # 数据访问层 │ ├── AlarmRecordRepository.java │ ├── DeviceDataRepository.java │ └── DeviceRepository.java ├── service/ # 业务服务层 │ └── MonitorService.java # 监控业务服务 ├── utils/ # 工具类 │ └── JwtUtil.java # JWT工具类 ├── websocket/ # WebSocket │ └── DeviceWebSocketHandler.java # 设备实时推送处理器 ├── GetInfApplication.java # 应用入口(备用) └── MonitorApplication.java # 应用入口(主) ``` --- ## 四、API接口说明 ### 4.1 模拟器数据接收接口 #### 接口1:设备数据上报 - **地址**: `POST/GET /api/device/report` - **描述**: 接收设备数据上报,支持GET查询参数和POST请求体 - **认证**: 无需认证(白名单) - **请求示例**(POST): ```json { "deviceId": "AC-001", "deviceName": "1号空压机", "location": "A车间", "data": { "temperature": 38.5, "pressure": 2.5 }, "runtime": { "totalHours": 64 } } ``` - **响应**: `{"code": 0, "msg": "success", "data": null}` #### 接口2:模拟器数据推送 - **地址**: `POST /v1/api/simulator/push` - **描述**: 接收模拟器推送的设备数据 - **认证**: 无需认证(白名单) ### 4.2 用户认证接口 #### 接口:用户登录 - **地址**: `POST /token/auth/login` - **描述**: 用户登录获取JWT令牌 - **默认账号**: admin / 123456 - **响应示例**: ```json { "code": 0, "msg": "success", "data": { "accessToken": "eyJhbGciOiJIUzI1NiJ9...", "refreshToken": "eyJhbGciOiJIUzI1NiJ9...", "expiresIn": 7200 } } ``` ### 4.3 设备查询接口 | 接口 | 方法 | 地址 | 描述 | |------|------|------|------| | 获取设备列表 | GET | `/v1/api/device/list` | 获取所有设备最新状态 | | 获取设备详情 | GET | `/v1/api/device/detail/{id}` | 根据设备ID获取详情 | | 获取历史数据 | GET | `/v1/api/device/history/{id}` | 获取设备历史数据 | | 获取设备统计 | GET | `/v1/api/device/statistics` | 获取设备状态统计 | ### 4.4 告警管理接口 | 接口 | 方法 | 地址 | 描述 | |------|------|------|------| | 获取告警分页 | POST | `/v1/api/alarm/page` | 分页获取告警记录 | | 获取告警统计 | GET | `/v1/api/alarm/statistics` | 获取告警统计信息 | ### 4.5 WebSocket实时推送 - **地址**: `ws://localhost:8080/apiWs/device/realtime` - **描述**: 服务端每秒推送所有设备的实时状态数据 --- ## 五、数据处理逻辑 ### 5.1 嵌套JSON结构支持 系统支持模拟器发送的嵌套JSON数据结构: ```json { "deviceId": "AC-001", "deviceName": "1号空压机", "location": "A车间", "data": { "temperature": 38.5, "pressure": 2.5 }, "runtime": { "totalHours": 64 } } ``` 自动从 `data.temperature`、`data.pressure`、`runtime.totalHours` 提取字段值。 ### 5.2 设备状态判断 | 状态码 | 状态 | 判断条件 | |--------|------|----------| | 0 | 停机 | 无数据或默认状态 | | 1 | 运行中 | 温度≤80℃ 且 压力在1.5~2.8MPa之间 | | 2 | 告警 | 温度>80℃ 或 压力>2.8MPa 或 压力<1.5MPa | ### 5.3 告警自动生成 | 告警类型 | 触发条件 | 告警级别 | |----------|----------|----------| | 温度超限 | 温度>80℃ | >90℃为严重(2),否则为一般(1) | | 压力异常 | 压力>2.8MPa | 严重(2) | | 压力异常 | 压力<1.5MPa | 一般(1) | --- ## 六、数据库表结构 ### 6.1 device(设备基础信息表) | 字段 | 类型 | 约束 | 说明 | |------|------|------|------| | device_id | VARCHAR(50) | PRIMARY KEY | 设备ID | | name | VARCHAR(100) | NOT NULL | 设备名称 | | location | VARCHAR(100) | - | 设备位置 | ### 6.2 device_data(设备实时数据表) | 字段 | 类型 | 约束 | 说明 | |------|------|------|------| | id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 主键ID | | device_id | VARCHAR(50) | NOT NULL, INDEX | 设备ID | | temperature | DOUBLE | NOT NULL | 温度 | | pressure | DOUBLE | NOT NULL | 压力 | | run_hours | DOUBLE | - | 运行时长 | | status | INT | NOT NULL | 状态 | | timestamp | DATETIME | NOT NULL, INDEX | 时间戳 | ### 6.3 alarm_record(告警记录表) | 字段 | 类型 | 约束 | 说明 | |------|------|------|------| | id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 主键ID | | device_id | VARCHAR(50) | NOT NULL, INDEX | 设备ID | | device_name | VARCHAR(100) | - | 设备名称 | | type | VARCHAR(50) | NOT NULL | 告警类型 | | value | VARCHAR(50) | - | 告警值 | | level | INT | NOT NULL, INDEX | 告警级别 | | timestamp | DATETIME | NOT NULL, INDEX | 时间戳 | --- ## 七、快速开始 ### 7.1 环境要求 - Java 8 或更高版本 - MySQL 8.0+ - Maven 3.8+ ### 7.2 数据库配置 创建MySQL数据库: ```sql CREATE DATABASE autodb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` ### 7.3 配置文件 编辑 `src/main/resources/application.properties`: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/autodb?useSSL=false&serverTimezone=UTC&characterEncoding=utf8&allowPublicKeyRetrieval=true spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ``` ### 7.4 启动应用 ```bash cd getInf mvn spring-boot:run ``` 或打包后运行: ```bash mvn clean package java -jar target/getInf-1.0.0.jar ``` ### 7.5 服务地址 | 服务 | 地址 | |------|------| | API服务 | http://localhost:8080 | | WebSocket | ws://localhost:8080/apiWs/device/realtime | --- ## 八、使用示例 ### 8.1 推送设备数据 ```bash curl -X POST "http://localhost:8080/v1/api/simulator/push" \ -H "Content-Type: application/json" \ -d '{ "deviceId": "AC-001", "deviceName": "1号空压机", "location": "A车间", "data": { "temperature": 38.5, "pressure": 2.5 }, "runtime": { "totalHours": 64 } }' ``` ### 8.2 登录获取Token ```bash curl -X POST "http://localhost:8080/token/auth/login" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "username=admin&password=123456" ``` ### 8.3 查询设备列表 ```bash curl -X GET "http://localhost:8080/v1/api/device/list" \ -H "Authorization: Bearer your_access_token" ``` --- ## 九、系统效果 ### 9.1 数据流向图 ``` 模拟器 ──► POST数据 ──► 后端接收 ──► 解析嵌套JSON ──► 存储数据库 │ ▼ WebSocket推送 ──► 前端实时展示 ``` ### 9.2 实时监控效果 - **设备状态实时更新**: 设备温度、压力、运行时长每秒刷新 - **告警自动触发**: 温度超过80℃或压力异常时自动生成告警 - **多设备支持**: 支持同时监控多台设备 - **历史数据查询**: 可查看设备历史运行数据趋势 ### 9.3 安全特性 - **JWT认证**: 敏感接口需要Token认证 - **白名单机制**: 设备上报接口无需认证 - **CORS配置**: 支持跨域访问 --- ## 十、常见问题 ### 10.1 MySQL连接失败 确保MySQL服务已启动,且端口3306未被其他进程占用。 ### 10.2 模拟器数据接收失败 检查请求方法是否为POST,确保Content-Type为application/json。 ### 10.3 数据字段为0 模拟器发送的JSON结构可能是嵌套的,系统已支持从`data.temperature`等嵌套字段提取数据。 --- ## 十一、更新日志 | 版本 | 日期 | 更新内容 | |------|------|----------| | v1.0.0 | 2026-07-06 | 初始版本,支持设备数据接收、存储和实时推送 | | v1.0.1 | 2026-07-06 | 修复嵌套JSON解析问题,支持GET/POST两种请求方式 | | v1.0.2 | 2026-07-06 | 切换数据库从H2到MySQL,修复MySQL连接问题 |