首页 > 其他分享 >05 CRUD 套餐 + 实战内容(后续补充 ing)

05 CRUD 套餐 + 实战内容(后续补充 ing)

时间:2023-07-01 18:33:21浏览次数:52  
标签:queryWrapper return 05 菜品 CRUD ids setmealDto 套餐 ing

新增套餐

预准备

image

image

image

image

image

image

image

image

代码实现

复制资料下的SetmealDish类到entity下,复制SetmealDto到dto下。

添加套餐菜品/查询菜品数据

DishController下:

    /**
     * 根据条件查询对应的菜品数据
     * @param dish
     * @return
     */
    @GetMapping("/list")
    public R<List<Dish>> list(Dish dish){
        //构造查询条件
        LambdaQueryWrapper<Dish> queryWrapper=new LambdaQueryWrapper();
        queryWrapper.eq(dish.getCategoryId()!=null,Dish::getCategoryId,dish.getCategoryId());
        queryWrapper.eq(Dish::getStatus,1);//查询起售的菜品
        //添加排序条件
        queryWrapper.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime);

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

新增套餐

image

SetmealService下写一个方法public void saveWithDish(SetmealDto setmealDto);,用于新增套餐,同时需要保存套餐和菜品的关联关系。再其实现类下,编写:

    /**
     * 新增套餐,同时需要保存套餐和菜品的关联关系
     * @param setmealDto
     */
    @Override
    @Transactional
    public void saveWithDish(SetmealDto setmealDto){
        //保存套餐的基本信息,操作setmeal,执行insert操作
        this.save(setmealDto);
        List<SetmealDish> setmealDishes=setmealDto.getSetmealDishes();

        //遍历菜品,加上套餐id
        setmealDishes.stream().map((item)->{
            item.setSetmealId(setmealDto.getId());
            return item;
        }).collect(Collectors.toList());
        setmealDishService.saveBatch(setmealDishes);
    }

最后SetmealController在下:

    /**
     * 新增套餐
     * @param setmealDto
     * @return
     */
    @PostMapping
    public R<String> save(@RequestBody SetmealDto setmealDto){
        log.info("套餐信息:{}",setmealDto);
        setmealService.saveWithDish(setmealDto);
        return R.success("新增套餐成功!");
    }

套餐信息分页查询

预准备

image

image

image

代码实现

SetmealController下,注入private SetmealDishService setmealDishService;字段,编写:

    /**
     * 分页查询
     * @param page
     * @param pageSize
     * @param name
     * @return
     */
    @GetMapping("/page")
    public R<Page> 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进行like模糊查询
        queryWrapper.like(name!=null,Setmeal::getName,name);
        //添加排序条件,根据更新时间降序排列
        queryWrapper.orderByDesc(Setmeal::getUpdateTime);

        setmealService.page(pageInfo,queryWrapper);

        //显示分类名称
        //对象拷贝,只拷贝分页信息
        BeanUtils.copyProperties(pageInfo,dtoPage,"records");

        //拷贝基本信息,加上菜品名称
        List<Setmeal> records = pageInfo.getRecords();
        List<SetmealDto> list=records.stream().map((item)->{
            SetmealDto setmealDto=new SetmealDto();
            //拷贝基础信息
            BeanUtils.copyProperties(item,setmealDto);
            //分类id
            Long categoryId=item.getCategoryId();
            //根据分类id查询分类对象
            Category category = categoryService.getById(categoryId);
            if(category!=null){
                //分类名称
                String categoryName=category.getName();
            }
            return setmealDto;
        }).collect(Collectors.toList());

        dtoPage.setRecords(list);
        return R.success(dtoPage);
    }

删除套餐

预准备

image

image

image

代码实现

在类下新增public void removeWithDish(List<Long> ids)方法,用于删除套餐,同时需要删除套餐和菜品的关联数据。

SetmealServiceImpl类下:

    /**
     * 删除套餐,同时需要删除套餐和菜品的关联数据
     * @param ids
     */
    @Override
    public void removeWithDish(List<Long> ids) {
        //查询套餐状态,确定是否可以删除
        LambdaQueryWrapper<Setmeal> queryWrapper=new LambdaQueryWrapper<>();
        queryWrapper.in(Setmeal::getId,ids);

        queryWrapper.eq(Setmeal::getStatus,1);
        int count=this.count(queryWrapper);//是mp框架里面的方法
        if(count>0){
            //如果不能删除,抛出一个业务异常
            throw new CustomException("套餐正在售卖中,不能删除!");
        }

        //如果可以删除,先删除套餐表中的数据setmeal
        this.removeByIds(ids);

        //删除关系表中的数据setlmealDish,removebyids是删除的这个表的主键,所以不能调用这个方法
        //delete from setmeal_dish where setmeal_id in(1,2,3...)
        LambdaQueryWrapper<SetmealDish> lambdaQueryWrapper=new LambdaQueryWrapper<>();
        lambdaQueryWrapper.in(SetmealDish::getSetmealId,ids);
        setmealDishService.remove(lambdaQueryWrapper);
    }

