当前位置: 首页 > news >正文

基于SpringBoot的网上点餐系统

1. 项目简介

项目名称:网上点餐系统
项目描述:基于Spring Boot和Vue.js开发的美食店管理与在线点餐平台,支持用户浏览美食店、查看菜单、下单支付、评价美食等功能,同时提供商家管理和后台运营模块。
核心功能

  • 多角色管理:管理员、用户、美食店商家
  • 美食展示与分类管理
  • 在线点餐与订单处理
  • 用户评价与收藏功能
  • 后台数据管理与系统配置

2. 技术栈

2.1 后端技术

  • 核心框架:Spring Boot 2.2.2.RELEASE
  • ORM框架:MyBatis + MyBatis-Plus 2.1.1
  • 安全框架:Apache Shiro 1.3.2
  • 数据库:MySQL 5.7
  • API文档:未明确提及
  • 其他组件:
    • FastJson 1.2.8(JSON处理)
    • Hutool 4.0.12(工具类库)
    • Shiro 1.3.2(权限管理)

2.2 前端技术

  • 核心框架:Vue.js
  • UI组件库:Element UI
  • 路由管理:Vue Router
  • HTTP客户端:Axios
  • 图表库:ECharts

2.3 开发与部署工具

  • 项目构建:Maven
  • 服务器:Tomcat(内嵌)
  • 开发环境:idea JDK 1.8

3. 详细介绍

3.1 系统架构

系统采用前后端分离架构:

  • 前端:单页应用(SPA),通过Vue Router实现路由管理
  • 后端:RESTful API,基于Spring Boot控制器提供接口服务
  • 数据层:MyBatis映射数据库操作,支持事务管理

3.2 功能模块划分

3.2.1 用户模块
  • 用户注册与登录(未实现前端登录,需后台添加)
  • 个人信息管理
  • 订单历史查询
  • 美食收藏功能
3.2.2 美食店模块
  • 店铺信息管理(基本信息、联系方式、招牌美食)
  • 菜单管理(添加、修改、删除美食信息)
  • 订单处理(查看订单、确认配送、处理评价)
3.2.3 订单模块
  • 在线点餐流程
  • 订单状态跟踪
  • 支付集成(模拟支付功能)
3.2.4 评价模块
  • 用户评价提交
  • 评分系统
  • 评价管理与展示

3.3 数据库设计

核心表结构

  • meishidian:美食店信息表
  • meishixinxi:美食信息表
  • meishidingdan:订单表
  • meishipingjia:评价表
  • yonghu:用户表
  • config:系统配置表

4. 部分代码

4.1 数据库设计代码

4.1.1 美食店表(meishidian)

sql

CREATE TABLE `meishidian` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`dianpuzhanghao` varchar(200) NOT NULL COMMENT '店铺账号',`mima` varchar(200) NOT NULL COMMENT '密码',`dianpumingcheng` varchar(200) NOT NULL COMMENT '店铺名称',`zhaopian` varchar(200) DEFAULT NULL COMMENT '照片',`lianxidianhua` varchar(200) DEFAULT NULL COMMENT '联系电话',`dianpujieshao` longtext COMMENT '店铺介绍',`dianpudizhi` varchar(200) DEFAULT NULL COMMENT '店铺地址',`zhaopaimeishi` longtext COMMENT '招牌美食',`lianxiren` varchar(200) DEFAULT NULL COMMENT '联系人',PRIMARY KEY (`id`),UNIQUE KEY `dianpuzhanghao` (`dianpuzhanghao`)
) ENGINE=InnoDB AUTO_INCREMENT=1615534171320 DEFAULT CHARSET=utf8 COMMENT='美食店';
4.1.2 订单表(meishidingdan)

sql

