JAVA项目实战瑞吉外卖—day5

新增套餐

在套餐的controller进行操作

1
2
3
4
5
6
7
8
9
10
11
/**
* 新增套餐
* @param setmealDto
* @return
*/
//需要添加@RequestBody获得请求体里的categot_id
@PostMapping
public R<String> save(@RequestBody SetmealDto setmealDto){
setmealService.saveWithDish(setmealDto);
return R.success("新增套餐成功");
}

主要的service方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
* 新增套餐
* 同时保存套餐和菜品的关联关系
* @param setmealDto
*/
@Override
public void saveWithDish(SetmealDto setmealDto) {

//保存套餐信息,操作setmeal,执行insert操作
this.save(setmealDto);
//将封装的setmealDto里的setmealId赋值 给菜品信息赋值
List<SetmealDish> setmealDishes = setmealDto.getSetmealDishes();
//使用stream()流形式给菜品赋予对应套餐的id值
//在setmeal_dish菜品套餐关联表中将对应的套餐id赋予到菜品中
setmealDishes.stream().map((item)->{
item.setSetmealId(setmealDto.getId());
return item;
}).collect(Collectors.toList());

//保存菜品和套餐的关联关系
setmealDishService.saveBatch(setmealDishes);

}

分页

和之前的基本没什么区别

就是条件不一样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/**
* 分页
* @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<SetmealDto> dtoPage = new Page<>();

//条件构造器
LambdaQueryWrapper<Setmeal> queryWrapper = new LambdaQueryWrapper<Setmeal>();
queryWrapper.like(name!=null,Setmeal::getName,name);
//添加排序条件,排序
queryWrapper.orderByDesc(Setmeal::getUpdateTime);

setmealService.page(pageInfo,queryWrapper);


//对象拷贝,通过查询完pageInfo的信息赋值到dtoPage,再单独设置每个套餐的套餐分类信息
//records代表的是分页上记录的列表信息
BeanUtils.copyProperties(pageInfo,dtoPage,"records");

List<Setmeal> records = pageInfo.getRecords();

List<SetmealDto> list = records.stream().map((item)->{
SetmealDto setmealDto = new SetmealDto();
//对象拷贝,将list中的页面数据拷贝到setmealDto
BeanUtils.copyProperties(item,setmealDto);
//根据套餐来获得分类的id
Long categoryId = item.getCategoryId();
//根据分类id查询数据库
//获得分类的对象
Category category = categoryService.getById(categoryId);
if (category!=null){
//获得分类名称
String categoryName = category.getName();
setmealDto.setCategoryName(categoryName);
}
return setmealDto;
}).collect(Collectors.toList());

dtoPage.setRecords(list);
return R.success(dtoPage);
}

删除套餐

单个删除和批量删除共用的同一个接口,只是传入的参数不同但是都是数组类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
* 删除套餐,同时需要删除套餐和菜品的关联数据
* @param ids
*/
public void removeWithDish(List<Long> ids) {

//查询套餐状态,确认是否可以删除
LambdaQueryWrapper<Setmeal> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(Setmeal::getId,ids);
queryWrapper.eq(Setmeal::getStatus,1);
//如果不能抛出一个业务异常
Long count = this.count(queryWrapper);
if (count>0){
throw new CustomException("套餐正在售卖中,不能删除");
}

//如果可以删除,先删除套餐表中的数据
this.removeByIds(ids);
//删除关系表中的数据
//根据套餐id,获得对应的菜品id值,再删除对应关系表中数据
LambdaQueryWrapper<SetmealDish> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.in(SetmealDish::getSetmealId,ids);
setmealDishService.remove(lambdaQueryWrapper);
}

手机验证码部分,无法更新

前端页面无法更新不能做小程序页面