boot实战-套餐管理
套餐管理
新增套餐
需求分析

数据模型



代码开发
交互过程

回显数据
首先完成新增套餐的数据回显

/**
* 获取菜品列表
* @param categoryId
* @return
*/
@GetMapping("/list")
public R<List<Dish>> list(Long categoryId){
LambdaQueryWrapper<Dish> queryWrapper=new LambdaQueryWrapper<>();
queryWrapper.eq(Dish::getCategoryId,categoryId);
List<Dish> list = dishService.list(queryWrapper);
return R.success(list);
}
保存新套餐

这里又是多表操作(添加事务)
/**
* 新增套餐
* @param setmealDto
* @return
*/
@Transactional
@PostMapping
public R<String> save(@RequestBody SetmealDto setmealDto){
setmealService.save(setmealDto);
List<SetmealDish> setmealDishes = setmealDto.getSetmealDishes();
for (Object setmealdish:setmealDishes){
SetmealDish dish=(SetmealDish) setmealdish;
//List里面缺少了setmealid,需要手动设置
dish.setSetmealId(setmealDto.getId());
setmealDishService.save(dish);
}
return R.success("新增套餐成功!");
}
测试成功


分页查询
需求分析
点击套餐管理自动查询现有套餐信息并分页

代码开发
/**
* 套餐分页查询
* @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> setmealDtoPage=new Page<>();
LambdaQueryWrapper<Setmeal> queryWrapper=new LambdaQueryWrapper<>();
queryWrapper.like(name!=null,Setmeal::getName,name);
queryWrapper.orderByDesc(Setmeal::getUpdateTime);
setmealService.page(pageInfo,queryWrapper);
List<Setmeal> records = pageInfo.getRecords();
BeanUtils.copyProperties(pageInfo,setmealDtoPage,"records");
List<SetmealDto> list = records.stream().map((item) -> {
SetmealDto setmealDto = new SetmealDto();
BeanUtils.copyProperties(item, setmealDto);
Long categoryId = item.getCategoryId();
Category category = categoryService.getById(categoryId);
String categoryName = category.getName();
setmealDto.setCategoryName(categoryName);
return setmealDto;
}).collect(Collectors.toList());
setmealDtoPage.setRecords(list);
return R.success(setmealDtoPage);
}
修改套餐
分为套餐数据回显,以及保存更新后的信息
回显

/**
* 根据id获取套餐数据
* @param id
* @return
*/
@GetMapping("/{id}")
public R<SetmealDto> GetById(@PathVariable Long id){
Setmeal setmeal = setmealService.getById(id);
LambdaQueryWrapper<SetmealDish> queryWrapper=new LambdaQueryWrapper<>();
queryWrapper.eq(SetmealDish::getSetmealId,id);
List<SetmealDish> list = setmealDishService.list(queryWrapper);
SetmealDto setmealDto=new SetmealDto();
BeanUtils.copyProperties(setmeal,setmealDto);
setmealDto.setSetmealDishes(list);
return R.success(setmealDto);
}
保存修改后的数据
可以发现我们回显数据用的是setmealdto对象,现在保存也是传回的setmealdto对象

/**
* 更新套餐
* @param setmealDto
* @return
*/
@Transactional
@PutMapping
public R<String> update(@RequestBody SetmealDto setmealDto){
Long id = setmealDto.getId();
//和之前的思路一样我们清空套餐对应的菜品信息再存入
// 首先先更新套餐信息
setmealService.updateById(setmealDto);
LambdaQueryWrapper<SetmealDish> queryWrapper=new LambdaQueryWrapper<>();
queryWrapper.eq(SetmealDish::getSetmealId,id);
// 清除原有数据
setmealDishService.remove(queryWrapper);
List<SetmealDish> setmealDishes = setmealDto.getSetmealDishes();
for (Object setmealdish:setmealDishes){
SetmealDish dish=(SetmealDish) setmealdish;
dish.setSetmealId(setmealDto.getId());
setmealDishService.save(dish);
}
return R.success("更新套餐成功!");
}
测试


批量停售起售

这里传入的停售请求,正好要将status由1变成0
/**
* 批量停售起售
* @param status
* @param ids
* @return
*/
@PostMapping("/status/{status}")
public R<String> changeStatus(@PathVariable int status,Long[] ids){
for (long id:ids){
Setmeal setmeal=new Setmeal();
setmeal=setmealService.getById(id);
setmeal.setStatus(status);
setmealService.updateById(setmeal);
}
return R.success("更改成功!");
}
批量删除&删除
/**
* 批量删除
* @param ids
* @return
*/
@Transactional
@DeleteMapping
public R<String> deleteByIds(Long[] ids){
List<Long> idList= Arrays.asList(ids);
setmealService.removeByIds(idList);
for (Long id:ids){
LambdaQueryWrapper<SetmealDish> queryWrapper=new LambdaQueryWrapper<>();
queryWrapper.eq(SetmealDish::getSetmealId,id);
setmealDishService.remove(queryWrapper);
}
return R.success("删除数据成功!");
}

浙公网安备 33010602011771号