新增套餐
准备工作:
套餐信息分页查询
前面已经写了好几个分页查询了,这里查询的关键点,是套餐分类名称,不在套餐表中,我们要到别的表里拿,然后封装进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); }
手机验证码登录
短信发送
修改过滤器