• 瑞吉外卖Day05


    1.新增套餐

    service层

    1. @Service
    2. public class SetmealServiceImpl extends ServiceImpl implements SetmealService {
    3. @Autowired
    4. private SetmealDishService setmealDishService;
    5. /**
    6. * 新增套餐,同时保存套餐和菜品的关系
    7. *
    8. * @param setmealDto
    9. */
    10. @Transactional
    11. public void saveWithDish(SetmealDto setmealDto) {
    12. //1.保存套餐的基本信息setmeal
    13. this.save(setmealDto);
    14. //2.保存套餐和菜品的关联信息setmeal_dish
    15. List setmealDishes = setmealDto.getSetmealDishes();
    16. setmealDishes.stream().map((item) -> {
    17. item.setSetmealId(setmealDto.getId());
    18. return item;
    19. }).collect(Collectors.toList());
    20. setmealDishService.saveBatch(setmealDishes);
    21. }
    22. }

    controller层

    1. @PostMapping()
    2. public R save(@RequestBody SetmealDto setmealDto) {
    3. log.info("sermeal:{}", setmealDto);
    4. setmealService.saveWithDish(setmealDto);
    5. return R.success("添加套餐成功");
    6. }

    2.分页查询

    1. @GetMapping("/page")
    2. public R page(int page, int pageSize, String name) {
    3. //分页构造器
    4. Page pageInfo = new Page<>(page, pageSize);
    5. Page dtoPage=new Page<>();
    6. LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
    7. queryWrapper.like(name != null, Setmeal::getName, name);
    8. queryWrapper.orderByDesc(Setmeal::getUpdateTime);
    9. setmealService.page(pageInfo,queryWrapper);
    10. //对象拷贝
    11. BeanUtils.copyProperties(pageInfo,dtoPage,"records");
    12. List records = pageInfo.getRecords();
    13. List list = records.stream().map((item) -> {
    14. SetmealDto setmealDto = new SetmealDto();
    15. //对象拷贝
    16. BeanUtils.copyProperties(item, setmealDto);
    17. //分类id
    18. Long categoryId = item.getCategoryId();
    19. //根据分类id查询 分类对象
    20. Category category = categoryService.getById(categoryId);
    21. if (category != null) {
    22. String categoryName = category.getName();
    23. setmealDto.setCategoryName(categoryName);
    24. }
    25. return setmealDto;
    26. }).collect(Collectors.toList());
    27. dtoPage.setRecords(list);
    28. return R.success(dtoPage);
    29. }

    3.停售/起售

    1. /**
    2. * 根据id(批量)停售/启售套餐信息
    3. * @param status
    4. * @param ids
    5. * @return
    6. */
    7. @PostMapping("/status/{status}")
    8. public R updateMulStatus(@PathVariable Integer status, Long[] ids){
    9. List list = Arrays.asList(ids);
    10. //构造条件构造器
    11. LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>();
    12. //添加过滤条件
    13. updateWrapper.set(Setmeal::getStatus,status).in(Setmeal::getId,list);
    14. setmealService.update(updateWrapper);
    15. return R.success("套餐信息修改成功");
    16. }

    4.批量删除

    controller层

    1. /**
    2. * 删除套餐
    3. */
    4. @DeleteMapping
    5. public R delete(@RequestParam List ids) {
    6. setmealService.removeWithDish(ids);
    7. return R.success("删除套餐成功");
    8. }

    service层

    1. /**
    2. * 删除套餐,同时删除套餐和菜品之间的关系
    3. */
    4. public void removeWithDish(List ids) {
    5. //查询套餐状态是否可以删除
    6. LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
    7. queryWrapper.in(Setmeal::getId, ids);
    8. queryWrapper.eq(Setmeal::getStatus, 1);
    9. long count = this.count(queryWrapper);
    10. if (count > 0) {
    11. //如果不能删除,抛出异常
    12. throw new CustomException("套餐正在售卖");
    13. }
    14. //1.如果可以删除,先删除套餐表中的数据 setmeal
    15. this.removeByIds(ids);
    16. LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
    17. lambdaQueryWrapper.in(SetmealDish::getSetmealId, ids);
    18. //2.删除关系表中的数据setmeal_dish
    19. setmealDishService.remove(lambdaQueryWrapper);
    20. }

    5.修改套餐

    5.1套餐回显

    controller层

    1. /**
    2. * 根据id查询套餐信息
    3. *(套餐信息的回显)
    4. * @param id
    5. * @return
    6. */
    7. @GetMapping("/{id}")
    8. public R getById(@PathVariable Long id) {
    9. log.info("根据id查询套餐信息:{}", id);
    10. // 调用service执行查询。、
    11. SetmealDto setmealDto = setmealService.getByIdWithDish(id);
    12. return R.success(setmealDto);
    13. }

    service层

    1. /**
    2. * 通过id查询套餐信息, 同时还要查询关联表setmeal_dish的菜品信息进行回显。
    3. *
    4. * @param id 待查询的id
    5. */
    6. @Override
    7. public SetmealDto getByIdWithDish(Long id) {
    8. // 根据id查询setmeal表中的基本信息
    9. Setmeal setmeal = this.getById(id);
    10. SetmealDto setmealDto = new SetmealDto();
    11. // 对象拷贝。
    12. BeanUtils.copyProperties(setmeal, setmealDto);
    13. // 查询关联表setmeal_dish的菜品信息
    14. LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
    15. queryWrapper.eq(SetmealDish::getSetmealId, id);
    16. List setmealDishList = setmealDishService.list(queryWrapper);
    17. //设置套餐菜品属性
    18. setmealDto.setSetmealDishes(setmealDishList);
    19. return setmealDto;
    20. }

    5.2套餐修改

    controller层

    1. /**
    2. * 修改套餐信息。
    3. *
    4. * @param setmealDto
    5. * @return
    6. */
    7. @PutMapping
    8. public R update(@RequestBody SetmealDto setmealDto) {
    9. log.info("修改套餐信息{}", setmealDto);
    10. // 执行更新。
    11. setmealService.updateWithDish(setmealDto);
    12. return R.success("修改套餐信息成功");
    13. }

    service层

    1. /**
    2. * 更新套餐信息,不仅要更新setmeal基本信息, 还要更新套餐所对应的菜品到setmeal_dish表
    3. *
    4. * @param setmealDto
    5. */
    6. @Override
    7. public void updateWithDish(SetmealDto setmealDto) {
    8. // 保存setmeal表中的基本数据。
    9. this.updateById(setmealDto);
    10. // 先删除原来的套餐所对应的菜品数据。
    11. LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
    12. queryWrapper.eq(SetmealDish::getSetmealId, setmealDto.getId());
    13. setmealDishService.remove(queryWrapper);
    14. // 更新套餐关联菜品信息。setmeal_dish表。
    15. // 先获得套餐所对应的菜品集合。
    16. List setmealDishes = setmealDto.getSetmealDishes();
    17. //每一个item为SetmealDish对象。
    18. setmealDishes = setmealDishes.stream().map((item) -> {
    19. //设置setmeal_id字段。
    20. item.setSetmealId(setmealDto.getId());
    21. return item;
    22. }).collect(Collectors.toList());
    23. // 重新保存套餐对应菜品数据
    24. setmealDishService.saveBatch(setmealDishes);
    25. }

    6.手机验证码登录

    目前市面上有很多第三方提供的短信服务,这些第三方短信服务会和各个运营商(移动、联通、电信)对接,我们只需要注册成为会员并且按照提供的开发文档进行调用就可以发送短信。需要说明的是,这些短信服务一般都是收费服务。

    1. /**
    2. * 发送手机短信验证码
    3. *
    4. * @param user
    5. * @return
    6. */
    7. @PostMapping("/sendMsg")
    8. public R sendMsg(@RequestBody User user, HttpSession session) {
    9. //1.获取手机号
    10. String phone = user.getPhone();
    11. if (StringUtils.isNotEmpty(phone)) {
    12. //2.生成四位的验证码
    13. String code = ValidateCodeUtils.generateValidateCode(4).toString();
    14. //查看验证码
    15. log.info("code={}", code);
    16. //3.调用阿里云短信服务完成发送
    17. //若要真的发送,执行下面
    18. // SMSUtils.sendMessage("签名","",phone,code);
    19. //4.生成的验证码保存到session
    20. session.setAttribute(phone, code);
    21. return R.success("发送验证码发送成功");
    22. }
    23. return R.success("发送失败");
    24. }
    1. /**
    2. * 移动端登录
    3. */
    4. @PostMapping("/login")
    5. public R login(@RequestBody Map map, HttpSession session) {
    6. //1.获取手机号
    7. String phone = map.get("phone").toString();
    8. //2.获取验证码
    9. String code = map.get("code").toString();
    10. //3.从Session中获取保存的验证码进行比对
    11. Object codeInSession = session.getAttribute(phone);
    12. //4.如果比对成功,判断手机号是否在用户表中
    13. if (codeInSession != null && codeInSession.equals(code)) {//登陆成功
    14. LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
    15. queryWrapper.eq(User::getPhone, phone);
    16. User user = userService.getOne(queryWrapper);
    17. if (user == null) {//新用户
    18. //5.如果不在用户表,则自动完成注册
    19. user = new User();
    20. user.setPhone(phone);
    21. user.setStatus(1);
    22. userService.save(user);
    23. }
    24. session.setAttribute("user",user.getId());
    25. return R.success(user);
    26. }
    27. return R.error("登陆失败");
    28. }
  • 相关阅读:
    安装3节点的K8S
    【K8S】学习笔记(一)
    感谢信 | 企企通赋能鲜丰水果搭建特色数字化供应链协同系统,领跑中国水果连锁品牌
    Java多线程基础知识-2
    http请求头中的Content-Type到底有什么用?
    【微前端开发环境下,加载远程子应用的实战。】
    web网页设计期末课程大作业:家乡旅游主题网站设计——河北8页HTML+CSS+JavaScript
    P32 JProgressBar进度条
    项目打包docker镜像 | 上传nexus | jenkins一键构建
    Python数据分析与机器学习42-Python库分析科比生涯数据
  • 原文地址:https://blog.csdn.net/dfdg345/article/details/134419696