Search in sources :

Example 11 with Order

use of com.whoiszxl.entity.Order in project shopzz by whoiszxl.

the class OrderFeignClientImpl method notifyDcPaySuccess.

@Override
public ResponseResult<Boolean> notifyDcPaySuccess(List<Long> orderIds) {
    // 1. 更新订单到发货状态
    List<Order> orderList = orderIds.stream().map(orderId -> {
        Order order = new Order();
        order.setId(orderId);
        order.setOrderStatus(OrderStatusConstants.WAIT_FOR_DELIVERY);
        order.setUpdatedBy("admin");
        return order;
    }).collect(Collectors.toList());
    boolean updateFlag = orderService.updateBatchById(orderList);
    for (Long orderId : orderIds) {
        OrderInfoDTO orderInfo = orderService.getOrderInfo(orderId);
        // 2. 清空购物车
        ResponseResult<Boolean> clearCartResult = cartFeignClient.clearCheckedCartByMemberId(orderInfo.getMemberId());
        if (!clearCartResult.getData()) {
            log.error("下单成功,但是清空购物车失败了");
        }
        // 3. 通知库存中心更新库存
        inventoryFeignClient.notifyPayOrderEvent(orderInfo);
        // 4. 通知WMS订单支付成功,更新WMS中心库存,WMS新增出库单
        wmsFeignClient.notifyPayOrderSuccess(orderInfo);
        // 5. 更新会员中心等级与积分
        memberFeignClient.notifyPayOrderSuccess(orderInfo.getMemberId(), orderInfo.getTotalAmount());
    }
    return ResponseResult.buildByFlag(updateFlag);
}
Also used : Order(com.whoiszxl.entity.Order) com.whoiszxl.feign(com.whoiszxl.feign) ResponseResult(com.whoiszxl.bean.ResponseResult) Slf4j(lombok.extern.slf4j.Slf4j) List(java.util.List) Autowired(org.springframework.beans.factory.annotation.Autowired) OrderInfoDTO(com.whoiszxl.dto.OrderInfoDTO) Order(com.whoiszxl.entity.Order) OrderService(com.whoiszxl.service.OrderService) OrderStatusConstants(com.whoiszxl.constants.OrderStatusConstants) RestController(org.springframework.web.bind.annotation.RestController) Collectors(java.util.stream.Collectors) OrderInfoDTO(com.whoiszxl.dto.OrderInfoDTO)

Example 12 with Order

use of com.whoiszxl.entity.Order in project shopzz by whoiszxl.

the class OrderServiceImpl method buildOrder.

/**
 * 构建订单
 * @param member
 * @param orderId
 * @return
 */
private Order buildOrder(MemberDTO member, long orderId, OrderSubmitRequest orderSubmitRequest) {
    Order order = new Order();
    order.setId(orderId);
    order.setOrderSn(orderId + "");
    // 1. 设置用户信息与订单状态
    order.setMemberId(member.getId());
    order.setUsername(member.getUsername());
    order.setOrderStatus(OrderStatusConstants.UNKNOWN);
    // 2. 配置收货信息
    MemberAddressDTO memberAddress = memberFeignClient.getMemberAddress(orderSubmitRequest.getAddressId().toString());
    order.setReceiverName(memberAddress.getReciverName());
    order.setReceiverPhone(memberAddress.getReciverPhone());
    order.setReceiverPostCode("todo");
    order.setPayType(0);
    order.setReceiverProvince(memberAddress.getProvince());
    order.setReceiverCity(memberAddress.getCity());
    order.setReceiverRegion(memberAddress.getDistrict());
    order.setReceiverDetailAddress(memberAddress.getDetailAddress());
    order.setCreatedBy(member.getUsername());
    order.setUpdatedBy(member.getUsername());
    order.setOrderComment(orderSubmitRequest.getOrderComment());
    return order;
}
Also used : Order(com.whoiszxl.entity.Order)

Example 13 with Order

use of com.whoiszxl.entity.Order in project shopzz by whoiszxl.

the class OrderServiceImpl method orderSubmit.

