基于SpringBoot+Vue的餐饮管理系统设计与实现

news2024/12/23 14:36:51

前言

💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗
👇🏻 精彩专栏 推荐订阅👇🏻
2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选题推荐✅

2023-2024年最值得选的Java毕业设计选题大全:500个热门选题推荐✅

Java精品实战案例《500套》

微信小程序项目精品案例《500套》

🌟文末获取源码+数据库🌟
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

系统功能设计

image-20230919233516502

具体实现

用户信息管理

如图5.1显示的就是用户信息管理页面,此页面提供给管理员的功能有:用户信息的查询管理,可以删除用户信息、修改用户信息、新增用户信息,

还进行了对用户名称的模糊查询的条件

img

图5.1 用户信息管理页面

菜品信息管理

如图5.2显示的就是菜品信息管理页面,此页面提供给管理员的功能有:查看已发布的菜品信息数据,修改菜品信息,菜品信息作废,即可删除,还进行了对菜品信息名称的模糊查询 菜品信息信息的类型查询等等一些条件。

img

图5.2 菜品信息管理页面

菜品评论管理

如图5.3显示的就是菜品评论管理页面,此页面提供给管理员的功能有:根据菜品评论进行条件查询,还可以对菜品评论进行新增、修改、查询操作等等。

img

图5.3 菜品评论管理页面

公告信息管理

如图5.4显示的就是公告信息管理页面,此页面提供给管理员的功能有:根据公告信息进行新增、修改、查询操作等等。

img

图5.4 公告信息管理页面

为什么选择我

自己的网站

网站上传的项目均为博主自己收集和开发的,质量都可以得到保障,适合自己懂一点程序开发的同学使用!

自己的小程序(小蔡coding)

为了方便同学们使用,我开发了小程序版的,名字叫小蔡coding。同学们可以通过小程序快速搜索和定位到自己想要的程序

有保障的售后

福利

每推荐一位同学,推荐费一位100!
a51e38c5bf9f17df58ffdbbe74c16c44_720

代码参考

@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
   UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
   if(user==null || !user.getPassword().equals(password)) {
      return R.error("账号或密码不正确");
   }
   String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
   return R.ok().put("token", token);
}

	@Override
	public String generateToken(Long userid,String username, String tableName, String role) {
		TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>().eq("userid", userid).eq("role", role));
		String token = CommonUtil.getRandomString(32);
		Calendar cal = Calendar.getInstance();   
    	cal.setTime(new Date());   
    	cal.add(Calendar.HOUR_OF_DAY, 1);
		if(tokenEntity!=null) {
			tokenEntity.setToken(token);
			tokenEntity.setExpiratedtime(cal.getTime());
			this.updateById(tokenEntity);
		} else {
			this.insert(new TokenEntity(userid,username, tableName, role, token, cal.getTime()));
		}
		return token;
	}



/**
 * 权限(Token)验证
 */
@Component
public class AuthorizationInterceptor implements HandlerInterceptor {

    public static final String LOGIN_TOKEN_KEY = "Token";

    @Autowired
    private TokenService tokenService;
    
	@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

		//支持跨域请求
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization");
        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
	// 跨域时会首先发送一个OPTIONS请求,这里我们给OPTIONS请求直接返回正常状态
	if (request.getMethod().equals(RequestMethod.OPTIONS.name())) {
        	response.setStatus(HttpStatus.OK.value());
            return false;
        }
        
        IgnoreAuth annotation;
        if (handler instanceof HandlerMethod) {
            annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);
        } else {
            return true;
        }

        //从header中获取token
        String token = request.getHeader(LOGIN_TOKEN_KEY);
        
        /**
         * 不需要验证权限的方法直接放过
         */
        if(annotation!=null) {
        	return true;
        }
        
        TokenEntity tokenEntity = null;
        if(StringUtils.isNotBlank(token)) {
        	tokenEntity = tokenService.getTokenEntity(token);
        }
        
        if(tokenEntity != null) {
        	request.getSession().setAttribute("userId", tokenEntity.getUserid());
        	request.getSession().setAttribute("role", tokenEntity.getRole());
        	request.getSession().setAttribute("tableName", tokenEntity.getTablename());
        	request.getSession().setAttribute("username", tokenEntity.getUsername());
        	return true;
        }
        
		PrintWriter writer = null;
		response.setCharacterEncoding("UTF-8");
		response.setContentType("application/json; charset=utf-8");
		try {
		    writer = response.getWriter();
		    writer.print(JSONObject.toJSONString(R.error(401, "请先登录")));
		} finally {
		    if(writer != null){
		        writer.close();
		    }
		}
