大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。
💞当前专栏:Java毕业设计
精彩专栏推荐👇🏻👇🏻👇🏻
开发环境
- 开发语言:Java
- 框架:ssm
- JDK版本:JDK1.8
- 服务器:tomcat7
- 数据库:mysql 5.7
- 数据库工具:Navicat12
- 开发软件:eclipse/myeclipse/idea
- Maven包:Maven3.3.9
- 浏览器:谷歌浏览器
源码下载地址:
https://download.csdn.net/download/m0_46388260/89271076
论文目录
【如需全文请按文末获取联系】
一、项目简介
餐厅点菜管理系统是在MySQL中建立数据表保存信息,运用Vue框架和Java语言编写。并按照软件设计开发流程进行设计实现。系统具备友好性且功能完善。其管理员管理食物库存,菜品信息,管理预订和未预定餐桌,管理店内订单流水以及外卖订单。用户查看餐厅资讯,收藏菜品,下单购买菜品,查看外卖订单,用户也可以在餐厅内预订餐桌,对菜品进行点餐,查看店内订单记录。
二、系统设计
2.1软件功能模块设计
设计的管理员的详细功能见下图,管理员登录进入本人后台之后,管理食物库存,菜品信息,管理预订和未预定餐桌,管理店内订单流水以及外卖订单。
设计的用户的详细功能见下图,用户查看餐厅资讯,收藏菜品,下单购买菜品,查看外卖订单,用户也可以在餐厅内预订餐桌,对菜品进行点餐,查看店内订单记录。
2.2数据库设计
(1)设计的订单实体,其具备的属性见下图。
(2)设计的用户实体,其具备的属性见下图。
(3)设计的购物车实体,其具备的属性见下图。
(5)设计的各实体间关系见下图。
三、系统项目部分截图
3.1管理员功能实现
食物库存管理
管理员权限中的食物库存管理,其运行效果见下图。管理员查看各种菜品的库存数量,可以根据菜品名称查询菜品库存,能够修改菜品库存,删除菜品库存信息。
菜品展示管理
管理员权限中的菜品展示管理,其运行效果见下图。管理员新增菜品信息,可以修改菜品名称,菜品图片,菜品单价等信息,可以删除菜品信息。
店内流水管理
管理员权限中的店内流水管理,其运行效果见下图。管理员查询店内流水信息,设置用户已支付的订单为已支付状态。
已预订餐桌
用户权限中的已预订餐桌,其运行效果见下图。用户可以查看已预订餐桌信息,可以取消已经预订的餐桌。
3.2用户功能实现
菜品信息
用户权限中的菜品信息,其运行效果见下图。用户在本页面可以操作的功能比较多,可以收藏本页面显示的菜品,可以直接购买,也能暂时加入购物车保存
购物车
用户权限中的购物车,其运行效果见下图。购物车帮助用户暂时保存购买的菜品,方便用户一次性下单购买多种菜品。
已支付订单
用户权限中的已支付订单,其运行效果见下图。用户对订单明细进行查看,可以选择对某些误购买的菜品进行退款。
四、部分核心代码
package com.controller;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import com.entity.*;
import com.entity.view.CaipinView;
import com.service.*;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
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.utils.PageUtils;
import com.utils.R;
/**
* 菜品表
* 后端接口
* @author
* @email
* @date 2021-03-08
*/
@RestController
@Controller
@RequestMapping("/caipin")
public class CaipinController {
private static final Logger logger = LoggerFactory.getLogger(CaipinController.class);
@Autowired
private CaipinService caipinService;
@Autowired
private KuchuenService kuchuenService;
@Autowired
private LiushuiService liushuiService;
@Autowired
private YudingcanzhuoService yudingcanzhuoService;
@Autowired
private DingdanxiangqingService dingdanxiangqingService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params){
logger.debug("Controller:"+this.getClass().getName()+",page方法");
PageUtils page = caipinService.queryPage(params);
return R.ok().put("data", page);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
logger.debug("Controller:"+this.getClass().getName()+",info方法");
CaipinEntity caipin = caipinService.selectById(id);
if(caipin!=null){
CaipinView caipinView = new CaipinView();
BeanUtils.copyProperties(caipin, caipinView);
KuchuenEntity kuchuenEntity = kuchuenService.selectById(caipin.getHxTypes());
BeanUtils.copyProperties(kuchuenEntity, caipinView ,new String[]{ "id", "createDate"});
return R.ok().put("data", caipinView);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody CaipinEntity caipin, HttpServletRequest request){
logger.debug("Controller:"+this.getClass().getName()+",save");
Wrapper<CaipinEntity> queryWrapper = new EntityWrapper<CaipinEntity>()
.eq("hx_types", caipin.getHxTypes())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
CaipinEntity caipinEntity = caipinService.selectOne(queryWrapper);
if("".equals(caipin.getImgPhoto()) || "null".equals(caipin.getImgPhoto())){
caipin.setImgPhoto(null);
}
if(caipinEntity==null){
caipinService.insert(caipin);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody CaipinEntity caipin, HttpServletRequest request){
logger.debug("Controller:"+this.getClass().getName()+",update");
//根据字段查询是否有相同数据
Wrapper<CaipinEntity> queryWrapper = new EntityWrapper<CaipinEntity>()
.notIn("id",caipin.getId())
.eq("hx_types", caipin.getHxTypes())
.eq("money", caipin.getMoney())
.eq("caipin_content", caipin.getCaipinContent())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
CaipinEntity caipinEntity = caipinService.selectOne(queryWrapper);
if("".equals(caipin.getImgPhoto()) || "null".equals(caipin.getImgPhoto())){
caipin.setImgPhoto(null);
}
if(caipinEntity==null){
caipinService.updateById(caipin);//根据id更新
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 删除
*/
@RequestMapping("/diancai")
public R diancai(@RequestParam Map<String, Object> params, HttpServletRequest request){
if(params.size() == 0){
return R.error("请选择要购买的菜品");
}
//获取系统当前时间的时间戳作为订单号
long danhao = new Date().getTime();
//new 一个订单详情表
DingdanxiangqingEntity dingdanxiangqing = new DingdanxiangqingEntity();
//new 一个流水表
LiushuiEntity liushui = new LiushuiEntity();
//循环前端传过来的key
for (String id: params.keySet()) {
//根据前端传来的key(id)查询数据
CaipinEntity caipin = caipinService.selectOne(new EntityWrapper<CaipinEntity>().eq("hx_types",id));
//判断查出来的数据是否为空
if(caipin == null){
//为空返回前台
return R.error();
}
//判断前端传来的菜品数量是否为空或者小于0
if(StringUtils.isBlank((String)params.get(id)) || Integer.parseInt(String.valueOf(params.get(id))) <= 0){
return R.error("您选择的菜品数量不能小于0哦");
}
//根据前台传来的key(id)去库存表中查询数据
KuchuenEntity kuchuenEntity = kuchuenService.selectById(id);
//如果为空返回前台
if(kuchuenEntity == null){
return R.error("这件菜品菜品不存在于库存");
}
//把map中的值转为Integger
Integer zhi = Integer.parseInt(String.valueOf(kuchuenEntity.getId()));
//根据当前登录人的id去已预约的餐桌信息表中查询数据
YudingcanzhuoEntity yudingcanzhuo = yudingcanzhuoService.selectOne(new EntityWrapper().eq("yh_types", request.getSession().getAttribute("userId")));
//如果为空就返回前端
if(yudingcanzhuo == null){
return R.error("请先预定餐桌后再预定菜品,以免餐桌不足");
}
//如果为空就返回前端
if(yudingcanzhuo.getCzTypes() == null){
return R.error("请先预定餐桌后再预定菜品,以免餐桌不足");
}
//判断库存中的菜品数量是否大于用户购买的数量
if(kuchuenEntity.getNumber() < Integer.parseInt(String.valueOf(params.get(String.valueOf(zhi))))){
//库存小于是返回并提示
return R.error(kuchuenEntity.getName()+" 库存只剩:"+kuchuenEntity.getNumber()+" 个,不足:"+ params.get(id)+" 个!!!");
}
//订单详情中添加进用户购买数量
dingdanxiangqing.setNumber(zhi);
//在订单详情表中存入生成的订单号
dingdanxiangqing.setOdd(String.valueOf(danhao));
//在订单详情表中存入菜品信息
dingdanxiangqing.setHxTypes(caipin.getHxTypes());
//订单详情表中存入菜品价格
dingdanxiangqing.setMoney(caipin.getMoney());
//新增订单详情信息
dingdanxiangqingService.insert(dingdanxiangqing);
//给流水表中的总价赋值为0
liushui.setMaxMoney(0.0);
//获取系统当前时间
liushui.setCreateTime(new Date());
//设置上面生成的订单号
liushui.setOdd(String.valueOf(danhao));
//在流水表存入中查出来的餐桌信息
liushui.setCzTypes(yudingcanzhuo.getCzTypes());
//在流水表存入当前登录用户的信息
liushui.setYhTypes((Integer) request.getSession().getAttribute("userId"));
//设置为未支付
liushui.setSfTypes(2);
//计算总价
liushui.setMaxMoney(liushui.getMaxMoney()+(dingdanxiangqing.getMoney()*dingdanxiangqing.getNumber()));
//库存数量减去用户购买数量
int i = kuchuenEntity.getNumber() - zhi;
//将库存数量更新
kuchuenEntity.setNumber(i);
//修改库存数量
kuchuenService.updateById(kuchuenEntity);
}
//新增流水信息
liushuiService.insert(liushui);
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
logger.debug("Controller:"+this.getClass().getName()+",delete");
caipinService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
获取源码或论文
如需对应的论文或源码,以及其他定制需求,也可以下方微❤联系。