Reggie外卖项目 —— 菜品管理模块之修改菜品功能

本文档详细介绍了如何在菜品管理系统中实现修改菜品的功能。首先,从需求分析出发,描述了前端页面与服务端的交互流程,包括获取分类数据、回显菜品信息、图片回显和保存修改。然后,通过代码展示了在DishServiceImpl和DishController中的关键方法,如根据ID查询菜品信息和口味,以及更新菜品和口味信息。功能测试部分,重点测试了页面回显和菜品信息修改的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

18、修改菜品

18.1、需求分析

在菜品管理列表页面,点击修改按钮,跳转到修改菜品页面,在修改页面回显菜品相关信息并进行修改,最后点击确定按钮完成修改操作。

在这里插入图片描述

在这里插入图片描述

18.2、代码开发

18.2.1、交互过程

在开发代码之前,需要梳理一下修改菜品时前端页面(add.html)和服务端的交互过程:

1、页面发送ajax请求,请求服务端获取分类数据,用于菜品分类下拉框中数据显示

2、页面发送ajax请求,请求服务端,根据id查询当前菜品信息,用于菜品信息回显

3、页面发送请求,请求服务端进行图片下载,用于页面图片回显

4、点击保存按钮,页面发送ajax请求,将修改后的菜品相关数据以json形式提交到服务端。

开发修改菜品功能,其实就是在服务端编写代码去处理前端页面发送的这4个功能即可。

18.2.2、页面逻辑

在这里插入图片描述

18.3、功能测试

18.3.1、页面回显功能

DishServiceImpl.java

/**
 * 根据id查询菜品信息和对应的口味信息
 * @param id
 * @return
 */
@Override
public DishDto getByIdWithFlavor(Long id) {
    //1、查询菜品基本信息
    Dish dish = this.getById(id);

    DishDto dishDto = new DishDto();
    BeanUtils.copyProperties(dish, dishDto);

    //2、查询当前菜品对应的口味信息,从dish_flavor表查询
    LambdaQueryWrapper<DishFlavor> queryWrapper = new LambdaQueryWrapper<>();
    queryWrapper.eq(DishFlavor::getDishId, dish.getId());
    List<DishFlavor> flavors = dishFlavorService.list(queryWrapper);
    dishDto.setFlavors(flavors);

    return dishDto;
}

DishController.java

/**
 * 根据id查询菜品信息和对应的口味信息
 * @param id
 * @return
 */
@GetMapping("/{id}")
public R<DishDto> get(@PathVariable Long id) {
    DishDto dishDto = dishService.getByIdWithFlavor(id);
    return R.success(dishDto);
}

在这里插入图片描述

18.3.2、修改菜品信息

DishServiceImpl.java

/**
 * 更新菜品信息,同时更新口味信息
 * @param dishDto
 */
@Override
public void updateWithFlavor(DishDto dishDto) {
    //更新dish表基本信息
    this.updateById(dishDto);

    //清理当前菜品对应的口味数据——dish_flavor表的delete操作
    LambdaQueryWrapper<DishFlavor> queryWrapper = new LambdaQueryWrapper();
    queryWrapper.eq(DishFlavor::getDishId, dishDto.getId());
    dishFlavorService.remove(queryWrapper);

    //添加当前提交过来的口味数据——dish_flavor表的insert操作
    List<DishFlavor> flavors = dishDto.getFlavors();
    flavors = flavors.stream().map((item) -> {
        item.setDishId(dishDto.getId());
        return item;
    }).collect(Collectors.toList());

    dishFlavorService.saveBatch(flavors);
}

DishController.java

/**
 * 修改菜品
 * @param dishDto
 * @return
 */
@PutMapping
public R<String> update(@RequestBody DishDto dishDto) {
    log.info("dishDto:{}", dishDto);
    dishService.updateWithFlavor(dishDto);
    return R.success("修改成功");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值