package com.itheima.reggie.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.reggie.common.R;
import com.itheima.reggie.dto.DishDto;
import com.itheima.reggie.entity.Category;
import com.itheima.reggie.entity.Dish;
import com.itheima.reggie.entity.DishFlavor;
import com.itheima.reggie.service.CategoryService;
import com.itheima.reggie.service.DishFlavorService;
import com.itheima.reggie.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.web.bind.annotation.*;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
* 菜品管理
*/
@RestController
@RequestMapping("/dish")
@Slf4j
public class DishController {
@Autowired
private DishService dishService;
@Autowired
private DishFlavorService dishFlavorService;
@Autowired
private CategoryService categoryService;
@Autowired
private RedisTemplate redisTemplate;
/**
* 新增菜品
*
* @param dishDto
* @return
*/
@PostMapping
public R<String> save(@RequestBody DishDto dishDto) {
log.info(dishDto.toString());
dishService.saveWithFlavor(dishDto);
//清理所有菜品的缓存数据
//Set keys = redisTemplate.keys("dish_*");
//redisTemplate.delete(keys);
//清理某个分类下面的菜品
String key = "dish_" + dishDto.getCategoryId() + "_1";
redisTemplate.delete(key);
return R.success("新增菜品成功");
}
@GetMapping("/page")
public R<Page> page(int page, int pageSize, String name) {
//构造分页构造器对象
Page<Dish> pageInfo = new Page<>(page, pageSize);
Page<DishDto> dishDtoPage = new Page<>();
//条件构造器
LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();
//添加过滤条件
queryWrapper.like(name != null, Dish::getName, name);
//添加排序条件
queryWrapper.orderByDesc(Dish::getUpdateTime);
//执行分页查询
dishService.page(pageInfo, queryWrapper);
//对象拷贝
BeanUtils.copyProperties(pageInfo, dishDtoPage, "records");
List<Dish> records = pageInfo.getRecords();
List<DishDto> list = records.stream().map((item) -> {
DishDto dishDto = new DishDto();
BeanUtils.copyProperties(item, dishDto);
Long categoryId = item.getCategoryId();
//根据id查询分类对象
Category category = categoryService.getById(categoryId);
if (category != null) {
String categoryName = category.getName();
dishDto.setCategoryName(categoryName);
}
return dishDto;
}).collect(Collectors.toList());
dishDtoPage.setRecords(list);
return R.success(dishDtoPage);
}
/**
* 根据id查询菜品信息和对应的口味信息
*
* @param id
* @return
*/
@GetMapping("/{id}")
public R<DishDto> get(@PathVariable Long id) {
DishDto dishDto = dishService.getByIdWithFlavor(id);
return R.success(dishDto);
}
/**
* 修改菜品
*
* @param dishDto
* @return
*/
@PutMapping
public R<String> update(@RequestBody DishDto dishDto) {
log.info(dishDto.toString());
dishService.updateWithFlavor(dishDto);
//清理所有菜品的缓存数据
//Set keys = redisTemplate.keys("dish_*");
//redisTemplate.delete(keys);
//清理某个分类下面的菜品
String key = "dish_" + dishDto.getCategoryId() + "_1";
redisTemplate.delete(key);
return R.success("修改菜品成功");
}
/**
* 根据条件查询对应的菜品数据
*
* @param dish
* @return
*/
// @GetMapping("/list")
// public R<List<Dish>> list(Dish dish){
//
// //构造查询条件
// LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();
// queryWrapper.eq(dish.getCategoryId() != null , Dish::getCategoryId , dish.getCategoryId());
// //添加条件,查询状态为1(起售状态)的菜品
// queryWrapper.eq(Dish::getStatus , 1);
//
// //添加排序条件
// queryWrapper.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime);
//
// List<Dish> list = dishService.list(queryWrapper);
//
// return R.success(list);
// }
@GetMapping("/list")
public R<List<DishDto>> list(Dish dish) {
List<DishDto> dishDtoList = null ;
String key = "dish_" + dish.getCategoryId() + "_" + dish.getStatus();
//先从redis中获得缓存数据
dishDtoList = (List<DishDto>) redisTemplate.opsForValue().get(key);
if (dishDtoList != null) {
//如果存在,直接返回,无需查询数据库
return R.success(dishDtoList);
}
//构造查询条件
LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(dish.getCategoryId() != null, Dish::getCategoryId, dish.getCategoryId());
//添加条件,查询状态为1(起售状态)的菜品
queryWrapper.eq(Dish::getStatus, 1);
//添加排序条件
queryWrapper.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime);
List<Dish> list = dishService.list(queryWrapper);
dishDtoList = list.stream().map((item) -> {
DishDto dishDto = new DishDto();
BeanUtils.copyProperties(item, dishDto);
Long categoryId = item.getCategoryId();
//根据id查询分类对象
Category category = categoryService.getById(categoryId);
if (category != null) {
String categoryName = category.getName();
dishDto.setCategoryName(categoryName);
}
//当前菜品id
Long dishId = item.getId();
LambdaQueryWrapper<DishFlavor> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(DishFlavor::getDishId, dishId);
List<DishFlavor> dishFlavorList = dishFlavorService.list(lambdaQueryWrapper);
dishDto.setFlavors(dishFlavorList);
return dishDto;
}).collect(Collectors.toList());
//如果不存在,需要查询数据库,将查询到的菜品数据缓存到redis
redisTemplate.opsForValue().set(key,dishDtoList , 60 , TimeUnit.MINUTES);
return R.success(dishDtoList);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
黑马程序员瑞吉外卖基本功能完整版 (465个子文件)
2bbfb28a25eabc889f6075ede6bff2eb8ef91a 36KB
70e906bda0e546b14c06bd4365a4ee09b9fa30 63KB
DishController.class 11KB
AddressBook.class 11KB
SetmealController.class 10KB
OrderServiceImpl.class 9KB
EmployeeController.class 8KB
Orders.class 8KB
Dish.class 7KB
SetmealDish.class 7KB
Setmeal.class 7KB
Employee.class 7KB
ShoppingCartController.class 7KB
AddressBookController.class 7KB
CategoryController.class 6KB
SetmealServiceImpl.class 6KB
DishServiceImpl.class 6KB
UserController.class 6KB
ShoppingCart.class 6KB
DishFlavor.class 6KB
OrderDetail.class 5KB
Category.class 5KB
R.class 4KB
User.class 4KB
CategoryServiceImpl.class 4KB
LoginCheckFIlter.class 4KB
CommonController.class 3KB
DishDto.class 3KB
JacksonObjectMapper.class 3KB
GlobalExceptionHandler.class 2KB
WebMvcConfig.class 2KB
SetmealDto.class 2KB
SMSUtils.class 2KB
MyMetaObjecthandler.class 2KB
OrderController.class 2KB
RedisConfig.class 2KB
ValidateCodeUtils.class 1KB
ReggieApplication.class 1KB
MybatisPlusConfig.class 1014B
AddressBookServiceImpl.class 945B
SetmealDishServiceImpl.class 945B
DishFlavorServiceImpl.class 938B
UserServiceImpl.class 896B
OrderDetailController.class 885B
BaseContext.class 866B
ShoppingCartServiceImpl.class 757B
OrderDetailServiceImpl.class 751B
EmplyeeServiceImpl.class 727B
DishService.class 555B
SetmealService.class 545B
CustomException.class 426B
OrderService.class 417B
ShoppingCarMapper.class 409B
OrderDetailMapper.class 408B
SetmealDIshMapper.class 408B
AddressBookMapper.class 408B
DishFlavorMapper.class 405B
CategoryService.class 403B
CategoryMapper.class 399B
EmployeeMapper.class 399B
SetmealMapper.class 396B
OrderMapper.class 391B
UserMapper.class 387B
DishMapper.class 387B
ShoppingCartService.class 341B
AddressBookService.class 338B
OrderDetailService.class 338B
SetmealDishService.class 338B
DishFlavorService.class 335B
EmployeeService.class 329B
UserService.class 317B
config 137B
common.css 288KB
common.css 288KB
index.css 227KB
index.css 227KB
vant.min.css 141KB
vant.min.css 141KB
main.css 18KB
main.css 18KB
demo.css 9KB
demo.css 9KB
index.css 7KB
index.css 7KB
add-order.css 7KB
add-order.css 7KB
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
index.css 2KB
login.css 2KB
index.css 2KB
共 465 条
- 1
- 2
- 3
- 4
- 5
资源评论
kaikaihapppy
- 粉丝: 43
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功