【Java】健身房管理系统 SpringBoot+Vue框架 计算机毕业设计项目 Idea+Navicat+MySQL安装 附源码+文档+讲解

44 阅读5分钟

一、个人简介

💖💖作者:计算机编程果茶熊 💙💙个人简介:曾长期从事计算机专业培训教学,担任过编程老师,同时本人也热爱上课教学,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 计算机毕业设计选题 💕💕文末获取源码联系计算机编程果茶熊

二、系统介绍

开发语言:Java+Python 数据库:MySQL 系统架构:B/S 后端框架:SpringBoot(Spring+SpringMVC+Mybatis)+Django 前端:Vue+HTML+CSS+JavaScript+jQuery

健身房管理系统是一个基于Spring Boot + Vue架构的综合性管理平台,采用前后端分离的B/S架构模式开发。系统以MySQL数据库作为数据存储核心,运用Spring、SpringMVC、Mybatis等成熟框架构建后端服务,前端采用Vue框架实现交互界面。该系统涵盖用户管理、健身教练管理、教练类型管理、健身课程管理、课程预约管理、取消预约管理、会员卡管理、会员卡订单管理、教练评价管理、健身计划管理等完整业务模块,旨在实现健身房日常运营的数字化管理。通过课程预约与取消预约功能,会员可以灵活安排健身计划;通过教练评价机制,健身房能够及时了解服务质量;通过会员卡订单管理,实现会员消费的全流程追踪。系统还提供个人中心模块,方便用户查看个人信息、预约记录、订单详情等内容。整体设计注重实用性与易用性,力求为健身房管理者、教练员和会员提供一个便捷高效的信息化管理工具。

三、视频解说

健身房管理系统

四、部分功能展示

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

五、部分代码展示


// ============ 核心功能一:房间预订管理 ============
@PostMapping("/booking/create")
public Result createBooking(@RequestBody BookingDTO bookingDTO, HttpSession session) {
    User currentUser = (User) session.getAttribute("user");
    if (currentUser == null) {
        return Result.error("用户未登录");
    }
    
    // 查询房间信息并验证可用性
    Room room = roomMapper.selectById(bookingDTO.getRoomId());
    if (room == null || room.getStatus() != 1) {
        return Result.error("房间不存在或已下架");
    }
    
    // 检查日期范围内是否已被预订
    LocalDate checkInDate = bookingDTO.getCheckInDate();
    LocalDate checkOutDate = bookingDTO.getCheckOutDate();
    if (checkInDate.isAfter(checkOutDate) || checkInDate.isBefore(LocalDate.now())) {
        return Result.error("入住日期设置不合理");
    }
    
    // 查询该时间段内的冲突订单
    int conflictCount = bookingMapper.countConflictBookings(
        bookingDTO.getRoomId(), checkInDate, checkOutDate, Arrays.asList(1, 2, 3)
    );
    if (conflictCount > 0) {
        return Result.error("该时间段房间已被预订");
    }
    
    // 计算预订总价
    long days = ChronoUnit.DAYS.between(checkInDate, checkOutDate);
    if (days <= 0) {
        return Result.error("预订天数必须大于0");
    }
    BigDecimal totalPrice = room.getPrice().multiply(new BigDecimal(days));
    
    // 创建订单记录
    Booking booking = new Booking();
    booking.setUserId(currentUser.getId());
    booking.setRoomId(room.getId());
    booking.setMerchantId(room.getMerchantId());
    booking.setCheckInDate(checkInDate);
    booking.setCheckOutDate(checkOutDate);
    booking.setTotalPrice(totalPrice);
    booking.setStatus(1); // 1-待确认
    booking.setOrderNo("ORD" + System.currentTimeMillis() + RandomUtil.randomNumbers(4));
    booking.setCreateTime(LocalDateTime.now());
    
    int insertResult = bookingMapper.insert(booking);
    if (insertResult > 0) {
        // 更新房间预订统计
        roomMapper.incrementBookingCount(room.getId());
        
        // 发送通知给商家
        notifyMerchant(room.getMerchantId(), "您有新的预订订单:" + booking.getOrderNo());
        
        return Result.success(booking);
    }
    return Result.error("预订失败,请稍后重试");
}

