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

64 阅读4分钟

前言

💖💖作者:计算机程序员小杨 💙💙个人简介:我是一名计算机相关专业的从业者,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。热爱技术,喜欢钻研新工具和框架,也乐于通过代码解决实际问题,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💕💕文末获取源码联系 计算机程序员小杨 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目 计算机毕业设计选题 💜💜

一.开发工具简介

开发语言:Java+Python(两个版本都支持) 后端框架:Spring Boot(Spring+SpringMVC+Mybatis)+Django(两个版本都支持) 前端:Vue+ElementUI+HTML 数据库:MySQL 系统架构:B/S 开发工具:IDEA(Java的)或者PyCharm(Python的)

二.系统内容简介

民宿预定管理系统是一款基于B/S架构的综合性管理平台,采用Spring Boot后端框架与Vue前端技术构建,使用MySQL数据库存储数据。该系统面向民宿经营者、平台管理员以及预订用户三类角色,提供完整的民宿经营管理解决方案。系统涵盖用户注册登录、商家入驻审核、民宿信息发布、房间类型分类、房间详情展示、在线预订下单、退订申请处理、投诉反馈处理、收藏夹管理等核心功能模块。通过该系统,商家可以便捷地管理民宿资源和订单信息,用户能够快速浏览民宿详情并完成预订操作,管理员则可以统一监管平台运营情况。系统采用前后端分离设计,具备良好的扩展性和维护性,能够满足民宿行业日常经营管理的实际需求。

三.系统功能演示

民宿预定管理系统

四.系统界面展示

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

五.系统源码展示


// ============ 核心功能一:房间预订管理 ============
@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("处理失败");
}

六.系统文档展示

在这里插入图片描述

结束

💕💕文末获取源码联系 计算机程序员小杨