IoT SaaS 平台 — 功能规划与实现路线图
更新时间: 2026-06-17
当前版本: v0.9-alpha(基础框架完成,业务功能需补全)
一、现状总览
1.1 已完成的骨架(后端 4 大微服务)
| 服务 |
端口 |
完成度 |
说明 |
| iot-device (设备管理) |
9081 |
60% |
CRUD有,但缺少分组管理、批量操作、固件升级 |
| iot-data (数据采集) |
9082 |
70% |
MQTT接收+InfluxDB存储OK,缺实时数据流推送 |
| iot-rule (规则引擎) |
9083 |
65% |
Aviator表达式引擎OK,缺可视化规则编辑器 |
| iot-alarm (告警服务) |
9084 |
65% |
基本告警流程OK,缺告警升级策略、值班排班 |
1.2 已有的前端页面(7个)
| 页面 |
路径 |
完成度 |
缺失功能 |
| Dashboard |
/dashboard |
20% |
几乎空白,无数据卡片、图表、统计 |
| 设备列表 |
/devices |
75% |
列表CRUD OK,缺详情页内容、在线状态实时刷新 |
| 设备详情 |
/devices/:id |
10% |
页面存在但基本为空壳 |
| 数据采集 |
/data |
30% |
缺历史曲线图、数据导出 |
| 规则引擎 |
/rules |
55% |
列表OK,规则编辑器体验差(纯表单) |
| 告警列表 |
/alarms |
50% |
列表OK,缺实时WebSocket推送、统计面板 |
| 告警规则 |
/alarm-rules |
55% |
CRUD OK,缺条件可视化配置 |
| 登录 |
/login |
85% |
基本OK |
1.3 完全缺失的模块
| 模块 |
重要性 |
说明 |
| 🔴 用户/角色管理 |
P0 |
有sys_user/sys_role表但没有前端页面和管理接口 |
| 🔴 租户管理 |
P0 |
有tenant表但没有多租户隔离逻辑 |
| 🟡 设备分组管理 |
P1 |
有device_group表但前端无对应页面 |
| 🟡 操作日志 |
P1 |
有log_operation表但无查询页面 |
| 🟡 第三方设备适配器 |
P1 |
只有LocalDeviceAdapter模拟器 |
| 🟢 文件/图片上传 |
P2 |
无上传服务 |
| 🟢 个人中心 |
P2 |
无修改密码、个人信息页 |
| 🟢 UniApp移动端 |
P2 |
未开始开发 |
| ⚪ API网关 |
P3 |
单体阶段可暂缓 |
| ⚪ Matter协议 |
P3 |
可选扩展 |
二、按优先级划分的详细功能清单
P0 — 必须立即实现(核心可用性)
2.1 Dashboard 数据看板(当前几乎空白!)
目标:打开系统第一眼能看到全局运营状态
| 功能点 |
描述 |
复杂度 |
| 设备统计卡片 |
在线/离线/异常设备数,总设备数 |
低 |
| 今日告警概览 |
新增告警数、待处理数、已解决数 |
低 |
| 数据上报趋势 |
近7天数据量折线图(ECharts) |
中 |
| 设备类型分布饼图 |
sensor/controller/gateway占比 |
低 |
| 最近告警列表 |
最新5条告警,点击跳转详情 |
低 |
| 设备状态地图 |
可选:设备地理位置分布 |
高(可选) |
2.2 用户 & 权限管理(系统管理员必须能管人)
| 功能点 |
描述 |
复杂度 |
| 用户列表 |
分页、搜索、角色筛选 |
低 |
| 用户新增/编辑 |
用户名/密码/手机号/邮箱/分配角色 |
中 |
| 用户禁用/启用 |
冻结账户 |
低 |
| 重置密码 |
管理员重置用户密码 |
低 |
| 角色列表 |
角色 CRUD |
低 |
| 权限分配 |
给角色勾选菜单权限/按钮权限 |
中 |
| 菜单权限控制 |
根据角色动态显示菜单 |
中 |
| 按钮级权限 |
v-permission指令控制按钮显隐 |
中 |
2.3 设备详情页充实化(当前是空壳)
| 功能点 |
描述 |
复杂度 |
| 基本信息 |
设备属性表格展示(名称/类型/平台/型号/固件版本等) |
低 |
| 实时状态 |
在线/离线/最后通信时间 |
低 |
| 最新数据 |
最近一条设备数据(温度/湿度等key-value) |
中 |
| 历史数据曲线 |
ECharts 折线图,选时间范围查InfluxDB |
高 |
| 控制面板 |
根据deviceType动态渲染控制组件(开关/滑块/输入框) |
高 |
| 操作记录 |
该设备的命令发送历史 |
中 |
| 告警历史 |
该设备关联的告警记录 |
低 |
2.4 设备列表增强
| 功能点 |
描述 |
复杂度 |
| 批量操作 |
多选删除/批量启停/批量分配分组 |
中 |
| 导入/导出 |
Excel模板导入设备、导出设备列表 |
中 |
| 设备影子 |
显示设备期望状态 vs 上报状态 |
中 |
| 快捷搜索 |
支持模糊搜索设备ID/名称 |
已有 ✅ |
| 在线状态标识 |
表格行用绿/灰/红圆点标示 |
低 |
P1 — 短期内实现(产品完整性)
2.5 设备分组管理
| 功能点 |
描述 |
复杂度 |
| 分组树形结构 |
左侧树 + 右侧列表 |
中 |
| 分组CRUD |
新增/编辑/删除/拖拽排序 |
中 |
| 分组下设备管理 |
将设备拖入/移出分组 |
中 |
| 分组统计 |
每组的设备数量、在线数 |
低 |
2.6 数据采集模块增强
| 功能点 |
描述 |
复杂度 |
| 数据看板 |
选设备→选数据点→显示实时曲线 |
高 |
| 多设备对比 |
同一数据点多设备对比图 |
高 |
| 时间范围选择 |
近1小时/6小时/24小时/7天/30天/自定义 |
中 |
| 数据聚合 |
求平均值/最大值/最小值/求和 |
中 |
| 数据导出 |
导出CSV/Excel |
中 |
| 数据异常标记 |
超过阈值的数据点高亮 |
中 |
2.7 告警管理增强
| 功能点 |
描述 |
复杂度 |
| 告警统计面板 |
按级别/状态/设备分布统计卡片 |
中 |
| 告警趋势图 |
每日新增告警柱状图 |
中 |
| 实时告警推送 |
WebSocket连接 → 新告警弹窗提示 |
中 |
| 告警确认/处理备注 |
处理人填写处理意见 |
低 |
| 告警升级 |
超时未处理自动升级通知上级 |
高 |
| 值班排班 |
设置值班人员/时间段 |
高 |
| 告警静默 |
特定时段/特定规则暂停告警 |
中 |
2.8 规则引擎增强
| 功能点 |
描述 |
复杂度 |
| 可视化规则编辑 |
IF条件(下拉选设备+数据点+比较符) THEN动作(下拉) |
高 |
| 规则测试 |
编辑时模拟输入测试执行结果 |
高 |
| 规则执行日志 |
查看每次触发的时间/输入/输出/是否成功 |
中 |
| 场景联动 |
一键执行多个动作(如:开灯+开空调) |
高 |
| 定时任务触发 |
cron表达式定时触发规则 |
中 |
2.9 操作日志
| 功能点 |
描述 |
复杂度 |
| 日志列表 |
操作人/操作类型/操作内容/IP/时间 |
低 |
| 日志搜索 |
按用户/时间范围/操作类型过滤 |
低 |
| 日志详情 |
展示请求参数和响应 |
低 |
2.10 第三方设备适配器(至少实现1个真实平台)
| 适配器 |
优先级 |
工作量 |
说明 |
| 涂鸦智能(Tuya) |
⭐⭐⭐ |
5-7天 |
OpenAPI成熟,文档齐全,推荐首选 |
| 小米IoT(MIOT) |
⭐⭐ |
5-7天 |
需要逆向或使用Home Assistant桥接 |
| Matter协议 |
⭐ |
8-10天 |
Java SDK尚不成熟,建议后期再搞 |
P2 — 中期优化(用户体验提升)
2.11 文件/图片上传服务
- 设备头像/图片上传
- 附件上传(如设备说明书)
- 支持 OSS / MinIO / 本地存储
2.12 个人中心
- 修改密码
- 修改个人信息(头像/昵称/手机号)
- 登录日志查看
2.13 系统设置
- 平台基础配置(名称/Logo/公告)
- 告警通知渠道配置(邮件SMTP/短信API Key/钉钉Webhook)
- 数据保留策略配置
2.14 UniApp 移动端
| 功能 |
说明 |
| 首页 |
设备快捷入口 + 最近告警 |
| 设备列表 |
我的设备,支持控制 |
| 设备控制 |
开关/滑块/状态查看 |
| 告警消息 |
消息列表 + 推送通知 |
| 个人中心 |
信息修改/退出登录 |
2.15 固件管理(OTA)
- 固件版本管理
- 固件上传
- 设备固件升级任务
- 升级进度/结果记录
P3 — 长期演进(架构升级)
| 功能 |
说明 |
| API网关 |
Spring Cloud Gateway 统一入口、限流、鉴权 |
| 注册中心 |
Nacos 服务注册与发现 |
| 配置中心 |
Nacos 集中配置管理 |
| 链路追踪 |
SkyWalking / Zipkin |
| ELK日志 |
Elasticsearch + Logstash + Kibana |
| Prometheus监控 |
指标采集 + Grafana大屏 |
| 多租户完整隔离 |
Schema隔离 / 字段级隔离 |
| 国际化(i18n) |
中英文切换 |
三、建议实施顺序
第1周 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
├── Dashboard数据看板(4张统计卡 + 1条趋势图 + 最近告警)
├── 设备详情页充实化(基本信息 + 最新数据 + 操作记录)
└── 设备列表增强(状态标识 + 批量操作)
第2周 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
├── 用户管理(CRUD + 启用禁用 + 重置密码)
├── 角色权限管理(角色CRUD + 菜单权限 + 按钮权限)
├── 动态路由(根据角色生成菜单)
└── 设备分组管理(树形结构 + 设备归属)
第3周 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
├── 数据采集增强(ECharts曲线图 + 时间范围 + 数据导出)
├── 告警管理增强(统计面板 + 实时WebSocket推送 + 确认处理)
├── 操作日志页面
└── 个人中心(改密码 + 个人信息)
第4周 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
├── 规则引擎可视化编辑器(IF-THEN拖拽式)
├── 告警规则条件可视化配置
├── 涂鸦智能适配器对接(如果需要)
└── UI整体打磨(响应式/交互细节/错误处理)
第5周+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
├── UniApp移动端开发
├── 固件OTA管理
├── 系统设置/文件上传
└── 部署优化/性能调优
四、各模块数据库补充
以下表可能还需要新增:
-- 操作日志表(可能已有log_operation,确认字段是否足够)
CREATE TABLE IF NOT EXISTS `operation_log` (
`id` BIGINT PRIMARY KEY,
`user_id` BIGINT COMMENT '操作人',
`username` VARCHAR(64) COMMENT '操作人名',
`module` VARCHAR(64) COMMENT '模块',
`operation` VARCHAR(64) COMMENT '操作类型',
`method` VARCHAR(256) COMMENT '请求方法',
`request_url` VARCHAR(256) COMMENT '请求URL',
`request_params` TEXT COMMENT '请求参数',
`response_result` TEXT COMMENT '响应结果',
`ip` VARCHAR(64) COMMENT 'IP地址',
`status` TINYINT COMMENT '状态(0失败 1成功)',
`error_msg` VARCHAR(512) COMMENT '错误信息',
`execute_time` BIGINT COMMENT '执行时长(ms)',
`create_time` DATETIME,
INDEX `idx_user_id` (`user_id`),
INDEX `idx_create_time` (`create_time`)
);
-- 系统配置表
CREATE TABLE IF NOT EXISTS `sys_config` (
`id` BIGINT PRIMARY KEY,
`config_key` VARCHAR(128) NOT NULL UNIQUE COMMENT '配置键',
`config_value` TEXT COMMENT '配置值',
`config_name` VARCHAR(128) COMMENT '配置名称',
`remark` VARCHAR(256) COMMENT '备注',
`create_time` DATETIME,
`update_time` DATETIME
);
-- 固件版本表(OTA)
CREATE TABLE IF NOT EXISTS `firmware` (
`id` BIGINT PRIMARY KEY,
`name` VARCHAR(128) NOT NULL COMMENT '固件名称',
`version` VARCHAR(32) NOT NULL COMMENT '版本号',
`device_type` VARCHAR(32) COMMENT '适用设备类型',
`file_url` VARCHAR(512) NOT NULL COMMENT '文件URL',
`file_size` BIGINT COMMENT '文件大小(bytes)',
`md5` VARCHAR(64) COMMENT '文件MD5校验',
`changelog` TEXT COMMENT '更新说明',
`status` TINYINT DEFAULT 1 COMMENT '状态(0草稿 1发布 2废弃)',
`create_by` BIGINT,
`create_time` DATETIME
);
-- 设备固件升级记录表
CREATE TABLE IF NOT EXISTS `device_upgrade_record` (
`id` BIGINT PRIMARY KEY,
`device_id` VARCHAR(64) NOT NULL,
`firmware_id` BIGINT NOT NULL,
`from_version` VARCHAR(32) COMMENT '升级前版本',
`to_version` VARCHAR(32) NOT NULL COMMENT '目标版本',
`status` TINYINT DEFAULT 0 COMMENT '状态(0待升级 1升级中 2成功 3失败)',
`progress` INT DEFAULT 0 COMMENT '进度百分比',
`error_msg` VARCHAR(512) COMMENT '失败原因',
`upgrade_time` DATETIME COMMENT '升级完成时间',
`create_time` DATETIME,
INDEX `idx_device_id` (`device_id`)
);
-- 通知消息表(站内信/WebSocket推送)
CREATE TABLE IF NOT EXISTS `notification` (
`id` BIGINT PRIMARY KEY,
`user_id` BIGINT NOT NULL COMMENT '接收人',
`title` VARCHAR(128) NOT NULL COMMENT '标题',
`content` TEXT NOT NULL COMMENT '内容',
`type` VARCHAR(32) DEFAULT 'system' COMMENT '类型(system/alarm/task)',
`related_id` BIGINT COMMENT '关联业务ID',
`is_read` TINYINT DEFAULT 0 COMMENT '是否已读',
`create_time` DATETIME,
INDEX `idx_user_id` (`user_id`),
INDEX `idx_is_read` (`is_read`)
);
五、技术要点提醒
| 注意事项 |
说明 |
| 租户隔离 |
当前BaseEntity有tenantId但Service层未做数据隔离,所有服务查询都需要加 wrapper.eq(Device::getTenantId, currentTenantId) |
| 前端代理 |
vite.config.ts 的proxy是开发用的,生产环境需要Nginx反向代理或API网关 |
| WebSocket连接 |
告警实时推送需要在main.js建立全局WebSocket连接并维护重连机制 |
| ECharts响应式 |
图表容器resize监听,避免窗口变化变形 |
| Excel导入导出 |
推荐EasyExcel库(阿里开源),支持大数据量 |
| 文件上传 |
建议先做本地存储,后续无缝切换到MinIO/OSS |
| 涂鸦对接 |
需要涂鸦IoT开放平台的Access ID/Secret,走OAuth2获取token |
六、快速启动建议
如果你认同以上规划,建议从这3件事开始(效果最明显):
- Dashboard数据看板 — 让系统"看起来像个产品"
- 用户&角色管理 — 让系统"可以多人使用"
- 设备详情页 — 让系统"每个功能都能用起来"
告诉我你想先从哪个模块开始?