整理记录下学习整个瑞吉外卖项目,详细代码可在我的Gitee仓库瑞吉外卖实战克隆下载学习使用!
9.套餐管理
9.1 新增套餐
9.1.1 需求分析
9.1.2 数据模型
新增套餐就是将新增页面录入的套餐信息插入到setmeal表,还向setmeal_dish表插入套餐和菜品关联数据,涉及到两个表:
- setmeal表,如图
- setmeal_dish表,如图
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 测试
添加信息,如图
看到数据库添加成功,如图
9.2 分页查询套餐
9.2.1 代码开发
- controller层编写如下查询代码
@GetMapping("/page")
public Result<