// ============ 核心功能二:房间退订管理 ============
@PostMapping("/booking/cancel")
public Result cancelBooking(@RequestParam Long bookingId, @RequestParam String reason, HttpSession session) {
    User currentUser = (User) session.getAttribute("user");
    if (currentUser == null) {
        return Result.error("用户未登录");
    }
    
    // 查询订单信息
    Booking booking = bookingMapper.selectById(bookingId);
    if (booking == null) {
        return Result.error("订单不存在");
    }
    
    // 验证订单归属
    if (!booking.getUserId().equals(currentUser.getId())) {
        return Result.error("无权操作此订单");
    }
    
    // 验证订单状态是否允许退订
    if (booking.getStatus() == 4) {
        return Result.error("订单已取消,无需重复操作");
    }
    if (booking.getStatus() == 5) {
        return Result.error("订单已完成,无法取消");
    }
    
    // 计算退款金额(根据退订时间计算扣费比例)
    LocalDate checkInDate = booking.getCheckInDate();
    long daysBeforeCheckIn = ChronoUnit.DAYS.between(LocalDate.now(), checkInDate);
    BigDecimal refundAmount = booking.getTotalPrice();
    String refundRemark = "全额退款";
    
    if (daysBeforeCheckIn < 1) {
        return Result.error("入住当天及之后不可退订");
    } else if (daysBeforeCheckIn < 3) {
        refundAmount = refundAmount.multiply(new BigDecimal("0.5"));
        refundRemark = "扣除50%手续费";
    } else if (daysBeforeCheckIn < 7) {
        refundAmount = refundAmount.multiply(new BigDecimal("0.8"));
        refundRemark = "扣除20%手续费";
    }
    
    // 更新订单状态
    booking.setStatus(4); // 4-已取消
    booking.setCancelTime(LocalDateTime.now());
    booking.setCancelReason(reason);
    booking.setRefundAmount(refundAmount);
    booking.setRefundRemark(refundRemark);
    
    int updateResult = bookingMapper.updateById(booking);
    if (updateResult > 0) {
        // 创建退款记录
        Refund refund = new Refund();
        refund.setBookingId(bookingId);
        refund.setUserId(currentUser.getId());
        refund.setRefundAmount(refundAmount);
        refund.setReason(reason);
        refund.setStatus(1); // 1-退款处理中
        refund.setCreateTime(LocalDateTime.now());
        refundMapper.insert(refund);
        
        // 释放房间预订数量
        roomMapper.decrementBookingCount(booking.getRoomId());
        
        // 通知商家
        notifyMerchant(booking.getMerchantId(), "订单" + booking.getOrderNo() + "已取消");
        
        return Result.success("退订申请已提交,退款金额:" + refundAmount + "元(" + refundRemark + ")");
    }
    return Result.error("退订失败,请联系客服");
}

// ============ 核心功能三:投诉反馈管理 ============
@PostMapping("/complaint/handle")
public Result handleComplaint(@RequestParam Long complaintId, 
                              @RequestParam String handleResult,
                              @RequestParam Integer handleType,
                              HttpSession session) {
    User currentUser = (User) session.getAttribute("user");
    if (currentUser == null || currentUser.getRole() != 3) {
        return Result.error("无权限操作");
    }
    
    // 查询投诉信息
    Complaint complaint = complaintMapper.selectById(complaintId);
    if (complaint == null) {
        return Result.error("投诉记录不存在");
    }
    
    if (complaint.getStatus() == 2) {
        return Result.error("该投诉已处理完毕");
    }
    
    // 根据处理类型执行不同操作
    if (handleType == 1) { // 1-责任在商家,给予用户补偿
        Booking booking = bookingMapper.selectById(complaint.getBookingId());
        if (booking != null) {
            // 计算补偿金额(订单金额的20%)
            BigDecimal compensation = booking.getTotalPrice().multiply(new BigDecimal("0.2"));
            
            // 创建补偿记录
            Compensation compensationRecord = new Compensation();
            compensationRecord.setComplaintId(complaintId);
            compensationRecord.setUserId(complaint.getUserId());
            compensationRecord.setAmount(compensation);
            compensationRecord.setReason("投诉处理补偿");
            compensationRecord.setStatus(1);
            compensationRecord.setCreateTime(LocalDateTime.now());
            compensationMapper.insert(compensationRecord);
            
            // 扣除商家信用分
            Merchant merchant = merchantMapper.selectById(complaint.getMerchantId());
            merchant.setCreditScore(merchant.getCreditScore() - 5);
            if (merchant.getCreditScore() < 60) {
                merchant.setStatus(2); // 信用分过低,暂停接单
            }
            merchantMapper.updateById(merchant);
        }
    } else if (handleType == 2) { // 2-责任在用户,驳回投诉
        // 记录驳回原因,不做其他处理
    } else if (handleType == 3) { // 3-双方协商解决
        // 标记为协商解决,不涉及补偿
    }
    
    // 更新投诉状态
    complaint.setStatus(2); // 2-已处理
    complaint.setHandleResult(handleResult);
    complaint.setHandleType(handleType);
    complaint.setHandleBy(currentUser.getId());
    complaint.setHandleTime(LocalDateTime.now());
    
    int updateResult = complaintMapper.updateById(complaint);
    if (updateResult > 0) {
        // 通知投诉用户
        notifyUser(complaint.getUserId(), "您的投诉已处理,处理结果:" + handleResult);
        
        // 通知被投诉商家
        notifyMerchant(complaint.getMerchantId(), "针对订单" + complaint.getOrderNo() + "的投诉已处理");
        
        return Result.success("投诉处理完成");
    }
    return Result.error("处理失败");
}

六、部分文档展示

在这里插入图片描述

七、END

💕💕文末获取源码联系计算机编程果茶熊