Bootstrap

瑞吉外卖--套餐的添加修改等功能,短信验证登录原理操作及用户地址管理功能

整理记录下学习整个瑞吉外卖项目,详细代码可在我的Gitee仓库瑞吉外卖实战克隆下载学习使用!

9.套餐管理

9.1 新增套餐

9.1.1 需求分析

![[Pasted image 20230304152742.png]]

9.1.2 数据模型

新增套餐就是将新增页面录入的套餐信息插入到setmeal表,还向setmeal_dish表插入套餐和菜品关联数据,涉及到两个表:

  • setmeal表,如图![[Pasted image 20230304153100.png]]
  • setmeal_dish表,如图![[Pasted image 20230304153116.png]]

9.1.3 代码开发

  • 导入实体类setmealDish类,之前setmeal类已导入过,这里不再说明,setmealDish类如下:
@Data  
public class SetmealDish implements Serializable {
     
    private static final long serialVersionUID = 1L;  
    private Long id;  
    //套餐id  
    private Long setmealId;  
    //菜品id  
    private Long dishId;  
    //菜品名称 (冗余字段)  
    private String name;  
    //菜品原价  
    private BigDecimal price;  
    //份数  
    private Integer copies;  
    //排序  
    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;  
}
  • 创建setmealDish对应Mapper,Service接口及ServiceImpl类
  • 创建SetmealController类,如下:
@RestController  
@RequestMapping("/setmeal")  
@Slf4j  
@RequiredArgsConstructor  
public class SetmealhController {
   
}
  • 添加SetmealDTO数据传输类,用于保存菜品套餐信息,如下:
@Data  
public class SetmealDto extends Setmeal {
     
    private List<SetmealDish> setmealDishes;  
    private String categoryName;  
}
  • 在DishController中创建查询所有菜品方法,如下:
@GetMapping("/list")  
public Result<List<Dish>> list(Dish dish){
     
    //构造查询条件  
    LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();  
    queryWrapper.eq(dish.getCategoryId() != null ,Dish::getCategoryId,dish.getCategoryId());  
    //添加条件,查询状态为1(起售状态)的菜品  
    queryWrapper.eq(Dish::getStatus,1);  
    //添加排序条件  
queryWrapper.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime);  
    List<Dish> list = dishService.list(queryWrapper);  
    return Result.success(list);  
}
  • 在SetmealService接口添加保存套餐方法并重新,如下:
@Transactional  
public void saveWithFlavor(DishDto dishDto) {
     
    //保存菜品的基本信息到菜品表dish  
    this.save(dishDto);  
    Long dishId = dishDto.getId();//菜品id  
    //菜品口味  
    List<DishFlavor> flavors = dishDto.getFlavors();  
    flavors = flavors.stream().map((item) -> {
     
        item.setDishId(dishId);  
        return item;  
    }).collect(Collectors.toList());  
    //保存菜品口味数据到菜品口味表dish_flavor  
    dishFlavorService.saveBatch(flavors);  
}
  • 在SetmealDishController编写保存套餐方法save,如下
    @PostMapping   
    public Result<String> save(@RequestBody SetmealDto setmealDto) {
     
        log.info("套餐信息:{}", setmealDto);  
        setmealService.saveWithDish(setmealDto);  
        return Result.success("新增套餐成功");  
    }

9.1.4 测试

添加信息,如图![[Pasted image 20230304163744.png]]
看到数据库添加成功,如图在这里插入图片描述

9.2 分页查询套餐

9.2.1 代码开发

  • controller层编写如下查询代码
@GetMapping("/page")  
public Result<
;