新增套餐



准备工作:







套餐信息分页查询
前面已经写了好几个分页查询了,这里查询的关键点,是套餐分类名称,不在套餐表中,我们要到别的表里拿,然后封装进setmealDto
@GetMapping("/page")
public R page(int page,int pageSize,String name){
Page<Setmeal> pageInfo =new Page<>(page,pageSize);
Page<SetmealDto> dtoPage =new Page<>();
LambdaQueryWrapper<Setmeal> queryWrapper =new LambdaQueryWrapper<>();
//如果有传name就增加name筛选
queryWrapper.eq(null!=name,Setmeal::getName,name);
//按照更新时间降序
queryWrapper.orderByDesc(Setmeal::getUpdateTime);
setmealService.page(pageInfo,queryWrapper);
//将装配好pageInfo 拷贝到dtoPage里 ,records 我们自行操作
BeanUtils.copyProperties(pageInfo,dtoPage,"records");
List<Setmeal> setmeals = pageInfo.getRecords();
//将每页个setmeal都拷贝到setmealDto里,并且查询对应的categoryName然后封装进setmealDto,在合并成集合
List<SetmealDto> setmealDtos = setmeals.stream().map((item) -> {
SetmealDto setmealDto = new SetmealDto();
BeanUtils.copyProperties(item, setmealDto);
Long id = item.getCategoryId();
Category category = categoryService.getById(id);
String categoryName = category.getName();
setmealDto.setCategoryName(categoryName);
return setmealDto;
}).toList();
//将我们处理完成的集合,设置成新page的新records
dtoPage.setRecords(setmealDtos);
return new R(1,"分页查询成功",dtoPage);
}
套餐删除

SetmealService:
@Override
public void removeWithDish(List<Long> ids) {
//首先判断查询的内容有没有状态是在售的,如果在售,就抛自定异常
LambdaQueryWrapper<Setmeal> queryWrapper =new LambdaQueryWrapper<>();
queryWrapper.in(Setmeal::getId,ids);
queryWrapper.eq(Setmeal::getStatus,1);
long count=this.count(queryWrapper);
//如果有在售的
if (count>0){
throw new CustomException("某个套餐正在售卖中,请停售再删除");
}
//根据ids删除套餐
this.removeByIds(ids);
//接下来我们要删除 套餐相关菜品的数据
LambdaQueryWrapper<SetmealDish> queryWrapper1 =new LambdaQueryWrapper<>();
queryWrapper1.in(SetmealDish::getSetmealId,ids);
setmealDishService.remove(queryWrapper1);
}
套餐设置批量停售或者起售
因为批量跟单个访问的请求都是一个地址,我们直接做一个方法就可以了
注意,当我们封装ids成List集合的时候,必须要用@RequestParam 否则会报错
@PostMapping("/status/{status}")
public R statusChange(@PathVariable int status,@RequestParam List<Long> ids){
//创建setmeal集合用作修改status条件
List<Setmeal> setmeals =new ArrayList<>();
//遍历id并携带status封装成setmeal对象然后装进集合
for (Long id : ids) {
Setmeal setmeal =new Setmeal();
setmeal.setId(id);
setmeal.setStatus(status);
setmeals.add(setmeal);
}
setmealService.updateBatchById(setmeals);
return new R(1,"修改状态成功");
}
套餐修改
通过传入的ID进行数据回显:
SetmealServiceImpl:
@Override
public SetmealDto getWithDish(Long id) {
//先根据id查询到套餐的数据
Setmeal setmeal = this.getById(id);
//拷贝到SetmealDto中
SetmealDto setmealDto =new SetmealDto();
BeanUtils.copyProperties(setmeal,setmealDto);
//接下来我们查询套餐里的菜品信息
LambdaQueryWrapper<SetmealDish> queryWrapper =new LambdaQueryWrapper<>();
queryWrapper.eq(SetmealDish::getSetmealId,id);
List<SetmealDish> setmealDishes = setmealDishService.list(queryWrapper);
//将菜品信息封装进 dto
setmealDto.setSetmealDishes(setmealDishes);
//封装完成 返回
return setmealDto;
}
通过页面的数据,提交封装成SetmealDto类数据保存:
SetmealServiceImpl:
public void updateWithDish(SetmealDto setmealDto){
//首先更新我们的套餐
this.updateById(setmealDto);
//然后我们清除原来的套餐跟菜品联系数据 封装新的数据、
LambdaQueryWrapper<SetmealDish> queryWrapper =new LambdaQueryWrapper<>();
queryWrapper.eq(SetmealDish::getSetmealId,setmealDto.getId());
setmealDishService.remove(queryWrapper);
List<SetmealDish> setmealDishes = setmealDto.getSetmealDishes();
List<SetmealDish> setmealDishes1 = setmealDishes.stream().map((item) -> {
//将每个setmealDish添加上套餐id
item.setSetmealId(setmealDto.getId());
return item;
}).toList();
//把新数据添加进去
setmealDishService.saveBatch(setmealDishes1);
}
手机验证码登录
短信发送







修改过滤器






















