首页 > 其他分享 >基于SpringBoot+Vue实现餐厅后勤管理系统

基于SpringBoot+Vue实现餐厅后勤管理系统

时间:2024-10-01 09:48:03浏览次数:9  
标签:Vue SpringBoot 管理系统 new EntityWrapper params newsService import news

作者主页:编程千纸鹤

作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待与各位高校教师、企业讲师以及同行交流合作

主要内容:Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能与大数据、单片机开发、物联网设计与开发设计、简历模板、学习资料、面试题库、技术互助、就业指导等

业务范围:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文降重、长期答辩答疑辅导、腾讯会议一对一专业讲解辅导答辩、模拟答辩演练、和理解代码逻辑思路等

收藏点赞不迷路  关注作者有好处

文末获取源码 

项目编号:BS-XX-286

一,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

二,项目简介

随着生活质量的快速发展,餐饮服务的效率和质量日益受到关注。当前餐厅后勤管理面临数据收集分散、处理效率低和信息可视化不足等挑战,现有系统往往难以满足快速变化的服务需求和高效的资源调配。本研究旨在设计并实现一个基于SpringBoot框架的餐厅后勤管理系统,以改善数据处理流程和提升服务质量。

本系统采用SpringBoot微服务架构,结合MySQL数据库和MyBatisPlus持久层框架,前端使用VUE.js构建用户界面。系统功能涵盖用户管理、员工管理、食材信息管理、考勤与请假信息管理等模块,支持用户在线下单、查看订单及管理个人收藏。通过集成化设计,该系统实现了对餐厅后勤信息的高效管理和动态调度,优化了资源分配,提高了运营效率和顾客满意度。

本论文详细阐述了基于SpringBoot的餐厅后勤管理系统的设计与实现过程,分析了现有系统的局限性,并展示了新系统如何通过技术创新解决这些问题,为高校餐饮服务提供了一套高效、可靠的解决方案。

管理员功能说明:

管理员作为核心决策者,需具备全面的员工管理功能,这包括员工信息的添加、编辑和查询,确保人力资源的有效配置。用户管理则涉及对前台用户的权限控制和账户管理,保障系统的安全性和秩序。

考勤管理和请假管理对于维护工作纪律至关重要,简化流程,提高工作效率。食材分类管理和菜单分类管理有助于优化库存和菜品的组织,便于查找和更新,提升运营效率。送餐信息管理则是连接餐厅与客户的重要环节,实时跟踪和更新送餐状态,保证服务质量。

采购食材管理至食材出入库管理涉及到供应链的精细把控,通过系统化的流程,降低损耗,节约成本。系统管理模块包含了公告发布、公司信息展示和轮播图管理等功能。

个人中心部分,图形化报表统计对于管理员来说是至关重要的决策支持工具,通过订单销售统计和营业额统计[9]。

后勤管理人员功能说明:

个人信息管理:后勤人员需要一个易于使用的平台来管理个人资料,包括姓名、联系方式和工作信息。

菜单管理:系统应支持实时更新和维护菜单内容,包括菜品信息、价格和图片,方便厨师和顾客查阅。

食材管理:后勤人员需要能够追踪食材的库存情况,包括采购、入库、出库等操作。

采购管理:系统需集成在线采购功能,便于后勤人员查询供应商信息,对比价格,进行批量下单,并跟踪订单状态。

点菜订单管理:后勤人员需要处理来自餐厅的点菜订单,包括接收、分配和跟踪订单完成情况。

考勤管理:系统应具备考勤记录功能,记录后勤人员的工作时间。

请假管理:后勤人员可以通过系统提交请假申请,查看请假信息以及状态。

菜品制作管理:后勤人员需能够查看和更新菜品制作流程。

采购食材管理:系统需支持食材采购计划和历史记录,帮助后勤人员做出明智的决策,避免浪费。

食材入库与出库管理:通过条形码或RFID技术,实时记录食材的进出库情况。

请假与考勤管理:系统需具备请假申请、审批、打卡等功能,确保人事管理的规范化。

考勤与考勤数据分析:提供可视化的考勤统计,以便管理层了解员工出勤状况,优化排班。

消费者功能说明:

菜单浏览功能是用户核心需求之一,通过分类阅览商家发布的实时菜单,用户能够轻松了解并选择菜品。系统需集成MyBatisPlus的数据检索和展示功能,以高效呈现菜单信息。

在线点菜功能区别于传统的商城模式,用户可以直接下单选择菜品,生成点菜订单,这依赖于后端的订单处理逻辑和前端的交互设计。系统需要支持Ajax异步请求,实现实时更新。管理模块允许用户跟踪订单状态,包括支付状态和历史订单记录。公告查看功能提供餐厅最新的通知和活动信息。用户可以对菜品进行评价实现用户评论功能,增强社区互动。我的收藏功能则允许用户保存感兴趣的菜品,

三,系统展示

后台管理

