新增套餐操作setmeal: 套餐表 和 setmeal_dish 套餐菜品关系表
1.在菜品controller根据菜品分类CategoryId查询菜品
@GetMapping("/list")
public R<List<Dish>> list(Dish dish){
//构造查询条件
LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();
//查询条件
queryWrapper.eq(dish.getCategoryId() != null,Dish::getCategoryId,dish.getCategoryId());
//排序
queryWrapper.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime);
List<Dish> dishList= dishService.list(queryWrapper);
return R.success(dishList);
}
2.添加套餐和关联菜品表
1.controller
/**
* 新增套餐
* @param setmealDto
* @return
*/
@PostMapping
public R<String> save(@RequestBody SetmealDto setmealDto){
log.info("新增套餐:{}",setmealDto);
setmealService.saveWithDish(setmealDto);
return R.success("新增成功");
}
2.service
/**
* 新增套餐和菜品关系表
* @param setmealDto
*/
void saveWithDish(SetmealDto setmealDto);
3.serviveImpl
@Autowired
private SetmealDishService setmeaDishService;
@Transactional
@Override
public void saveWithDish(SetmealDto setmealDto) {
//保存套餐基本信息
this.save(setmealDto);
List<SetmealDish> setmealDishes = setmealDto.getSetmealDishes();
setmealDishes.stream().map(setmealDish -> {
setmealDish.setSetmealId(setmealDto.getId());
return setmealDish;
}).collect(Collectors.toList());
//保存关联关系表
setmeaDishService.saveBatch(setmealDishes);
}
实体类
/**
* <p>
* 套餐
* </p>
*
* @author author
* @since 2022-09-04
*/
@Data
@TableName("setmeal")
@ApiModel(value="Setmeal对象", description="套餐")
public class Setmeal implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty(value = "菜品分类id")
@TableField("category_id")
private Long categoryId;
@ApiModelProperty(value = "套餐名称")
@TableField("name")
private String name;
@ApiModelProperty(value = "套餐价格")
@TableField("price")
private BigDecimal price;
@ApiModelProperty(value = "状态 0:停用 1:启用")
@TableField("status")
private Integer status;
@ApiModelProperty(value = "编码")
@TableField("code")
private String code;
@ApiModelProperty(value = "描述信息")
@TableField("description")
private String description;
@ApiModelProperty(value = "图片")
@TableField("image")
private String image;
@ApiModelProperty(value = "创建时间")
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime createTime;
@ApiModelProperty(value = "更新时间")
@TableField(fill = FieldFill.UPDATE)
private LocalDateTime updateTime;
@ApiModelProperty(value = "创建人")
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long createUser;
@ApiModelProperty(value = "修改人")
@TableField(fill = FieldFill.UPDATE)
private Long updateUser;
@ApiModelProperty(value = "是否删除")
@TableField("is_deleted")
private Integer isDeleted;
}
/**
* 套餐菜品关系
*/
@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;
}
@Data
public class SetmealDto extends Setmeal {
private List<SetmealDish> setmealDishes;
private String categoryName;
}
套餐分页查询
/**
* 套餐分页查询
*
* @param page
* @param pageSize
* @param name
* @return
*/
@GetMapping("/page")
public R<Page> page(int page, int pageSize, String name) {
//分页构造器
Page<Setmeal> pageInfo = new Page<>(page, pageSize);
//由于Page<Setmeal>没有套餐分类名称categoryName,使用 Page<SetmealDto> setmealDtoPage
Page<SetmealDto> setmealDtoPage = new Page<>();
//查询条件
LambdaQueryWrapper<Setmeal> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(name != null, Setmeal::getName, name);
queryWrapper.orderByDesc(Setmeal::getUpdateTime);
//查询套餐分类
setmealService.page(pageInfo, queryWrapper);
//扩展分类
BeanUtils.copyProperties(pageInfo, setmealDtoPage, "records");
List<Setmeal> records = pageInfo.getRecords();
List<SetmealDto> setmealDtoList = records.stream().map(setmeal -> {
SetmealDto setmealDto = new SetmealDto();
BeanUtils.copyProperties(setmeal, setmealDto);
Category category = categoryService.getById(setmeal.getCategoryId());
if (category != null) {
String categoryName = category.getName();
setmealDto.setCategoryName(categoryName);
}
return setmealDto;
}).collect(Collectors.toList());
setmealDtoPage.setRecords(setmealDtoList);
return R.success(setmealDtoPage);
}
套餐删除
@DeleteMapping
public R<String> delete(@RequestParam List<Long> ids) {
setmealService.removeWithDish(ids);
return R.success("删除成功");
}
/**
* 删除套餐和菜品关联数据接口
* @param ids
*/
void removeWithDish(List<Long> ids);
@Transactional
@Override
public void removeWithDish(List<Long> ids) {
//查询套餐状态,是否在售
LambdaQueryWrapper<Setmeal> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(Setmeal::getId,ids);
queryWrapper.eq(Setmeal::getStatus,1);
int count = this.count(queryWrapper);
if (count>0){ //存在在售
throw new CustomException("在售中");
}
//非在售,可以删除--stemeal
this.removeByIds(ids);
//删除关系表--SetmealDish
LambdaQueryWrapper<SetmealDish> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.in(SetmealDish::getSetmealId,ids);
setmeaDishService.remove(lambdaQueryWrapper);
}