问题
大屏的动态数据需要写接口,还是可以直接读取机器数据动态展示?结合 RuoyiOffice 与 GoView 集成情况,支持哪些获取业务数据的方式?
答案
不能绕过平台直接从机器/设备读数。 GoView 是前端可视化设计器,动态数据必须经过后端(HTTP 接口或经后端执行的 SQL)。设备数据典型链路为:机器 → 采集入库(如 IoT 模块)→ 后端接口/SQL → GoView 定时拉取展示。
详细说明
集成架构
- PC 管理端
report/goview通过 iframe 嵌入独立 GoView 前端,传递accessToken、refreshToken。 - GoView 调用
/admin-api/report/go-view/*及平台业务 API,项目配置存report_go_view_project表。 - 文档:GoView 大屏设计器
支持的数据获取方式
| 方式 | 说明 | 适用场景 |
|---|---|---|
| 静态数据 | 设计器内填 JSON | 原型、占位,不接真实业务 |
| HTTP 接口(AJAX) | 配置 URL,支持秒/分/时/天轮询刷新;请求 RuoyiOffice 后端自动带 Token、tenant-id | 主推;可调各业务模块已有 API |
| SQL 请求 | POST /admin-api/report/go-view/data/get-by-sql,查默认 MySQL,返回 dimensions + source | 数据已在业务库、简单统计 |
| 数据池(Data Pond) | 多组件共享同一数据源 | 同屏多图表看同一指标 |
内置 HTTP 示例 POST /admin-api/report/go-view/data/get-by-http 仅为演示(随机 PV/UV);源码注释明确:实际每个查询场景通常需单独写或复用业务接口。
机器/设备数据怎么接
| 场景 | 推荐方式 |
|---|---|
| 设备数据已通过 IoT 采集入库 | SQL 查属性表,或 HTTP 调 /iot/device/property/get-latest、history-list |
| 多设备汇总、计算、权限过滤 | 后端写专用聚合接口,返回 GoView 需要的 dimensions + source |
| 秒级/毫秒级实时推送 | 需二开:当前为 HTTP 轮询,无内置 WebSocket |
| 设备协议直连(PLC/传感器不经平台) | 不支持,须先有采集层 |
IoT 接口返回格式与 GoView 图表默认结构不一致时,需在大屏配置数据过滤器做字段映射,或封装专用大屏 API。
选型建议(回复客户)
| 数据类型 | 是否要写接口 | 推荐做法 |
|---|---|---|
| 已在业务库(订单、项目、资产等) | 可不写,用 SQL | 简单统计用 SQL;复杂逻辑建议封装 API |
| 设备/产线实时数据 | 要写采集 + 通常要写展示接口 | IoT 采集 → 库/API → GoView |
| 跨模块经营驾驶舱 | 建议写聚合 API | 统一口径、权限、性能 |
| 展厅演示/原型 | 可不写 | 静态数据或示例 get-by-http |
一句话: 大屏不能直接从机器读数;数据在库可用 SQL,设备与复杂场景建议写接口;刷新为定时轮询,极高实时性需额外开发。
涉及代码 / 配置
| 位置 | 说明 |
|---|---|
yudao-module-report/.../GoViewDataController.java | get-by-sql、get-by-http |
yudao-module-report/.../GoViewDataServiceImpl.java | SQL 经 JdbcTemplate 查默认数据源 |
ruoyi-office-ui-go-view/src/enums/httpEnum.ts | 静态 / AJAX / 数据池 |
ruoyi-office-ui-go-view/src/api/http.ts | 请求封装、Token/租户头 |
yudao-module-iot/.../IotDevicePropertyController.java | 设备属性最新值与历史 |
生产环境慎用大屏内自由 SQL,建议限制数据源与语句范围,优先封装业务聚合接口。
相关链接
修订记录
| 日期 | 修改 |
|---|---|
| 2026-06-17 | 初稿 |
