/**
   * 重置订单优惠信息(主要用于京东订单)
   *
   * @param originalOrderList
   */
  public void resetDiscountInfo(List<OriginalOrder> originalOrderList) {
    if (CollectionUtils.isEmpty(originalOrderList)) {
      return;
    }

    for (OriginalOrder originalOrder : originalOrderList) {
      originalOrder.setDiscountFee(getDiscountFee(originalOrder.getPromotionInfoList()));
      originalOrder.setSelfDiscountFee(getSelfDiscountFee(originalOrder.getPromotionInfoList()));

      if (CollectionUtils.isEmpty(originalOrder.getOriginalOrderItemList())) {
        continue;
      }

      Money totalPayableFee = getTotalPayableFee(originalOrder);

      for (OriginalOrderItem originalOrderItem : originalOrder.getOriginalOrderItemList()) {
        originalOrderItem.setPartMjzDiscount(
            getItemMjzDiscountFee(
                originalOrderItem.getPayableFee(),
                totalPayableFee,
                originalOrder.getDiscountFee()));
        originalOrderItem.setSelfPartMjzDiscount(
            getItemMjzDiscountFee(
                originalOrderItem.getPayableFee(),
                totalPayableFee,
                originalOrder.getSelfDiscountFee()));
        saveOriginalOrderItem(originalOrderItem);
      }

      saveOriginalOrder(originalOrder);
    }
  }
  /**
   * 保存指定状态的原始订单至数据库
   *
   * @param originalOrderList
   */
  public void saveOriginalOrders(List<OriginalOrder> originalOrderList) {

    if (CollectionUtils.isEmpty(originalOrderList)) {
      return;
    }

    for (OriginalOrder originalOrder : originalOrderList) {

      if (!(StringUtils.equalsIgnoreCase(
              originalOrder.getStatus(), OriginalOrderStatus.WAIT_SELLER_SEND_GOODS.toString())
          || StringUtils.equalsIgnoreCase(
              originalOrder.getStatus(), OriginalOrderStatus.WAIT_BUYER_CONFIRM_GOODS.toString())
          || StringUtils.equalsIgnoreCase(
              originalOrder.getStatus(), OriginalOrderStatus.TRADE_FINISHED.toString()))) {
        continue;
      }
      // 保存原始订单
      saveOriginalOrder(originalOrder);
      for (OriginalOrderItem originalOrderItem : originalOrder.getOriginalOrderItemList()) {
        // 保存原始订单项
        originalOrderItem.setOriginalOrderId(originalOrder.getId());
        saveOriginalOrderItem(originalOrderItem);
      }
      for (PromotionInfo promotionInfo : originalOrder.getPromotionInfoList()) {
        // 保存订单优惠记录
        promotionInfo.setOriginalOrderId(originalOrder.getId());
        savePromotionInfo(promotionInfo);
      }
    }
  }
 /**
  * 根据条件检索原始订单项
  *
  * @param originalOrderItem
  * @return
  */
 public List<OriginalOrderItem> findOriginalOrderItem(OriginalOrderItem originalOrderItem) {
   Search search = new Search(OriginalOrderItem.class);
   if (originalOrderItem != null) {
     if (NumberUtil.isNotNullOrNotZero(originalOrderItem.getOriginalOrderId())) {
       search.addFilterEqual("originalOrderId", originalOrderItem.getOriginalOrderId());
     }
   }
   return generalDAO.search(search);
 }
  /**
   * 获得订单总应付金额
   *
   * @param originalOrder
   * @return
   */
  public Money getTotalPayableFee(OriginalOrder originalOrder) {
    Money totalPayableFee = Money.valueOf(0);
    if (originalOrder == null
        || CollectionUtils.isEmpty(originalOrder.getOriginalOrderItemList())) {
      return totalPayableFee;
    }

    for (OriginalOrderItem originalOrderItem : originalOrder.getOriginalOrderItemList()) {
      totalPayableFee = totalPayableFee.add(originalOrderItem.getPayableFee());
    }
    return totalPayableFee;
  }
 private void createOriginalOrderBrand(
     OriginalOrder originalOrder, OriginalOrderItem originalOrderItem, Integer brandId) {
   OriginalOrderBrand originalOrderBrand = new OriginalOrderBrand();
   originalOrderBrand.setOriginalOrderId(originalOrder.getId());
   originalOrderBrand.setOriginalOrderItemId(originalOrderItem.getId());
   originalOrderBrand.setBrandId(brandId);
   generalDAO.saveOrUpdate(originalOrderBrand);
 }
  /**
   * 获取订单、订单项、订单优惠信息
   *
   * @param originalOrder
   * @param startTime
   * @param endTime
   * @return
   */
  @Transactional(readOnly = true)
  public List<OriginalOrder> findOriginalOrderFullinfos(
      OriginalOrder originalOrder, Date startTime, Date endTime) {
    List<OriginalOrder> originalOrderList = getOriginalOrder(originalOrder, startTime, endTime);

    if (CollectionUtils.isNotEmpty(originalOrderList)) {
      for (OriginalOrder originalOrderOri : originalOrderList) {
        OriginalOrderItem originalOrderItem = new OriginalOrderItem();
        originalOrderItem.setOriginalOrderId(originalOrderOri.getId());
        List<OriginalOrderItem> originalOrderItemList = findOriginalOrderItem(originalOrderItem);
        if (CollectionUtils.isNotEmpty(originalOrderItemList)) {
          originalOrderOri.setOriginalOrderItemList(originalOrderItemList);
        }

        PromotionInfo promotionInfo = new PromotionInfo();
        promotionInfo.setOriginalOrderId(originalOrderOri.getId());
        List<PromotionInfo> promotionInfoList = findPromotionInfos(promotionInfo);
        if (CollectionUtils.isNotEmpty(promotionInfoList)) {
          originalOrderOri.setPromotionInfoList(promotionInfoList);
        }
      }
    }
    return originalOrderList;
  }
  /**
   * 猜测原始订单对应的品牌
   *
   * @param originalOrder
   */
  @Transactional
  public void guessOriginalOrderBrand(OriginalOrder originalOrder, boolean deleteBeforeGuess) {
    try {
      if (deleteBeforeGuess) {
        // 先删除原始猜测的记录
        deleteOriginalOrderBrands(originalOrder);
      }

      List<OriginalOrderItem> originalOrderItemList = originalOrder.getOriginalOrderItemList();
      if (originalOrderItemList == null || originalOrderItemList.isEmpty()) {
        return;
      }
      for (OriginalOrderItem originalOrderItem : originalOrderItemList) {
        String sku = originalOrderItem.getSku();
        if (StringUtils.isBlank(sku)) continue;
        Mealset mealset = mealSetService.findBySku(sku);
        if (mealset != null) {
          for (MealsetItem mealsetItem : mealset.getMealsetItemList()) {
            Product product = mealsetItem.getProduct();
            if (product == null || product.getBrandId() == null) {
              continue;
            }
            createOriginalOrderBrand(originalOrder, originalOrderItem, product.getBrandId());
          }
        } else {
          Product product = productService.findProductBySKU(sku);
          if (product == null || product.getBrandId() == null) {
            continue;
          }
          createOriginalOrderBrand(originalOrder, originalOrderItem, product.getBrandId());
        }
      }
    } catch (Exception e) {
      logger.error("猜测原始订单对应品牌的时候发生错误", e);
    }
  }
  /**
   * 根据条件查询唯一的原始订单项
   *
   * @param originalOrderItem
   * @return
   */
  @Transactional(readOnly = true)
  public OriginalOrderItem getOriginalOrderItemByCondition(OriginalOrderItem originalOrderItem) {
    if (logger.isInfoEnabled()) {
      logger.info("getOriginalOrderItemByCondition方法参数为OriginalOrderItem[{}]", originalOrderItem);
    }
    Search search = new Search(OriginalOrderItem.class);
    if (originalOrderItem != null) {
      if (StringUtils.isNotBlank(originalOrderItem.getSku())) {
        search.addFilterEqual("sku", originalOrderItem.getSku());
      }
      if (StringUtils.isNotBlank(originalOrderItem.getPlatformSubOrderNo())) {
        search.addFilterEqual("platformSubOrderNo", originalOrderItem.getPlatformSubOrderNo());
      }
      if (!NumberUtil.isNullOrZero(originalOrderItem.getOriginalOrderId())) {
        search.addFilterEqual("originalOrderId", originalOrderItem.getOriginalOrderId());
      }
    }
    List<OriginalOrderItem> originalOrderItemList = generalDAO.search(search);

    return CollectionUtils.isEmpty(originalOrderItemList) ? null : originalOrderItemList.get(0);
  }