💖💖作者:计算机毕业设计小途 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目
@TOC
基于SpringBoot的民宿预定管理系统介绍
基于SpringBoot的民宿预订管理系统是一套完整的B/S架构Web应用系统,采用当前主流的技术栈进行开发,支持Java+SpringBoot和Python+Django两种后端实现方案,前端统一使用Vue+ElementUI+HTML技术构建用户界面,数据存储采用MySQL数据库,开发环境支持IDEA和PyCharm两种IDE工具。该系统功能模块丰富完善,包含系统首页展示、用户个人中心管理、个人信息维护、密码修改功能,同时具备完整的用户管理和商家管理功能模块,支持民宿信息的全面管理包括房间类型分类、房间信息详细管理、房间预订流程处理、房间退订业务办理等核心业务功能,另外还集成了投诉反馈处理机制、个人收藏管理功能以及系统级管理功能如轮播图管理、系统公告发布、系统简介维护等辅助功能模块,整个系统架构清晰、功能完整、技术栈成熟稳定,能够满足现代民宿行业的预订管理需求,为用户提供便捷的在线预订服务体验,为商家提供高效的房间管理和订单处理能力,为管理员提供全面的系统运营管理工具,是一套技术先进、功能实用的民宿预订管理解决方案。
基于SpringBoot的民宿预定管理系统演示视频
基于SpringBoot的民宿预定管理系统演示图片
基于SpringBoot的民宿预定管理系统代码展示
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@Service
public class MinSuManagementService {
@Autowired
private RoomMapper roomMapper;
@Autowired
private BookingMapper bookingMapper;
@Autowired
private UserMapper userMapper;
private SparkSession spark = SparkSession.builder().appName("MinSuAnalysis").master("local[*]").getOrCreate();
@PostMapping("/room/book")
public Map<String, Object> bookRoom(@RequestBody BookingRequest request) {
Map<String, Object> result = new HashMap<>();
if (request.getRoomId() == null || request.getUserId() == null) {
result.put("success", false);
result.put("message", "房间ID和用户ID不能为空");
return result;
}
Room room = roomMapper.selectById(request.getRoomId());
if (room == null) {
result.put("success", false);
result.put("message", "房间不存在");
return result;
}
if (room.getStatus() != 1) {
result.put("success", false);
result.put("message", "房间当前不可预订");
return result;
}
List<Booking> existingBookings = bookingMapper.selectByRoomIdAndDateRange(
request.getRoomId(), request.getCheckInDate(), request.getCheckOutDate());
if (!existingBookings.isEmpty()) {
result.put("success", false);
result.put("message", "该时间段房间已被预订");
return result;
}
Booking booking = new Booking();
booking.setRoomId(request.getRoomId());
booking.setUserId(request.getUserId());
booking.setCheckInDate(request.getCheckInDate());
booking.setCheckOutDate(request.getCheckOutDate());
booking.setTotalAmount(room.getPrice() * request.getDays());
booking.setStatus(1);
booking.setCreateTime(LocalDateTime.now());
booking.setBookingNo(generateBookingNo());
int insertResult = bookingMapper.insert(booking);
if (insertResult > 0) {
room.setStatus(2);
roomMapper.updateById(room);
result.put("success", true);
result.put("message", "预订成功");
result.put("bookingNo", booking.getBookingNo());
Dataset<Row> bookingData = spark.read().format("jdbc")
.option("url", "jdbc:mysql://localhost:3306/minsu")
.option("dbtable", "booking")
.option("user", "root")
.option("password", "123456")
.load();
bookingData.groupBy("room_id").count().show();
} else {
result.put("success", false);
result.put("message", "预订失败,请重试");
}
return result;
}
@PostMapping("/room/cancel")
public Map<String, Object> cancelBooking(@RequestBody CancelRequest request) {
Map<String, Object> result = new HashMap<>();
if (request.getBookingId() == null) {
result.put("success", false);
result.put("message", "预订ID不能为空");
return result;
}
Booking booking = bookingMapper.selectById(request.getBookingId());
if (booking == null) {
result.put("success", false);
result.put("message", "预订记录不存在");
return result;
}
if (booking.getStatus() != 1) {
result.put("success", false);
result.put("message", "订单状态异常,无法取消");
return result;
}
LocalDateTime checkInTime = booking.getCheckInDate();
LocalDateTime currentTime = LocalDateTime.now();
long hoursUntilCheckIn = java.time.Duration.between(currentTime, checkInTime).toHours();
double refundRate = 1.0;
if (hoursUntilCheckIn < 24) {
refundRate = 0.5;
} else if (hoursUntilCheckIn < 72) {
refundRate = 0.8;
}
booking.setStatus(3);
booking.setCancelTime(currentTime);
booking.setRefundAmount(booking.getTotalAmount() * refundRate);
booking.setCancelReason(request.getReason());
int updateResult = bookingMapper.updateById(booking);
if (updateResult > 0) {
Room room = roomMapper.selectById(booking.getRoomId());
room.setStatus(1);
roomMapper.updateById(room);
result.put("success", true);
result.put("message", "取消成功");
result.put("refundAmount", booking.getRefundAmount());
Dataset<Row> cancelData = spark.read().format("jdbc")
.option("url", "jdbc:mysql://localhost:3306/minsu")
.option("dbtable", "booking")
.option("user", "root")
.option("password", "123456")
.load();
cancelData.filter("status = 3").groupBy("cancel_reason").count().show();
} else {
result.put("success", false);
result.put("message", "取消失败,请重试");
}
return result;
}
@PostMapping("/room/manage")
public Map<String, Object> manageRoomInfo(@RequestBody RoomManageRequest request) {
Map<String, Object> result = new HashMap<>();
if (request.getAction() == null) {
result.put("success", false);
result.put("message", "操作类型不能为空");
return result;
}
if ("add".equals(request.getAction())) {
if (request.getRoomName() == null || request.getPrice() == null) {
result.put("success", false);
result.put("message", "房间名称和价格不能为空");
return result;
}
Room room = new Room();
room.setRoomName(request.getRoomName());
room.setRoomType(request.getRoomType());
room.setPrice(request.getPrice());
room.setDescription(request.getDescription());
room.setImages(request.getImages());
room.setStatus(1);
room.setCreateTime(LocalDateTime.now());
room.setMerchantId(request.getMerchantId());
int insertResult = roomMapper.insert(room);
if (insertResult > 0) {
result.put("success", true);
result.put("message", "房间添加成功");
result.put("roomId", room.getId());
} else {
result.put("success", false);
result.put("message", "房间添加失败");
}
} else if ("update".equals(request.getAction())) {
Room existingRoom = roomMapper.selectById(request.getRoomId());
if (existingRoom == null) {
result.put("success", false);
result.put("message", "房间不存在");
return result;
}
existingRoom.setRoomName(request.getRoomName());
existingRoom.setRoomType(request.getRoomType());
existingRoom.setPrice(request.getPrice());
existingRoom.setDescription(request.getDescription());
existingRoom.setImages(request.getImages());
existingRoom.setUpdateTime(LocalDateTime.now());
int updateResult = roomMapper.updateById(existingRoom);
if (updateResult > 0) {
result.put("success", true);
result.put("message", "房间信息更新成功");
Dataset<Row> roomData = spark.read().format("jdbc")
.option("url", "jdbc:mysql://localhost:3306/minsu")
.option("dbtable", "room")
.option("user", "root")
.option("password", "123456")
.load();
roomData.groupBy("room_type").avg("price").show();
} else {
result.put("success", false);
result.put("message", "房间信息更新失败");
}
} else if ("delete".equals(request.getAction())) {
List<Booking> activeBookings = bookingMapper.selectByRoomIdAndStatus(request.getRoomId(), 1);
if (!activeBookings.isEmpty()) {
result.put("success", false);
result.put("message", "该房间存在有效预订,无法删除");
return result;
}
int deleteResult = roomMapper.deleteById(request.getRoomId());
if (deleteResult > 0) {
result.put("success", true);
result.put("message", "房间删除成功");
} else {
result.put("success", false);
result.put("message", "房间删除失败");
}
}
return result;
}
private String generateBookingNo() {
return "BK" + System.currentTimeMillis() + (int)(Math.random() * 1000);
}
}
基于SpringBoot的民宿预定管理系统文档展示
💖💖作者:计算机毕业设计小途 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目