java 瑞吉外卖 day5 套餐管理业务 套餐新增,套餐分页查询 套餐修改 套餐停售起售设置 短信服务

新增套餐

准备工作:

 

 

 

 

 

套餐信息分页查询

 前面已经写了好几个分页查询了,这里查询的关键点,是套餐分类名称,不在套餐表中,我们要到别的表里拿,然后封装进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);
}

手机验证码登录

短信发送

 

 

 

 

 

 

 修改过滤器

 

 @PostMapping("/sendMsg")
    public R sendMsg(@RequestBody User user, HttpSession session){
        //获取手机号
        String phone =user.getPhone();

        //如果手机号不为空
        if (StringUtils.isNotEmpty(phone)){
            //用ValidateCodeUtils生成随机的4位验证码
            String code = ValidateCodeUtils.generateValidateCode(4).toString();
            //这里我们只是测试,所以用log查看code然后登录就可以了
            log.info("code={}",code);
            //调用阿里云提供的短信服务API完成发送短信
//        SMSUtils.sendMessage("瑞吉外卖","",phone,code);
            //需要将生成的验证码保存到Session
            session.setAttribute(phone,code);

            return new R(1,"验证码发送成功");
        }
        return new R(0,"短信发送失败");

    }

@PostMapping("/login")//这里传了code但是用User没法接收,我们用Map接收
public R login(@RequestBody Map map,HttpSession session){
    //获取手机号
    String phone = map.get("phone").toString();
    //获取验证码
    String code = map.get("code").toString();
    //从session获得保存的验证码然后比对

    Object codeInSession = session.getAttribute(phone);

    if (codeInSession!=null&&codeInSession.equals(code)){
        //说明登录成功
        // 判断当前手机号是否为新用户,如果是就自动完成注册
        LambdaQueryWrapper<User> queryWrapper =new LambdaQueryWrapper<>();
        queryWrapper.eq(User::getPhone,phone);
        User user = userService.getOne(queryWrapper);
        if (user==null){
            user=new User();
            user.setPhone(phone);
            user.setStatus(1);
            userService.save(user);
        }
        session.setAttribute("user",user.getId());
        return new R(1,"登陆成功",user);
    }

    return new R(0,"登录失败");

}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值