瑞吉外卖菜品批量删除、启售、停售,超详细讲解(配代码)

瑞吉外卖

黑马程序员的一门SSM的入门项目,其中在其课程中的菜品业务讲解中,留下了让学员自主实现的几个功能,细分的话可以分为:单个菜品的 删除、启售、停售,批量菜品的 删除、启售、停售

瑞吉外卖菜品批量删除、启售、停售,超详细讲解(配代码)_第1张图片

实现流程(超详细)

说在前面,本文功能实现是作者拙见,不代表最佳,仅供学习。

下面会大概按照课程里面的理解来实现讲解

查看ajax请求

从前端界面查看 删除 和 状态修改所发送的ajax请求,得到路由和请求信息。

以删除为例,启停售原理相同(文章后附有全部代码):
page->food->list.html界面中,找到单个菜品的删除,批量删除。如代码所示,两者的单击事件都是deleteHandle(),有所不同的是传参的不同,单删,批量。
单删的时候直接把当前行的id传给函数
瑞吉外卖菜品批量删除、启售、停售,超详细讲解(配代码)_第2张图片

在这里插入图片描述

从deleteHandle()可以找出两种删除它们都是访问的deleteDish(),可以看到路由和访问方法
这里值得看的是我们要注意通用一个路由,两个删除的ids肯定是不同的,单个删除是Long ids,批量删除是checkList的字符串,我们就需要在后端处理。

瑞吉外卖菜品批量删除、启售、停售,超详细讲解(配代码)_第3张图片

瑞吉外卖菜品批量删除、启售、停售,超详细讲解(配代码)_第4张图片

明确参数

    @DeleteMapping
    public R<String> delete(String ids){
    	//如果单纯的用Long来接,ids会报错,批量删除肯定接不到,所以这里选用String
    	//log打印看看能否接收单个和批量
        log.info("删除的ids: {}",ids);
        return null;
    }

log信息如图:
在这里插入图片描述
在这里插入图片描述

最终实现

我们明确我们的参数现在是String接收的,把每个id提取出来,自然能想到使用removeByIds()进行批量删除,单个删除也是批量,只不过批量大小是1。现在要处理removeByIds()可接受的参数。
直接贴上代码及注释

	@DeleteMapping
    public R<String> delete(String ids){
        String[] split = ids.split(","); //将每个id分开
        //每个id还是字符串,转成Long
        List<Long> idList = Arrays.stream(split).map(s -> Long.parseLong(s.trim())).collect(Collectors.toList());
        dishService.removeByIds(idList);//执行批量删除
        log.info("删除的ids: {}",ids);
        return R.success("删除成功"); //返回成功
    }

启、停售状态(分析如删除一样)

先附上代码,说几个比较值得注意的点
1.我们同样还是使用批量更新的方法updateBatchById(),接受的是一个Dish集合,而不是单单的id。以为需要根据实体类匹配数据库字段,更新每个Dish对象的值。
2.我们得到的id需要设置给每个Dish对象,并修改状态信息。
3.路径参数传过来的st,就是要修改的状态值,即我要让这些ids停售,st = 0,所以直接设置状态即可。

@PostMapping("/status/{st}")
    public R<String> setStatus(@PathVariable int st, String ids){
    	//处理string 转成Long
        String[] split = ids.split(",");
        List<Long> idList = Arrays.stream(split).map(s -> Long.parseLong(s.trim())).collect(Collectors.toList());

		//将每个id new出来一个Dish对象,并设置状态
        List<Dish> dishes = idList.stream().map((item) -> {
            Dish dish = new Dish();
            dish.setId(item);
            dish.setStatus(st);
            return dish;
        }).collect(Collectors.toList()); //Dish集合

        log.info("status ids : {}",ids);
        dishService.updateBatchById(dishes);//批量操作
        return R.success("操作成功");
    }

觉得文章有用点个赞 点个收藏,未经允许禁止转载!

你可能感兴趣的:(JAVA开发,java,java项目)