Springboot+Vue项目-基于Java+MySQL的校园外卖服务系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。

💞当前专栏:Java毕业设计

精彩专栏推荐👇🏻👇🏻👇🏻

🎀 Python毕业设计

🌎微信小程序毕业设计

开发环境

开发语言:Java

框架:Springboot+Vue

JDK版本:JDK1.8

服务器:tomcat7

数据库:mysql 5.7

数据库工具:Navicat12

开发软件:eclipse/myeclipse/idea

Maven包:Maven3.3.9

浏览器:谷歌浏览器

演示视频

springboot292

原版高清演示视频-编号:292
https://pan.quark.cn/s/5cda95b17ee0

源码下载地址:

https://download.csdn.net/download/2301_76953549/89100202

LW目录

【如需全文请按文末获取联系】

目录

一、项目简介

本校园外卖服务系统分为管理员还有用户两个权限,管理员可以管理用户的基本信息内容,可以管理公告信息以及公告的租赁信息,能够与用户进行相互交流等操作,用户可以查看外卖信息,可以查看公告以及查看管理员回复信息等操作。

该校园外卖服务系统采用的是WEB应用程序开发中最受欢迎的B/S三层结构模式,使用占用空间小但功能齐全的MySQL数据库进行数据的存储操作,系统开发技术使用到了JSP技术。该校园外卖服务系统能够解决许多传统手工操作的难题,比如数据查询耽误时间长,数据管理步骤繁琐等问题。总的来说,校园外卖服务系统性能稳定,功能较全,投入运行使用性价比很高。

二、系统设计

2.1软件功能模块设计

管理员可以管理用户的基本信息,可以管理等功能。管理员功能结构图如下:

2.2数据库设计

(1)下图是用户实体和其具备的属性。

(2)下图是公告信息实体和其具备的属性。
(3)下图是购物车实体和其具备的属性。

(4)下图是外卖评价实体和其具备的属性。

(5)下图是外卖订单实体和其具备的属性。

(6)下图是外卖实体和其具备的属性。

(7)下图是外卖收藏实体和其具备的属性。

(8)下图是收货地址实体和其具备的属性。

三、系统项目部分截图

3.1管理员功能模块的实现

外卖列表

如图5.1显示的就是外卖列表页面,此页面提供给管理员的功能有:查看外卖、新增外卖、修改外卖、删除外卖等。

公告类型管理

公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。下图就是公告类型管理页面。公告类型管理界面如图5.3所示。

四、部分核心代码

4.1 用户部分

java 复制代码
package com.controller;

import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;

import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;

/**
 * 外卖收藏
 * 后端接口
 * @author
 * @email
*/
@RestController
@Controller
@RequestMapping("/waimaiCollection")
public class WaimaiCollectionController {
    private static final Logger logger = LoggerFactory.getLogger(WaimaiCollectionController.class);

    @Autowired
    private WaimaiCollectionService waimaiCollectionService;


    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;

    //级联表service
    @Autowired
    private WaimaiService waimaiService;
    @Autowired
    private YonghuService yonghuService;



    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永不会进入");
        else if("用户".equals(role))
            params.put("yonghuId",request.getSession().getAttribute("userId"));
        if(params.get("orderBy")==null || params.get("orderBy")==""){
            params.put("orderBy","id");
        }
        PageUtils page = waimaiCollectionService.queryPage(params);

