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


    个人名片:

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

    本项目基于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("下单成功");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87

    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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    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("");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
  • 相关阅读:
    区块链论文速读A会-OSDI 2023 一种区块链的高效认证存储
    11 函数的极值和最大最小值
    基于Java ME的俄罗斯方块游戏免费LW+源代码
    十大排序——4.堆排序
    软件工程的概念及其重要性
    ARC147D Sets Scores
    edge下载网络问题无法下载
    V3Det大规模词汇视觉检测数据集与LaRS海上全景障碍物检测数据集
    C++算法:最少翻转操作数
    【JVM】synchronized与锁升级
  • 原文地址:https://blog.csdn.net/m0_65144570/article/details/126814950