瑞吉外卖项目——删除和批量删除菜品功能

需求分析

  • (同套餐删除)
    观察删除的交互过程(单个删除和批量删除),可以发现两次请求的请求方式和请求地址都是相同的,不同的则是传递的id个数,所以可以在服务提供一个方法来做统一处理。

代码开发

controller层


  /**
   * 根据id删除一个或批量删除菜品。
   *
   * @param ids 待删除的菜品id。
   * @return
   */
  @DeleteMapping
  public R<String> delete(@RequestParam List<Long> ids) {
    // 增加日志验证是否接收到前端参数。
    log.info("根据id删除一个菜品:{}", ids);
    //执行删除。
    dishService.deleteWithFlavor(ids);
    return R.success("删除菜品成功");
  }

Service层

  /**
   * 根据id删除对应的菜品信息, 同时还要删除关联表dish_flavor中的数据。
   * 注意:如果菜品为起售则不能删除菜品,只有先停售后才能删除。
   *
   * @param ids
   */
  @Override
  public void deleteWithFlavor(List<Long> ids) {
    // 判断当前菜品的状态。
    // select count(*) from dish where id in (ids) and state=1;
    LambdaQueryWrapper<Dish> dishLambdaQueryWrapper = new LambdaQueryWrapper<>();
    dishLambdaQueryWrapper.in(Dish::getId, ids);
    dishLambdaQueryWrapper.eq(Dish::getStatus, 1);
    int count = dishService.count(dishLambdaQueryWrapper);
    if (count>0){
      // 如果不能删除,则抛出异常
      throw new CustomException("菜品为起售状态,无法删除");
    }
    // 如果能删除(status=0) , 删除菜品信息
    this.removeByIds(ids);
    // 删除对应的口味信息 delete from dish_flavor where dish_id in (ids)
    LambdaQueryWrapper<DishFlavor> dishFlavorLambdaQueryWrapper = new LambdaQueryWrapper<>();
    dishFlavorLambdaQueryWrapper.in(DishFlavor::getDishId,ids);
    //执行删除口味。
    dishFlavorService.remove(dishFlavorLambdaQueryWrapper);
  }

注意:
一定要在方法或service接口上加@Transactional注解。

功能测试

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值