瑞吉外卖|猿创征文|瑞吉外卖——移动端_订单明细

个人名片:

博主:酒徒?.
专栏:瑞吉外卖
个人简介:沉醉在酒中,借着一股酒劲,去拼搏一个未来。
本篇励志:一些伤口之所以总会痛,那是因为你总是去摸。有一种女人像贝壳一样,外面很硬,内在其实很软。心里有一颗美丽的珍珠,却从来不轻易让人看见。
本项目基于B站黑马程序员Java项目实战《瑞吉外卖》,轻松掌握springboot + mybatis plus开发核心技术的真java实战项目。
视频链接【黑马程序员Java项目实战《瑞吉外卖》,轻松掌握springboot + mybatis
plus开发核心技术的真java实战项目】 https://www.bilibili.com/video/BV13a411q753?
点击观看

目录
  • 1.提交订单
  • 2.页面显示
  • 3.再来一单

1.提交订单 瑞吉外卖|猿创征文|瑞吉外卖——移动端_订单明细
文章图片

分析:order地址,POST方式,submit地址
注意一般情况下业务写作业务层,这里我就懒得写的,于是写在一起了。
听说公司要求写代码是,这些内容必须写在业务层service中,应该是为了方便阅读。
提交订单之后,后台回收袋订单信息,但是大部分需要根据相应的信息在数据库中查找。查找是对照页面,看需要哪些信息,避免做无用功,把所有信息都查找了一遍。组装找到的所有信息。
注意:手机端显示的订单信息与管理端不一样,管理端内容更多一些,配合管理端页面写代码。
/** * 提交订单 * @param orders * @param session * @return */ @PostMapping("/submit") public R submit(@RequestBody Orders orders, HttpSession session) { //log.info("orders:{}", orders); //orders:Orders(id=null, number=null, status=null, userId=null, addressBookId=1565321137458069506, orderTime=null, checkoutTime=null, payMethod=1, amount=null, remark=258, phone=null, address=null, userName=null, consignee=null) //1.生成订单号 long number = IdWorker.getId(); orders.setNumber(number); //1.1设置id为订单号为了之后再来一单方便 orders.setId(number); //2.设置状态信息 orders.setStatus(2); //3.设置用户iduserid Long userId = (Long) session.getAttribute("user"); orders.setUserId(userId); //4.设置orderTime=null, checkoutTime=null orders.setOrderTime(LocalDateTime.now()); orders.setCheckoutTime(LocalDateTime.now()); //5.设置实收金额同时设置订单明细表 //5.1根据用户id查询购物车信息 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ShoppingCart::getUserId, userId); List list = shoppingCartService.list(wrapper); AtomicInteger amount = new AtomicInteger(0); //5.2以流的形式设置每一个orderDetail信息 List orderDetailList = list.stream().map((item) -> { OrderDetail orderDetail = new OrderDetail(); //赋值item到 //BeanUtils.copyProperties(item, orderDetail); //orderDetail:OrderDetail(id=1568213442418528257, name=口味蛇, image=0f4bd884-dc9c-4cf9-b59e-7d5958fec3dd.jpg, orderId=null, dishId=1397851668262465537, setmealId=null, dishFlavor=热饮, number=1, amount=168.00) //这里id不能自己设置,为了确保之后相同餐品id不重复 orderDetail.setName(item.getName()); orderDetail.setImage(item.getImage()); orderDetail.setOrderId(number); //判断套餐还是菜品 Long dishId = item.getDishId(); if (dishId != null){ orderDetail.setDishId(item.getDishId()); }else { orderDetail.setSetmealId(item.getSetmealId()); } orderDetail.setDishFlavor(item.getDishFlavor()); orderDetail.setNumber(item.getNumber()); //单个金额 orderDetail.setAmount(item.getAmount()); //计算总金额 amount.addAndGet(item.getAmount().multiply(new BigDecimal(item.getNumber())).intValue()); //log.info("orderDetail:{}", orderDetail); return orderDetail; }).collect(Collectors.toList()); log.info("orderDetailList:{}", orderDetailList); //5.3保存orderDetail orderDetailService.saveBatch(orderDetailList); //5.4将orderDetailList中每一份价格相加,注意餐品的数量number //log.info("amount:{}", amount); //log.info("amount.get():{}", amount.get()); //log.info("new BigDecimal(amount.get()):{}", new BigDecimal(amount.get())); orders.setAmount(new BigDecimal(amount.get())); //6.设置一系列备注order //6.1根据addressBookId获取下单是设置的地址信息 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(AddressBook::getId, orders.getAddressBookId()); AddressBook addressBook = addressBookService.getOne(queryWrapper); //6.2设置手机号设置phone String phone = addressBook.getPhone(); orders.setPhone(phone); //6.3设置address String detail = addressBook.getDetail(); orders.setAddress(detail); //6.4设置userName String userName = userService.getById(userId).getName(); orders.setUserName(userName); //6.5设置consignee String consignee = addressBook.getConsignee(); orders.setUserName(consignee); //7清空购物车 shoppingCartService.remove(wrapper); //log.info("orders:{}", orders); ordersService.save(orders); return R.success("下单成功"); }

2.页面显示 瑞吉外卖|猿创征文|瑞吉外卖——移动端_订单明细
文章图片

分析:order地址,POST方式,userPage地址,page,pageSize属性
只显示该用户的订单信息,不要弄成数据库所有信息。
/** * 订单页面显示 * @param page * @param pageSize * @return */ @GetMapping("/userPage") public R page(int page, int pageSize){ //验证是否接受到信息 //log.info("page:{}", page); //log.info("pageSize:{}", pageSize); //页面构造器 Page pageInfo = new Page<>(page, pageSize); //查询所有订单 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); //查询该用户的所有订单信息 queryWrapper.eq(Orders::getId, session.getAttribute("user")); queryWrapper.orderByAsc(Orders::getOrderTime); ordersService.page(pageInfo, queryWrapper); return R.success(pageInfo); }

3.再来一单 瑞吉外卖|猿创征文|瑞吉外卖——移动端_订单明细
文章图片

【瑞吉外卖|猿创征文|瑞吉外卖——移动端_订单明细】分析:order地址,POST方式,again地址
注意先清空购物车。
/** * 再来一单 * @param orders * @param session * @return */ @PostMapping("/again") public R again(@RequestBody Orders orders, HttpSession session){ //log.info("orders:{}", orders); //orders:Orders(id=1565321137458069506, number=null, status=null, userId=null, addressBookId=null, orderTime=null, checkoutTime=null, payMethod=null, amount=null, remark=null, phone=null, address=null, userName=null, consignee=null) //1.根据订单id查询详细订单信息 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(OrderDetail::getOrderId, orders.getId()); List list = orderDetailService.list(queryWrapper); //2.以流的形式添加每一份餐品到购物车 List shoppingCartList = list.stream().map((item) -> { ShoppingCart shoppingCart = new ShoppingCart(); //赋值orderDetail到shoppingCart BeanUtils.copyProperties(item, shoppingCart); //log.info("shoppingCart:{}", shoppingCart); //shoppingCart:ShoppingCart(id=1568512162989137922, name=口味蛇, image=0f4bd884-dc9c-4cf9-b59e-7d5958fec3dd.jpg, userId=null, dishId=1397851668262465537, setmealId=null, dishFlavor=少冰, number=1, amount=168.00, createTime=null) //设置userId shoppingCart.setUserId((Long) session.getAttribute("user")); //设置createTime shoppingCart.setCreateTime(LocalDateTime.now()); return shoppingCart; }).collect(Collectors.toList()); //log.info("shoppingCartList:{}", shoppingCartList); //先清空购物车根据用户id LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ShoppingCart::getUserId, (Long) session.getAttribute("user")); shoppingCartService.remove(wrapper); //批量保存到购物车 shoppingCartService.saveBatch(shoppingCartList); return R.success(""); }

    推荐阅读