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

个人名片:

博主酒徒ᝰ.
专栏瑞吉外卖
个人简介沉醉在酒中,借着一股酒劲,去拼搏一个未来。
本篇励志一些伤口之所以总会痛,那是因为你总是去摸。有一种女人像贝壳一样,外面很硬,内在其实很软。心里有一颗美丽的珍珠,却从来不轻易让人看见。

本项目基于B站黑马程序员Java项目实战《瑞吉外卖》,轻松掌握springboot + mybatis plus开发核心技术的真java实战项目。

视频链接【黑马程序员Java项目实战《瑞吉外卖》,轻松掌握springboot + mybatis
plus开发核心技术的真java实战项目】 https://www.bilibili.com/video/BV13a411q753?
点击观看

1.提交订单

image.png

分析:order地址,POST方式,submit地址
注意一般情况下业务写作业务层,这里我就懒得写的,于是写在一起了。
听说公司要求写代码是,这些内容必须写在业务层service中,应该是为了方便阅读。
提交订单之后,后台回收袋订单信息,但是大部分需要根据相应的信息在数据库中查找。查找是对照页面,看需要哪些信息,避免做无用功,把所有信息都查找了一遍。组装找到的所有信息。
注意:手机端显示的订单信息与管理端不一样,管理端内容更多一些,配合管理端页面写代码。

/**
 * 提交订单
 * @param orders
 * @param session
 * @return
 */
@PostMapping("/submit")
public R<String> 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.设置用户id  userid
    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<ShoppingCart> wrapper = new LambdaQueryWrapper<>();
    wrapper.eq(ShoppingCart::getUserId, userId);
    List<ShoppingCart> list = shoppingCartService.list(wrapper);
    AtomicInteger amount = new AtomicInteger(0);
    //5.2以流的形式设置每一个orderDetail信息
    List<OrderDetail> 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<AddressBook> 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.页面显示

image.png

分析:order地址,POST方式,userPage地址,page,pageSize属性
只显示该用户的订单信息,不要弄成数据库所有信息。

/**
 * 订单页面显示
 * @param page
 * @param pageSize
 * @return
 */
@GetMapping("/userPage")
public R<Page> page(int page, int pageSize){
    //验证是否接受到信息
    //log.info("page:{}", page);
    //log.info("pageSize:{}", pageSize);
    //页面构造器
    Page<Orders> pageInfo = new Page<>(page, pageSize);
    //查询所有订单
    LambdaQueryWrapper<Orders> queryWrapper = new LambdaQueryWrapper<>();
    //查询该用户的所有订单信息
    queryWrapper.eq(Orders::getId, session.getAttribute("user"));
    queryWrapper.orderByAsc(Orders::getOrderTime);
    ordersService.page(pageInfo, queryWrapper);
    return R.success(pageInfo);
}

3.再来一单

image.png

分析:order地址,POST方式,again地址
注意先清空购物车。

/**
* 再来一单
* @param orders
* @param session
* @return
*/
@PostMapping("/again")
public R<String> 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<OrderDetail> queryWrapper = new LambdaQueryWrapper<>();
    queryWrapper.eq(OrderDetail::getOrderId, orders.getId());
    List<OrderDetail> list = orderDetailService.list(queryWrapper);
    //2.以流的形式添加每一份餐品到购物车
    List<ShoppingCart> 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<ShoppingCart> wrapper = new LambdaQueryWrapper<>();
    wrapper.eq(ShoppingCart::getUserId, (Long) session.getAttribute("user"));
    shoppingCartService.remove(wrapper);
    //批量保存到购物车
    shoppingCartService.saveBatch(shoppingCartList);

    return R.success("");
}
  • 9
    点赞
  • 8
    收藏
  • 打赏
    打赏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:终极编程指南 设计师:CSDN官方博客 返回首页
评论 16

打赏作者

酒徒ᝰ.

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值