基于Java的24小时共享健身房系统开发与源码解析

一、系统架构设计
  1. 分层架构
    采用经典分层架构,基于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客户端实现心跳检测和遗愿消息(离线告警)。
  2. 高并发设计
    • 缓存策略:Redis集群分片存储,结合本地缓存(Caffeine)实现多级缓存。设备状态查询优先从本地缓存读取,未命中时回源Redis,降低数据库压力。
    • 异步处理:支付结果通过RocketMQ异步通知业务系统,避免同步阻塞。使用分布式锁(Redis)防止重复支付,幂等性设计确保消息可靠处理。
    • 数据库优化:订单表按月分表(如order_202603),设备表按地区分库(如device_east)。高频查询字段建立组合索引,如会员表对手机号、身份证号加索引。
二、核心模块实现
  1. 物联网通信模块
    • 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;
          }
      }
      
  2. 订单与支付模块
    • 微信支付集成:使用微信支付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秒。示例代码:
      
          

      java

      public 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)) {
                  // 处理支付逻辑
              }
          }
      }
      
  3. 设备状态管理
    • Redis缓存设备状态:设备状态变更时同步更新Redis,查询时优先从缓存读取。示例代码:
      
          

      java

      public 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");
              }
          }
      }
      
三、安全与性能优化
  1. 数据安全
    • 传输层加密:HTTPS+TLS 1.3加密通信,防止中间人攻击。
    • 存储层加密:敏感字段(如用户手机号、身份证号)使用AES-256加密,密钥通过HSM硬件加密模块管理。
    • 审计日志:所有操作记录Elasticsearch,支持按用户ID、操作时间快速检索。
  2. 性能优化
    • 读写分离:MySQL主从复制,写操作路由主库,读操作路由从库。
    • 消息队列优化:RocketMQ批量消费模式,通过consumeMessageBatchMaxSize参数控制单次拉取消息数量,提升吞吐量。
    • 监控告警:Prometheus+Grafana实现系统指标(QPS、响应时间、错误率)可视化,集成企业微信/钉钉告警。
四、扩展功能与部署
  1. 物联网扩展
    • 智能手环对接:实时监测会员心率,数据通过MQTT上传至服务器。
    • 储物柜蓝牙解锁:用户扫码后,服务器下发解锁指令至蓝牙网关。
  2. AI增值服务
    • 私教课程推荐:基于用户历史数据(如运动偏好、消耗卡路里)使用协同过滤算法推荐课程。
    • 体态分析:通过CV算法分析摄像头采集的会员体态数据,生成改善建议。
  3. 部署方案
    • 容器化部署:使用Docker打包微服务,Kubernetes实现自动扩缩容。
    • 多活架构:同城双机房部署,通过Nacos实现服务注册与发现,RocketMQ实现跨机房消息同步。
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