Java精品项目瑞吉外卖之新增菜品与分页查询篇

网友投稿 289 2022-07-30


目录一. 新增菜品1.1需求分析1.2代码开发API代码二. 分类信息分页查询三. 删除分类3.1 需求分析3.2 核心代码四. 修改分类

一. 新增菜品

1.1需求分析

后台系统可以管理分类信息,分类菜品分类和套餐分类。当我们在后台系统添加菜品时需要选择一个菜品分类。

当我们在后台系统中添加一个套餐时需要选择一个套餐分类,在移动端也会按照菜品分类和套餐分类来展示对应的菜品和套餐。

同时,在后台系统的分类管理页面分别添加菜品分类与套餐分类:

添加菜品分类

添加套餐分类

数据模型:

涉及一张表Category表:

表对应的数据javaBean为Category.java

Category.java

package com.itheima.reggie.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;

import com.baomidou.mybatisplus.annotation.IdType;

import com.baomidou.mybatisplus.annotation.TableField;

import com.baomidou.mybatisplus.annotation.TableId;

import lombok.Data;

import lombok.Getter;

import lombok.Setter;

import java.io.Serializable;

import java.time.LocalDateTime;

/**

* 分类

*/

@Data

public class Category implements Serializable {

private static final long serialVersionUID = 1L;

private Long id;

//类型 1 菜品分类 2 套餐分类

private Integer type;

//分类名称

private String name;

//顺序

private Integer sort;

//创建时间

@TableField(fill = FieldFill.INSERT)

private LocalDateTime createTime;

//更新时间

@TableField(fill = FieldFill.INSERT_UPDATE)

private LocalDateTime updateTime;

//创建人

@TableField(fill = FieldFill.INSERT)

private Long createUser;

//修改人

@TableField(fill = FieldFill.INSERT_UPDATE)

private Long updateUser;

//是否删除

private Integer isDeleted;

}

具体架子参照前面的Employee员工实体的搭建。

1.2代码开发

新增菜品分类与套餐分类请求的服务地址与提交的jsON数据结构相同,服务端只需提供一个方法即可:

API

说明值请求URL/category请求数据{  "name": "川菜",  "type": "1",  "sort": "1"}

代码

在CategoryController.java中编写新增代码:

package com.itheima.reggie.controller;

import com.itheima.reggie.common.R;

import com.itheima.reggie.entity.Category;

import com.itheima.reggie.service.CategoryService;

import lombok.extern.slf4j.Slf4j;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.RequestBody;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**

* @author jektong

* @date 2022年05月06日 21:47

*/

@RestController

@Slf4j

@RequestMapping("/category")

public class CategoryController {

@Resource

private CategoryService categoryService;

/**

* 新增分类

* @param category

* @return

*/

@PostMapping

public R save(@RequestBody Category category){

log.info("category:{}",category);

categoryService.save(category);

return R.success("新增分类成功");

}

}

二. 分类信息分页查询

分页查询与之前的员工信息查询是一样的,直接上代码:

@GetMapping("/page")

public R page(int page, int pageSize){

// 分页构造

Page pageInfo = new Page(page,pageSize);

// 查询并排序

LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper();

queryWrapper.orderByAsc(Category::getSort);

// 分页查询

categoryService.page(pageInfo,queryWrapper);

return R.success(pageInfo);

}

三. 删除分类

3.1 需求分析

在分类管理列表页面,可以对某个分类进行删除操作。需要注意的是当分类关联了菜品或者套餐时,此分类不允许删除。

API

说明值请求URL/category?id=

需用引入菜品与套餐两个实体:

Dish.java:菜品实体

package com.itheima.reggie.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;

import com.baomidou.mybatisplus.annotation.IdType;

import com.baomidou.mybatisplus.annotation.TableField;

import com.baomidou.mybatisplus.annotation.TableId;

import lombok.Data;

import java.io.Serializable;

import java.math.BigDecimal;

import java.time.LocalDateTime;

/**

菜品

*/

@Data

