关于买家买入一件商品以后需要进行的逻辑

Posted qingmuchuanqi48

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于买家买入一件商品以后需要进行的逻辑相关的知识,希望对你有一定的参考价值。

 public OrderDTO create(OrderDTO orderDTO) {

        String orderId = KeyUtil.genUniqueKey();
        BigDecimal orderAmount = new BigDecimal(BigInteger.ZERO);


        //1.查询商品(数量,价格)
        for (OrderDetail orderDetail : orderDTO.getOrderDetailList()) {
            ProductInfo productInfo = productService.findById(orderDetail.getProductId());
            if (null == productInfo) {
                throw new SellerException(ResultEnum.PRODUCT_NOT_EXIST);
            }
            //2.计算总价
            orderAmount = productInfo.getProductPrice().multiply(new BigDecimal(orderDetail.getProductCount())).add(orderAmount);
            //3.订单详情入库
            BeanUtils.copyProperties(productInfo, orderDetail);
            orderDetail.setDetailId(KeyUtil.genUniqueKey());
            orderDetail.setOrderId(orderId);
            OrderDetail orderDetail1 = orderDetailRepository.save(orderDetail);
            orderDetailRepository.save(orderDetail);
        }


        //3.写入订单数据库
        OrderMaster orderMaster = new OrderMaster();
        BeanUtils.copyProperties(orderDTO, orderMaster);
        orderMaster.setOrderId(orderId);
        orderMaster.setOrderAmount(orderAmount);
        orderMaster.setOrderStatus(OrderStatusEnum.NEW.getCode());
        orderMaster.setPayStatus(PayStatusEnum.WAIT.getCode());
        orderMasterRepository.save(orderMaster);

        //todo  4.扣库存

        List<CartDTO> cartDTOList = orderDTO.getOrderDetailList()
                .stream()
                .map(e -> new CartDTO(e.getProductId(), e.getProductCount()))
                .collect(Collectors.toList());
        productService.decreaseStock(cartDTOList);
        return null;
    }

如果涉及到高并发,需要使用redis的锁机制,来防止出现超卖的现象

以上是关于关于买家买入一件商品以后需要进行的逻辑的主要内容,如果未能解决你的问题,请参考以下文章

选好商品在购物车里 点结算然后弹回原来的界面 显示淘宝买家帐号出错 怎么办我想买东西

微信点餐系统-买家端商品

亚马逊欧盟站商品必须要有CE认证和doc

商品期货资金管理策略(教学)

商品期货资金管理策略(教学)

DBA奢侈品链买家交易流程教学