SetmealController类下:

    /**
     * 删除套餐,并删除掉附带的菜品信息
     * @param ids
     * @return
     */
    @DeleteMapping
    public R<String> delete(@RequestParam List<Long> ids){
        log.info("ids{}",ids);
        setmealService.removeWithDish(ids);
        return R.success("套餐数据删除成功");
    }

实战内容

后台按条件查询客户订单

用户个人查询自己的订单

菜品、套餐的批量起售、停售

购物车中的菜品或者套餐数量减少

后台套餐的修改

标签:queryWrapper,return,05,菜品,CRUD,ids,setmealDto,套餐,ing
From: https://www.cnblogs.com/rose24/p/17519708.html

相关文章

  • 18、【SparkStreaming】object not serializable (class: org.apache.kafka.clients.c
    背景:当SparkStream连接kafka,消费数据时,报错:objectnotserializable(class:org.apache.kafka.clients.consumer.ConsumerRecord,value:ConsumerRecord分析:消费者的消费记录序列化出现了问题,需要正确的进行序列化。措施:在设置sparkconf的时候,指定序列化方式就可以解......
  • Comparing with traditional convex optimization methodology, what are advantages
    与传统的凸优化方法相比,粒子群算法有哪些优点 与传统的凸优化方法相比,粒子群优化(PSO)算法具有以下优点:全局搜索能力:PSO算法具有较强的全局搜索能力,能够在多个解空间中寻找最优解。由于粒子群在搜索过程中可以通过信息共享和合作,有助于避免陷入局部最优解。适应性和......
  • 多端全栈项目实战:大型商业级代驾业务全流程落地SpringCloudAlibaba+Mysql+Redis+Docke
    多端全栈项目实战:大型商业级代驾业务全流程落地SpringCloudAlibaba+Mysql+Redis+Docker+Uniapp+Vue3随着移动互联网的快速发展和智能手机的普及,代驾服务成为了一个日益火热的行业。在这个行业中,如何构建一个具备商业级可靠性和扩展性的代驾业务系统成为了关键问题。本文将介绍一......
  • SpringBoot3.0最新深入浅出从入门到项目实战,突出Web应用痛点解决方案
    SpringBoot3.0最新深入浅出从入门到项目实战,突出Web应用痛点解决方案SpringBoot已经成为Java开发中最流行的框架之一,它提供了一种快速构建、易于扩展的方式,使开发人员能够更加专注于业务逻辑而不是繁琐的配置。而最新的SpringBoot3.0版本将进一步改善开发体验,并提供更多的解决方......
  • SpringBoot 如何优雅的进行全局异常处理?
    在SpringBoot的开发中,为了提高程序运行的鲁棒性,我们经常需要对各种程序异常进行处理,但是如果在每个出异常的地方进行单独处理的话,这会引入大量业务不相关的异常处理代码,增加了程序的耦合,同时未来想改变异常的处理逻辑,也变得比较困难。这篇文章带大家了解一下如何优雅的进行全局异......
  • 【哈佛cs50 2022】lab3 & problemSet3【ing】
    (1)lab3如何测试每个代码运行所需要的时间?time./sort1sorted5000.txt sort1sort2sort3sorted5000.txt0.037s0.020s0.045ssorted10000.txt0.058s0.050s0.151ssorted50000.txt1.244s2.238s5.637sreversed5000.txt0.088s0.026s0.045srever......
  • 绝无仅有的SpringBoot前后端分离项目《盈利宝》
    每天都在制造矛盾并解决矛盾的路上程序员的主要矛盾不是书和资料多不多的矛盾而是学着学着发现知识又更新了时间就像一台永不停歇的永动机向前不停地运作年初的flag渐行渐远管他前浪,还是后浪?能浪的浪,才是好浪!今天带你解锁 Springboot+Vue项目花了很长时间从头到尾从无到有地完......
  • YinQingfox跨境电商防关联指纹浏览器:保护您的隐私安全
    随着互联网和电子商务的迅猛发展,跨境电商成为了商业领域中的重要一环。然而,在享受跨境电商便利的同时,我们也要面对隐私泄露和个人信息安全的风险。为了解决这一问题,YinQingfox推出了一款创新的跨境电商浏览器——YinQingfox跨境电商防关联指纹浏览器,它将保护您的隐私安全放在首位。......
  • 【题解】#105. 「USACO1.3」Ski Course Design 题解(2023-07-01更新)
    #105.「USACO1.3」SkiCourseDesign题解题目传送门欢迎大家指出错误并联系这个蒟蒻更新日志2023-02-0117:20文章完成2023-02-0316:09文章审核通过2023-02-0422:15修改了注释2023-05-1621:44修改了$\LaTeX$2023-07-0115:59修改了代码题目知识点模拟+搜索......
  • 绝无仅有的SpringBoot+Vue前后端分离项目《盈利宝》
    ​每天都在制造矛盾并解决矛盾的路上程序员的主要矛盾不是书和资料多不多的矛盾而是学着学着发现知识又更新了时间就像一台永不停歇的永动机向前不停地运作年初的flag渐行渐远管他前浪,还是后浪?能浪的浪,才是好浪!今天带你解锁 Springboot+Vue项目花了很长时间从头到尾......