//				throw new EIException("请先登录", 401);
		return false;
    }
}

论文参考

在这里插入图片描述

源码获取

文章下方名片联系我即可~
大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻
精彩专栏推荐订阅:在下方专栏👇🏻
Java精品实战案例《500套》
微信小程序项目精品案例《500套》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1024778.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亚马逊云科技 Amazon Lightsail :一种在云服务器上运行容器的简单方法

当向开发人员介绍亚马逊云科技云服务时&#xff0c;通常会花一点时间来介绍并演示 Amazon Lightsail 。它是迄今为止开始使用亚马逊云科技的最简单方法。使用它&#xff0c;您在几分钟内即可在自己的虚拟服务器上运行您的应用程序。而后增加了在 Amazon Lightsail 上部署基于容…

[echarts] 两侧堆叠柱状图

http://echarts.zhangmuchen.top/#/detail?cidxOQSXIOQiK const myData [福田区, 罗湖区, 南山区, 盐田区, 宝安区, 龙岗区, 坪山区, 龙华区, 光明区, 大鹏区]; // 全彩屏&#xff0c;双基色屏&#xff0c;简易屏&#xff0c;条形屏 const offLine [[20, 40, 60, 60, 10, 2…

C语言 coding style

头文件 The #define Guard #define的保护文件的唯一性&#xff0c;防止被多重包含 格式 : <PROJECT>_< FILE>_H_ PROJECT : XS FILE : MV_CTR 头文件的包含顺序 C System FilesOther LibrariesUser LibraryConditional include 作用域 局部变量 -变量定义时需要…

Vuex状态管理最佳实践

文章目录 单一状态树使用模块使用常量定义Mutation类型使用Actions处理异步操作使用Getters计算属性严格模式分模块管理Getter、Mutation和Action&#xff1a;注释和文档&#xff1a;Vue Devtools ✍创作者&#xff1a;全栈弄潮儿 &#x1f3e1; 个人主页&#xff1a; 全栈弄潮…

计算机视觉与深度学习-卷积神经网络-纹理表示卷积神经网络-纹理表示-[北邮鲁鹏]

目录标题 参考文章纹理定义纹理的分类规则纹理随机纹理 纹理的表示方法基于卷积核组思路什么卷积核组卷积核类型&#xff08;边缘、条形、点状&#xff09;卷积核尺度&#xff08;3~6个尺度&#xff09;卷积核的方向卷积核组的设计 表示步骤步骤一&#xff1a;设计卷积核组。步…

软件测试/测试开发丨利用ChatGPT自动生成测试用例思维导图

点此获取更多相关资料 简介 思维导图是一种用图形方式表示思维和概念之间关系的工具&#xff1a; 有些公司会使用思维导图编写测试用例&#xff0c;这样做的优点是&#xff1a; 1.可视化和结构化。 2.易于理解&#xff0c;提高效率。 而 ChatGPT 是无法直接生成 xmind 格式…

Git学习笔记10

代码更新方法&#xff1a; 蓝绿部署&#xff1a; 蓝绿部署&#xff0c;英文名&#xff1a;Blue Green Deployment&#xff0c;是一种可以保证系统在不间断提供服务的情况下上线代码的部署方式。 如何保证系统不间断提供服务呢&#xff1f; 蓝绿部署的模型中包含两套集群。 …

ElementPlus·表单验证

表单验证作用&#xff1a;省去一些错误的请求提交&#xff0c;节省后端接口压力。简单配置、自定义配置&#xff0c;最后进行统一校验工作。 如何校验 及 校验步骤&#xff1a; 简单配置 <script setup> // 表单对象 const form ref({对象: 值 })// 规则对象 const ru…

21. 概率与统计 - 数学期望、统计描述分布

文章目录 数学期望方差标准差协方差二项分布高斯分布中心极限定理泊松分布Hi, 你好。我是茶桁。 在上一节中,我们最后有谈到随机变量。在概率论几统计学中,描述一个随机变量的离散程度的有方差、标准差等等。那么在这节课中,我们就来好好看看这些概念。 不过在这之前呢,我…

【音视频】FLV封装格式

基本概念 文件头(Header)文件体(Body) flv文件头 主要是看signture和typeflags flv文件体 重点&#xff1a;Tag包数据 Tag结构详细说明 注意&#xff1a; 每个Tag的头字段DataSize只是该Tag下data部分的大小&#xff0c;不包括Tag的header部分的大小 音频 AudioTag Data 所在…