四,核心代码展示

package com.controller;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;

import com.entity.NewsEntity;
import com.entity.view.NewsView;

import com.service.NewsService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MPUtil;
import com.utils.MapUtils;
import com.utils.CommonUtil;
import java.io.IOException;
import com.service.StoreupService;
import com.entity.StoreupEntity;

/**
 * 公告信息
 * 后端接口
 * @author 
 * @email 
 * @date 2024-06-04 22:01:51
 */
@RestController
@RequestMapping("/news")
public class NewsController {
    @Autowired
    private NewsService newsService;

    @Autowired
    private StoreupService storeupService;



    



    /**
     * 后台列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,NewsEntity news,
		HttpServletRequest request){
        EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();

		PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));

        return R.ok().put("data", page);
    }
    
    /**
     * 前台列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,NewsEntity news, 
		HttpServletRequest request){
        EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();

		PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
        return R.ok().put("data", page);
    }



	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( NewsEntity news){
       	EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
      	ew.allEq(MPUtil.allEQMapPre( news, "news")); 
        return R.ok().put("data", newsService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(NewsEntity news){
        EntityWrapper< NewsEntity> ew = new EntityWrapper< NewsEntity>();
 		ew.allEq(MPUtil.allEQMapPre( news, "news")); 
		NewsView newsView =  newsService.selectView(ew);
		return R.ok("查询公告信息成功").put("data", newsView);
    }
	
    /**
     * 后台详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        NewsEntity news = newsService.selectById(id);
		news.setClicknum(news.getClicknum()+1);
		news.setClicktime(new Date());
		newsService.updateById(news);
        news = newsService.selectView(new EntityWrapper<NewsEntity>().eq("id", id));
        return R.ok().put("data", news);
    }

    /**
     * 前台详情
     */
	@IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        NewsEntity news = newsService.selectById(id);
		news.setClicknum(news.getClicknum()+1);
		news.setClicktime(new Date());
		newsService.updateById(news);
        news = newsService.selectView(new EntityWrapper<NewsEntity>().eq("id", id));
        return R.ok().put("data", news);
    }
    


    /**
     * 赞或踩
     */
    @RequestMapping("/thumbsup/{id}")
    public R vote(@PathVariable("id") String id,String type){
        NewsEntity news = newsService.selectById(id);
        if(type.equals("1")) {
        	news.setThumbsupnum(news.getThumbsupnum()+1);
        } else {
        	news.setCrazilynum(news.getCrazilynum()+1);
        }
        newsService.updateById(news);
        return R.ok("投票成功");
    }

    /**
     * 后台保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody NewsEntity news, HttpServletRequest request){
    	//ValidatorUtils.validateEntity(news);
        newsService.insert(news);
        return R.ok();
    }
    
    /**
     * 前台保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody NewsEntity news, HttpServletRequest request){
    	//ValidatorUtils.validateEntity(news);
        newsService.insert(news);
        return R.ok();
    }



     /**
     * 获取用户密保
     */
    @RequestMapping("/security")
    @IgnoreAuth
    public R security(@RequestParam String username){
        NewsEntity news = newsService.selectOne(new EntityWrapper<NewsEntity>().eq("", username));
        return R.ok().put("data", news);
    }


    /**
     * 修改
     */
    @RequestMapping("/update")
    @Transactional
    @IgnoreAuth
    public R update(@RequestBody NewsEntity news, HttpServletRequest request){
        //ValidatorUtils.validateEntity(news);
        newsService.updateById(news);//全部更新
        return R.ok();
    }



    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        newsService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
	
	/**
     * 前台智能排序
     */
	@IgnoreAuth
    @RequestMapping("/autoSort")
    public R autoSort(@RequestParam Map<String, Object> params,NewsEntity news, HttpServletRequest request,String pre){
        EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
        Map<String, Object> newMap = new HashMap<String, Object>();
        Map<String, Object> param = new HashMap<String, Object>();
		Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();
		while (it.hasNext()) {
			Map.Entry<String, Object> entry = it.next();
			String key = entry.getKey();
			String newKey = entry.getKey();
			if (pre.endsWith(".")) {
				newMap.put(pre + newKey, entry.getValue());
			} else if (StringUtils.isEmpty(pre)) {
				newMap.put(newKey, entry.getValue());
			} else {
				newMap.put(pre + "." + newKey, entry.getValue());
			}
		}
		params.put("sort", "clicknum");
        params.put("order", "desc");
		PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
        return R.ok().put("data", page);
    }


    /**
     * 协同算法(按收藏推荐)
     */
    @RequestMapping("/autoSort2")
    public R autoSort2(@RequestParam Map<String, Object> params,NewsEntity news, HttpServletRequest request){
        String userId = request.getSession().getAttribute("userId").toString();
        String inteltypeColumn = "typename";
        List<StoreupEntity> storeups = storeupService.selectList(new EntityWrapper<StoreupEntity>().eq("type", 1).eq("userid", userId).eq("tablename", "news").orderBy("addtime", false));
        List<String> inteltypes = new ArrayList<String>();
        Integer limit = params.get("limit")==null?10:Integer.parseInt(params.get("limit").toString());
        List<NewsEntity> newsList = new ArrayList<NewsEntity>();
        //去重
        if(storeups!=null && storeups.size()>0) {
            List<String> typeList = new ArrayList<String>();
            for(StoreupEntity s : storeups) {
                if(typeList.contains(s.getInteltype())) continue;
                typeList.add(s.getInteltype());
                newsList.addAll(newsService.selectList(new EntityWrapper<NewsEntity>().eq(inteltypeColumn, s.getInteltype())));
            }
        }
        EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
        params.put("sort", "id");
        params.put("order", "desc");
        PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
        List<NewsEntity> pageList = (List<NewsEntity>)page.getList();
        if(newsList.size()<limit) {
            int toAddNum = (limit-newsList.size())<=pageList.size()?(limit-newsList.size()):pageList.size();
            for(NewsEntity o1 : pageList) {
                boolean addFlag = true;
                for(NewsEntity o2 : newsList) {
                    if(o1.getId().intValue()==o2.getId().intValue()) {
                        addFlag = false;
                        break;
                    }
                }
                if(addFlag) {
                    newsList.add(o1);
                    if(--toAddNum==0) break;
                }
            }
        } else if(newsList.size()>limit) {
            newsList = newsList.subList(0, limit);
        }
        page.setList(newsList);
        return R.ok().put("data", page);
    }








}

