基于Spring Boot的“暖暖小屋”咖啡馆管理系统的设计与实现 摘要本文详细阐述了基于Spring Boot框架的“暖暖小屋”咖啡馆管理系统的设计与实现过程。文章首先介绍了项目的背景意义与技术栈选型随后从需求分析、系统设计、数据库设计、核心功能实现等多个维度展开并提供了关键模块的代码示例。该系统旨在通过信息化手段提升咖啡馆的运营效率与顾客体验为同类小型餐饮企业的数字化转型提供参考。1. 项目背景与意义随着消费升级和互联网技术的普及传统咖啡馆的经营管理模式面临挑战。手工记录订单、库存管理混乱、顾客数据缺失等问题制约了服务效率与业务增长。“暖暖小屋”咖啡馆管理系统旨在解决以下痛点提升运营效率通过电子化点单、自动库存扣减、智能报表生成减少人工操作与错误。优化顾客体验支持会员管理、在线预订、历史订单查询增强顾客粘性。实现数据驱动决策收集销售、库存、客流数据为产品调整、营销活动提供数据支持。降低管理成本规范业务流程减少物料浪费与人力成本。本系统的实现对于中小型餐饮企业探索低成本、高效率的数字化转型路径具有积极的实践意义。2. 技术栈选型系统采用前后端分离的架构模式后端基于Spring Boot快速构建具体技术栈如下层次技术/框架说明后端框架Spring Boot 2.7.x快速构建、自动配置、内嵌TomcatWeb框架Spring MVC处理HTTP请求实现RESTful API数据持久层Spring Data JPA简化数据库操作基于Hibernate数据库MySQL 8.0关系型数据库存储业务数据缓存Redis缓存热点数据如菜单、会话信息安全框架Spring Security JWT实现身份认证与授权模板引擎Thymeleaf (可选)用于简单的后台管理页面渲染构建工具Maven项目依赖管理与构建前端示例Vue 3 Element Plus构建用户友好的管理后台与点单界面API文档Swagger/OpenAPI 3自动生成并可视化API接口文档3. 系统核心功能模块设计系统主要包含以下核心功能模块用户与权限管理区分管理员、店员、顾客角色实现登录、注册、权限控制。菜单与商品管理对咖啡、饮品、甜点等商品进行CRUD管理支持分类、上下架、价格调整。订单管理处理堂食、外卖、预约订单的全生命周期创建、支付、制作、完成。库存管理监控原材料咖啡豆、牛奶、糖浆等的入库、出库、库存预警。会员与营销管理会员积分、充值、优惠券发放与核销。数据统计与报表生成日/月销售报表、热销商品分析、客流统计等。4. 数据库设计核心表结构以下是几个核心业务表的设计-- 用户表 CREATE TABLE sys_user ( id bigint NOT NULL AUTO_INCREMENT, username varchar(50) NOT NULL COMMENT 用户名, password varchar(255) NOT NULL COMMENT 加密后的密码, nickname varchar(50) DEFAULT NULL COMMENT 昵称, phone varchar(20) DEFAULT NULL COMMENT 手机号, role varchar(20) NOT NULL DEFAULT CUSTOMER COMMENT 角色ADMIN, STAFF, CUSTOMER, status tinyint NOT NULL DEFAULT 1 COMMENT 状态0-禁用1-正常, create_time datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uk_username (username) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT系统用户表; -- 商品表 CREATE TABLE product ( id bigint NOT NULL AUTO_INCREMENT, category_id bigint NOT NULL COMMENT 分类ID, name varchar(100) NOT NULL COMMENT 商品名称, description text COMMENT 商品描述, price decimal(10,2) NOT NULL COMMENT 售价, cost decimal(10,2) DEFAULT NULL COMMENT 成本, image_url varchar(500) DEFAULT NULL COMMENT 图片URL, status tinyint NOT NULL DEFAULT 1 COMMENT 状态0-下架1-上架, stock_warning int DEFAULT 10 COMMENT 库存预警值, create_time datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT商品表; -- 订单表 CREATE TABLE order ( id varchar(32) NOT NULL COMMENT 订单号, user_id bigint DEFAULT NULL COMMENT 用户ID顾客, total_amount decimal(10,2) NOT NULL COMMENT 订单总金额, discount_amount decimal(10,2) DEFAULT 0.00 COMMENT 优惠金额, pay_amount decimal(10,2) NOT NULL COMMENT 实付金额, status varchar(20) NOT NULL DEFAULT UNPAID COMMENT 状态UNPAID, PAID, MAKING, COMPLETED, CANCELLED, type varchar(20) NOT NULL DEFAULT DINE_IN COMMENT 类型DINE_IN, TAKE_OUT, RESERVATION, remark varchar(500) DEFAULT NULL COMMENT 备注, create_time datetime DEFAULT CURRENT_TIMESTAMP, update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_user_id (user_id), KEY idx_create_time (create_time) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT订单主表;5. 核心代码实现示例5.1 Spring Boot 主启动类与配置package com.warmhouse.cafe; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; SpringBootApplication EnableJpaAuditing // 启用JPA审计自动填充创建/更新时间 EnableCaching // 启用缓存 public class WarmHouseCafeApplication { public static void main(String[] args) { SpringApplication.run(WarmHouseCafeApplication.class, args); } }5.2 商品服务层实现Servicepackage com.warmhouse.cafe.service.impl; import com.warmhouse.cafe.entity.Product; import com.warmhouse.cafe.repository.ProductRepository; import com.warmhouse.cafe.service.ProductService; import com.warmhouse.cafe.vo.ProductVO; import lombok.RequiredArgsConstructor; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.stream.Collectors; Service RequiredArgsConstructor public class ProductServiceImpl implements ProductService { private final ProductRepository productRepository; Override Cacheable(value products, key #categoryId - #status) public ListProductVO listByCategoryAndStatus(Long categoryId, Integer status) { ListProduct products productRepository.findByCategoryIdAndStatus(categoryId, status); return products.stream().map(this::convertToVO).collect(Collectors.toList()); } Override Transactional CacheEvict(value products, allEntries true) public ProductVO createProduct(ProductVO productVO) { Product product new Product(); // 属性拷贝可使用BeanUtils或MapStruct product.setName(productVO.getName()); product.setPrice(productVO.getPrice()); product.setCategoryId(productVO.getCategoryId()); product.setStatus(1); // 默认上架 Product saved productRepository.save(product); return convertToVO(saved); } Override Transactional CacheEvict(value products, allEntries true) public ProductVO updateProduct(Long id, ProductVO productVO) { Product product productRepository.findById(id) .orElseThrow(() - new RuntimeException(商品不存在)); product.setName(productVO.getName()); product.setPrice(productVO.getPrice()); // ... 更新其他字段 Product updated productRepository.save(product); return convertToVO(updated); } Override public PageProductVO pageProducts(Pageable pageable) { return productRepository.findAll(pageable).map(this::convertToVO); } private ProductVO convertToVO(Product product) { ProductVO vo new ProductVO(); vo.setId(product.getId()); vo.setName(product.getName()); vo.setPrice(product.getPrice()); vo.setCategoryId(product.getCategoryId()); vo.setStatus(product.getStatus()); return vo; } }5.3 订单创建REST API控制器Controllerpackage com.warmhouse.cafe.controller; import com.warmhouse.cafe.common.Result; import com.warmhouse.cafe.service.OrderService; import com.warmhouse.cafe.vo.OrderCreateVO; import com.warmhouse.cafe.vo.OrderVO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; RestController RequestMapping(/api/order) RequiredArgsConstructor Tag(name 订单管理, description 订单的创建、查询、状态变更等接口) public class OrderController { private final OrderService orderService; PostMapping(/create) Operation(summary 创建新订单) public ResultOrderVO createOrder(RequestBody Valid OrderCreateVO createVO) { // 实际业务中应从安全上下文获取当前用户ID Long userId getCurrentUserId(); OrderVO orderVO orderService.createOrder(userId, createVO); return Result.success(orderVO); } GetMapping(/{orderId}) Operation(summary 根据订单号查询订单详情) public ResultOrderVO getOrder(PathVariable String orderId) { OrderVO orderVO orderService.getOrderDetail(orderId); return Result.success(orderVO); } PostMapping(/{orderId}/pay) Operation(summary 模拟支付订单) public ResultString payOrder(PathVariable String orderId) { orderService.payOrder(orderId); return Result.success(支付成功); } // 获取当前登录用户ID示例 private Long getCurrentUserId() { // 从Spring Security上下文或JWT Token中解析 return 1L; // 模拟返回用户ID } }6. 总结与展望本文系统性地介绍了基于Spring Boot的“暖暖小屋”咖啡馆管理系统的设计与实现。通过采用成熟的技术栈与模块化设计系统实现了用户管理、商品管理、订单处理、库存监控等核心功能并提供了可运行的核心代码示例。该系统具备良好的可扩展性未来可进一步集成移动端小程序、智能推荐、物联网设备联动如智能咖啡机等功能以打造更智慧、更高效的咖啡馆运营生态。