关于买家买入一件商品以后需要进行的逻辑
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的锁机制,来防止出现超卖的现象
以上是关于关于买家买入一件商品以后需要进行的逻辑的主要内容,如果未能解决你的问题,请参考以下文章