        //字典表数据转换
        List<WaimaiCollectionView> list =(List<WaimaiCollectionView>)page.getList();
        for(WaimaiCollectionView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c, request);
        }
        return R.ok().put("data", page);
    }

    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        WaimaiCollectionEntity waimaiCollection = waimaiCollectionService.selectById(id);
        if(waimaiCollection !=null){
            //entity转view
            WaimaiCollectionView view = new WaimaiCollectionView();
            BeanUtils.copyProperties( waimaiCollection , view );//把实体数据重构到view中

                //级联表
                WaimaiEntity waimai = waimaiService.selectById(waimaiCollection.getWaimaiId());
                if(waimai != null){
                    BeanUtils.copyProperties( waimai , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setWaimaiId(waimai.getId());
                }
                //级联表
                YonghuEntity yonghu = yonghuService.selectById(waimaiCollection.getYonghuId());
                if(yonghu != null){
                    BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setYonghuId(yonghu.getId());
                }
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody WaimaiCollectionEntity waimaiCollection, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,waimaiCollection:{}",this.getClass().getName(),waimaiCollection.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永远不会进入");
        else if("用户".equals(role))
            waimaiCollection.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));

        Wrapper<WaimaiCollectionEntity> queryWrapper = new EntityWrapper<WaimaiCollectionEntity>()
            .eq("waimai_id", waimaiCollection.getWaimaiId())
            .eq("yonghu_id", waimaiCollection.getYonghuId())
            .eq("waimai_collection_types", waimaiCollection.getWaimaiCollectionTypes())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        WaimaiCollectionEntity waimaiCollectionEntity = waimaiCollectionService.selectOne(queryWrapper);
        if(waimaiCollectionEntity==null){
            waimaiCollection.setInsertTime(new Date());
            waimaiCollection.setCreateTime(new Date());
            waimaiCollectionService.insert(waimaiCollection);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody WaimaiCollectionEntity waimaiCollection, HttpServletRequest request){
        logger.debug("update方法:,,Controller:{},,waimaiCollection:{}",this.getClass().getName(),waimaiCollection.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");
//        else if("用户".equals(role))
//            waimaiCollection.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
        //根据字段查询是否有相同数据
        Wrapper<WaimaiCollectionEntity> queryWrapper = new EntityWrapper<WaimaiCollectionEntity>()
            .notIn("id",waimaiCollection.getId())
            .andNew()
            .eq("waimai_id", waimaiCollection.getWaimaiId())
            .eq("yonghu_id", waimaiCollection.getYonghuId())
            .eq("waimai_collection_types", waimaiCollection.getWaimaiCollectionTypes())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        WaimaiCollectionEntity waimaiCollectionEntity = waimaiCollectionService.selectOne(queryWrapper);
        if(waimaiCollectionEntity==null){
            waimaiCollectionService.updateById(waimaiCollection);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
        waimaiCollectionService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }


    /**
     * 批量上传
     */
    @RequestMapping("/batchInsert")
    public R save( String fileName, HttpServletRequest request){
        logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
        Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            List<WaimaiCollectionEntity> waimaiCollectionList = new ArrayList<>();//上传的东西
            Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
            Date date = new Date();
            int lastIndexOf = fileName.lastIndexOf(".");
            if(lastIndexOf == -1){
                return R.error(511,"该文件没有后缀");
            }else{
                String suffix = fileName.substring(lastIndexOf);
                if(!".xls".equals(suffix)){
                    return R.error(511,"只支持后缀为xls的excel文件");
                }else{
                    URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
                    File file = new File(resource.getFile());
                    if(!file.exists()){
                        return R.error(511,"找不到上传文件,请联系管理员");
                    }else{
                        List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
                        dataList.remove(0);//删除第一行,因为第一行是提示
                        for(List<String> data:dataList){
                            //循环
                            WaimaiCollectionEntity waimaiCollectionEntity = new WaimaiCollectionEntity();
//                            waimaiCollectionEntity.setWaimaiId(Integer.valueOf(data.get(0)));   //外卖 要改的
//                            waimaiCollectionEntity.setYonghuId(Integer.valueOf(data.get(0)));   //用户 要改的
//                            waimaiCollectionEntity.setWaimaiCollectionTypes(Integer.valueOf(data.get(0)));   //类型 要改的
//                            waimaiCollectionEntity.setInsertTime(date);//时间
//                            waimaiCollectionEntity.setCreateTime(date);//时间
                            waimaiCollectionList.add(waimaiCollectionEntity);


                            //把要查询是否重复的字段放入map中
                        }

                        //查询是否重复
                        waimaiCollectionService.insertBatch(waimaiCollectionList);
                        return R.ok();
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
            return R.error(511,"批量插入数据异常,请联系管理员");
        }
    }





    /**
    * 前端列表
    */
    @IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));

        // 没有指定排序字段就默认id倒序
        if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){
            params.put("orderBy","id");
        }
        PageUtils page = waimaiCollectionService.queryPage(params);

        //字典表数据转换
        List<WaimaiCollectionView> list =(List<WaimaiCollectionView>)page.getList();
        for(WaimaiCollectionView c:list)
            dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段
        return R.ok().put("data", page);
    }

    /**
    * 前端详情
    */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        WaimaiCollectionEntity waimaiCollection = waimaiCollectionService.selectById(id);
            if(waimaiCollection !=null){


                //entity转view
                WaimaiCollectionView view = new WaimaiCollectionView();
                BeanUtils.copyProperties( waimaiCollection , view );//把实体数据重构到view中

                //级联表
                    WaimaiEntity waimai = waimaiService.selectById(waimaiCollection.getWaimaiId());
                if(waimai != null){
                    BeanUtils.copyProperties( waimai , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setWaimaiId(waimai.getId());
                }
                //级联表
                    YonghuEntity yonghu = yonghuService.selectById(waimaiCollection.getYonghuId());
                if(yonghu != null){
                    BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setYonghuId(yonghu.getId());
                }
                //修改对应字典表字段
                dictionaryService.dictionaryConvert(view, request);
                return R.ok().put("data", view);
            }else {
                return R.error(511,"查不到数据");
            }
    }


    /**
    * 前端保存
    */
    @RequestMapping("/add")
    public R add(@RequestBody WaimaiCollectionEntity waimaiCollection, HttpServletRequest request){
        logger.debug("add方法:,,Controller:{},,waimaiCollection:{}",this.getClass().getName(),waimaiCollection.toString());
        Wrapper<WaimaiCollectionEntity> queryWrapper = new EntityWrapper<WaimaiCollectionEntity>()
            .eq("waimai_id", waimaiCollection.getWaimaiId())
            .eq("yonghu_id", waimaiCollection.getYonghuId())
            .eq("waimai_collection_types", waimaiCollection.getWaimaiCollectionTypes())
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        WaimaiCollectionEntity waimaiCollectionEntity = waimaiCollectionService.selectOne(queryWrapper);
        if(waimaiCollectionEntity==null){
            waimaiCollection.setInsertTime(new Date());
            waimaiCollection.setCreateTime(new Date());
        waimaiCollectionService.insert(waimaiCollection);
            return R.ok();
        }else {
            return R.error(511,"您已经收藏过了");
        }
    }


}

