糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 【瑞吉外卖】学习笔记-day4:(三)菜品管理开发——菜品信息分页查询 修改菜品 停售

【瑞吉外卖】学习笔记-day4:(三)菜品管理开发——菜品信息分页查询 修改菜品 停售

时间:2022-05-15 00:40:54

相关推荐

【瑞吉外卖】学习笔记-day4:(三)菜品管理开发——菜品信息分页查询 修改菜品 停售

菜品信息分页查询:

需求分析:

系统中的菜品数据很多的时候,如果在一个页面中全部展示出来会显得比较乱,不便于查看,所以一般的系统中都会以分页的方式来展示列表数据。

其中,图片列和菜品分类列比较特殊。图片列会用到文件下载功能;菜品分类列只保存了菜品的category_id,需通过查找category_id所对应的菜品分类名称,从而回显数据,才能在网页界面中显示。

交互流程:

1、页面(backend/page/food/list.html)发送ajax请求,将分页查询参数(page、pageSize、name)提交到服务端,获取分页数据

2、页面发送请求,请求服务端进行图片下载,用于页面图片展示

开发菜品信息分页查询功能,其实就是在服务端编写代码去处理前端页面发送的这2次请求即可。

图片下载的请求前面已经写好了,前端也写好了相关的请求,所以第二步的图片下载和展示就不需要另外开发了。

代码开发:(重点梳理熟悉代码流程)

DishController层代码:

/*** 菜品信息分页查询* @param page* @param pageSize* @param name* @return*/@GetMapping("/page")public R<Page> page(int page,int pageSize,String name){//构造一个分页构造器对象Page<Dish> dishPage = new Page<>(page,pageSize);//构造一个条件构造器LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();//添加过滤条件 注意判断是否为空 使用对name的模糊查询queryWrapper.like(name != null,Dish::getName,name);//添加排序条件 根据更新时间降序排queryWrapper.orderByDesc(Dish::getUpdateTime);//去数据库处理分页 和 查询dishService.page(dishPage,queryWrapper);//因为上面处理的数据没有分类的id,这样直接返回R.success(dishPage)虽然不会报错,但是前端展示的时候这个菜品分类这一数据就为空return R.success(dishPage);}

这段代码有bug,前端展示的时候,菜品分类这一栏的数据都为空

之前我们创建了DishDto类,发现类中的属性名正好和前端的categoryName属性名对应

修改DishController中的page方法

/*** 菜品信息分页查询* @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);//对象拷贝(忽略掉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);}

修改菜品:(先将数据回显到修改界面,后修改保存数据)

需求分析:

在菜品管理列表页面点击修改按钮,跳转到修改菜品页面在修改页面回显菜品相关信息并进行修改最后点击确定按钮完成修改操作

交互流程:

页面发送ajax请求,请求服务端获取分类数据,用于菜品分类下拉框中数据展示(已完成)页面发送ajax请求,请求服务端,根据id查询当前菜品信息,用于菜品信息回显页面发送请求,请求服务端进行图片下载,用于页图片回显(已完成)点击保存按钮,页面发送ajax请求,将修改后的菜品相关数据以json形式提交到服务端

代码开发:

在DishService接口中添加方法getByIdWithFlavor

在DishServicelmpl中实现getByIdWithFlavor方法,并添加逻辑代码

/*** 根据id来查询菜品信息和对应的口味信息* @param id* @return*/@Overridepublic DishDto getByIdWithFlavor(Long id) {//查询菜品基本信息,从dish表查询Dish dish = this.getById(id);DishDto dishDto = new DishDto();BeanUtils.copyProperties(dish,dishDto);//查询当前菜品对应的口味信息,从dish_flavor表查询LambdaQueryWrapper<DishFlavor> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(DishFlavor::getDishId,dish.getId());List<DishFlavor> flavors = dishFlavorService.list(queryWrapper);dishDto.setFlavors(flavors);return dishDto;}

根据服务端接收的id,查询菜品的基本信息-dish创建dishDto对象,并将查询到的dish对象属性赋值给dishDto根据查询到的dish对象,可以取出对应的菜品id,再通过等值条件查询,查询到DishFlavor数据信息将查询到的flavor数据信息使用set方法赋值给dishDto对象返回dishDto对象

在DishController中添加get方法,实现添加在DishServicelmpl中的逻辑代码,返回查询到的数据信息

/*** 根据id查询菜品信息和对应的口味信息* @param id* @return*/@GetMapping("/{id}")public R<DishDto> get(@PathVariable Long id){DishDto dishDto = dishService.getByIdWithFlavor(id);return R.success(dishDto);}

在DishService接口中添加updateWithFlavor方法

DishServicelmpl类中实现DishService定义的方法,并添加代码逻辑

根据id修改菜品的基本信息通过dish_id,删除菜品的flavor获取前端提交的flavor数据为条flavor的dishId属性赋值将数据批量保存到dish_flavor数据库

@Overridepublic void updateWithFlavor(DishDto dishDto) {//更新dish表基本信息this.updateById(dishDto);//更新dish_flavor表基本信息//1.清理当前菜品对应口味数据---dish_flavor表的delete操作LambdaQueryWrapper<DishFlavor> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(DishFlavor::getDishId, dishDto.getId());dishFlavorService.remove(queryWrapper);//添加当前提交过来的口味数据---dish_flavor表的insert操作List<DishFlavor> flavors = dishDto.getFlavors();flavors = flavors.stream().map((item) ->{item.setDishId(dishDto.getId());return item;}).collect(Collectors.toList());dishFlavorService.saveBatch(flavors);}

在DishController类中添加方法update,并调用updateWithFlavor方法实现表中数据的修改

/*** 修改菜品* @param dishDto* @return*/@PutMappingpublic R<String> update(@RequestBody DishDto dishDto){log.info(dishDto.toString());dishService.updateWithFlavor(dishDto);return R.success("修改菜品成功");}

停售起售菜品以及修改菜品:

/*** 停售/起售菜品* @param status* @param ids* @return*/@PostMapping("/status/{status}")public R<String> sale(@PathVariable int status,String[] ids){for(String id: ids){Dish dish = dishService.getById(id);dish.setStatus(status);dishService.updateById(dish);}return R.success("修改成功");}/*** 删除菜品* @param ids* @return*/@DeleteMappingpublic R<String> delete(String[] ids){for (String id:ids) {dishService.removeById(id);}return R.success("删除成功");}

【瑞吉外卖】学习笔记-day4:(三)菜品管理开发——菜品信息分页查询 修改菜品 停售起售菜品以及删除菜品

如果觉得《【瑞吉外卖】学习笔记-day4:(三)菜品管理开发&mdash;&mdash;菜品信息分页查询 修改菜品 停售》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。