Spring Boot毕业设计:基于Android的餐饮点餐系统完整实现

49 阅读3分钟

一、个人简介

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

二、系统介绍

后端开发语言:Java+Python(两个版本都支持) 后端框架:Spring Boot(Spring+SpringMVC+Mybatis)+Django(两个版本都支持) 前端:uni-app+微信小程序+安卓 数据库:MySQL 系统架构:C/S + B/S 开发工具:IDEA(Java的)或者PyCharm(Python的)+微信小程序开发工具

《Spring Boot基于Android的餐饮点餐系统的设计与实现》是一套采用前后端分离架构的现代化餐饮管理解决方案。该系统以Spring Boot框架作为后端核心,整合SpringMVC和MyBatis实现业务逻辑处理和数据持久化操作,同时支持Django框架的Python版本实现,为开发者提供多样化的技术选择。前端采用uni-app跨平台开发框架,实现了微信小程序和Android原生应用的双端覆盖,确保用户能够在不同设备上获得一致的使用体验。系统构建了完整的餐饮服务生态,涵盖个人中心、用户管理、菜品分类管理、餐桌类型管理、餐桌信息管理、餐桌预约管理、菜品信息管理、点餐信息管理、留言反馈管理、美食论坛管理、论坛分类管理、举报记录管理等十二个核心功能模块。通过MySQL数据库进行数据存储,采用C/S和B/S混合架构模式,既满足了移动端用户的便捷操作需求,又为管理员提供了功能完善的后台管理界面,实现了从点餐下单到餐桌管理的全流程数字化操作。

三、视频解说

Spring Boot毕业设计:基于Android的餐饮点餐系统完整实现

四、部分功能展示

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

五、部分代码展示


import org.apache.spark.sql.SparkSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import java.util.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;

@RestController
@RequestMapping("/api")
public class RestaurantController {
    
    @Autowired
    private SparkSession sparkSession = SparkSession.builder().appName("RestaurantDataAnalysis").master("local[*]").getOrCreate();
    
    @PostMapping("/order/create")
    public Result createOrder(@RequestBody OrderRequest request) {
        Order order = new Order();
        order.setUserId(request.getUserId());
        order.setTableId(request.getTableId());
        order.setOrderTime(LocalDateTime.now());
        order.setStatus("待确认");
        BigDecimal totalAmount = BigDecimal.ZERO;
        List<OrderItem> orderItems = new ArrayList<>();
        for (OrderItemRequest itemRequest : request.getItems()) {
            Dish dish = dishMapper.selectById(itemRequest.getDishId());
            if (dish == null || dish.getStatus().equals("下架")) {
                return Result.error("菜品不存在或已下架");
            }
            OrderItem orderItem = new OrderItem();
            orderItem.setDishId(itemRequest.getDishId());
            orderItem.setQuantity(itemRequest.getQuantity());
            orderItem.setPrice(dish.getPrice());
            orderItem.setSubtotal(dish.getPrice().multiply(new BigDecimal(itemRequest.getQuantity())));
            orderItems.add(orderItem);
            totalAmount = totalAmount.add(orderItem.getSubtotal());
        }
        order.setTotalAmount(totalAmount);
        orderMapper.insert(order);
        for (OrderItem item : orderItems) {
            item.setOrderId(order.getId());
            orderItemMapper.insert(item);
        }
        Table table = tableMapper.selectById(request.getTableId());
        table.setStatus("已占用");
        table.setUpdateTime(LocalDateTime.now());
        tableMapper.updateById(table);
        sparkSession.sql("INSERT INTO order_analytics VALUES (" + order.getId() + ", '" + order.getOrderTime() + "', " + totalAmount + ")");
        return Result.success("订单创建成功", order);
    }
    
    @PostMapping("/reservation/book")
    public Result bookTable(@RequestBody ReservationRequest request) {
        QueryWrapper<Reservation> wrapper = new QueryWrapper<>();
        wrapper.eq("table_id", request.getTableId());
        wrapper.eq("reservation_date", request.getReservationDate());
        wrapper.between("reservation_time", request.getReservationTime().minusHours(1), request.getReservationTime().plusHours(1));
        wrapper.ne("status", "已取消");
        List<Reservation> existingReservations = reservationMapper.selectList(wrapper);
        if (!existingReservations.isEmpty()) {
            return Result.error("该时间段餐桌已被预约");
        }
        Table table = tableMapper.selectById(request.getTableId());
        if (table == null || !table.getStatus().equals("空闲")) {
            return Result.error("餐桌不可用");
        }
        if (request.getPersonCount() > table.getCapacity()) {
            return Result.error("预约人数超过餐桌容量");
        }
        Reservation reservation = new Reservation();
        reservation.setUserId(request.getUserId());
        reservation.setTableId(request.getTableId());
        reservation.setReservationDate(request.getReservationDate());
        reservation.setReservationTime(request.getReservationTime());
        reservation.setPersonCount(request.getPersonCount());
        reservation.setContactPhone(request.getContactPhone());
        reservation.setStatus("已预约");
        reservation.setCreateTime(LocalDateTime.now());
        reservationMapper.insert(reservation);
        table.setStatus("已预约");
        table.setUpdateTime(LocalDateTime.now());
        tableMapper.updateById(table);
        sparkSession.sql("INSERT INTO reservation_analytics VALUES (" + reservation.getId() + ", '" + reservation.getReservationDate() + "', " + request.getPersonCount() + ")");
        return Result.success("预约成功", reservation);
    }
    
    @PostMapping("/dish/manage")
    public Result manageDish(@RequestBody DishRequest request) {
        if (request.getId() == null) {
            QueryWrapper<Dish> wrapper = new QueryWrapper<>();
            wrapper.eq("name", request.getName());
            wrapper.eq("category_id", request.getCategoryId());
            Dish existingDish = dishMapper.selectOne(wrapper);
            if (existingDish != null) {
                return Result.error("同类别下已存在同名菜品");
            }
            DishCategory category = categoryMapper.selectById(request.getCategoryId());
            if (category == null || !category.getStatus().equals("启用")) {
                return Result.error("菜品分类不存在或已禁用");
            }
            Dish dish = new Dish();
            dish.setName(request.getName());
            dish.setDescription(request.getDescription());
            dish.setPrice(request.getPrice());
            dish.setCategoryId(request.getCategoryId());
            dish.setImage(request.getImage());
            dish.setStatus("上架");
            dish.setCreateTime(LocalDateTime.now());
            dish.setUpdateTime(LocalDateTime.now());
            dishMapper.insert(dish);
            sparkSession.sql("INSERT INTO dish_analytics VALUES (" + dish.getId() + ", '" + dish.getName() + "', " + dish.getPrice() + ", '" + dish.getCreateTime() + "')");
            return Result.success("菜品添加成功", dish);
        } else {
            Dish dish = dishMapper.selectById(request.getId());
            if (dish == null) {
                return Result.error("菜品不存在");
            }
            dish.setName(request.getName());
            dish.setDescription(request.getDescription());
            dish.setPrice(request.getPrice());
            dish.setImage(request.getImage());
            dish.setStatus(request.getStatus());
            dish.setUpdateTime(LocalDateTime.now());
            dishMapper.updateById(dish);
            sparkSession.sql("UPDATE dish_analytics SET price = " + dish.getPrice() + " WHERE dish_id = " + dish.getId());
            return Result.success("菜品更新成功", dish);
        }
    }
}

六、部分文档展示

在这里插入图片描述

七、END

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