CREATE TABLE `meishidingdan` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`dingdanbianhao` varchar(200) DEFAULT NULL COMMENT '订单编号',`meishimingcheng` varchar(200) DEFAULT NULL COMMENT '美食名称',`dianpuzhanghao` varchar(200) DEFAULT NULL COMMENT '店铺账号',`dianpumingcheng` varchar(200) DEFAULT NULL COMMENT '店铺名称',`lianxidianhua` varchar(200) DEFAULT NULL COMMENT '联系电话',`jiage` varchar(200) DEFAULT NULL COMMENT '价格',`goumaishuliang` int(11) NOT NULL COMMENT '购买数量',`zongjiage` varchar(200) DEFAULT NULL COMMENT '总价格',`yonghuzhanghao` varchar(200) DEFAULT NULL COMMENT '用户账号',`yonghuxingming` varchar(200) DEFAULT NULL COMMENT '用户姓名',`yonghushouji` varchar(200) DEFAULT NULL COMMENT '用户手机',`peisongdizhi` varchar(200) NOT NULL COMMENT '配送地址',`xiadanshijian` datetime DEFAULT NULL COMMENT '下单时间',`sfsh` varchar(200) DEFAULT '否' COMMENT '是否审核',`shhf` longtext COMMENT '审核回复',`ispay` varchar(200) DEFAULT '未支付' COMMENT '是否支付',PRIMARY KEY (`id`),UNIQUE KEY `dingdanbianhao` (`dingdanbianhao`)
) ENGINE=InnoDB AUTO_INCREMENT=1615534362236 DEFAULT CHARSET=utf8 COMMENT='美食订单';

4.2 后端配置代码

4.2.1 Maven依赖配置(pom.xml)

xml

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.1</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.3.2</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus</artifactId><version>2.3</version></dependency><!-- 其他依赖... -->
</dependencies>

4.3 前端代码示例

4.3.1 路由配置(router-static.js)

javascript

