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

个人名片:

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

本项目基于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("");
}
  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
### 回答1: 要使用QQ邮箱来进行黑马瑞吉外卖移动端验证码登录,您需要按照以下步骤进行操作。 首先,在黑马瑞吉外卖移动应用程序中选择使用验证码登录选项。 然后,系统会要求您输入您的手机号码。请输入与您的QQ邮箱绑定的手机号码。 接下来,系统将会向您的QQ邮箱发送一封包含验证码的电子邮件。请在移动应用程序中等待几秒钟,确保您的QQ邮箱可以收到邮件。 打开您的QQ邮箱,并查找名为“黑马瑞吉外卖验证码”的邮件。请注意,有时候邮件可能会被归类到垃圾邮件或其他文件夹中,请确保您检查所有文件夹。 在邮件中,您将找到一个验证码。将该验证码复制,并返回到黑马瑞吉外卖移动应用程序。 在应用程序中,粘贴您刚才复制的验证码,并点击“确认”按钮。 系统将根据您输入的验证码验证您的身份。如果验证码输入正确,您将成功登录黑马瑞吉外卖移动应用程序。 请注意,验证码一般在发送后几分钟内失效。如果您在一定时间内没有收到邮件或验证码已失效,请尝试重新请求或重新发送验证码。 这样,您就可以使用您的QQ邮箱来进行黑马瑞吉外卖移动端验证码登录了。如果您遇到任何问题,请及时联系黑马瑞吉外卖的客户支持。 ### 回答2: 黑马瑞吉外卖是一家提供外卖服务的公司,为了提高用户的账户安全性,他们在移动端推出了验证码登录功能。用户可以选择使用qq邮箱进行验证码登录。 用户在移动端打开黑马瑞吉外卖的应用后,选择登录界面,并选择验证码登录选项。接下来,用户需要点击“使用qq邮箱登录”的按钮。 在点击按钮后,应用会要求用户输入他们的qq邮箱地址。用户需要输入正确的邮箱地址,并点击确认。系统会验证该邮箱是否存在以及是否正确。 验证通过后,系统会向用户的qq邮箱发送一封邮件,邮件中包含一个验证码。用户需要打开邮箱,找到这封邮件,复制验证码并返回外卖应用。 用户需要粘贴该验证码,并点击确认。系统会对验证码进行验证,如果验证码正确,用户将成功登录外卖应用,并可开始使用各种功能。 通过验证码登录的方式,账户的安全性得到了提高。因为只有用户本人能够收到并使用qq邮箱中的验证码,在他人无法猜测的情况下,他人无法登录用户的账户。 同时,使用qq邮箱登录还具有方便性。许多用户已经有自己的qq邮箱,不需要再注册新的账户,可以直接使用已有的qq邮箱进行登录,省去了注册的时间和麻烦。 总之,黑马瑞吉外卖移动端验证码登录使用qq邮箱的功能保证了用户账户的安全性,同时也提供了便利的登录方式。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值