新增套餐
需求分析
后台可以管理套餐信息,通过新增套餐功能来添加一个新的套餐,在添加套餐时需要选择当前套餐所属的套餐分类和包含的菜品,并需要上传套餐对应的图片。
- 页面发送ajax请求,请求服务端获取
套餐分类
数据并展示到下拉框中 - 页面发送ajax请求,请求服务端,根据菜品分类查询对应
菜品数据
并展示到添加菜品窗口中 - 页面发送请求进行
图片上传
,请求服务端将图片保存到服务器 - 页面发送请求进行
图片下载
,将上传的图片进行回显 - 点击保存按钮,发送ajax请求,将
套餐
相关数据以json形式提交到服务端
根据分类查询菜品
下拉框展示数据
/*** 根据条件查询对应的菜品数据* @param dish* @return*/@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> list = dishService.list(queryWrapper);return R.success(list);}
至于图片上传和图片下载在之前的文件上传和下载
模块就已经完成。
服务端接受页面提交的数据
参数:
检查数据的格式是否正确:
/***新增套餐* @param setmealDto* @return*/@PostMappingpublic R<String> save(@RequestBody SetmealDto setmealDto){log.info("套餐信息:{}",setmealDto);return null;}
套餐信息:SetmealDto(setmealDishes=[SetmealDish(id=null, setmealId=null, dishId=1686211243305652225, name=大笨狗3, price=2500, copies=1, sort=null, createTime=null, updateTime=null, createUser=null, updateUser=null, isDeleted=null)], categoryName=null)
public class SetmealServiceImpl extends ServiceImpl<SetmealMapper, Setmeal> implements SetmealService {//@Override// @Transactional@Autowiredprivate SetmealDishService setmealDishService;/*** 新增套餐 同时需要保存套餐和菜品的关联关系* @param setmealDto**/@Transactionalpublic void saveWithDish(SetmealDto setmealDto){//保存套餐的基本信息 操作setmeal 执行insert操作this.save(setmealDto);List<SetmealDish> setmealDishes = setmealDto.getSetmealDishes();//保存套餐和菜品的关联信息 操作setmeal_dish 执行insert操作//对集合进行处理setmealDishes.stream().map((item) -> {item.setSetmealId(setmealDto.getId());return item;}).collect(Collectors.toList());setmealDishService.saveBatch(setmealDishes);//批量保存 保存集合}
检查到新增套餐成功:
套餐信息分页查询
需求分析
将信息以分页的形式展现出来
代码开发
- 页面发送请求,将分页查询参数提交到服务端,获取分页数据
- 页面发送请求,请求服务端进行图片下载,用于页面图片展示
/*** 套餐分页查询* @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<>();//添加查询条件 根据name 进行like模糊查询queryWrapper.like(name!=null,Setmeal::getName,name);//添加排序条件 根据更新时间 降序排列queryWrapper.orderByDesc(Setmeal::getUpdateTime);setmealService.page(pageInfo,queryWrapper);//对象拷贝BeanUtils.copyProperties(pageInfo,dtoPage,"records");List<Setmeal> records = pageInfo.getRecords();List<SetmealDto> list = records.stream().map((item) -> {SetmealDto setmealDto = new SetmealDto();//对象拷贝BeanUtils.copyProperties(item,setmealDto);//分类idLong 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);}
删除套餐
需求分析
点击删除按钮,删除对应的套餐信息,可以批量删除,对于状态为售卖中的是不能删除的,弹出提示,如果要删除,要先停售,才能删除。
代码开发
/*** 删除套餐,同时需要删除套餐和菜品的关联数据* @param ids*/@Transactionalpublic void removeWithDish(List<Long> ids) {//select count(*) from setmeal where id in (1,2,3) and status = 1//查询套餐状态,确定是否可用删除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("套餐正在售卖中,不能删除");}//如果可以删除,先删除套餐表中的数据---setmealthis.removeByIds(ids);//delete from setmeal_dish where setmeal_id in (1,2,3)LambdaQueryWrapper<SetmealDish> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.in(SetmealDish::getSetmealId,ids);//删除关系表中的数据----setmeal_dishsetmealDishService.remove(lambdaQueryWrapper);}
/*** 删除套餐* @param ids* @return*/@DeleteMappingpublic R<String> delete(@RequestParam List<Long> ids){log.info("ids:{}",ids);setmealService.removeWithDish(ids);return R.success("套餐数据删除成功");}@GetMapping("/list")public R<List<Setmeal>> list(Setmeal setmeal) {log.info("setmeal:{}", setmeal);//条件构造器LambdaQueryWrapper<Setmeal> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.like(StringUtils.isNotEmpty(setmeal.getName()), Setmeal::getName, setmeal.getName());queryWrapper.eq(null != setmeal.getCategoryId(), Setmeal::getCategoryId, setmeal.getCategoryId());queryWrapper.eq(null != setmeal.getStatus(), Setmeal::getStatus, setmeal.getStatus());queryWrapper.orderByDesc(Setmeal::getUpdateTime);return R.success(setmealService.list(queryWrapper));}