功能开发-前端菜品套餐展示功能
一、菜品展示功能
1.1、需求分析
获取分类后,根据分类的state去请求dish或setmeal传CategoryId
1.2、代码开发
当前点击菜品分类,已经能显示菜品,但是口味没有显示,所以要用DishDto返回,
修改/dish/list
思路:查出list,循环每一个dish,新增dto,复制dish到dto,查出,Category,dish_flavor放到dto里面
package com.xxxit.reggie.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xxxit.reggie.common.R;
import com.xxxit.reggie.dto.DishDto;
import com.xxxit.reggie.entity.Category;
import com.xxxit.reggie.entity.Dish;
import com.xxxit.reggie.entity.DishFlavor;
import com.xxxit.reggie.service.CategoryService;
import com.xxxit.reggie.service.DishFlavorService;
import com.xxxit.reggie.service.DishService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.stream.Collectors;
/**
* 菜品管理
*/
@RestController
@Slf4j
@RequestMapping("/dish")
public class DishController {
@Autowired
private DishService dishService;
@Autowired
private DishFlavorService dishFlavorService;
@Autowired
private CategoryService categoryService;
/**
* 新增菜品
* @param dishDto
* @return
*/
@PostMapping
public R<String> save(@RequestBody DishDto dishDto){
log.info(dishDto.toString());
// 保存菜品,直接存,向上转型
dishService.saveWithFlavor(dishDto);
return R.success("新增菜品成功");
}
/**
* 查询菜品分页功能
* @param page
* @param pageSize
* @param name
* @return
*/
@GetMapping("/page")
public R<Page> page(int page,int pageSize,String name){
log.info("获取菜品分页信息");
// 构造分页构造器对象
Page<Dish> pageInfo = new Page<>(page,pageSize);
Page<DishDto> dishDtoPage = new Page<>();
// 条件构造器
LambdaQueryWrapper<Dish> DishQueryWrapper = new LambdaQueryWrapper<>();
// 添加查询条件
DishQueryWrapper.like(name != null,Dish::getName,name);
// 添加排序添加
DishQueryWrapper.orderByDesc(Dish::getUpdateTime);
// 执行
dishService.page(pageInfo,DishQueryWrapper);
// 复制,忽略数据库数据,只拿页码数据条数
BeanUtils.copyProperties(pageInfo,dishDtoPage,"records");
// 分类id改名字
List<Dish> records = pageInfo.getRecords();
List<DishDto> DishDtoRecords = records.stream().map((item) -> {
// 把Dish的数据复制到dishDto
DishDto dishDto = new DishDto();
// 复制
BeanUtils.copyProperties(item,dishDto);
Long categoryId = item.getCategoryId();
Category category = categoryService.getById(categoryId);
String categoryName = category.getName();
dishDto.setCategoryName(categoryName);
return dishDto;
}).collect(Collectors.toList());
// 把数据放进页面
dishDtoPage.setRecords(DishDtoRecords);
return R.success(dishDtoPage);
}
/**
* 根据id查询菜品信息
* @param id
* @return
*/
@GetMapping("/{id}")
public R<DishDto> get(@PathVariable Long id){
log.info("查询菜品信息:{}",id);
DishDto dish = dishService.getByIdWithFlavor(id);
return R.success(dish);
}
/**
* 修改菜品
* @param dishDto
* @return
*/
@PutMapping
public R<String> update(@RequestBody DishDto dishDto){
log.info(dishDto.toString());
dishService.updateWithFlavor(dishDto);
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);
}*/
/**
* 根据分类id查询对应菜品
* @param dish
* @return
*/
@RequestMapping("/list")
public R<List<DishDto>> list(Dish dish){
// 条件构建器
LambdaQueryWrapper<Dish> dishLambdaQueryWrapper = new LambdaQueryWrapper<>();
// 添加条件
dishLambdaQueryWrapper.eq(dish.getCategoryId() != null,Dish::getCategoryId,dish.getCategoryId());
// 添加条件:启售
dishLambdaQueryWrapper.eq(Dish::getStatus,1);
// 添加排序条件
dishLambdaQueryWrapper.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime);
// 执行
List<Dish> list = dishService.list(dishLambdaQueryWrapper);
List<DishDto> dishDtos = list.stream().map((item) -> {
// 创建一个新的dishDto,复制Dish内容
DishDto dishDto = new DishDto();
BeanUtils.copyProperties(item,dishDto);
// 顺便把CategoryName也填充了,方便以后使用
// 1.获取CategoryId
Long categoryId = item.getCategoryId();
// 2.获取Name
Category category = categoryService.getById(categoryId);
if(category != null){
String categoryName = category.getName();
// 3.设置DishDto的categoryName
dishDto.setCategoryName(categoryName);
}
// 按Dish的id查询dish_flavor,填充进去
// 当前菜品id
Long dishId = item.getId();
// 1.条件构造器
LambdaQueryWrapper<DishFlavor> dishFlavorLambdaQueryWrapper = new LambdaQueryWrapper<>();
// 2.添加条件
dishFlavorLambdaQueryWrapper.eq(DishFlavor::getDishId,dishId);
// 3.查询属于该菜品的所有口味
List<DishFlavor> flavors = dishFlavorService.list(dishFlavorLambdaQueryWrapper);
// 4.设置
dishDto.setFlavors(flavors);
return dishDto;
}).collect(Collectors.toList());
return R.success(dishDtos);
}
}
1.3、测试
二、套餐展示
2.1、需求分析
当前就点击菜品分类会展示菜品信息,点击套餐分类还没反应,套餐不需要dto,虽有菜品,但是需要的是直接往购物车加入一个套餐
2.2、代码开发
package com.xxxit.reggie.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xxxit.reggie.common.R;
import com.xxxit.reggie.dto.SetmealDto;
import com.xxxit.reggie.entity.Category;
import com.xxxit.reggie.entity.Setmeal;
import com.xxxit.reggie.service.CategoryService;
import com.xxxit.reggie.service.SetmealDishService;
import com.xxxit.reggie.service.SetmealService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.stream.Collectors;
/**
* 套餐管理
*/
@RestController
@RequestMapping("/setmeal")
@Slf4j
public class SetmealController {
@Autowired
private SetmealService setmealService;
@Autowired
private SetmealDishService setmealDishService;
@Autowired
private CategoryService categoryService;
/**
* 新增套餐
* @param setmealDto
* @return
*/
@PostMapping
public R<String> save(@RequestBody SetmealDto setmealDto){
log.info("新增套餐信息:{}",setmealDto.toString());
setmealService.saveWithDish(setmealDto);
return R.success("新增成功");
}
/**
* 分页查询功能
* @param page
* @param pageSize
* @param name
* @return
*/
@GetMapping("/page")
public R<Page> page(int page,int pageSize,String name){
// 前端展示的套餐分类不是id而是名称所以用dto返回结果
// 分页构造器
Page<Setmeal> pageInfo = new Page<>(page,pageSize);
Page<SetmealDto> setmealDtoPage = new Page<>();
// 条件构造器
LambdaQueryWrapper<Setmeal> setmealLambdaQueryWrapper = new LambdaQueryWrapper<>();
// 添加条件
setmealLambdaQueryWrapper.like(name != null,Setmeal::getName,name);
setmealLambdaQueryWrapper.orderByDesc(Setmeal::getUpdateTime);
setmealService.page(pageInfo,setmealLambdaQueryWrapper);
// 复制页面信息,忽略数据库信息
BeanUtils.copyProperties(pageInfo,setmealDtoPage,"records");
// 赋值分类名称
List<Setmeal> records = pageInfo.getRecords();
List<SetmealDto> list = records.stream().map((item) -> {
// Setmeal信息复制到SetmealDto
SetmealDto setmealDto = new SetmealDto();
BeanUtils.copyProperties(item,setmealDto);
// 获取名字赋值
Long categoryId = item.getCategoryId();
Category category = categoryService.getById(categoryId);
if (category != null){
setmealDto.setCategoryName(category.getName());
}
return setmealDto;
}).collect(Collectors.toList());
// 设置数据库数据
setmealDtoPage.setRecords(list);
return R.success(setmealDtoPage);
}
@DeleteMapping
public R<String> delete(@RequestParam List<Long> ids){
log.info("ids:{}",ids);
setmealService.removeWithDish(ids);
return R.success("套餐数据删除成功");
}
/**
* 根据分类id查询分类下套餐
* @param setmeal
* @return
*/
@GetMapping("/list")
public R<List<Setmeal>> list(Setmeal setmeal){ // //因为id和status在地址传递,不用@RequestBody
log.info("查看套餐:{}",setmeal.toString());
// 1.获取CategoryId
Long categoryId = setmeal.getCategoryId();
// 2.条件构造器
LambdaQueryWrapper<Setmeal> categoryLambdaQueryWrapper = new LambdaQueryWrapper<>();
// 3.添加条件
categoryLambdaQueryWrapper.eq(setmeal.getCategoryId() != null,Setmeal::getCategoryId,categoryId);
categoryLambdaQueryWrapper.eq(setmeal.getStatus() != null,Setmeal::getStatus,setmeal.getStatus());
categoryLambdaQueryWrapper.orderByDesc(Setmeal::getUpdateTime);
// 4.查询
List<Setmeal> list = setmealService.list(categoryLambdaQueryWrapper);
return R.success(list);
}
}