public class Dish implements Serializable {

private static final long serialVersionUID = 1L;

private Long id;

//菜品名称

private String name;

//菜品分类id

private Long categoryId;

//菜品价格

private BigDecimal price;

//商品码

private String code;

//图片

private String image;

//描述信息

private String description;

//0 停售 1 起售

private Integer status;

//顺序

private Integer sort;

@TableField(fill = FieldFill.INSERT)

private LocalDateTime createTime;

@TableField(fill = FieldFill.INSERT_UPDATE)

private LocalDateTime updateTime;

@TableField(fill = FieldFill.INSERT)

private Long createUser;

@TableField(fill = FieldFill.INSERT_UPDATE)

private Long updateUser;

//是否删除

private Integer isDeleted;

}

Setmeal.java:套餐实体

package com.itheima.reggie.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;

import com.baomidou.mybatisplus.annotation.IdType;

import com.baomidou.mybatisplus.annotation.TableField;

import com.baomidou.mybatisplus.annotation.TableId;

import lombok.Data;

import java.io.Serializable;

import java.math.BigDecimal;

import java.time.LocalDateTime;

/**

* 套餐

*/

@Data

public class Setmeal implements Serializable {

private static final long serialVersionUID = 1L;

private Long id;

//分类id

private Long categoryId;

//套餐名称

private String name;

//套餐价格

private BigDecimal price;

//状态 0:停用 1:启用

private Integer status;

//编码

private String code;

//描述信息

private String description;

//图片

private String image;

@TableField(fill = FieldFill.INSERT)

private LocalDateTime createTime;

@TableField(fill = FieldFill.INSERT_UPDATE)

private LocalDateTime updateTime;

@TableField(fill = FieldFill.INSERT)

private Long createUser;

@TableField(fill = FieldFill.INSERT_UPDATE)

private Long updateUser;

//是否删除

private Integer isDeleted;

}

3.2 核心代码

CategoryServiceImpl.java

package com.itheima.reggie.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import com.itheima.reggie.common.CustomException;

import com.itheima.reggie.entity.Category;

import com.itheima.reggie.entity.Dish;

import com.itheima.reggie.entity.Setmeal;

import com.itheima.reggie.mapper.CategoryMapper;

import com.itheima.reggie.service.CategoryService;

import com.itheima.reggie.service.DishService;

import com.itheima.reggie.service.SetmealService;

import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**

* @author jektong

* @date 2022年05月06日 21:44

*/

@Service

public class CategoryServiceImpl extends ServiceImpl implements CategoryService {

@Resource

private DishService dishService;

@Resource

private SetmealService setmealService;

/**

* 根据ID删除分类,分类之前需要判断

* @param id

*/

@Override

public void remove(Long id) {

LambdaQueryWrapper dishLambdaQueryWrapper = new LambdaQueryWrapper<>();

// 查询当前分类是否关联了菜品,若关联菜品,抛出异常

dishLambdaQueryWrapper.eq(Dish::getCategoryId,id);

int count = dishService.count(dishLambdaQueryWrapper);

if(count > 0){

// 已经关联菜品,抛出异常

throw new CustomException("当前分类已关联菜品,不可删除");

}

// 查询当前分类是否关联了套餐,若关联菜品,抛出异常

LambdaQueryWrapper setmealLambdaQueryWrapper = new LambdaQueryWrapper<>();

setmealLambdaQueryWrapper.eq(Setmeal::getCategoryId,id);

int count1 = setmealService.count(setmealLambdaQueryWrapper);

if(count>0){

// 已经关联套餐,抛出异常

throw new CustomException("当前分类已关联套餐,不可删除");

}

// 正常删除分类

super.removeById(id);

}

}

前面自定义异常类中加入:

/**

* 异常处理方法

* @param customException

* @return

*/

@ExceptionHandler(CustomException.class)

public R exceptionHandler(CustomException customException){

log.error(customException.getMessage());

return R.error(customException.getMessage());

}

CustomException.java

package com.itheima.reggie.common;

/**

* @author jektong

* @date 2022年05月10日 22:26

*/

public class CustomException extends RuntimeException{

public CustomException(String msg){

super(msg);

}

}

四. 修改分类

修改分类很简单,根据分类ID修改就可以了,代码如下:

@PutMapping

public R update(@RequestBody Category category){

log.info("修改分类信息{}" + category);

categoryService.updateById(category);

return R.success("分类修改成功");

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java实现人脸识别登录、注册等功能(最新完整版)
下一篇:Java超详细讲解三大特性之一的封装(java封装的理解)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~