1.删除套餐
/**
* 删除套餐
* @param ids
* @return
*/
@DeleteMapping
public R<String> delete(@RequestParam List<Long> ids){
log.info("ids: {}",ids);
setMealService.removeWithDish(ids);
return R.success("删除套餐成功");
}
后面就是自己写的了,感觉写复杂了
2.实现批量修改套餐状态
前端传来的参数有修改后的状态,id集合
我的思路是:
1.先根据id和状态查询,如果查出来count>0,就证明有状态不一样,直接抛出业务异常.
2.遍历传来的id集合,每个id新创建个套餐对象,并设置id和状态,最后用updateBatchById方法修改状态.
/**
* 批量修改状态
* @param status
* @param ids
* @return
*/
@PostMapping("/status/{status}")
public R<String> updateStatus(@PathVariable Integer status , @RequestParam List<Long> ids){
log.info("修改套餐状态为: {} ids: {}",status,ids);
//判断状态是否一致sql: select count(*) from setmeal where in ? and status = ?
LambdaQueryWrapper<Setmeal> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(Setmeal::getId,ids);
queryWrapper.eq(Setmeal::getStatus,status);
int count = setMealService.count(queryWrapper);
if(count != 0){
throw new BusinessException("套餐状态不一致~无法批量修改!");
}
//修改状态 sql:update setmeal set status = 0 where id = ?
ArrayList<Setmeal> setMeals = new ArrayList<>();
for (Long id : ids) {
Setmeal s = new Setmeal();
s.setStatus(status);
s.setId(id);
setMeals.add(s);
}
setMealService.updateBatchById(setMeals);
return R.success("修改状态成功");
}
3.实现修改界面的回显
/**
* 根据id查询套餐(回显)
* @param id
* @return
*/
@Override
public SetmealDto selectWithDish(Long id) {
//查询该id关联的菜品
LambdaQueryWrapper<SetmealDish> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SetmealDish::getSetmealId,id);
List<SetmealDish> list = setMealDishService.list(queryWrapper);
//查询基本信息
Setmeal setmeal = this.getById(id);
//封装成dto
SetmealDto setmealDto = new SetmealDto();
setmealDto.setSetmealDishes(list);
BeanUtils.copyProperties(setmeal,setmealDto);
return setmealDto;
}
4.保存修改
也是按老师的思路,先删除再把修改的菜品插入关联表
/**
* 保存套餐的修改
* @param setmealDto
*/
@Override
public void updateWithDish(SetmealDto setmealDto) {
//1.保存基本套餐信息的修改
this.updateById(setmealDto);
//2.删除以前存在关联表的菜品 delete from setmeal_dish where setmeal_id = ?
LambdaQueryWrapper<SetmealDish> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SetmealDish::getSetmealId,setmealDto.getId());
setMealDishService.remove(queryWrapper);
//3.插入现在传入关联表的菜品
List<SetmealDish> setmealDishes = setmealDto.getSetmealDishes();
setmealDishes = setmealDishes.stream().map((item)->{
item.setSetmealId(setmealDto.getId());
return item;
}).collect(Collectors.toList());
setMealDishService.saveBatch(setmealDishes);
}
5.前端手机登录
这里没有用阿里云短信服务
直接用了资料,验证码也没搞
直接过滤器添加路径
/**
* 手机端登录
* 没有做验证码登录
* @param map
* @param session
* @return
*/
@PostMapping("/login")
public R<User> login(@RequestBody Map map, HttpSession session){
//1.获取手机号码
String phone = map.get("phone").toString();
if(!phone.isEmpty()){
log.info("手机号: {}",phone);
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getPhone,phone);
User user = userService.getOne(queryWrapper);
//2.初次登录新增user
if(user == null){
user = new User();
user.setPhone(phone);
userService.save(user);
}
session.setAttribute("user",user.getId());
return R.success(user);
}
return R.error("登录失败");
}
这里没有返回购物车列表请求是显示不了菜品页面的,直接创建购物车controller返回个null就行.