import Vue from 'vue';
import VueRouter from 'vue-router'
Vue.use(VueRouter);// 导入组件
import Index from '@/views/index'
import Home from '@/views/home'
import Login from '@/views/login'
import NotFound from '@/views/404'
import meishifenlei from '@/views/modules/meishifenlei/list'
import news from '@/views/modules/news/list'
// 其他组件导入...// 路由配置
const routes = [{path: '/index', name: '首页', component: Index, children: [{ path: '/', name: 'home', component: Home },{ path: '/meishifenlei', name: '美食分类', component: meishifenlei },{ path: '/news', name: '美食资讯', component: news },// 其他路由...]},{ path: '/login', name: 'login', component: Login },{ path: '/', redirect: '/index' },{ path: '*', component: NotFound }
]const router = new VueRouter({mode: 'hash',routes
})export default router;
4.3.2 菜单配置(menu.js)

javascript

const menu = {list() {return [{"backMenu": [{"child": [{"buttons": ["新增","查看","修改","删除"],"menu":"用户","menuJump":"列表","tableName":"yonghu"}],"menu": "用户管理"},{"child": [{"buttons": ["新增","查看","修改","删除"],"menu":"美食店","menuJump":"列表","tableName":"meishidian"}],"menu": "美食店管理"},// 其他后台菜单...],"frontMenu": [{"child": [{"buttons": ["查看"],"menu":"美食店列表","menuJump":"列表","tableName":"meishidian"}],"menu": "美食店模块"},// 其他前台菜单...],"roleName": "管理员","tableName": "users"},// 其他角色菜单...]}
}
export default menu;

4. 部分代码(40%)

4.4 后端业务逻辑代码示例

4.4.1 订单处理Controller

java

@RestController
@RequestMapping("/meishidingdan")
public class MeishidingdanController {@Autowiredprivate MeishidingdanService meishidingdanService;@Autowiredprivate TokenService tokenService;/*** 新增订单*/@PostMapping("/add")public R add(@RequestBody MeishidingdanEntity meishidingdan, HttpServletRequest request) {// 获取当前用户信息String token = request.getHeader("Token");UserEntity user = tokenService.getUserEntity(token);// 设置订单基本信息meishidingdan.setYonghuzhanghao(user.getUsername());meishidingdan.setYonghuxingming(user.getRealname());meishidingdan.setYonghushouji(user.getMobile());meishidingdan.setDingdanbianhao(UUID.randomUUID().toString());meishidingdan.setXiadanshijian(new Date());meishidingdan.setSfsh("否");meishidingdan.setIspay("未支付");// 计算总价格BigDecimal zongjiage = new BigDecimal(meishidingdan.getJiage()).multiply(new BigDecimal(meishidingdan.getGoumaishuliang()));meishidingdan.setZongjiage(zongjiage.toString());meishidingdanService.insert(meishidingdan);return R.ok();}/*** 订单支付*/@PostMapping("/pay")public R pay(@RequestBody Map<String, String> params) {String orderId = params.get("orderId");MeishidingdanEntity order = meishidingdanService.selectById(orderId);if (order == null) {return R.error("订单不存在");}if ("已支付".equals(order.getIspay())) {return R.error("订单已支付");}// 模拟支付流程order.setIspay("已支付");meishidingdanService.updateById(order);return R.ok();}/*** 订单列表查询*/@GetMapping("/list")public R list(@RequestParam Map<String, Object> params, HttpServletRequest request) {// 获取当前用户信息String token = request.getHeader("Token");UserEntity user = tokenService.getUserEntity(token);// 根据用户角色查询不同订单if ("用户".equals(user.getRole())) {params.put("yonghuzhanghao", user.getUsername());} else if ("美食店".equals(user.getRole())) {params.put("dianpuzhanghao", user.getUsername());}PageUtils page = meishidingdanService.queryPage(params);return R.ok().put("data", page);}
}
4.4.2 美食信息Service实现

java

@Service("meishixinxiService")
public class MeishixinxiServiceImpl extends ServiceImpl<MeishixinxiDao, MeishixinxiEntity> implements MeishixinxiService {@Overridepublic PageUtils queryPage(Map<String, Object> params) {QueryWrapper<MeishixinxiEntity> queryWrapper = new QueryWrapper<>();// 美食分类筛选if(params.get("meishifenlei") != null && !"".equals(params.get("meishifenlei"))) {queryWrapper.eq("meishifenlei", params.get("meishifenlei"));}// 关键词搜索if(params.get("keyword") != null && !"".equals(params.get("keyword"))) {queryWrapper.and(qw -> {qw.like("meishimingcheng", params.get("keyword")).or().like("xiangqing", params.get("keyword")).or().like("kouwei", params.get("keyword"));});}// 按点击量排序queryWrapper.orderByDesc("clicknum");IPage<MeishixinxiEntity> page = this.page(new Query<MeishixinxiEntity>().getPage(params),queryWrapper);return new PageUtils(page);}/*** 记录点击量*/@Overridepublic void updateClickNum(Long id) {MeishixinxiEntity entity = this.getById(id);if(entity != null) {entity.setClicknum(entity.getClicknum() + 1);entity.setClicktime(new Date());this.updateById(entity);}}
}

5. 部分截图

在这里插入图片描述

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

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

6. 项目总结

6.1 系统功能总结

本网上点餐系统实现了从美食浏览到订单完成的全流程管理,主要功能包括:

  1. 多角色管理:支持管理员、用户、美食店商家三种角色,各角色拥有不同的操作权限和功能模块。
  2. 完整的点餐流程:用户可浏览美食店、查看菜单、加入购物车、下单支付、查看订单状态、评价美食等。
  3. 商家管理功能:商家可管理店铺信息、菜品信息、处理订单、查看评价等。
  4. 后台管理系统:管理员可管理用户、商家、菜品分类、订单、评价等系统数据。
  5. 数据统计与分析:系统提供点击量统计、订单数据分析等基础数据功能。

6.2 技术架构评价

优势:
  1. 前后端分离架构:采用Spring Boot后端和Vue.js前端分离开发,提高了开发效率和系统可维护性。
  2. 成熟的技术栈:选用Spring Boot、MyBatis、Vue.js等成熟框架,降低了开发难度,提高了系统稳定性。
  3. 安全机制:集成Shiro权限控制,实现了基于角色的访问控制,保障系统安全。
  4. 可扩展性设计:采用模块化开发,各功能模块低耦合,便于后续功能扩展。

6.3 项目亮点

  1. 完整的业务流程:实现了从浏览到评价的闭环流程,满足用户和商家的核心需求。
  2. 多角色权限控制:通过Shiro和自定义权限管理,实现了精细化的权限控制。
  3. 响应式设计:前端页面采用响应式布局,适配不同设备访问。
  4. 代码规范:项目代码组织结构清晰,命名规范,便于维护和扩展。

6.4 改进方向

  1. 性能优化

    • 引入Redis缓存热门数据
    • 优化数据库查询,添加适当索引
    • 实现前端资源懒加载
  2. 功能增强

    • 集成第三方支付接口(微信支付、支付宝)
    • 添加消息推送功能(订单状态变更通知)
    • 实现优惠券、积分等营销功能
  3. 用户体验优化

    • 优化前端交互,减少加载等待时间
    • 添加智能推荐功能,根据用户偏好推荐美食
    • 完善移动端适配,提升移动端用户体验
  4. 系统监控

    • 添加日志系统,便于问题排查
    • 实现系统性能监控,及时发现并解决问题

6.5 总结

本网上点餐系统基于Spring Boot和Vue.js技术栈,实现了点餐平台的核心功能,系统架构合理,功能完善,能够满足中小规模餐饮企业的线上点餐需求。
通过持续迭代优化,本系统有望成为功能完善、性能稳定、用户体验优良的在线点餐解决方案,为餐饮企业数字化转型提供有力支持。

在线演示:
后端:http://springboott01gx.xiaobias.com/springboott01gx/admin/dist/index.html
前端:http://springboott01gx.xiaobias.com/springboott01gx/front/index.html
管理员:abo/abo
用户:用户1/123456、用户2/123456
美食店:美食店1/123456、美食店2/123456
资源:https://fifteen.xiaobias.com/source/42

http://www.dtcms.com/a/350960.html

相关文章:

  • OpenTenBase核心技术解密:突破OLTP与OLAP边界的分布式数据库革新
  • Flask模块如何使用
  • 浅谈技术顾问的转型困境
  • Web前端开发基础
  • windows 下 使用C++ 集成 zenoh
  • ArcGIS学习-9 ArcGIS查询操作
  • vLLM轻松通
  • ArcGIS学习-10 空间连接和矢量分析
  • 百度IOS客户端岗位--面试真题分析
  • 5G 三卡图传终端:应急救援管理的 “可视化指挥核心”
  • PostgreSQL诊断系列(3/6):性能瓶颈定位——缓冲池、I/O与临时文件
  • 【Linux系统】线程概念
  • 【R代码分析】甲烷排放绘制代码-参考论文
  • 【云原生】CentOS安装Kubernetes+Jenkins
  • RAW API 的 UDP 总结1
  • Android Glide常见问题解决方案:从图片加载到内存优化
  • [在实践中学习] 中间件理论和方法--Redis
  • 【JavaEE】了解volatile和wait、notify(三)
  • 08-引入AI编程插件(TRAE)编写单元测试并检查覆盖率
  • Cloudflare 推出 GenAI 安全工具,守护企业数据
  • 科普 | 5G支持的WWC架构是个啥(1)?
  • android 改机系列之-虚拟摄像头-替换相机预览画面
  • excel导出,多列合并表头
  • 运行node18报错
  • 【JVM】类加载器都有哪些?
  • ChromaDB向量数据库Python教程:从入门到实战完整指南(含游戏资源管理系统案例
  • Java大厂面试实战:从Spring Boot到微服务架构的全链路技术拆解
  • 计算机视觉:从 “看见” 到 “理解”,解锁机器感知世界的密码
  • Windows 命令行:mkdir 命令
  • 【配置】CurSor使用Claude 4.0如何解除地域限制