Git007

导航

【外卖系统】day05

套餐管理

Target1:新增套餐



1.2已经在之前的controller中编写完毕,从第3点开始写

根据传入的菜品id,封装成对象dish(提高可拓展性), 然后进行条件查询(注意当菜品状态为1时才满足要求)

@GetMapping("/list")
    public R<List<Dish>> getDish(Dish dish){
        //条件构造器
        QueryWrapper<Dish> wrapper = new QueryWrapper<>();
        wrapper.eq(dish.getCategoryId() != null,"category_id",dish.getCategoryId());
        //状态为起售状态:1
        wrapper.eq("status",1);
        //排序
        wrapper.orderByAsc("sort").orderByDesc("update_time");

        List<Dish> list = dishService.list(wrapper);
        return R.success(list);
    }

编写service方法来保存套餐和菜品信息

 @Autowired
    private SetmealDishService setmealDishService;

    /**
     * 保存套餐和对应菜品的关系表
     * @param setmealDto
     */
    @Override
    public void saveWithDish(SetmealDto setmealDto) {
        //保存套餐信息
        this.save(setmealDto);
        //标注对应套餐id
        List<SetmealDish> setmealDishes = setmealDto.getSetmealDishes();
        for (SetmealDish setmealDish : setmealDishes) {
            setmealDish.setSetmealId(setmealDto.getId());
        }
        //保存套餐对应菜品的信息
        setmealDishService.saveBatch(setmealDishes);
    }

Target2:套餐信息查询

/**
     * 套餐分页查询
     * @param page
     * @param pageSize
     * @param name
     * @return
     */
    @GetMapping("/page")
    public R<Page> page(@Param("page") int page,
                           @Param("pageSize") int pageSize,
                           @Param("name") String name
                           ){
        //构造分页查询器
        Page<Setmeal> pageinfo = new Page<>(page,pageSize);
        Page<SetmealDto> dtoPage = new Page<>();

        //构造条件查询器
        QueryWrapper<Setmeal> wrapper = new QueryWrapper<>();
        wrapper.like(StringUtils.isNotEmpty(name),"name",name);
        wrapper.orderByDesc("update_time");

        setmealService.page(pageinfo,wrapper);

        //对象拷贝,除了records
        BeanUtils.copyProperties(pageinfo,dtoPage,"records");
        //得到setmeal的records
        List<Setmeal> SetmealList = pageinfo.getRecords();
        //创建一个dto的records对象
        List<SetmealDto> dtoRecords = new ArrayList<>();
        //遍历
        for (Setmeal setmeal : SetmealList) {
            SetmealDto setmealDto = new SetmealDto();
            //得到分类id
            Long categoryId = setmeal.getCategoryId();
            //查询分类id得到菜品
            Category category = categoryService.getById(categoryId);
            //将Dto菜品名幅值
            setmealDto.setCategoryName(category.getName());
            //将其他属性拷贝
            BeanUtils.copyProperties(setmeal,setmealDto);
            //添加
            dtoRecords.add(setmealDto);
        }
        dtoPage.setRecords(dtoRecords);

        return R.success(dtoPage);
    }

Target3:删除套餐


编写删除对应套餐和菜品的方法,
注意:若套餐再售卖中,则抛出异常不能删除

@Transactional
    @Override
    public void removeWihtDish(List<Long> ids) {
        //查询套餐信息,判断是否可以删除,起售中不可删除

        QueryWrapper<Setmeal> setmealWrapper = new QueryWrapper<>();
        setmealWrapper.in("id",ids);
        setmealWrapper.eq("status",1);

        //查询是否有满足条件的
        int count = this.count(setmealWrapper);

        if(count > 0){
            throw new CustomException("菜品正在售卖,请停售再删除");
        }

        //删除套餐
        this.removeByIds(ids);
        
        QueryWrapper<SetmealDish> setmealDishQueryWrapper = new QueryWrapper<>();
       setmealDishQueryWrapper.in("setmeal_id",ids);

        //删除对应套餐的菜品
        setmealDishService.remove(setmealDishQueryWrapper);
    }

注意sql in的用法

手机验证码登录



首先在loginCheckFilter中设置移动端页面过滤条件,使移动端页面可以放行

 @Autowired
    private UserService userService;

    @PostMapping("/login")
    public R<User> login(@RequestBody Map map, HttpServletRequest request){
        /*
        * 正常手机获取验证码登录逻辑:
        * 1.手机点击获取验证码,会发送ajax请求到服务端
        * 2.服务端接收到请求后,通过调用api生成验证码并保存到session,同时使用阿里云服务发送到我们手机上
        * 3.用户输入验证码之后,点击登录发送第二次ajax请求
        * 4.服务端首先先判断输入的验证码与Session中保存的验证码是否相同,若相同,
        * 5.继续判断手机号,若手机号对应的用户不存在,则新建用户
        * 6.返回
        * */

        //没有验证码,因此只判断手机号
        String phone = (String)map.get("phone");

        //创建条件构造器
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("phone",phone);

        //查询
        User user = userService.getOne(wrapper);
        //用户不存在新建用户
        if(user == null){
            user = new User();
            user.setPhone(phone);
            user.setStatus(1);
            userService.save(user);
        }
        request.getSession().setAttribute("user",user.getId());
        return R.success(user);
    }

posted on 2022-04-25 15:05  cczzhh007  阅读(35)  评论(0)    收藏  举报