若依+lodop+jasperreports+ireport 设计打印票据格式(二)

若依lodopjasperreportsireport 设计打印票据格式&#xff08;二&#xff09; 使用Field绑定Java传入数据 设计页表页数和当前页号 ![在这里插入图片描述](https://img-blog.csdnimg.cn/7091542bd5954845b8fcf39d71d4c9e4.png#pic_cente![在这里插入图片描述](https://img-bl…

[Vue] 绑定下拉菜单

写在前面 同学们&#xff0c;今天的天气很是不错&#xff0c;我们之前进行了复选框的绑定&#xff0c;这次来看看下拉菜单的绑定吧&#xff0c;因为要赶这个创作进度&#xff0c;真的只有再水一篇文章了。大家就当是饭后甜点看看就行。 苏子云 荷尽已无擎雨盖&#xff0c;菊残…

红海云荣膺「2023智享会人力资源技术供应商价值大奖」

9月19日&#xff0c;由中国高端人力资源会员组织智享会&#xff08;HREC&#xff09;主办的“2023人力资源技术供应商价值大奖”颁奖典礼隆重举行&#xff0c;红海云凭借卓越的技术实力与品牌口碑荣膺“2023 HCM系统-本地部署HR臻选供应商”。 智享会“价值大奖”系列评选被称…

基于STM32+华为云IOT设计的智能垃圾桶

一、项目介绍 在商业街、小吃街和景区等人流密集的场所&#xff0c;垃圾桶的及时清理对于提供良好的游客体验至关重要。然而&#xff0c;传统的垃圾桶清理方式通常是定时或定期进行&#xff0c;无法根据实际情况进行及时响应&#xff0c;导致垃圾桶溢满&#xff0c;影响环境卫…

钉钉stream机器人-实操详细教程

支持事件订阅、机器人收消息、卡片回调等功能 优点&#xff1a; 配置简单&#xff0c;不依赖也不需要暴露公网IP&#xff0c;无需向公网开放端口 github官方链接&#xff1a;GitHub - open-dingtalk/dingtalk-stream-sdk-python: Python SDK for DingTalk Stream Mode API, Co…

低噪声 256 细分微步进电机驱动MS35774/MS35774A(汽车应用级别)

MS35774/MS35774A 是一款高精度、低噪声的两相步进 电机驱动芯片&#xff0c;芯片内置功率 MOSFET&#xff0c;长时间工作的平均电 流可以达到 1.4A&#xff0c;峰值电流 2A。芯片集成了过温保护、欠压 保护、过流保护、短地保护、短电源保护功能。 主要特点 ◼ 2 相步进电机…

excel subtotal 函数(分类汇总)

函数说明 返回列表中的分类汇总。 语法 SUBTOTAL(function_num,ref1,[ref2],...) SUBTOTAL 函数语法具有以下参数&#xff1a; Function_num 必需。 数字 1-11 或 101-111&#xff0c;用于指定要为分类汇总使用的函数。 如果使用 1-11&#xff0c;将包括手动隐藏的行&…

glTF模型骨骼动画

推荐&#xff1a;使用 NSDT场景编辑器快速搭建3D应用场景 本文详细演示了风车动画的制作过程&#xff1a; 当然&#xff0c;这非常容易硬编码&#xff08;有两个对象&#xff0c;一个静态的&#xff0c;一个旋转的&#xff09;。但是&#xff0c;我计划稍后添加更多动画&#…

GIF动图怎么变成jpg动图?一键分解GIF动画

GIF格式图片怎么转换成jpg格式图片&#xff1f;在日常生活中jpg、png转GIF格式非常的常见&#xff0c;那么gif转换成jpg格式应该怎么操作呢&#xff1f;很简单&#xff0c;给大家分享一款gif动态图片制作&#xff08;https://www.gif.cn/giffenjie&#xff09;工具&#xff0c;…

51单片机项目(12)——基于51单片机的智能台灯设计

本次设计的功能如下&#xff1a; 首先使用PCF8591芯片&#xff0c;实现了AD DA转换&#xff0c;AD采集的是光敏电阻的信息&#xff0c;光照强度越强&#xff0c;电压越小&#xff0c;AD采集到的数值越小。同时将AD采集的数字量作为DA输出时的输入量&#xff0c;模拟输出端接了…