墨水屏智能广告牌管理系统
一、立项背景和目标
随着物联网技术的成熟和低功耗电子墨水屏(E-Ink)成本的下降,智能广告牌逐渐替代传统纸质海报,成为校园、办公区、商场等场景的信息展示新载体。电子墨水屏具备超低功耗、阳光下可视、静态画面零耗电等优势,特别适合固定位置的信息轮播展示。
本项目旨在构建一套完整的墨水屏智能广告牌端到端管理解决方案,解决传统海报更换效率低、内容审核缺失、多设备统一管理难等痛点。项目目标是:为运营方提供一套支持内容上传→安全审核→远程推送→设备播放全链路管理的系统,同时为普通用户提供便捷的手机端内容上传入口,实现"千人千面"的个性化广告展示能力。
系统采用前后端分离架构,后端基于 Spring Boot 3 开发,前端包含**微信小程序(用户端)和飞书应用(管理后台)**两套界面,覆盖 C 端用户和 B 端管理员的双重使用场景。
二、软件功能与核心功能模块
系统围绕"人-内容-设备"三条核心主线展开,共包含以下七大功能模块:
1. 双端用户认证模块
微信小程序登录:普通用户通过微信扫码授权登录,默认角色为"游客",拥有上传内容和推送至指定设备的权限
飞书 OAuth 登录:管理员通过飞书企业应用授权登录,拥有设备管理、内容审核、数据分析等全部权限
统一 JWT Token 鉴权机制,支持角色分级访问控制
2. 媒体资源管理模块
图片管理:支持原图上传(最大 50MB),系统自动处理为适配墨水屏的黑白抖动图,原始图和处理图分别存储
视频管理:支持 MP4 视频上传,后端异步调用 FFmpeg 转码为墨水屏专用的 BIN 帧数据格式,可配置帧率和采样精度
对象存储:基于 MinIO 实现媒体文件的私有存储,对外提供 2 小时有效期的 Presigned 安全访问链接
3. 内容安全审核模块
游客上传的所有内容默认进入"待审核"状态
系统接入微信小程序内容安全 API,对图片和视频关键帧进行自动预检
管理员在飞书后台进行人工二次审核,支持"通过/拒绝/重新审核"三种操作,拒绝需填写原因
审核通过的内容方可被推送至设备播放,确保展示内容的合规性
4. 设备管理模块
设备信息 CRUD:记录设备名称、编码(MAC 地址)、位置、MQTT 主题等
实时状态监控:通过 MQTT 心跳机制检测设备在线/离线状态
远程配网:管理员可下发 WiFi SSID 和密码至设备,实现设备的网络切换
当前内容回显:查看每台设备正在播放的内容及类型
5. 内容推送与播放队列模块
支持单图推送、单视频推送、批量多设备推送三种模式
推送记录持久化,可追溯每次推送的目标设备、内容、时间及状态
基于 Redis 实现设备级播放队列,支持内容轮播
游客推送内容默认限制播放时长(120 秒),管理员内容无时长限制,游客每日推送次数设有上限(5 次)
6. MQT
墨水屏智能广告牌管理系统 — 项目实现
一、整体架构与设计思路,各模块技术栈
项目采用前后端分离架构,分设备端(墨水屏硬件)、服务端(Spring Boot)、应用端(微信小程序+飞书管理后台)三层。
设计思路:双端用户体系统一收敛到 JWT 鉴权,微信小程序供 C 端游客使用,飞书应用供 B 端管理员使用;视频转码为 CPU 密集型操作,采用 @Async 异步线程池解耦,避免接口超时;设备通过 MQTT 与云端双向通信,无需公网 IP;媒体文件存 MinIO 私有 Bucket,通过 Presigned URL(2小时过期)实现设备端安全下载。
技术栈:后端 Spring Boot 3.2 + Java 17,ORM 采用 MyBatis-Plus 3.5.5,数据库 PostgreSQL 17,缓存 Redis 6.2,对象存储 MinIO,IoT 通信采用 EMQX 5.3.2 + Spring Integration MQTT,视频处理采用 JavaCV 1.5.10 + FFmpeg,安全认证采用 JJWT,管理前台采用 Vue 3 + TypeScript + Element Plus + ECharts,部署采用 Docker Compose 一键编排。
二、本人负责模块和量化成果
本人独立负责全栈开发,具体量化成果如下:
后端服务:设计并实现 8 个 Controller、42 个 RESTful API 接口,覆盖认证、图片、视频、设备、推送、后台管理、数据分析、微信公众号 8 大子系统;设计 6 张核心数据表及全部 MyBatis Mapper 和 Service 层。
双端登录:独立完成微信小程序 OAuth 登录全流程(code 换 openid → 自动注册 → 返回 JWT);独立完成飞书企业应用 OAuth 登录(code 换 token → 换用户信息 → 自动赋予 ADMIN 角色)。
媒体处理:实现图片上传与内容安全预检;实现视频异步转码(@Async 线程池,FFmpeg 转 BIN 格式),支持处理状态实时轮询查询;实现视频帧采样审核,转码过程中抽取关键帧调微信内容安全接口预检。
MQTT 通信:设计主题规范 device/{code}/cmd(命令下发)、device/+/heartbeat(心跳)、device/+/status(状态);实现心跳监听器自动更新设备在线状态;推送指令 Payload 包含 Presigned URL、MD5、文件大小,设备下载完成后上报 ACK。
飞书管理后台:独立开发 Vue 3 管理后台 8 个核心页面(登录、回调、仪表盘、推送、设备管理、审核、数据分析、上传),集成 ECharts 可视化图表。
部署运维:编写 docker-compose.yml 一键编排