基于 Java 的 24 小时共享健身房系统开发与源码解析
·
基于Java的24小时共享健身房系统开发与源码解析
一、系统架构设计
- 分层架构
采用经典分层架构,基于Spring Boot构建后端服务,结合Spring Cloud实现微服务协同。系统分为以下层次:- 表现层:使用UniApp实现三端适配(微信小程序、H5、APP),管理后台采用Vue+ElementUI构建,支持数据可视化(ECharts)和交互式筛选。
- 网关层:通过Spring Cloud Gateway实现服务路由、限流(Sentinel集成)和鉴权(JWT Token验证),结合Nacos配置中心动态调整路由规则。
- 业务层:拆分为用户、设备、订单、支付、推荐五大微服务,支持独立扩展与维护。
- 支撑层:Redis缓存热点数据(如设备状态、用户信息),RocketMQ处理异步任务(如支付结果通知、设备状态更新),Elasticsearch存储审计日志支持全链路追踪。
- 物联网层:MQTT协议栈(EMQX服务器)实现健身设备与服务器实时通信,设备端通过Eclipse Paho Java客户端实现心跳检测和遗愿消息(离线告警)。
- 高并发设计
- 缓存策略:Redis集群分片存储,结合本地缓存(Caffeine)实现多级缓存。设备状态查询优先从本地缓存读取,未命中时回源Redis,降低数据库压力。
- 异步处理:支付结果通过RocketMQ异步通知业务系统,避免同步阻塞。使用分布式锁(Redis)防止重复支付,幂等性设计确保消息可靠处理。
- 数据库优化:订单表按月分表(如
order_202603),设备表按地区分库(如device_east)。高频查询字段建立组合索引,如会员表对手机号、身份证号加索引。
二、核心模块实现
- 物联网通信模块
- MQTT协议集成:设备首次连接需提供MAC地址+序列号,后台验证后颁发设备证书。双向TLS认证确保通信安全,设备端携带JWT Token鉴权。
- 设备控制指令下发:用户扫码启动跑步机时,后端将操作请求转换为JSON指令,通过EMQX推送给场馆内智能网关。示例代码:
java@Service public class DeviceControlService { @Autowired private MqttGateway mqttGateway; @Autowired private DeviceMapper deviceMapper; public boolean startTreadmill(String deviceId, Long userId) { Device device = deviceMapper.selectById(deviceId); if (device == null || device.getStatus() != 0) { throw new BusinessException("设备不可用"); } JSONObject command = new JSONObject(); command.put("action", "start"); command.put("deviceId", deviceId); command.put("userId", userId); String topic = String.format("/gym/%s/control", deviceId); mqttGateway.sendToTopic(topic, command.toJSONString()); device.setStatus(1); deviceMapper.updateById(device); return true; } }
- 订单与支付模块
- 微信支付集成:使用微信支付API生成预支付订单,异步通知处理支付结果。示例代码:
java@Service public class WeChatPayService { private WXPay wxPay; public WeChatPayService(WXPayConfig config) { this.wxPay = new WXPay(config); } public Map<String, String> createOrder(String orderId, int amount, String description) throws Exception { Map<String, String> data = new HashMap<>(); data.put("body", description); data.put("out_trade_no", orderId); data.put("total_fee", String.valueOf(amount)); data.put("spbill_create_ip", "123.12.12.123"); data.put("trade_type", "NATIVE"); return wxPay.unifiedOrder(data); } } - 分布式锁防重复支付:支付处理前加锁,锁过期时间30秒。示例代码:
javapublic void processPayment(String orderId) { String lockKey = "pay_order:" + orderId; try (Jedis jedis = jedisPool.getResource()) { String lock = jedis.set(lockKey, "1", "NX", "EX", 30); if ("OK".equals(lock)) { // 处理支付逻辑 } } }
- 微信支付集成:使用微信支付API生成预支付订单,异步通知处理支付结果。示例代码:
- 设备状态管理
- Redis缓存设备状态:设备状态变更时同步更新Redis,查询时优先从缓存读取。示例代码:
javapublic class DeviceStatusManager { private static final String REDIS_HOST = "localhost"; private static final int REDIS_PORT = 6379; public static void updateDeviceStatus(String deviceId, String status) { try (Jedis jedis = new Jedis(REDIS_HOST, REDIS_PORT)) { jedis.set("device:" + deviceId + ":status", status); } } public static String getDeviceStatus(String deviceId) { try (Jedis jedis = new Jedis(REDIS_HOST, REDIS_PORT)) { return jedis.get("device:" + deviceId + ":status"); } } }
- Redis缓存设备状态:设备状态变更时同步更新Redis,查询时优先从缓存读取。示例代码:
三、安全与性能优化
- 数据安全
- 传输层加密:HTTPS+TLS 1.3加密通信,防止中间人攻击。
- 存储层加密:敏感字段(如用户手机号、身份证号)使用AES-256加密,密钥通过HSM硬件加密模块管理。
- 审计日志:所有操作记录Elasticsearch,支持按用户ID、操作时间快速检索。
- 性能优化
- 读写分离:MySQL主从复制,写操作路由主库,读操作路由从库。
- 消息队列优化:RocketMQ批量消费模式,通过
consumeMessageBatchMaxSize参数控制单次拉取消息数量,提升吞吐量。 - 监控告警:Prometheus+Grafana实现系统指标(QPS、响应时间、错误率)可视化,集成企业微信/钉钉告警。
四、扩展功能与部署
- 物联网扩展
- 智能手环对接:实时监测会员心率,数据通过MQTT上传至服务器。
- 储物柜蓝牙解锁:用户扫码后,服务器下发解锁指令至蓝牙网关。
- AI增值服务
- 私教课程推荐:基于用户历史数据(如运动偏好、消耗卡路里)使用协同过滤算法推荐课程。
- 体态分析:通过CV算法分析摄像头采集的会员体态数据,生成改善建议。
- 部署方案
- 容器化部署:使用Docker打包微服务,Kubernetes实现自动扩缩容。
- 多活架构:同城双机房部署,通过Nacos实现服务注册与发现,RocketMQ实现跨机房消息同步。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)