基于 Spring Boot 的公司点餐微信小程序:技术栈、背景意义与核心代码
温馨提示本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片1. 项目背景与意义随着移动互联网和微信生态的快速发展微信小程序凭借其「即用即走、无需下载安装」的轻量化特点已成为企业数字化服务的重要入口。对于公司内部员工餐厅、园区食堂等场景传统的人工点餐、排队取餐方式存在效率低、易出错、高峰期拥堵等问题。本项目基于 Spring Boot 构建后端服务结合微信小程序作为前端载体设计并实现一套公司点餐系统。系统面向员工与食堂管理员两类角色提供菜品浏览、在线点餐、订单管理、菜品管理等核心功能旨在提升点餐效率、优化就餐体验、降低运营成本。从技术层面看该项目完整覆盖了前后端分离开发、RESTful API 设计、微信小程序授权登录、数据库设计与操作等主流技术栈具有较高的工程实践价值适合作为毕业设计或企业内训项目。2. 系统总体设计2.1 系统角色与功能员工端小程序微信授权登录、浏览菜品、按分类筛选、加入购物车、提交订单、查看订单状态、取消订单。管理端Web菜品管理增删改查、分类管理、订单管理接单、完成、统计、用户管理。2.2 系统架构系统采用前后端分离架构前端分为微信小程序端和管理后台 Web 端后端统一提供 RESTful API 服务。flowchart TD A[微信小程序端] --|HTTPS/JSON| B[Spring Boot 后端] C[管理后台 Web 端] --|HTTPS/JSON| B B -- D[(MySQL 数据库)] B -- E[Redis 缓存] B -- F[微信接口服务]2.3 技术栈层次技术选型说明后端框架Spring Boot 2.7快速构建 RESTful 服务持久层MyBatis-Plus简化数据库操作数据库MySQL 8.0业务数据存储缓存Redis会话缓存、热点数据安全认证Spring Security JWT接口鉴权前端小程序微信小程序原生框架员工点餐端前端管理端Vue 3 Element Plus后台管理界面接口文档Knife4jSwagger在线调试与文档3. 数据库设计系统核心数据表包括用户表、菜品分类表、菜品表、购物车表、订单表和订单明细表。以下为主要表结构设计。3.1 菜品表 dishCREATE TABLE dish ( id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT 菜品ID, name VARCHAR(64) NOT NULL COMMENT 菜品名称, category_id BIGINT NOT NULL COMMENT 分类ID, price DECIMAL(10,2) NOT NULL COMMENT 价格, image VARCHAR(255) COMMENT 图片URL, description VARCHAR(255) COMMENT 描述, status TINYINT DEFAULT 1 COMMENT 状态1上架 0下架, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) COMMENT 菜品表;3.2 订单表 ordersCREATE TABLE orders ( id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT 订单ID, order_no VARCHAR(32) NOT NULL UNIQUE COMMENT 订单编号, user_id BIGINT NOT NULL COMMENT 用户ID, total_amount DECIMAL(10,2) NOT NULL COMMENT 总金额, status TINYINT DEFAULT 0 COMMENT 状态0待接单 1制作中 2已完成 3已取消, remark VARCHAR(255) COMMENT 备注, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) COMMENT 订单表;4. 后端核心代码实现4.1 项目结构com.company.order ├── config // 配置类跨域、Knife4j、Redis ├── controller // 控制层 ├── service // 业务层 ├── mapper // 数据访问层 ├── entity // 实体类 ├── dto // 数据传输对象 ├── common // 通用返回结果、异常处理 └── utils // 工具类JWT、微信登录4.2 统一返回结果封装Data public class ResultT { private Integer code; // 1成功0失败 private String msg; private T data; public static lt;Tgt; Resultlt;Tgt; success(T data) { Resultlt;Tgt; r new Resultlt;gt;(); r.code 1; r.msg success; r.data data; return r; } public static lt;Tgt; Resultlt;Tgt; error(String msg) { Resultlt;Tgt; r new Resultlt;gt;(); r.code 0; r.msg msg; return r; } }4.3 微信登录接口小程序端调用wx.login获取临时 code后端通过 code 向微信接口换取 openid并签发 JWT 令牌。RestController RequestMapping(/api/user) Slf4j public class UserController { Autowired private UserService userService; PostMapping(/login) public Resultlt;LoginVOgt; login(RequestBody LoginDTO dto) { return Result.success(userService.wxLogin(dto.getCode())); } }Service Slf4j public class UserServiceImpl implements UserService { Autowired private UserMapper userMapper; Autowired private StringRedisTemplate redisTemplate; Override public LoginVO wxLogin(String code) { // 1. 调用微信接口换取 openid String url https://api.weixin.qq.com/sns/jscode2session?appid appId amp;secret appSecret amp;js_code code amp;grant_typeauthorization_code; String result HttpUtil.get(url); JSONObject json JSONUtil.parseObj(result); String openid json.getStr(openid); // 2. 查询或创建用户 User user userMapper.selectByOpenid(openid); if (user null) { user new User(); user.setOpenid(openid); user.setNickname(微信用户); userMapper.insert(user); } // 3. 生成 JWT 并缓存会话 String token JwtUtil.createToken(user.getId()); redisTemplate.opsForValue().set(token: token, String.valueOf(user.getId()), 7, TimeUnit.DAYS); LoginVO vo new LoginVO(); vo.setToken(token); vo.setUserInfo(user); return vo; } }4.4 提交订单核心逻辑Service Slf4j public class OrderServiceImpl implements OrderService { Autowired private OrderMapper orderMapper; Autowired private OrderDetailMapper orderDetailMapper; Autowired private CartMapper cartMapper; Override Transactional(rollbackFor Exception.class) public Long submitOrder(OrderSubmitDTO dto, Long userId) { // 1. 查询购物车中选中的菜品 Listlt;Cartgt; cartList cartMapper.selectCheckedByUserId(userId); if (cartList null || cartList.isEmpty()) { throw new BusinessException(购物车为空无法下单); } // 2. 计算总金额 BigDecimal total cartList.stream() .map(c -amp;gt; c.getPrice().multiply(BigDecimal.valueOf(c.getNumber()))) .reduce(BigDecimal.ZERO, BigDecimal::add); // 3. 创建订单 Orders order new Orders(); order.setOrderNo(OrderNoGenerator.generate()); order.setUserId(userId); order.setTotalAmount(total); order.setStatus(0); order.setRemark(dto.getRemark()); orderMapper.insert(order); // 4. 保存订单明细 for (Cart cart : cartList) { OrderDetail detail new OrderDetail(); detail.setOrderId(order.getId()); detail.setDishId(cart.getDishId()); detail.setDishName(cart.getDishName()); detail.setPrice(cart.getPrice()); detail.setNumber(cart.getNumber()); orderDetailMapper.insert(detail); } // 5. 清空购物车 cartMapper.deleteByUserId(userId); return order.getId(); } }5. 小程序端核心代码实现5.1 微信授权登录// pages/login/login.js const app getApp(); Page({ data: { loading: false }, onLoad() { this.wxLogin(); }, wxLogin() { this.setData({ loading: true }); wx.login({ success: (res) { if (res.code) { wx.request({ url: app.globalData.baseUrl /api/user/login, method: POST, data: { code: res.code }, success: (resp) { if (resp.data.code 1) { wx.setStorageSync(token, resp.data.data.token); wx.setStorageSync(userInfo, resp.data.data.userInfo); wx.switchTab({ url: /pages/index/index }); } else { wx.showToast({ title: 登录失败, icon: none }); } } }); } }, complete: () { this.setData({ loading: false }); } }); } });5.2 菜品列表与点餐// pages/order/order.js Page({ data: { categories: [], dishList: [], cartCount: 0, activeCategory: 0 }, onLoad() { this.loadCategories(); this.loadDishes(); }, loadCategories() { wx.request({ url: app.globalData.baseUrl /api/category/list, header: { token: wx.getStorageSync(token) }, success: (res) { if (res.data.code 1) { this.setData({ categories: res.data.data }); } } }); }, loadDishes() { wx.request({ url: app.globalData.baseUrl /api/dish/list, header: { token: wx.getStorageSync(token) }, success: (res) { if (res.data.code 1) { this.setData({ dishList: res.data.data }); } } }); }, addToCart(e) { const dish e.currentTarget.dataset.dish; wx.request({ url: app.globalData.baseUrl /api/cart/add, method: POST, header: { token: wx.getStorageSync(token) }, data: { dishId: dish.id, number: 1 }, success: (res) { if (res.data.code 1) { wx.showToast({ title: 已加入购物车, icon: success }); this.updateCartCount(); } } }); } });6. 系统部署与运行6.1 后端启动# 1. 初始化数据库 mysql -uroot -p sql/init.sql 2. 修改 application.yml 中的数据库和微信配置 3. 启动服务 mvn spring-boot:run6.2 小程序运行使用微信开发者工具导入miniprogram目录。在app.js中修改baseUrl为后端接口地址。在微信公众平台配置服务器域名HTTPS。7. 总结本项目基于 Spring Boot 与微信小程序实现了一套完整的公司点餐系统覆盖了用户登录、菜品浏览、购物车、订单管理等核心业务流程。后端采用分层架构接口设计规范并引入 Redis 缓存与 JWT 鉴权提升系统安全性与性能前端小程序交互流畅贴合移动端使用习惯。通过本项目的设计与开发可以系统掌握前后端分离开发、微信小程序生态、Spring Boot 工程化实践等关键技术具备较强的实用价值与学习意义。后续可进一步扩展评价系统、智能推荐、数据统计大屏等功能持续完善系统能力。