天天看點

黑馬瑞吉外賣之套餐資訊的删除

黑馬瑞吉外賣之套餐資訊的删除

在套餐這個子產品,我們已經完成的就是套餐資訊的分頁查詢,以及套餐資訊的建立與修改這些功能。本篇我們主要去完成一下套餐的删除的功能。

黑馬瑞吉外賣之套餐資訊的删除

删除功能有獨立删除和批量删除兩個功能。為了完成示範删除的功能,我們最好在這裡可以展示兩個以上的套餐。是以最好在這裡還是建立幾個套餐。我們這裡一共展示三個套餐。

黑馬瑞吉外賣之套餐資訊的删除

首先呢,我們還是去前端頁面去檢視這些具體的内容。

黑馬瑞吉外賣之套餐資訊的删除
黑馬瑞吉外賣之套餐資訊的删除

可以看到這裡的單個删除和批量删除綁定的是同一個方法名,然後傳遞的參數是不一樣的。

那麼現在我們去找到這個方法。

黑馬瑞吉外賣之套餐資訊的删除

我們找到前端這裡關鍵的一行代碼,這裡的意思就是如果我們進行的是批量删除,那麼就把checkList作為參數傳遞進去,如果我們沒有進行批量删除,隻是選擇了單個進行删除,那麼就将這個單獨要删除的id進行傳遞進去。是以說我們其實差別還是傳遞的參數的不同。

黑馬瑞吉外賣之套餐資訊的删除

然後點進去這個deleteSetmeal裡面。

黑馬瑞吉外賣之套餐資訊的删除

現在我們來開發這個批量删除的功能。

我們可以這樣去規定一下,如果套餐正在售賣的話,我們就不能删除,否則我們在删除套餐的時候,其實也還是需要删除套餐關聯下面的菜品的資料。

//    删除套餐同時删除套餐和菜品的關聯資料,這裡也同樣開啟事務
    @Override
    @Transactional
    public void removeWithDish(List<Long> ids) {
//        查詢套餐的狀态确定是否可以删除
//        要根據套餐的狀态,是在售賣還是停止售賣
//        如果了可以删除,删除套餐中的資料,然後删除關聯表當中的資料
        //構造一個套餐的條件
        LambdaQueryWrapper<Setmeal> setmealLambdaQueryWrapper = new LambdaQueryWrapper<>();
//        根據id進行查詢
        setmealLambdaQueryWrapper.in(Setmeal::getId,ids);
//        查詢對應套餐的狀态
        setmealLambdaQueryWrapper.eq(Setmeal::getStatus,1);
//        計算符合條件的結果
        long count = this.count(setmealLambdaQueryWrapper);
        if(count>0)
        {
            throw  new CustomException("套餐正在售賣,不能删除");
        }
//        如果套餐不處于售賣那麼就在删除套餐的時候也将關聯表中的菜品删除掉
        this.removeBatchByIds(ids);
//        菜品關聯條件
        LambdaQueryWrapper<SetmealDish> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.in(SetmealDish::getSetmealId,ids);//查詢出具體的菜品
        setmealDishService.remove(lambdaQueryWrapper);
    }      
@DeleteMapping
    public R_<String> delete(@RequestParam List<Long> ids)
    {
        log.info("ids:{}",ids);
        setMealService.removeWithDish(ids);
        return  R_.success("套餐資料删除成功");

    }