@Override
@Transactional
public String orderSubmit(OrderSubmitRequest orderSubmitRequest) {
    // TODO 防重校验
    // 0. 获取当前登录用户的信息
    ResponseResult<MemberDetailDTO> memberInfoResult = memberFeignClient.getMemberInfo();
    if (!memberInfoResult.isOk()) {
        ExceptionCatcher.catchValidateEx(ResponseResult.buildError("用户异常"));
    }
    MemberDetailDTO memberDetailDTO = memberInfoResult.getData();
    // 1. 创建订单和订单详细条目
    OrderCreateInfo orderCreateInfo = createOrderInfo(memberDetailDTO, orderSubmitRequest);
    // 2. 订单与订单详细条目入库
    Order order = orderCreateInfo.getOrder();
    this.save(order);
    orderItemService.saveBatch(orderCreateInfo.getOrderItemList());
    // 4. 创建一个操作日志订单状态管理器,在订单状态流转到待付款状态时记录操作记录
    orderStateManager.create(order);
    // 5. TODO 校验库存,锁定库存
    List<Long> skuIds = orderCreateInfo.getOrderItemList().stream().map(OrderItem::getSkuId).collect(Collectors.toList());
    ResponseResult<Boolean> responseResult = productFeignClient.checkStock(skuIds);
    if (!responseResult.getData()) {
        ExceptionCatcher.catchValidateEx(ResponseResult.buildError("库存不足"));
    }
    // 6. 使用优惠券
    if (StringUtils.isNotBlank(orderSubmitRequest.getCouponId())) {
        ResponseResult<Boolean> useCouponResult = promotionFeignClient.useCoupon(orderSubmitRequest.getCouponId());
        if (!useCouponResult.isOk()) {
            String message = useCouponResult.getMessage();
            log.error("优惠券使用失败:{}", message);
            ExceptionCatcher.catchValidateEx(ResponseResult.buildError("优惠券使用失败"));
        }
    }
    // 7. 清空购物车中选中的item
    cartService.clearCheckedCart();
    // 7. 发送Kafka消息到WMS中心进行处理
    // 7.1 通过商品的SKU ID查询到货位库存的明细条目,并进行遍历,一个SKU可能在多个货位上
    // 7.2 创建出需要拣货的条目和发货的条目并进行批量入库
    // 7.4 更新wms中心的库存
    OrderCreateInfoDTO orderCreateInfoDTO = dozerUtils.map(orderCreateInfo, OrderCreateInfoDTO.class);
    MQSender kafkaSender = mqSenderFactory.get(MQEnum.ROCKETMQ);
    kafkaSender.send(MQConstants.SUBMIT_ORDER_QUEUE, JsonUtil.toJson(orderCreateInfoDTO));
    return order.getOrderSn();
}
Also used : Order(com.whoiszxl.entity.Order) MQSender(com.whoiszxl.mq.MQSender) OrderCreateInfo(com.whoiszxl.entity.vo.OrderCreateInfo) Transactional(org.springframework.transaction.annotation.Transactional)

Example 14 with Order

use of com.whoiszxl.entity.Order in project shopzz by whoiszxl.

the class OrderServiceImpl method createOrderInfo.

/**
 * 创建订单和订单条目信息
 * @param memberDetailDTO 用户信息
 * @param orderSubmitVo 提交的订单信息
 * @return
 */
private OrderCreateInfo createOrderInfo(MemberDetailDTO memberDetailDTO, OrderSubmitRequest orderSubmitVo) {
    MemberDTO member = memberDetailDTO.getMember();
    // 1. 生成订单号
    long orderId = idWorker.nextId();
    // 2. 创建订单和订单条目的基本信息
    Order order = buildOrder(member, orderId, orderSubmitVo);
    List<OrderItem> orderItems = buildOrderItems(orderId);
    // 3. 价格计算,计算订单总额
    computePrice(order, orderItems);
    OrderCreateInfo orderCreateInfo = new OrderCreateInfo();
    orderCreateInfo.setOrder(order);
    orderCreateInfo.setOrderItemList(orderItems);
    orderCreateInfo.setFare(BigDecimal.ZERO);
    orderCreateInfo.setPayPrice(order.getTotalAmount());
    return orderCreateInfo;
}
Also used : Order(com.whoiszxl.entity.Order) OrderItem(com.whoiszxl.entity.OrderItem) OrderCreateInfo(com.whoiszxl.entity.vo.OrderCreateInfo)

Example 15 with Order

use of com.whoiszxl.entity.Order in project shopzz by whoiszxl.

the class OrderServiceImpl method updateStatus.

@Override
public Boolean updateStatus(Long id, Integer orderStatus) {
    Order order = new Order();
    order.setId(id);
    order.setOrderStatus(orderStatus);
    return this.updateById(order);
}
Also used : Order(com.whoiszxl.entity.Order)

Aggregations

Order (com.whoiszxl.entity.Order)15 OrderItem (com.whoiszxl.entity.OrderItem)5 OrderCreateInfo (com.whoiszxl.entity.vo.OrderCreateInfo)4 ResponseResult (com.whoiszxl.bean.ResponseResult)3 Transactional (org.springframework.transaction.annotation.Transactional)3 LambdaQueryWrapper (com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper)2 OrderStatusConstants (com.whoiszxl.constants.OrderStatusConstants)2 OrderInfoDTO (com.whoiszxl.dto.OrderInfoDTO)2 PayInfoDc (com.whoiszxl.entity.PayInfoDc)2 MQSender (com.whoiszxl.mq.MQSender)2 OrderService (com.whoiszxl.service.OrderService)2 List (java.util.List)2 Collectors (java.util.stream.Collectors)2 Slf4j (lombok.extern.slf4j.Slf4j)2 Autowired (org.springframework.beans.factory.annotation.Autowired)2 RestController (org.springframework.web.bind.annotation.RestController)2 SaCheckLogin (cn.dev33.satoken.annotation.SaCheckLogin)1 OrderCreateInfoDTO (com.whoiszxl.cqrs.dto.OrderCreateInfoDTO)1 OrderCreateInfoDTO (com.whoiszxl.dto.OrderCreateInfoDTO)1 OrderItemVO (com.whoiszxl.entity.vo.OrderItemVO)1