package com.codermast.takeoutfood.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.codermast.takeoutfood.common.R;
import com.codermast.takeoutfood.dto.DishDto;
import com.codermast.takeoutfood.entity.Category;
import com.codermast.takeoutfood.entity.Dish;
import com.codermast.takeoutfood.entity.DishFlavor;
import com.codermast.takeoutfood.service.CategoryService;
import com.codermast.takeoutfood.service.DishFlavorService;
import com.codermast.takeoutfood.service.DishService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
* @Description: 菜品管理控制器
* @author: CoderMast
* @date: 2022/11/27
* @Blog: <a href="https://www.codermast.com/">codermast</a>
*/
@Slf4j
@RestController
@RequestMapping("/dish")
public class DishController {
// 注入dish业务实体
@Autowired
private DishService dishService;
@Autowired
private DishFlavorService dishFlavorService;
// 注入category实体
@Autowired
private CategoryService categoryService;
@Autowired
private RedisTemplate redisTemplate;
/**
* @param page 页码
* @param pageSize 页面大小
* @param name 关键词
* @Description: 分页查询dish内容
* @Author: <a href="https://www.codermast.com/">CoderMast</a>
*/
@GetMapping("/page")
public R<Page<DishDto>> page(int page, int pageSize, String name) {
Page<DishDto> dishDtoPage = null;
String key = "page_" + page + ":pageSize_" + pageSize + ":name_" + name;
ValueOperations opsForValue = redisTemplate.opsForValue();
dishDtoPage = (Page<DishDto>) opsForValue.get(key);
// 缓存命中
if (dishDtoPage != null){
return R.success(dishDtoPage);
}
// 菜品分页页面
Page<Dish> dishPage = new Page<>(page,pageSize);
// 菜品分页交互对象页面
dishDtoPage = new Page<>();
// 构造条件过滤器
LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();
// 构建查询条件
queryWrapper.like(StringUtils.isNotEmpty(name), Dish::getName, name);
// 分页查询菜品
dishService.page(dishPage, queryWrapper);
// 菜品分页记录值
List<Dish> recordsDish = dishPage.getRecords();
// 菜品分页交互对象记录值
List<DishDto> recordsDishDto = recordsDish.stream().map((item) -> {
// 创建dishDto对象
DishDto dishDto = new DishDto();
// 将Dish类型的item属性赋值到dishDto
BeanUtils.copyProperties(item,dishDto);
// 获取对象的分类id
Long categoryId = dishDto.getCategoryId();
// 根据分类id查分类对象
Category categoryServiceById = categoryService.getById(categoryId);
// 从分类对象中取出分类名称
String categoryServiceByIdName = categoryServiceById.getName();
// 设置分类名称到dishDto对象
dishDto.setCategoryName(categoryServiceByIdName);
// 返回该对象
return dishDto;
}).collect(Collectors.toList());
// 将封装好的记录值赋值给dishDtoPage对象
dishDtoPage.setRecords(recordsDishDto);
// 将总条数赋值给dishDtoPage
dishDtoPage.setTotal(dishPage.getTotal());
// 将数据缓存进redis
opsForValue.set(key,dishDtoPage,60,TimeUnit.MINUTES);
return R.success(dishDtoPage);
}
/**
* @param ids 要删除的菜品id
* @Description: 批量删除菜品
* @Author: <a href="https://www.codermast.com/">CoderMast</a>
*/
@DeleteMapping
public R<String> delete(@RequestParam List<Long> ids) {
dishService.removeBatchByIds(ids);
// 删除redis缓存
for (Long id : ids) {
String key = "dish:" + id;
redisTemplate.delete(key);
}
return R.success("批量删除成功!");
}
/**
* @param id 要获取信息的id值
* @Description: 根据id查询一个dish对象
* @Author: CoderMast <a href="https://www.codermast.com/">codermast</a>
*/
@GetMapping("/{id}")
public R<DishDto> getOne(@PathVariable String id) {
DishDto dishDto = null;
String key = "dish:" + id;
// 先查询Redis中是否有缓存
ValueOperations opsForValue = redisTemplate.opsForValue();
dishDto = (DishDto) opsForValue.get(key);
// Redis中存在则直接返回
if (dishDto != null){
return R.success(dishDto);
}
// Redis中不存在,先查数据库,然后添加缓存,再返回
dishDto = dishService.getByIdWithFlavor(id);
// 放入缓存,并设置60分钟后失效
opsForValue.set(key,dishDto,60, TimeUnit.MINUTES);
return R.success(dishDto);
}
/**
* @Description: 添加菜品
* @Author: <a href="https://www.codermast.com/">CoderMast</a>
*/
@PostMapping
public R<String> save(@RequestBody DishDto dishDto) {
dishService.saveWithFlavor(dishDto);
ValueOperations opsForValue = redisTemplate.opsForValue();
String key = "dish:" + dishDto.getId();
// 将数据缓存进Redis,设置60分过期
opsForValue.set(key,dishDto,60,TimeUnit.MINUTES);
return R.success("菜品添加成功");
}
/**
* @Description: 修改菜品信息
* @param dishDto 菜品的信息
* @Author: <a href="https://www.codermast.com/">CoderMast</a>
*/
@PutMapping
public R<String> update(@RequestBody DishDto dishDto){
boolean ret = dishService.updateById(dishDto);
String key = "dish:" + dishDto.getId();
// 更新Redis缓存
ValueOperations opsForValue = redisTemplate.opsForValue();
// 放入缓存,设置60分钟失效
opsForValue.set(key,dishDto,60,TimeUnit.MINUTES);
return ret? R.success("更新成功"):R.error("更新失败");
}
/**
* @Description: 停售和启售
* @param status : 状态码,0为停售,1为启售
* @param ids 操作菜品的id列表
* @Author: <a href="https://www.codermast.com/">CoderMast</a>
*/
@PostMapping("/status/{status}")
public R<String> status(@PathVariable Integer status,@RequestParam List<Long> ids){
LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(ids != null,Dish::getId,ids);
List<Dish> list = dishService.list(queryWrapper);
for (Dish dish : list) {
if (dish != null){
dish.setStatus(status);
dishService.updateById(dish);
}
}
return R.success(status == 1? "启售成功" : "停售成功");
}
/**
* @Description: 根据分类id查询其下的菜品
* @Author: <a href="https://www.codermast.com/">CoderMast</a>
*/
@GetMapping("/list")
public R<List<DishDto>> list(Dish dish){
List<DishDto> dishDtoList = null;
// 先从redis中获取缓存数据
ValueOperations opsForValue = redisTemplate.opsForValue();
String key = "dish:" + dish.getCategoryId();
// 这里缓存的key是dish的分类id,Value为其序列化的值
dishDtoList = (List<DishDto>) opsForValue.get(key);
// redis中存在数据,则直接返回,无需查�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 项目模块 后台 登录模块 员工管理 分类管理 菜品管理 套餐管理 订单管理 前台 用户模块 购物车模块 地址模块 订单模块 菜品模块 项目部署 下载本项目到服务器。 修改src/main/resources/application.yml文件内的数据库信息 【特别强调】 1、csdn上资源保证是完整最新,会不定期更新优化; 2、请用自己的账号在csdn官网下载,若通过第三方代下,博主不对您下载的资源作任何保证,且不提供任何形式的技术支持和答疑!!!
资源推荐
资源详情
资源评论
收起资源包目录
基于SpringBoot+MybatisPlus+Mysql的前后端分离外卖管理系统源码+sql数据库+部署说明.zip (438个子文件)
alsaapi.cpp 10KB
main.cpp 7KB
common.css 275KB
common.css 275KB
index.css 227KB
index.css 227KB
vant.min.css 141KB
vant.min.css 141KB
main.css 17KB
main.css 17KB
demo.css 8KB
demo.css 8KB
index.css 6KB
add-order.css 6KB
index.css 6KB
add-order.css 6KB
user.css 4KB
user.css 4KB
page.css 4KB
page.css 4KB
address.css 3KB
address.css 3KB
address-edit.css 3KB
address-edit.css 3KB
order.css 3KB
order.css 3KB
login.css 2KB
login.css 2KB
index.css 2KB
index.css 2KB
pay-success.css 2KB
pay-success.css 2KB
login.css 2KB
login.css 2KB
no-wify.css 1KB
no-wify.css 1KB
iconfont.css 733B
iconfont.css 733B
.gitignore 45B
globaflags.h 6KB
alsaapi.h 1KB
add.html 23KB
add.html 23KB
index.html 23KB
index.html 23KB
add.html 18KB
add.html 18KB
demo_index.html 12KB
demo_index.html 12KB
list.html 10KB
list.html 10KB
list.html 9KB
list.html 9KB
add-order.html 9KB
add-order.html 9KB
list.html 9KB
list.html 9KB
list.html 9KB
list.html 9KB
user.html 8KB
user.html 8KB
address-edit.html 7KB
address-edit.html 7KB
address.html 7KB
address.html 7KB
index.html 7KB
index.html 7KB
add.html 7KB
add.html 7KB
order.html 7KB
order.html 7KB
list.html 6KB
list.html 6KB
login.html 4KB
login.html 4KB
login.html 4KB
login.html 4KB
pay-success.html 3KB
pay-success.html 3KB
no-wify.html 2KB
no-wify.html 2KB
favico.ico 5KB
favico.ico 5KB
favicon.ico 4KB
favicon.ico 4KB
DishController.java 10KB
SetmealController.java 8KB
DishController.java 7KB
EmployeeController.java 7KB
AddressBookController.java 6KB
SetmealController.java 6KB
EmployeeController.java 5KB
CategoryController.java 5KB
ShoppingCartController.java 5KB
ShoppingCartController.java 5KB
OrderServiceImpl.java 4KB
OrderServiceImpl.java 4KB
UserController.java 4KB
CategoryController.java 4KB
CommonController.java 4KB
共 438 条
- 1
- 2
- 3
- 4
- 5
资源评论
onnx
- 粉丝: 9971
- 资源: 5626
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功