目录
一、新增套餐
1、需求分析
2、数据模型
- setmeal 套餐表
- setmeal_dish 套餐菜品关系表
3、代码实现
1、添加菜品代码实现
/**
* 添加菜品并对其回显
*/
@GetMapping("/list")
public R<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.orderByDesc(Dish::getSort);
List<Dish> list = dishService.list(queryWrapper);
return R.success(list);
}
测试成功
2、新增套餐代码实现
经过调试传过来总的数据
SetmealService
public interface SetmealService extends IService<Setmeal>{
public void saveWithDish(SetmealDto setmealDto);
}
SetmealServiceImpl
@Service
public class SetmealServiceImpl extends ServiceImpl<SetmealMapper, Setmeal> implements SetmealService {
@Autowired
private SetmealDishService setmealDishService;
@Override
public void saveWithDish(SetmealDto setmealDto) {
//保存套餐的基本信息,操作setmeal,执行insert操作
this.save(setmealDto);
List<SetmealDish> setmealDishes = setmealDto.getSetmealDishes();
List<SetmealDish> list = setmealDishes.stream().map((item) -> {
item.setSetmealId(setmealDto.getId());
return item;
}).collect(Collectors.toList());
//保存套餐和菜品的关联信息,操作setmeal_dish,执行insert操作
setmealDishService.saveBatch(list);
}
}
Controller
/**
* 添加菜品到套餐中
* @return
*/
@PostMapping
public R<String> save(SetmealDto setmealDto){
setmealService.saveWithDish(setmealDto);
return R.success("添加菜品到套餐中成功");
}
测试成功
二、套餐分页
1、代码实现
/**
* 分页
* 这里需要返回的事dto中的,所以想办法把dto里东西整够了
*
* @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);
setmealService.page(pageInfo,queryWrapper);
//对象拷贝,现在还缺什么?还缺records里面的信息列表
BeanUtils.copyProperties(pageInfo,setmealDtoPage,"records");
List<Setmeal> records = pageInfo.getRecords();
List<SetmealDto> list = records.stream().map((item) -> {
SetmealDto setmealDto = new SetmealDto();
//分类id
Long categoryId = item.getCategoryId();
//通过id查询分类名字
Category category = categoryService.getById(categoryId);
if (category!=null) {
//创建dto对象,把名字给dto
String categoryName = category.getName();
setmealDto.setCategoryName(categoryName);
}
//将其他信息拷贝到dto
BeanUtils.copyProperties(item, setmealDto);
return setmealDto;
}).collect(Collectors.toList());
setmealDtoPage.setRecords(list);
return R.success(setmealDtoPage);
}
测试成功
三、删除套餐,批量停/启售
1、需求分析
2、代码开发
/**
* 删除套餐
* @param ids
* @return
*/
@DeleteMapping
public R<String> delete(String[] ids){
int index=0;
for(String id:ids) {
Setmeal setmeal = setmealService.getById(id);
if(setmeal.getStatus()!=1){
setmealService.removeById(id);
}else {
index++;
}
}
if (index>0&&index==ids.length){
return R.error("选中的套餐均为启售状态,不能删除");
}else {
return R.success("删除成功");
}
}
/**
* 批量停售启售套餐
* @param status
* @param ids
* @return
*/
@PostMapping("/status/{status}")
public R<String> sale(@PathVariable int status,String[] ids){
for (String id:ids){
Setmeal setmeal = setmealService.getById(id);
setmeal.setStatus(status);
setmealService.updateById(setmeal);
}
return R.success("修改成功");
}
3、功能测试
四、修改套餐
1、需求分析
在套餐管理列表页面点击修改按钮,跳转到修改套餐页面,在修改页面回显套餐相关信息并进行修改,最后点击确定按钮完成修改操作
代码开发-梳理交互过程
在开发代码之前,需要梳理一下修改套餐时前端页面( add.html)和服务端的交互过程:
1、页面发送ajax请求,请求服务端获取分类数据,用于套餐分类下拉框中数据展示
2、页面发送ajax请求,请求服务端,根据id查询当前套餐信息,用于套餐信息回显
2、代码实现
回显代实现
SetmealController处理Get请求
//根据Id查询套餐信息
@GetMapping("/{id}")
public R<SetmealDto> getById(@PathVariable Long id){
SetmealDto setmealDto=setmealService.getByIdWithDish(id);
return R.success(setmealDto);
}
SetmealServiceImpl添加getByIdWithDish方法
@Override
public SetmealDto getByIdWithDish(Long id) {
//查询套餐基本信息
Setmeal setmeal = this.getById(id);
SetmealDto setmealDto = new SetmealDto();
BeanUtils.copyProperties(setmeal, setmealDto);
//查询套餐菜品信息
LambdaQueryWrapper<SetmealDish> queryWrapper=new LambdaQueryWrapper<>();
queryWrapper.eq(SetmealDish::getSetmealId,setmeal.getId());
List<SetmealDish> list = setmealDishService.list(queryWrapper);
setmealDto.setSetmealDishes(list);
return setmealDto;
}
测试成功
修改代码实现
SetmealServiceImpl
@Override
public void updateWithDish(SetmealDto setmealDto) {
//更新setmeal表基本信息
this.updateById(setmealDto);
//更新setmeal_dish表信息delete操作
LambdaQueryWrapper<SetmealDish> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SetmealDish::getSetmealId, setmealDto.getId());
setmealDishService.remove(queryWrapper);
//更新setmeal_dish表信息insert操作
List<SetmealDish> SetmealDishes = setmealDto.getSetmealDishes();
SetmealDishes = SetmealDishes.stream().map((item) -> {
item.setSetmealId(setmealDto.getId());
return item;
}).collect(Collectors.toList());
setmealDishService.saveBatch(SetmealDishes);
}
在SetmealController
//修改套餐
@PutMapping
public R<String> update(@RequestBody SetmealDto setmealDto){
setmealService.updateWithDish(setmealDto);
return R.success("修改成功");
}