package com.jld.reggie_take_out.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jld.reggie_take_out.common.R;
import com.jld.reggie_take_out.dto.DishDto;
import com.jld.reggie_take_out.entity.Category;
import com.jld.reggie_take_out.entity.Dish;
import com.jld.reggie_take_out.entity.DishFlavor;
import com.jld.reggie_take_out.service.CategoryService;
import com.jld.reggie_take_out.service.DishFlavorService;
import com.jld.reggie_take_out.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.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);
String key="dish_"+dishDto.getCategoryId()+"_"+dishDto.getStatus();
redisTemplate.delete(key);
return R.success("新增菜品成功!");
}
/**
* 菜品信息分页查询
*
* @param page
* @param pageSize
* @param name
* @return
*/
@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 -> dish.getName(), name);
//添加排序条件
queryWrapper.orderByDesc(Dish::getUpdateTime);
//进行分页查询
dishService.page(pageInfo, queryWrapper);
//对象拷贝,将pageInfo中属性拷贝到dishDtoPage,忽略records属性
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
//根据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()+"_"+dishDto.getStatus();
redisTemplate.delete(key);
return R.success("修改菜品成功!");
}
/**
* 根据条件查询对应的菜品数据
* 菜品分类id
* <p>
* SELECT id,name,category_id,price,code,image,description,status,sort,create_time,update_time,create_user,update_user,is_deleted
* FROM dish
* WHERE (category_id = ? AND status = ?) ORDER BY sort ASC,update_time DESC
*
* @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;
//动态构造Key
String key = "dish" + dish.getCategoryId() + "_" + dish.getStatus();
//先从Redis中获取菜品数据
dishDtoList = (List<DishDto>) redisTemplate.opsForValue().get(key);
// 如果有则直接返回,无需查询数据库;
if(dishDtoList!=null){
return R.success(dishDtoList);
}
//构造查询条件
LambdaQueryWrapper<Dish> lambdaQueryWrapper = new LambdaQueryWrapper<>();
//添加条件,查询状态为1的(起售状态)
lambdaQueryWrapper.eq(Dish::getStatus, 1);
lambdaQueryWrapper.eq(dish.getCategoryId() != null, Dish::getCategoryId, dish.getCategoryId());
//条件排序条件
lambdaQueryWrapper.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime);
List<Dish> list = dishService.list(lambdaQueryWrapper);
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> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(DishFlavor::getDishId, dishId);
//SQL: select* from dishflavor where dish_id=?;
List<DishFlavor> dishFlavorlist = dishFlavorService.list(queryWrapper);
dishDto.setFlavors(dishFlavorlist);
return dishDto;
}).collect(Collectors.toList());
// 如果没有则查询数据库,并将查询到的菜品数据放入Redis。
redisTemplate.opsForValue().set(key,dishDtoList,60, TimeUnit.MINUTES);
return R.success(dishDtoList);
}
/**
* 停售、启售菜品
*
* @param status
* @param ids
* @return
*/
@PostMapping("/status/{status}")
public R<String> sale(@PathVariable int status, String[] ids) {
for (String id : ids) {
//通过id获取菜品对象
Dish dish = dishService.getById(id);
dish.setStatus(status);
dishService.updateById(dish);
}
return R.success("成功修改状态!");
}
/**
* 删除菜品
*
* @param ids
* @return
*/
@DeleteMapping
public R<String> delete(String[] ids) {
for (String id : ids) {
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于javaweb的校园外卖管理系统源码+数据库(95分以上大作业项目).zip 纯手打高分项目,代码完整下载可用,确保可以运行,小白也可实操,可以作为课程设计和期末大作业。 基于javaweb的校园外卖管理系统源码+数据库(95分以上大作业项目).zip 纯手打高分项目,代码完整下载可用,确保可以运行,小白也可实操,可以作为课程设计和期末大作业。基于javaweb的校园外卖管理系统源码+数据库(95分以上大作业项目).zip 纯手打高分项目,代码完整下载可用,确保可以运行,小白也可实操,可以作为课程设计和期末大作业。基于javaweb的校园外卖管理系统源码+数据库(95分以上大作业项目).zip 纯手打高分项目,代码完整下载可用,确保可以运行,小白也可实操,可以作为课程设计和期末大作业。基于javaweb的校园外卖管理系统源码+数据库(95分以上大作业项目).zip 纯手打高分项目,代码完整下载可用,确保可以运行,小白也可实操,可以作为课程设计和期末大作业。基于javaweb的校园外卖管理系统源码+数据库(95分以上大作业项目).zip 纯手打高分项目,
资源推荐
资源详情
资源评论
收起资源包目录
基于javaweb的校园外卖管理系统源码+数据库(95分以上大作业项目).zip (329个子文件)
mvnw.cmd 7KB
common.css 275KB
index.css 227KB
vant.min.css 141KB
main.css 17KB
demo.css 8KB
index.css 6KB
add-order.css 6KB
user.css 4KB
page.css 4KB
address.css 3KB
address-edit.css 3KB
order.css 3KB
login.css 2KB
index.css 2KB
pay-success.css 2KB
login.css 2KB
no-wify.css 1KB
iconfont.css 733B
.gitignore 436B
.gitignore 176B
add.html 23KB
index.html 23KB
add.html 18KB
demo_index.html 12KB
list.html 10KB
list.html 9KB
add-order.html 9KB
list.html 9KB
list.html 9KB
user.html 8KB
address-edit.html 7KB
address.html 7KB
index.html 7KB
add.html 7KB
order.html 7KB
list.html 6KB
login.html 4KB
login.html 4KB
pay-success.html 3KB
no-wify.html 2KB
upload.html 2KB
campusDeliveryManagementSystem.iml 336B
maven-wrapper.jar 57KB
DishController.java 8KB
OrderController.java 7KB
SetmealController.java 5KB
EmployeeController.java 5KB
ShoppingCartController.java 4KB
SetmealServicelmpl.java 4KB
OrderServicelmpl.java 4KB
UserController.java 4KB
AddressBookController.java 4KB
LoginCheckFilter.java 3KB
CategoryController.java 3KB
DishServicelmpl.java 3KB
JacksonObjectMapper.java 3KB
CommonController.java 3KB
CategoryServiceImpl.java 2KB
WebMvcConfig.java 2KB
AddressBook.java 1KB
MyMetaObjectHandler.java 1KB
ValidateCodeUtils.java 1KB
SMSUtils.java 1KB
GlobalExceptionHandler.java 1KB
test.java 1KB
Dish.java 1KB
Setmeal.java 1KB
SetmealDish.java 1KB
RedisConfig.java 1KB
Orders.java 1014B
Category.java 986B
Employee.java 950B
DishFlavor.java 899B
SetmealService.java 840B
R.java 782B
demo1.java 760B
ShoppingCart.java 685B
MybaitsPlusConfig.java 685B
ReggieTakeOutApplication.java 680B
DishDto.java 638B
OrderDetail.java 621B
DishService.java 596B
User.java 534B
SetmealDishServicelmpl.java 502B
BaseContext.java 492B
OrderDetailController.java 479B
ShoppingCartServicelmpl.java 468B
OrderDetailServicelmpl.java 461B
AddressBookServicelmpl.java 461B
DishFlavorServicelmpl.java 452B
EmployeeServiceImpl.java 440B
OrdersDto.java 416B
UserServiceImpl.java 412B
SetmealDto.java 310B
OrderService.java 304B
ShoppingCartMapper.java 276B
SetmealDishMapper.java 273B
AddressBookMapper.java 273B
OrderDetailMapper.java 273B
共 329 条
- 1
- 2
- 3
- 4
资源评论
- m0_738748892024-04-27资源值得借鉴的内容很多,那就浅学一下吧,值得下载!
- m0_626847272023-09-08资源质量不错,和资源描述一致,内容详细,对我很有用。
- 合乐sly2023-07-04非常有用的资源,可以直接使用,对我很有用,果断支持!
猰貐的新时代
- 粉丝: 1w+
- 资源: 2554
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功