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

本文详细介绍瑞吉外卖项目的菜品业务实现,包括单个菜品与批量菜品的删除、启售和停售等功能。通过分析前端AJAX请求,明确后端处理逻辑,利用SpringMVC的注解完成RESTful API的设计。

瑞吉外卖

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

在这里插入图片描述

实现流程(超详细)

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

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

查看ajax请求

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

以删除为例,启停售原理相同(文章后附有全部代码):
page->food->list.html界面中,找到单个菜品的删除,批量删除。如代码所示,两者的单击事件都是deleteHandle(),有所不同的是传参的不同,单删,批量。
单删的时候直接把当前行的id传给函数
在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

明确参数

    @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("操作成功");
    }

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

由于没有具体的引用内容,以下是基于一般外卖平台菜品停售情况的分析: ### 停售操作方法 通常在外卖商家端的系统中,商家可以进入菜品管理界面。在该界面找到需要停售菜品,一般会有“停售”或“下架”等类似的操作按钮,点击该按钮即可完成菜品停售。有些系统可能还需要商家确认停售的原因等信息。例如,以下是一个简单模拟的代码逻辑来理解这个过程(伪代码): ```python class RestaurantSystem: def __init__(self): self.dishes = [] def stop_selling_dish(self, dish_name): for dish in self.dishes: if dish.name == dish_name: dish.status = "停售" print(f"{dish_name} 已停售") return print(f"未找到 {dish_name} 菜品") class Dish: def __init__(self, name): self.name = name self.status = "在" restaurant = RestaurantSystem() dish1 = Dish("宫保鸡丁") restaurant.dishes.append(dish1) restaurant.stop_selling_dish("宫保鸡丁") ``` ### 停售原因 - **食材供应问题**:食材短缺是常见原因,比如某种海鲜因季节、运输等问题无法及时供应,导致相关菜品只能停售。 - **菜品质量问题**:若发现菜品在制作过程中出现卫生问题,或者口感、品质不稳定等情况,为避免影响商家口碑,会选择停售菜品进行改进。 - **菜单调整**:商家为了优化菜单结构,推出新菜品或者淘汰不受欢迎的菜品,会对部分菜品进行停售处理。 ### 对商家和用户的影响 - **对商家的影响** - **正面影响**:停售菜品可以集中资源在畅销菜品上,提高制作效率和质量。同时,及时停售有问题的菜品可以避免用户差评,维护商家的口碑。 - **负面影响**:停售热门菜品可能会导致部分用户流失,短期内影响店铺的销额。 - **对用户的影响** - **正面影响**:若停售的是质量不佳的菜品,用户可以避免踩雷,获得更好的用餐体验。 - **负面影响**:用户喜欢的菜品停售,可能需要重新选择其他菜品,降低了用户的用餐满意度。
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BiuPsYao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值