获取源码或论文

如需对应的LW或源码,以及其他定制需求,也可以点我头像查看个人简介联系。

相关推荐
天天扭码10 分钟前
五天SpringCloud计划——DAY2之单体架构和微服务架构的选择和转换原则
java·spring cloud·微服务·架构
程序猿进阶10 分钟前
堆外内存泄露排查经历
java·jvm·后端·面试·性能优化·oom·内存泄露
FIN技术铺15 分钟前
Spring Boot框架Starter组件整理
java·spring boot·后端
Backstroke fish21 分钟前
Token刷新机制
前端·javascript·vue.js·typescript·vue
小曲程序22 分钟前
vue3 封装request请求
java·前端·typescript·vue
临枫54122 分钟前
Nuxt3封装网络请求 useFetch & $fetch
前端·javascript·vue.js·typescript
RAY_CHEN.23 分钟前
vue3 pinia 中actions修改状态不生效
vue.js·typescript·npm
酷酷的威朗普24 分钟前
医院绩效考核系统
javascript·css·vue.js·typescript·node.js·echarts·html5
_Legend_King32 分钟前
vue3 + elementPlus 日期时间选择器禁用未来及过去时间
javascript·vue.js·elementui
陈王卜40 分钟前
django+boostrap实现发布博客权限控制
java·前端·django