五,相关作品展示

基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目

基于Nodejs、Vue等前端技术开发的前端实战项目

基于微信小程序和安卓APP应用开发的相关作品

基于51单片机等嵌入式物联网开发应用

基于各类算法实现的AI智能应用

基于大数据实现的各类数据管理和推荐系统

 

 

标签:Vue,SpringBoot,管理系统,new,EntityWrapper,params,newsService,import,news
From: https://blog.csdn.net/BS009/article/details/142647623

相关文章

  • 基于微信小程序实现农场管理系统
     作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待与各位高校教师、企......
  • java计算机毕业设计大学生创新创业项目管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高等教育的普及和深化,大学生创新创业已成为推动社会经济发展的重要力量。然而,传统的项目管理方式往往存在流程繁琐、效率低下、信息不透明等问题......
  • java计算机毕业设计超市商品销售管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着现代商业的快速发展,超市作为零售业的重要组成部分,其商品销售管理的效率与准确性直接影响到企业的运营成本和市场竞争力。传统的手工管理模式已难......
  • java计算机毕业设计葫芦卖菜管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在现代农业与零售业的快速发展中,传统的蔬菜销售管理模式已难以满足市场需求的高效性、智能化要求。特别是在城市社区、农贸市场等场所,蔬菜销售面临着......
  • 基于node.js和vue的飞鸽旅游服务管理系统网站(源码+lw+部署文档+讲解等)
    前言......
  • 如何优化Vue开发的微信小程序性能?
    以下是一些优化Vue开发的微信小程序性能的方法:一、代码层面1. 数据响应式优化:-合理使用计算属性和侦听器。如果某个值是基于多个数据计算得出的,使用计算属性可以避免在模板中进行复杂的表达式计算,提高性能。侦听器则适用于数据变化时需要执行一些复杂的异步操作的情况。......
  • Springboot 练习
        Springboot练习——分页查询    Emp类packagecom.wzb.pojo20240930;importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;importjava.time.LocalDate;importjava.time.LocalDateTime;@Data@NoArgsConst......
  • Java项目:223基于Springboot + vue实现的蜗牛兼职网(含论文+答辩PPT)
    作者主页:夜未央5788 简介:Java领域优质创作者、Java项目、学习资料、技术互助文末获取源码项目介绍基于Springboot+vue实现的蜗牛兼职网本系统包含管理员、用户两个角色。管理员角色:用户管理、企业管理、兼职信息管理、职位申请管理、留言板管理、系统管理。 用......
  • Vue.js与Flask/Django后端的协同开发研究
    在现代Web开发中,前后端分离的架构已成为一种趋势。前端框架如Vue.js因其灵活性与易用性受到广泛欢迎,而后端框架如Flask和Django则以其强大的功能和高效的开发效率成为众多项目的首选。本文将探讨如何将Vue.js与Flask/Django后端进行有效结合,提供一个实用的开发案例,并通过实际操......
  • Vue.js 组件开发
    Vue.js是一个渐进式的JavaScript框架,主要用于构建用户界面。它采用了组件化的开发方式,使得前端开发更加高效、灵活且易于维护。组件是Vue.js的核心概念之一,理解和掌握组件的开发,有助于我们高效地构建现代Web应用。本文将涵盖Vue.js的组件开发基础,提供实际操作案例,并通过丰富......