瑞吉外卖 菜品管理
分页 删除 停售起售 添加菜品
@RestController
@RequestMapping("/dish")
public class DishController {
@Resource
DishService dishService;
@Resource
CategoryService categoryService;
//分页查询
@GetMapping("/page")
public R<Page<?>> page(int page, int pageSize, String name) {
Page<Dish> dishPage = 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(dishPage,queryWrapper);
BeanUtils.copyProperties(dishPage, dishDtoPage, "record");
List<Dish> records = dishPage.getRecords();
List<DishDto> list = records.stream().map((item) -> {
DishDto dishDto = new DishDto();
BeanUtils.copyProperties(item, dishDto);
Category category = categoryService.getById(item.getCategoryId());
if (category != null) dishDto.setCategoryName(category.getName());
return dishDto;
}).toList();
dishDtoPage.setRecords(list);
return R.success(dishDtoPage);
}
//删除菜品
@DeleteMapping
public R<String> delete(@RequestParam List<Long> ids) {
dishService.removeWithDish(ids);
return R.success("菜品删除成功");
}
//停售菜品
@PostMapping("/status/{status}")
public R<String> updateStatusById(@PathVariable Integer status, Long[] ids) {
for (Long id : ids) {
Dish dish = dishService.getById(id);
dish.setStatus(status);
dishService.updateById(dish);
}
return R.success("修改菜品状态成功");
}
//根据id查询菜品
@GetMapping("/{id}")
public R<DishDto> get(@PathVariable Long id) {
DishDto dishDto = dishService.getIdWithFlavor(id);
return R.success(dishDto);
}
//新增菜品
@PostMapping
public R<String> save(@RequestBody DishDto dishDto) {
dishService.saveWithFlavor(dishDto);
return R.success("新增菜品成功");
}
//修改菜品
@PutMapping
public R<String> update(@RequestBody DishDto dishDto) {
dishService.updateWithFlavor(dishDto);
return R.success("菜品修改成功");
}
}
注意修改时调用list接口是category的
CategoryController
//给其他需要菜品或套餐的下拉框
@GetMapping("/list")
public R<List<Category>> list(Category category){
LambdaQueryWrapper<Category> categoryLambdaQueryWrapper = new LambdaQueryWrapper<>();
categoryLambdaQueryWrapper.eq(category.getType()!=null, Category::getType, category.getType());
categoryLambdaQueryWrapper.orderByAsc(Category::getSort).orderByDesc(Category::getCreateTime);
List<Category> list = categoryService.list(categoryLambdaQueryWrapper);
return R.success(list);
}
@Service
public class DishServiceImpl extends ServiceImpl<DishMapper, Dish> implements DishService {
@Resource
DishFlavorService dishFlavorService;
/**
* 1.这些id中正在售卖的菜品不能删status=1
* 2.关联口味表里的对应数据也要一起删 dishId
*/
@Override
public void removeWithDish(List<Long> ids) {
LambdaQueryWrapper<Dish> dishWrapper = new LambdaQueryWrapper<>();
dishWrapper.in(Dish::getId, ids);
dishWrapper.eq(Dish::getStatus, 1);
if (this.count(dishWrapper) > 0) throw new CustomException("当前菜品正在售卖中");
this.removeByIds(ids);
LambdaQueryWrapper<DishFlavor> dishFlavorWrapper = new LambdaQueryWrapper<>();
dishFlavorWrapper.in(DishFlavor::getDishId, ids);
dishFlavorService.remove(dishFlavorWrapper);
}
@Override
public DishDto getIdWithFlavor(Long id) {
Dish dish = this.getById(id);
DishDto dishDto = new DishDto();
BeanUtils.copyProperties(dish, dishDto);
LambdaQueryWrapper<DishFlavor> qw = new LambdaQueryWrapper<>();
qw.eq(DishFlavor::getDishId, dish);
List<DishFlavor> flavors = dishFlavorService.list(qw);
dishDto.setFlavors(flavors);
return dishDto;
}
@Override
public void saveWithFlavor(DishDto dishDto) {
this.save(dishDto);
Long dishId = dishDto.getId();
List<DishFlavor> flavors = dishDto.getFlavors();
flavors = flavors.stream().map((item) -> {
item.setDishId(dishId);
return item;
}).toList();
dishFlavorService.saveBatch(flavors);
}
@Override
public void updateWithFlavor(DishDto dishDto) {
this.updateById(dishDto);
//删除口味
LambdaQueryWrapper<DishFlavor> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(DishFlavor::getDishId, dishDto.getId());
dishFlavorService.remove(queryWrapper);
//重新写入
List<DishFlavor> flavors = dishDto.getFlavors();
flavors = flavors.stream().map((item) -> {
item.setDishId(dishDto.getId());
return item;
}).toList();
dishFlavorService.saveBatch(flavors);
}
}