• 猿创征文|瑞吉外卖——管理端_菜品管理_2


    个人名片:

    博主酒徒ᝰ.
    专栏瑞吉外卖
    个人简介沉醉在酒中,借着一股酒劲,去拼搏一个未来。
    本篇励志真正的程序员不看参考手册,新手和胆小鬼才会看。

    本项目基于B站黑马程序员Java项目实战《瑞吉外卖》,轻松掌握springboot + mybatis plus开发核心技术的真java实战项目。

    视频链接【黑马程序员Java项目实战《瑞吉外卖》,轻松掌握springboot + mybatis
    plus开发核心技术的真java实战项目】 https://www.bilibili.com/video/BV13a411q753?
    点击观看

    因为菜品管理太多了,所有分成三部分来写了。这是第二部分

    三、删除菜品

    1.单个

    image.png

    分析:dish地址,DELETE方式,ids属性。

    /**
     * 删除菜品
     * @param ids
     * @return
     */
    @DeleteMapping
    public R<String> dish(@PathParam("ids") Long ids){
        dishService.removeById(ids);
        return R.success("删除成功");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.批量

    image.png

    比较简单,修改两个地方即可
    @PathParam ——>> @RequestParam
    .removeById ——>> .removeByIds

    /**
     * 批量删除菜品
     * @param ids
     * @return
     */
    @DeleteMapping
    public R<String> dish(@RequestParam("ids") List<Long> ids){
        dishService.removeByIds(ids);
        return R.success("删除成功");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3.删除口味

    /**
    * 批量删除菜品——删除菜品对应的口味
    * @param ids
    * @return
    */
    @DeleteMapping
    public R<String> dish(@RequestParam("ids") List<Long> ids){    
        //根据id查询dishFlavor表中对应的信息
        LambdaQueryWrapper<DishFlavor> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.in(DishFlavor::getDishId, ids);
        dishFlavorService.remove(queryWrapper);
        //根据id删除
        dishService.removeByIds(ids);
        return R.success("删除成功");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    4.判断状态

    /**
    * 批量删除菜品——判断菜品状态是否为正在售卖
    * @param ids
    * @return
    */
    @DeleteMapping
    public R<String> dish(@RequestParam("ids") List<Long> ids){
        //判断dish状态
        //根据ids获取所有的dish信息
        LambdaQueryWrapper<Dish> wrapper = new LambdaQueryWrapper<>();
        wrapper.in(Dish::getId, ids);
        List<Dish> list = dishService.list(wrapper);
        //判断每一个status 如果都为0,可以删除。
        boolean flag = true;
        for (Dish dish : list) {
            if (dish.getStatus() == 1){
                flag = false;
            }
        }
    
        if (flag){
            //根据id查询dishFlavor表中对应的信息
            LambdaQueryWrapper<DishFlavor> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.in(DishFlavor::getDishId, ids);
            dishFlavorService.remove(queryWrapper);
            //根据id删除
            dishService.removeByIds(ids);
            return R.success("删除成功");
        }else {
            return R.error("存在正在售卖菜品,删除失败");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    四、修改

    1.回显数据

    image.png

    分析:dish地址,GET方式,"/{id}"地址
    通过之前的研究,可以发现此处返回值类型为DishDto类型。

    /**
     * 修改菜品——数据回显
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public R<DishDto> id(@PathVariable Long id){
        //根据id查询
        DishDto dishDto = dishService.getDishDto(id);
        return R.success(dishDto);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在IDishService中创建getDishDto方法

    DishDto getDishDto(Long id);
    
    • 1

    在IDishServiceImpl中实现方法

    /**
     * 修改——数据回显
     * @param id
     * @return
     */
    @Override
    public DishDto getDishDto(Long id) {
        //1.根据id查询dish数据
        Dish dish = this.getById(id);
        //2.更加id查询口味信息
        LambdaQueryWrapper<DishFlavor> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(DishFlavor::getDishId, id);
        List<DishFlavor> flavors = dishFlavorService.list(queryWrapper);
    
        //3.组装dishDto
        DishDto dishDto = new DishDto();
        BeanUtils.copyProperties(dish, dishDto);
        dishDto.setFlavors(flavors);
    
        return dishDto;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    2.保存

    image.png

    分析:dish地址,PUT方式
    这里的修改其实是保存的意思。否则无法添加新的口味。

    /**
     * 修改菜品——保存
     * @param request
     * @param dishDto
     * @return
     */
    @PutMapping
    public R<String> dishupdate(HttpServletRequest request, @RequestBody DishDto dishDto){
        dishService.updateDishFlavor(request, dishDto);
        return R.success("修改菜品成功");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在IDishService中创建updateDishFlavor方法

    void updateDishFlavor(HttpServletRequest request, DishDto dishDto);
    
    • 1

    在IDishServiceImpl中实现方法

    /**
     * 修改菜品——保存
     * @param request
     * @param dishDto
     * @return
     */
    @Override
    @Transactional
    public void updateDishFlavor(HttpServletRequest request, DishDto dishDto) {
        //保存dish的基本信息到dish表
        this.updateById(dishDto);
    
        //删除原有的菜品口味
        LambdaQueryWrapper<DishFlavor> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(DishFlavor::getDishId, dishDto.getId());
        dishFlavorService.remove(queryWrapper);
    
        //存储dishId
        List<DishFlavor> flavors = dishDto.getFlavors();
        flavors = flavors.stream().map((item) -> {
            //设置dishid
            item.setDishId(dishDto.getId());
            return item;
        }).collect(Collectors.toList());
    
        dishFlavorService.saveBatch(flavors);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    五、停售与起售

    1.单个

    image.png

    分析:dish地址,POST方式,status地址,status(0),ids属性
    从资料中可以知道,_0 停售 1 起售,_所以,地址中的status为修改之后的状态码.

    /**
     * 起售与停售
     * @param status
     * @param ids
     * @return
     */
    @PostMapping("/status/{status}")
    public R<String> status(@PathVariable Integer status, @PathParam("ids") Long ids){
        //1.根据ids查询dish表
        Dish dish = dishService.getById(ids);
        dish.setStatus(status);
        dishService.updateById(dish);
        if (status == 0){
            return R.success("开始停售");
        }else {
            return R.success("开始启售");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    2.批量

    image.png

    单个与批量的区别再也ids属性,批量中含有多个ids
    直接在单个起售与停售中修改,否则项目无法启动成功。
    报如下错误:
    Caused by: java.lang.IllegalStateException: Ambiguous mapping. Cannot map ‘dishController’ method

    /**
    * 批量起售与停售
    * @param status
    * @param ids
    * @return
    */
    @PostMapping("/status/{status}")
    public R<String> status(@PathVariable Integer status, @RequestParam List<Long> ids){
        //log.info(status.toString());
        //log.info(ids.toString());
    
        //1.根据ids查询dish表
        LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.in(Dish::getId, ids);
        List<Dish> list = dishService.list(queryWrapper);
    
        //更改list所有的status 遍历方式
        for (Dish dish : list) {
            dish.setStatus(status);
            dishService.updateById(dish);
        }
    
        if (status == 0){
            return R.success("开始停售");
        }else {
            return R.success("开始启售");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
  • 相关阅读:
    Games104现代游戏引擎笔记高级ai
    第三十八章 在 UNIX®、Linux 和 macOS 上使用 IRIS(三)
    14:Hadoop数据分析|节点管理|搭建NFS网关服务
    ASP.NET framework升级core .NET 6.0
    nodejs+mysql+vscode网上图书商城销售管理系统vue
    老卫带你学---leetcode刷题(139. 单词拆分)
    CNVD-2023-12632:泛微E-cology9 browserjsp SQL注入漏洞复现 [附POC]
    超细节的javaWeb知识点总结
    快速上手Linux核心命令(十一):Linux用户相关命令
    【初始RabbitMQ】了解和安装RabbitMQ
  • 原文地址:https://blog.csdn.net/m0_65144570/article/details/126809440