package com.study.reggie.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.study.reggie.common.R;
import com.study.reggie.dto.DishDto;
import com.study.reggie.entity.Category;
import com.study.reggie.entity.Dish;
import com.study.reggie.entity.DishFlavor;
import com.study.reggie.service.CategoryService;
import com.study.reggie.service.DishFlavorService;
import com.study.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.concurrent.TimeUnit;
import java.util.stream.Collectors;
@RestController
@Slf4j
@RequestMapping("/dish")
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){
dishService.saveWithFlavor(dishDto);
//清理redis中所有的菜品数据
//String keys="dish_*";
//redisTemplate.delete(keys);
//局部清理,只清理该分类下的菜品数据
String key="dish_"+dishDto.getCategoryId()+"_1";
redisTemplate.delete(key);
return R.success("新增成功");
}
/**
* 分页查询展示菜品
*
* 因为要查询分类名称,但dish表关联的是categoryId,所以经过两次sql执行。
* @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::getName,name);
//排序
queryWrapper.orderByDesc(Dish::getUpdateTime);
//执行菜品查询
dishService.page(pageInfo,queryWrapper);
//对象拷贝
BeanUtils.copyProperties(pageInfo,dishDtoPage,"records");
// 菜品表的数据
List<Dish> records = pageInfo.getRecords();
//流拷贝records数据
List<DishDto> list=records.stream().map((item)->{
DishDto dishDto=new DishDto();
//每条数据拷贝到dishDto中
BeanUtils.copyProperties(item,dishDto);
//1.要通过id查询出分类名称,
Long categoryId = item.getCategoryId();
Category category = categoryService.getById(categoryId);
//2.然后赋值给dishDto对象
String categoryName = category.getName();
dishDto.setCategoryName(categoryName);
//返回
return dishDto;
}).collect(Collectors.toList());//封装成list集合
//将封装好的list集合赋值给分页中records
dishDtoPage.setRecords(list);
//最后返回分页查询信息
return R.success(dishDtoPage);
}
/**
* 根据id查询菜品信息和口味信息
* @param id
* @return
*/
@GetMapping("/{id}")
public R<DishDto> getByIdWithFlavor(@PathVariable Long id){
DishDto dishDto = dishService.getByIdWithFlavor(id);
return R.success(dishDto);
}
/**
* 新增菜品功能
* @param dishDto
* @return
*/
@PutMapping
public R<String> update(@RequestBody DishDto dishDto){
dishService.updateWithFlavor(dishDto);
//清理redis中所有的菜品数据
//String keys="dish_*";
//redisTemplate.delete(keys);
//局部清理,只清理该分类下的菜品数据
String key="dish_"+dishDto.getCategoryId()+"_1";
redisTemplate.delete(key);
return R.success("修改成功");
}
/**
* 删除菜品、批量删除
* @param ids
* @return
*/
@DeleteMapping()
public R<String> delete(@RequestParam List<Long> ids){
dishService.removeWithFlavor(ids);
return R.success("删除成功");
}
/**
* 批量起售、停售,单个起售、停售
* @param status
* @param ids
* @return
*/
@PostMapping("/status/{status}")
public R<String> update(@PathVariable int status,@RequestParam List<Long> ids){
LambdaQueryWrapper<Dish> queryWrapper=new LambdaQueryWrapper<>();
queryWrapper.in(Dish::getId,ids);
//将id在这里的数据查询出来
List<Dish> list = dishService.list(queryWrapper);
//修改每一个状态位
for (Dish dish : list) {
dish.setStatus(status);
}
//执行修改
dishService.updateBatchById(list);
return R.success("修改成功");
}
/**
* 回显菜品分类数据
* @param dish
* @return
*/
/*@GetMapping("/list")
public R<List<Dish>> list(Dish dish){
LambdaQueryWrapper<Dish> queryWrapper=new LambdaQueryWrapper<>();
//查询该分类id下的菜品
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;
//拼接一个redis中存储的key
String key="dish_"+dish.getCategoryId()+"_"+dish.getStatus();
dishDtoList = (List<DishDto>) redisTemplate.opsForValue().get(key);
//存在值,则直接返回redis中的数据
if(dishDtoList !=null){
return R.success(dishDtoList);
}
LambdaQueryWrapper<Dish> queryWrapper=new LambdaQueryWrapper<>();
//查询该分类id下的菜品
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);
//流拷贝records数据
dishDtoList=list.stream().map((item)->{
DishDto dishDto=new DishDto();
//每条数据拷贝到dishDto中
BeanUtils.copyProperties(item,dishDto);
//1.要通过id查询出分类名称,
Long categoryId = item.getCategoryId();
Category category = categoryService.getById(categoryId);
//2.然后赋值给dishDto对象
String categoryName = category.getName();
dishDto.setCategoryName(categoryName);
//3.获取菜品id
Long dishId = item.getId();
//3-1 查询每个菜品的口味信息
LambdaQueryWrapper<DishFlavor> lambdaQueryWrapper=new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(DishFlavor::getDishId,dishId);
List<DishFlavor> di
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
适合于学过SpringBoot+vue,会用Redis的人群(大三、大四)。 黑马视频中不曾开发的后端模块都以全部开发完成。 瑞吉外卖项目是根据黑马课程的资源项目,但黑马课程中有些模块没有开发和讲解。导致大家在学习完后还有很多的模块是不完整的。 该资源是我学习完瑞吉外卖项目后将所有的功能模块都实现了。所有的接口在后端都有相应的代码去做相应的操作。前端的请求接口在后端都有对应的实现。 下载,解压后 1、有sql文件在MySQL工具中创建数据库和表。 2、配置yml文件,配置你的数据库用户名、密码,Redis密码,端口。 3、运行Redis、启动项目即可访问。 该资源可以用来做自己的简历项目经验,当然你得看懂该项目。(我这里后端的每个模块功能、里面难懂的代码都有注释。相信大家认真阅读是很容易理解的)。
资源推荐
资源详情
资源评论
收起资源包目录
瑞吉外卖项目完整篇(vue+springboot+redis+mybatis-plus) (763个子文件)
v1.0 2KB
v1.0 1001B
v1.0 41B
v1.0 41B
017be3dc5ee70806decfd2e707e787469cdef8 2KB
025a615b606b4743044412622a174d094224cb 80B
02b0fed280ba930eba72ff2ae001fc0eab0465 456B
03eeba3a48c57b9877cac15faf62cecb1ef2b8 2KB
04d6b276e0935b1118b0b13f4537c41f23e29a 440B
04f3febc38d0c0aee50dec06b590661c505935 228B
059acc7ba8395c2ef4135e4e05205b08a84092 3KB
05ac4bb42da0d51fab0cb6c62de5ebf0e19613 4KB
05ececb5b39182dfc58f630b1937b23bf3bb59 947B
0795b94ebd1aa1b5d1329304299e633d6e319b 254B
079e28cc1513907e947b1e6139be0b2e02a046 357B
07ba60bc2c2845edaeee84d4e1d645ab82e847 80B
08a88dfd79962311c8df202956156554143aba 491B
096e4420df088f449714594d443415cd40195b 57KB
0a2a112f1fe1ea4ef7fcf6063004a1a6871363 48B
0b65cd67b4223ff24cec4f41dbe19de6dcf90d 221B
0b76b6570e0dc17ad4eab5acc713adddbd2fc9 245B
0bde1d9b22aed6b6aea442fb419f64bd621bc6 112B
0d1296847be4917236bc3299684e6bc5a8234d 2KB
0dcb2835023d82b417a6fca22fa5ab15212d35 1KB
0e19758d2630fc28b6a342f9872e3264e30bff 186B
0ea6902842c5b07f9a7ce9936bb1b659be40e9 6KB
103634db054434ef592a3d4221445969c9f18a 15KB
109cb081b202250a7c72246ae028f0a58415b2 296B
11380163e8919babd6c7093798066be906463d 1KB
119254976926420e44071bbf08d6c3df381c9e 4KB
125b4400eca2bd9c774417c1636ffb8872029f 116B
12aee742657d7a8463be31a2ccf80e08acb582 128B
131d15292d053495be416e6689c3e52022dd63 394B
1321c5d601f9666ad35ce309cada5c44514896 445B
137b88359cb6fee0dc718bb985e0471598e71b 390B
140ea1fe7ca5694e45d5baf124d4239f41f3a1 46B
1417306f8fc570ecfbfd1a9b2e6c04cdffe1ec 322B
143d6305ee35eb84153b9d458498f2791f58f9 217B
1472a6b54b48a9dbead4b944817e160fc8c275 357B
150308af78ae3c4f15c547b3b3a22491b38853 123B
159423abbc867e63654342ebc9b2544ed527e6 179B
1744f714f97e8705f556548e639594e0b5b72d 90B
184f29f38620e8388e8f19d726a34e702240b6 614B
1af08bb950ceca97e77a1fef0627df97a807fe 74B
1b5e113f9d12919003a14f3ae2aab96b4bceca 30KB
1bd5fc2d1a9d4338bcb511b22827c0f63e9138 194B
1c85d2d4f0691bebf04dbd99a9f41709f47068 357B
1e48c61687f53786d216155672737f3984f556 45B
1fa4b7f6fbe0a32cd4b07f6a42d417f97d2e84 1KB
20a7f9338b1c3c586f10dcfa15540c897dc585 833B
20b2ed37494a3992413a06f8690f3f8022b0cb 167B
21151e6db15d8c10bbb7dbc7a0069104618afe 82B
2136758b317aa21b1ca9b68e262281c9af695f 8KB
2136eaf6ef3567a1d02001dc94d74f6d6aa067 3KB
214de271c046e0fe58fb3b76e098621a05a979 371B
22a8fc50180709d5fffc951c2d9f65b495c649 2KB
235229223888c53f1e2350553cc5dd17adc4d8 98B
240abf2c225dfb9487aa03bb5fe6e98e9781a5 210B
245f6773128d394e950ba4d689181d4aec1d0c 43B
249f368c6cbb6de56a6b093bc689324f4b5171 55B
25a0b90508626a1101084843e7233fb4a32b3d 66KB
27333fca71765d1b53dfe9e08f2e82c7986ca2 80B
2739403816a76a1d7465600d1e1e0a338e7fe6 335B
27afe49be18aa1e3330441741be053c74718ba 45B
281d09013e0a2c5f8e699a0a6038d9480291e5 5KB
288736882ad25b31e08c40f597da670defae0d 357B
2b851ed0b461ca296f943a066b5608e041c18e 52KB
2c863408b42de319396ea63fa3fd8a964639a8 197B
2d2c28ee0c7ec4aa8cb4e19ed827431950fc28 386B
2e34e974eec9f62abae0d98bf69201732ccb4b 117B
2e68e87cb6e13104c45c64eebd0f14eea66ad5 15KB
2e78d6270ef8e5cade59c3972ca6df5fa757a6 1KB
2fc11e76e616ffae88626845cd8f618886d74d 170B
307fce17e3be10b78f6861d6edff437931baab 762B
311bbfbcfd869b6390055e12998926d5038aca 357B
31e037d25c8eb85f0c73fd966624267be93da5 5KB
3229485c9e27d4222077e320e25431860232b2 217B
3258d9ad0c78eff90b15af0ea4d8d2a64d828f 539B
3394eddf72ac48af9bd717b483fb4e1107446c 540B
33a9600561cfa062a70ce20d435d556776c2df 116B
340b34e6f27913435fe0efdacbe8c4b2ad6013 123B
3428f5c5852d3ff5e956f7e5b41e2cc834f3ad 3KB
3511409562fb455bc551bf6c93e3570d056852 2KB
3514290fe3a68c3f33ae439700298e37e40778 72KB
3544cac764b7bf5ebb4b28a488e612e43a5ed1 4KB
35c82db54dc4cc056b38927d94879b8e3cdcc1 219B
3625e9e23af8005c44dec8bdc9c37e71c4c9d2 441B
36347f1646518f007caa2b022f42345ae7dcea 2KB
366e8d7b87b6cd9877ee6e6277938a20d124e8 445B
3935f49794f02ab3f356ddecd8f25133ec0267 2KB
397dbb95666b6e34114167da3993d54e97cd3e 582B
39cb86c2c4efcdfc2c6fd9f4674ec23bcf8f98 1KB
3c3b28dbb4476aeef5ff5827fbb8fa50c135ac 49B
3c885b5c57430ad1eb5aa8c9921e45c2c670ef 1KB
3d74a86093e629dc2b579b0ea24e171616f976 5KB
3eb8f0bc291af02c4cb2669dfe81d7c5be1700 49B
3f53c1a2c9ca3fc3cddb0d471f9683a385ed3a 844B
3f85bcaf7ae3135bca223f475a0bbcb025f1b5 335B
4168a6b63c18717610575ad9fa20f9b17edee2 271B
4187518523390a6a81de84df995c8468905778 81B
共 763 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8
心态还需努力呀
- 粉丝: 3w+
- 资源: 32
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 微电网(两台)主从控制孤岛-并网平滑切的分析 分析了: 1.孤岛下VF控制 2.并网下PQ控制 3.孤岛下主从控制 4.孤岛到并网的平滑切控制 5.除模型外还对分布式发电与主动配电网一些常见问题做了
- 第四组二手产品.zip
- MVIMG_20241222_194113.jpg
- 基于小程序的在线疫苗预约小程序源代码(java+小程序+mysql+LW).zip
- 基于小程序的岳阳市美术馆预约平台源代码(java+小程序+mysql+LW).zip
- 基于小程序的音乐播放器小程序源代码(java+小程序+mysql+LW).zip
- 多功能知识付费源码下载实现流量互导多渠道变现+搭建教程
- 3. Kafka入门-安装与基本命令
- 基于小程序的养老院管理系统源代码(java+小程序+mysql+LW).zip
- 基于小程序的新冠抗原自测平台小程序源代码(java+小程序+mysql+LW).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
前往页