2021-03-14

订单与订单详情

/**单价需要从数据库取出而不是从前端取出*
     * 查询数量,单价
     * 计算总价
     * 写入订单数据库
     * 扣库存
     * name: "张三"
     * phone: "18868822111"
     * address: "慕课网总部"
     * openid: "ew3euwhd7sjw9diwkq" 
     * items: [{
     *     productId: "1423113435324",
     *     productQuantity: 2 
     * }]
     */
@Override
@Transactional
public OrderDTO create(OrderDTO orderDTO) {
    String orderId = KeyUtil.genUniqueKey();
    List<OrderDetail> orderDetailList = orderDTO.getOrderDetailList();
    BigDecimal orderAmount = new BigDecimal(BigInteger.ZERO);
    for(OrderDetail orderDetail : orderDetailList){
        ProductInfo productInfo = productService.findOne(orderDetail.getProductId());
        if(productInfo == null){
            throw new SellException(ResultEnum.PRODUCT_NOT_EXIST);
        }
        orderAmount = productInfo.getProductPrice().multiply(new BigDecimal(orderDetail.getProductQuantity()))
                        .add(orderAmount);
        orderDetail.setDetailId(KeyUtil.genUniqueKey());    //传过来的订单详细列表只有商品id和数量
        orderDetail.setOrderId(orderId); //为每一个商品设置订单号,实现一对多的关系
        BeanUtils.copyProperties(productInfo,orderDetail); //将商品的名称,价格等属性拷贝到订单详情表中
        orderDetailRepository.save(orderDetail); //需要优化为批量插入
    }
    //把新生成的orderid和计算出的总价写入,其中支付状态和订单状态在orderMaster中默认
    OrderMaster orderMaster = new OrderMaster();
    BeanUtils.copyProperties(orderDTO,orderMaster); //注意这个方法要先执行,否则会覆盖orderId为null。
    orderMaster.setOrderId(orderId);
    orderMaster.setOrderAmount(orderAmount);
    orderMasterRepository.save(orderMaster);
    //去库存
    List<CartDTO> cartDTOList = orderDTO.getOrderDetailList().stream()
            .map(e->new CartDTO(e.getProductId(),e.getProductQuantity()))
            .collect(Collectors.toList());
    productService.decreaseStock(cartDTOList);
    return orderDTO;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值