功能需求
对菜品属性进行修改
梳理交互过程
1.页面发送ajax请求,请求服务端获取分类数据,用于菜品分类下拉框中数据展示(前文已做过)
2.页面发生ajax请求,请求服务端,根据id查询当前菜品信息,用于菜品回显
3.页面发生请求,请求服务端进行图片下载,用于页图片回显(前文已做过)
4.点击保存按钮,页面发生ajax请求,将修改后的菜品相关数据以json形式提交到服务端
2.页面发生ajax请求,请求服务端,根据id查询当前菜品信息,用于菜品回显 :
DishController:
@GetMapping("/{id}")
public R<DishDto> update(@PathVariable Long id){
DishDto dishDto = dishService.getByIdWithFlavor(id);
return R.success(dishDto);
}
DishService:
//根据id查询菜品信息和对应口味信息
public DishDto getByIdWithFlavor(Long id);
DishServiceImpl:
/**
* 根据id查询菜品信息和对应口味信息
* @param id
* @return
*/
@Override
public DishDto getByIdWithFlavor(Long id) {
//查询菜品基本信息
Dish dish = this.getById(id);
//将菜品信息拷贝至DishDto
DishDto dishDto = new DishDto();
BeanUtils.copyProperties(dish,dishDto);
//查询菜品对应的口味信息,dish_flavor
LambdaQueryWrapper<DishFlavor> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(id!=null,DishFlavor::getDishId,id);
List<DishFlavor> flavors = dishFlavorService.list(queryWrapper);
dishDto.setFlavors(flavors);
return dishDto;
}
4.点击保存按钮,页面发生ajax请求,将修改后的菜品相关数据以json形式提交到服务端
DishController:
/**
* 保存数据
* @param dishDto
* @return
*/
@PutMapping()
public R<String> update(@RequestBody DishDto dishDto ){
dishService.updateWithFlavors(dishDto);
return R.success("更新成功");
}
DishService:
public void updateWithFlavors(DishDto dishDto);
DishServiceImpl:
@Override
public void updateWithFlavors(DishDto dishDto) {
//更新基本菜品信息
this.updateById(dishDto);
//更新口味表,清理当前菜品的口味数据,再添加
LambdaQueryWrapper<DishFlavor> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(dishDto!=null,DishFlavor::getDishId,dishDto.getId());
dishFlavorService.remove(queryWrapper);
List<DishFlavor> flavors = dishDto.getFlavors();
flavors = flavors.stream().map((item)->{
item.setDishId(dishDto.getId());
return item;
}).collect(Collectors.toList());
dishFlavorService.saveBatch(flavors);
}