外卖点餐APP-03(后台--菜品分类管理)

发布于:2022-12-02 ⋅ 阅读:(521) ⋅ 点赞:(0)

(一)新增

实现思路:

  1. 直接调用MyBatis-Plus里面的save保存
  2. 返回执行成功信息
@PostMapping
public R<String> save(@RequestBody Category category){
    categoryService.save(category);
    return R.success("新增成功");
}

(二)分页查询

实现思路:

  1. MyBatisPlus分页查询拦截器在公共部分已经配置
  2. 根据当前页码和每页显示条数 对category表进行分页查询
  3. 调用service处理   
  4. 创建wrapper对象 设置排序字段   
  5. 响应处理结果
@GetMapping("/page")
public R<Page<Category>> page(@RequestParam(defaultValue="1") int page, @RequestParam(defaultValue="10") int pageSize){
    Page<Category> categoryPage = new Page<>(page, pageSize);
    LambdaQueryWrapper<Category> wrapper = new LambdaQueryWrapper<>();
    wrapper.orderByAsc(Category::getSort);
    categoryService.page(categoryPage,wrapper);
    return R.success(categoryPage);
}

(三)修改

Controller层

实现思路:

  1. 调用service处理
  2. 响应处理结果
@PutMapping
public R<String> update(@RequestBody Category category){
    categoryService.updateCategory(category);
    return R.success("修改成功!");
}

service层

public interface CategoryService extends IService<Category> {
    void updateCategory(Category category);
}

serviceImpl层

实现思路:

  1. 判断用户提交的分类修改数据中分类名称不能和其他分类名称重复
  2. 查询条件:name:分类名称  id:分类id  
  3. 根据名称为name且id不等于当前这个分类id进行查询统计
  4. 执行修改操作
@Service
public class CategoryServiceImpl extends ServiceImpl<CategoryDao,Category> implements CategoryService {
    @Autowired
    private CategoryDao categoryDao;
    @Override
    public void updateCategory(Category category) {
        LambdaQueryWrapper<Category> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Category::getName,category.getName());
        wrapper.ne(Category::getId,category.getId());       //ne:不等于
        Integer count = categoryDao.selectCount(wrapper);
        if(count>0){
            throw  new  CustomException(0,"当前分类名称已存在,请设置为其他的!");
        }
        categoryDao.updateById(category);
    }
}

(四)删除

Controller层

实现思路:

  1. 调用service处理
  2. 响应处理结果
@DeleteMapping("/{id}")
public R<String> delete(@PathVariable Long id){
    categoryService.deleteById(id);
    return R.success("删除成功!");
}

service层

public interface CategoryService extends IService<Category> {
    void deleteById(Long id);
}

serviceImpl层

实现思路:

  1. 判断id不为null
  2. 根据分类id查询菜品表dish进行统计 看当前分类下有没有菜品数据 有,则不能删除  
  3. 根据分类id查询套餐表setmeal进行统计 看当前分类下有没有套餐数据 有,则不能删除
  4. 以上都通过了 该分类下没有菜品或套餐数据 则可以删除
@Service
public class CategoryServiceImpl extends ServiceImpl<CategoryDao,Category> implements CategoryService {
    @Autowired
    private CategoryDao categoryDao;

    @Autowired
    private DishDao dishDao;

    @Autowired
    private SetmealDao setmealDao;

    /**
     * 根据id删除分类
     * @param id
     */
    @Override
    public void deleteById(Long id) {
        if(id==null){
            throw  new  CustomException(0,"分类删除id不能为空!");
        }
        LambdaQueryWrapper<Dish> wrapper1 = new LambdaQueryWrapper<>();
        wrapper1.eq(Dish::getCategoryId,id);
        Integer count = dishDao.selectCount(wrapper1);
        if(count>0){
            throw  new  CustomException(0,"当前分类下存在关联菜品,无法删除!");
        }
        LambdaQueryWrapper<Setmeal> wrapper2 = new LambdaQueryWrapper<>();
        wrapper2.eq(Setmeal::getCategoryId,id);
        Integer count1 = setmealDao.selectCount(wrapper2);
        if(count1>0){
            throw  new  CustomException(0,"当前分类下存在关联套餐,无法删除!");
        }
        System.out.println("count1 = " + count1);
        categoryDao.deleteById(id);
    }
}

(五)条件查询

思路:

  1. 根据类型type查询指定菜品分类或套餐分类数据
  2. 创建条件构造器
  3. 添加查询条件
  4. 执行查询方法
  5. 返回结果
@GetMapping("/list")
public R<List<Category>> list(Integer type){
    LambdaQueryWrapper<Category> wrapper = new LambdaQueryWrapper<>();
    wrapper.eq(type!=null,Category::getType,type);
    List<Category> list = categoryService.list(wrapper);
    return R.success(list);
}

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到