1)需求分析
2)代码开发-交互过程
①请求:菜品 + 套餐
*显示菜品和套餐的分类在之前已经有写过后端代码,这里不需要重复再写
购物车还没做,先把购物车的请求【cartListApi】注释掉或者从静态json文件中加载,以免进入页面发出的请求404导致其他请求不能正常响应展示在页面中
*注释掉请求
*或者从静态json文件中加载
OK,验证之
②请求:初次进入页面时,获取第一个分类下的菜品或者套餐
Ⅰ 这是菜品信息展示
等会儿!将课程代码的图片请求改为从minion中请求。
看下图
OK了,这几个菜的路径我都指向一张(即都存了同一张图) 0.o!
*另外需要修改的是:还需要展示该菜品所对应的口味数据,需要对后端返回的值进行修改(CV一份吧)
这里的业务是:如果该菜品有对应的口味信息,则黄色的“+”号按钮变成“选择规格”
这样修改对原先的后台系统不受影响,因为需要返回的数据格式没有变化,这次只是追加了一些数据,对原先返回的数据并不收影响。
/**
* 还需要展示该菜品所对应的口味数据,需要对后端返回的值进行修改
* @param dish
* @return
*/
@GetMapping("/list")
public R<List<DishDto>> list(Dish dish){
//构造查询条件
LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper();
queryWrapper.eq(dish.getCategoryId() != null,Dish::getCategoryId,dish.getCategoryId());
//起售状态
queryWrapper.eq(Dish::getStatus,1);
//添加排序条件
queryWrapper.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime);
List<Dish> list = dishService.list(queryWrapper);
/**遍历查出来的list,将里面的数据拷贝到DishDto中,(由于DishDto继承了Dish,也有Dish里的所有属性)
* 然后根据该菜品的id 查询口味表dishFlavor表中的对应口味信息,
* 再将其口味信息封装到DishDto的List<DishFlavor> flavors中
*/
List<DishDto> dishDtos = list.stream().map((item) -> {//每个item就是一个Dish
DishDto dishDto = new DishDto();
BeanUtils.copyProperties(item,dishDto);
log.info("验证一下有没有拷贝进来,菜品价格:{}",dishDto.getPrice().toString());
//设置dishDto里的categoryName
Long categoryId = item.getCategoryId();
Category category = categoryService.getById(categoryId); //查分类表
if(category != null){
dishDto.setCategoryName(category.getName());
}
LambdaQueryWrapper<DishFlavor> dishFlavorLambdaQueryWrapper = new LambdaQueryWrapper();
dishFlavorLambdaQueryWrapper.eq(DishFlavor::getDishId,item.getId());
//SELECT * FROM dish_flavor WHERE dish_id = '1397849739276890114';
List<DishFlavor> dishFlavors = dishFlavorService.list(dishFlavorLambdaQueryWrapper);
dishDto.setFlavors(dishFlavors);
return dishDto;
}).collect(Collectors.toList());
return R.success(dishDtos);
}
Ⅱ 这是套餐信息展示
/**
* 根据条件查询套餐信息
* 注意,如果请求后加的不是json数据,是键值对的话,就不要添加@RequestBody注解
* 例如请求:http://localhost:8080/setmeal/list?categoryId=1413342269393674242&status=1
* @param setmeal
* @return
*/
@GetMapping("/list")
public R<List<Setmeal>> list(Setmeal setmeal){
log.info("套餐信息查询:{}",setmeal.toString());
LambdaQueryWrapper<Setmeal> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(setmeal.getCategoryId() != null,Setmeal::getCategoryId,setmeal.getCategoryId());
queryWrapper.eq(setmeal.getStatus() != null,Setmeal::getStatus,setmeal.getStatus());
//排序
queryWrapper.orderByDesc(Setmeal::getUpdateTime);
List<Setmeal> list = setmealService.list(queryWrapper);
return R.success(list);
}
}
*测试之