【24小时无人自助共享台球棋牌室系统】基于 Vue3 + Spring Boot 的设计与实现(含PRD/三端高保真源码/大屏)
@TOC
一、 选题背景与无人自助空间痛点剖析
在年轻一代消费者愈发青睐高私密性、免打扰与全天候自由娱乐的浪潮下,24 小时无人自助台球厅与棋牌茶室正以“免人工值守、低租金边际成本、夜间长尾客流高坪效”成为线下实体轻资产创业的标杆业态。然而,大部分传统自助门店采用极其简陋的五孔插座定时器甚至机械插销,在运营实践中暴露出严重的硬伤:
- 强拔插头与盗电蹭玩 (Electricity Theft & Overstay): 机械定时插头极易被顾客私自短接或拔下直插墙面插座,导致订单结束后无影灯依旧亮起,用户长期超时赖场霸台,缺少对球桌强电线路的物理级硬件隔离;
- 待机空载电费吞噬净利润 (High Standby Power Cost):
台球桌专用无影矩阵灯功率普遍在 300W
600W,自动麻将机和棋牌包厢中央空调功率高达 2kW3kW。若顾客离开后未手动关机,彻夜空耗的电费足以吞噬整个包厢全天的微薄利润; - 硬件弱网卡死与继电器失联 (Network Jitter & Offline Failover): 多数简易 IoT 设备缺乏断网脱机保护能力。当商宽出现波动时,继电器极易卡在开启状态造成严重经济损失;
- 卫生脏乱与押金退还纠纷 (Hygiene Disputes & Deposit Frictions): 无人值守下台呢烟蒂烫伤、空酒瓶乱扔缺乏第一现场责任人判定。若人工审核退押金耗时过长,极易招致差评维权。
针对以上痛点,我们设计并研发了本套**【24小时无人自助共享台球棋牌室多端预约与IoT断电器管理系统】,实现真正意义上的“秒级扫码通电、到期强制断电、离场拍照返押、断网脱机容灾”**。
二、 清新雅致·暖木晨光视觉美学设计 (Emerald & Warm Wood)
本项目严格贯彻现代高水准前端 UI/UX 美学规范,坚决杜绝沉闷、低质、千篇一律的深黑 AI Slop 界面,专为高端台球沙龙与品质棋牌空间量身定制清淡明亮配色体系:
- 基底画布:选用晨雾浅灰米色(
#f8fafc/ Slate-50),给予用户宽广、通透、高采光的舒适呼吸感; - 卡片容器:纯白(
#ffffff)搭配border border-slate-200/80细微边框与层次微阴影,使模块悬浮轻盈; - 核心焦点色:选用英伦赛事台呢森林翠绿(
#059669/ Emerald-600)与暖木琥珀金(#d97706/ Amber-600),传递高档竞技运动的质感与温度; - 语义状态指示:薄荷翠绿(通电履约中)、琥珀暖金(超时加时)、冷灰(断电待机)、浅灰蓝(消杀保洁)。
三、 系统整体技术架构与指标对照
| 架构分层 | 核心技术选型 | 功能边界与设计规范 |
|---|---|---|
| PC 态势全局驾驶舱 | Vue 3.4 + Pinia + TailwindCSS + ECharts | 12台位数字孪生沙盘、实时功率监测、峰谷电价套利分析 |
| 治理中台 (Admin) | Vue Router 4 (Hash模式) + Responsive | 分时段阶梯定价、卫生质检仲裁流、4G Cat.1网关拓扑 |
| 球友微信小程序 | 390×844 原生移动视口规范 (2x Retina) | 附近门店 LBS 搜寻、1秒扫码通电、在玩倒计时与秒退押金 |
| 后端中枢与延时锁 | Spring Boot 3.2 + Redis 延时双删队列 | 毫秒级订单到期切断指令派发,防止超期用电 |
| 物联网微断网关 | MQTT 3.1.1 + Modbus-RTU 工业总线 | 响应延时 < 320ms,100% 漏电自检与端子温升告警 |
四、 系统高清实机全流程运行效果展示
4.1 PC 端态势感知与运营驾驶舱
(1) 门店全域态势驾驶舱
多维呈现今日总营收(¥6,840)、在玩开台率(75%)、综合节能比(43.8%)及 12 核心台位实时数字孪生沙盘。 !门店全域态势驾驶舱
(2) 球桌包厢实时矩阵看板
实时透视乔氏中八、星牌斯诺克与雀友全自动麻将包厢的触点通断与瞬时电流状态,支持 1 键遥控测试。 !球桌包厢实时矩阵看板
(3) IoT 智能断电器监控中枢
穿透监测 12 路微断线路电压(226V)、负载电流、端子温度与漏电量(mA),支持一键强切。 !IoT智能断电器监控中枢
(4) 24 小时订单流与超时加时分析
订单全生命周期追踪,展示剩余时间、押金托管与加时明细,杜绝超时漏单。 !24小时订单流与超时加时分析
(5) 绿电节能与碳排审计
深度挖掘峰谷电价套利空间,测算无影灯与棋牌空调停运带来的度电节约效益。 !绿电节能与碳排审计
4.2 管理端中台治理与调度后台 (Admin)
(6) 运营总览与硬件健康看板
呈现本月 ¥186,400 流水结构、消防联动自检及储值复购指标。 !运营总览与硬件健康看板
(7) 分时段动态定价策略引擎
灵活配置早鸟 7 折场、午后标准场、黄金晚市峰期与夜猫子包宿一口价(¥128 畅打)。 !分时段动态定价策略引擎
(8) 卫生打卡与押金争议仲裁
离场保洁核验流水,AI 自动质检桌面烫痕与烟蒂,平均退押时效仅 1.2 秒。 !卫生打卡与押金争议仲裁
(9) 物联网网关拓扑与容灾
监控 4G Cat.1 / 以太网各网关节点、丢包率与脱机离线密码同步。 !物联网网关拓扑与容灾
(10) 会员时长套餐与储值营销
上架充 500 送 120、通宵月卡、棋牌家庭共享卡等高黏性储值产品。 !会员时长套餐与储值营销
4.3 球友端移动小程序生态 (Mobile - 390×844 原生视口)
(11) 移动小程序端-附近选台与实时推荐
LBS 距离定位、八球/斯诺克/麻将 4 宫格极速筛选与实时开台。 !移动小程序端-附近选台与实时空闲推荐
(12) 移动小程序端-球桌包厢详情与时段预订
展示球桌实景、免押特权说明、包时滑动条与微信支付直开。 !移动小程序端-球桌包厢详情与时段预订
(13) 移动小程序端-在玩控电控制台
在玩大号倒计时显示、一键临时开门锁、开关无影灯与离场拍照退押金指引。 !移动小程序端-在玩控电控制台
(14) 移动小程序端-个人钱包与免押退款
储值余额管理、信用分 99 分极好认证、押金秒退流水明细。 !移动小程序端-个人钱包与免押退款
(15) 全系统综合联动协同全景
三端统一同源数据,软硬件双向毫秒级调度闭环。 !全系统综合联动协同全景
五、 核心业务逻辑与关键代码解析
5.1 后端 MQTT 物联网微断遥控与订单倒计时切断控制器
// Spring Boot 3.2 物联网智能断电器分合闸与订单延时关闭控制器
@RestController
@RequestMapping("/api/v1/breaker-control")
@Tag(name = "IotBreakerController", description = "24H共享台球棋牌室智能微断遥控与电能计量中枢")
public class IotBreakerController {
@Autowired
private MqttGatewayService mqttGateway;
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Autowired
private RoomOrderService roomOrderService;
@PostMapping("/relay/toggle")
@Operation(summary = "下发继电器分合闸指令(合闸通电/分闸断电)")
public ResponseEntity<ApiResponse<Boolean>> toggleRelay(
@RequestParam String roomId,
@RequestParam Integer targetState, // 1: 通电, 0: 断电
@RequestParam(required = false) String reason) {
// 1. 查询台位绑定的智能断电器物理网关设备号
BreakerDeviceVO breaker = roomOrderService.getBreakerByRoomId(roomId);
if (breaker == null) {
throw new BusinessException(ErrorCode.DEVICE_NOT_FOUND, "未绑定有效智能微断设备");
}
// 2. 构造 MQTT Modbus-RTU 遥控控制报文帧 (0x05 写单线圈指令)
MqttCommandPayload payload = MqttCommandPayload.builder()
.deviceId(breaker.getDeviceId())
.circuitId(breaker.getCircuitNumber())
.command(targetState == 1 ? RelAction.CLOSE : RelAction.TRIP)
.timestamp(System.currentTimeMillis())
.token(UUID.randomUUID().toString())
.build();
// 3. 发布 QoS=1 保障送达指令至 MQTT Broker
String topic = String.format("iot/breaker/%s/control", breaker.getDeviceId());
boolean success = mqttGateway.publish(topic, payload);
// 4. 若为合闸开电,注册 Redis 订单倒计时延时队列,到期自动触发断电与语音提醒
if (success && targetState == 1) {
long remainingSeconds = roomOrderService.getRemainingSeconds(roomId);
redisTemplate.opsForValue().set("countdown:room:" + roomId, true, remainingSeconds, TimeUnit.SECONDS);
}
return ResponseEntity.ok(ApiResponse.success(success));
}
}
5.2 前端 Vue 3 + TailwindCSS 球桌包厢看板组件
<!-- Vue3 + TailwindCSS 球桌与包厢实时看板矩阵组件 (RoomMatrixView.vue) -->
<template>
<div class="space-y-6">
<div class="bg-white rounded-2xl p-5 border border-slate-200/80 shadow-sm flex items-center justify-between">
<div class="flex items-center gap-3">
<span class="text-sm font-semibold text-slate-700">台位类型:</span>
<button v-for="t in ['all', 'pool', 'chess']" :key="t"
@click="activeFilter = t"
class="px-4 py-1.5 rounded-xl text-xs font-semibold transition-all"
:class="activeFilter === t ? 'bg-emerald-600 text-white shadow-sm' : 'bg-slate-100 text-slate-600 hover:bg-slate-200'">
{{ t === 'all' ? '全部台位 (12)' : t === 'pool' ? '🎱 台球大厅 (8)' : '🀄 棋牌包厢 (4)' }}
</button>
</div>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-5">
<div v-for="room in filteredRooms" :key="room.id"
class="bg-white rounded-2xl border border-slate-200/80 p-5 shadow-sm space-y-4">
<div class="flex items-start justify-between">
<div>
<span class="text-xs px-2 py-0.5 rounded font-bold" :class="room.type === 'pool' ? 'bg-emerald-100 text-emerald-800' : 'bg-amber-100 text-amber-800'">
{{ room.category }}
</span>
<h4 class="font-bold text-slate-900 text-base mt-1.5">{{ room.name }}</h4>
</div>
<span class="text-base font-extrabold text-emerald-600">¥{{ room.price }}/h</span>
</div>
<div class="p-2.5 rounded-xl border border-slate-100 bg-slate-50/50 flex justify-between text-xs">
<span>断电状态:<strong :class="room.breaker.relayState === 1 ? 'text-emerald-600' : 'text-slate-400'">{{ room.breaker.relayState === 1 ? '⚡ 供电中' : '⚪ 已切断' }}</strong></span>
<span>瞬时功耗:{{ room.breaker.powerKw }} kW</span>
</div>
</div>
</div>
</div>
</template>
六、 项目完整工程目录结构
shared-billiards-room/
├── PRD.md # 三端一体化完整产品规格说明书 (8/8项达标)
├── index.html # 主入口 HTML (清新森林翡翠绿与暖木金主题)
├── package.json # 核心依赖清单 (Vue 3.4, Vite 5, TailwindCSS, Lucide)
├── vite.config.js # 端口 5179 构建配置
├── src/
│ ├── main.js # 应用初始化
│ ├── App.vue # 根组件
│ ├── router/index.js # PC/Admin/Mobile 三端全套 14 个路由映射 (Hash模式)
│ ├── stores/billiards.js # Pinia 状态管理 (12台位/断电器遥测/订单流水)
│ ├── layouts/
│ │ ├── PcLayout.vue # PC端态势大屏清淡极简侧栏与头部
│ │ ├── AdminLayout.vue # 管理端中后台响应式治理框架
│ │ └── MobileLayout.vue # 小程序端 390px 容器与真机 TabBar
│ └── views/
│ ├── pc/ # PC 端 5 大核心界面
│ │ ├── BilliardsCockpitView.vue
│ │ ├── RoomMatrixView.vue
│ │ ├── BreakerControlView.vue
│ │ ├── OrderTimelineView.vue
│ │ └── EnergyAuditView.vue
│ ├── admin/ # 管理后台 5 大界面
│ │ ├── AdminDashboardView.vue
│ │ ├── DynamicPricingView.vue
│ │ ├── HygieneInspectionView.vue
│ │ ├── DeviceGatewayView.vue
│ │ └── VipPackageView.vue
│ └── mobile/ # 小程序端 4 大界面
│ ├── MobileHomeView.vue
│ ├── MobileRoomDetailView.vue
│ ├── MobileConsoleView.vue
│ └── MobileProfileView.vue
七、 总结与全套工程源码获取
本系统深度契合实体轻资产转型下 24 小时无人潮玩空间的数字化升级诉求,通过软硬件深度联动、智能微断毫秒级跳合闸、全套清淡明朗的暖木绿意 UI 界面及断网本地容灾策略,构筑了超高可用、商业闭环的完整落地解决方案。
💡 资源获取指引: 包含完整的前端 Vue 3 高保真源码、产品需求规格说明书 (PRD.md)、Tailwind 样式、Pinia 完整数据状态机与开箱即用打包工程,已全部整理归档,读者可通过官方发布门户获取完整包: 👉 24小时无人自助共享台球棋牌室多端预约与IoT断电器管理系统(含完整源码/PRD/架构全景)