/**
   * 需要检查最晚取消时间在废单时间一小时之前的使用该方法
   *
   * @param branch
   * @param visitTime
   * @param initialProduct 是否需要初始化产品信息
   * @param checkCancelHour 是否需要检查当前时间在最晚废单时间前一小时
   * @return
   */
  public ProdProductBranch fill(
      ProdProductBranch branch,
      Date visitTime,
      boolean initialProduct,
      boolean checkOnline,
      boolean checkCancelHour,
      boolean todayOrderAble) {
    if (initialProduct) {
      ProdProduct product = prodProductDAO.selectProductDetailByPrimaryKey(branch.getProductId());
      branch.setProdProduct(product);
    }
    if (branch.getProdProduct() == null || branch.getProdProduct().isDisabled()) {
      return null;
    }
    if (checkOnline) {
      if (!branch.getProdProduct().isOnLine() || !branch.hasOnline()) {
        return null;
      }
    }
    // 只针对非超级自由行
    if (!branch.getProdProduct().hasSelfPack()
        && prodProductBranchItemDAO.countProductItem(branch.getProdBranchId())
            == 0) { // 如果产品进行了打包才加入到有效的相关产品列表中
      return null;
    }
    if (visitTime != null) { // 如果时间为空跳过时间及库存	
      if (!branch.getProdProduct().hasSelfPack()) {
        TimePrice price = null;
        if (todayOrderAble) {
          price =
              productTimePriceLogic.calcCurrentProdTimePrice(branch.getProdBranchId(), visitTime);
        } else {
          price = productTimePriceLogic.calcProdTimePrice(branch.getProdBranchId(), visitTime);
        }
        if (price == null) {
          return null;
        }

        if (checkCancelHour && !TimePriceUtil.checkLastCancel(price)) {
          return null;
        }
        branch.setSellPrice(price.getPrice());
        branch.setMarketPrice(price.getMarketPrice());
        branch.setStock(price.getDayStock());
        if (branch.getStock() == 0L && price.isOverSaleAble()) { // 能超卖时显示有库存
          branch.setStock(-1);
        }
      }
      // 只针对非超级自由行
      if (!branch.getProdProduct().hasSelfPack()
          && branch.getStock() != -1
          && (branch.getStock() < 1L || branch.getStock() < branch.getMinimum())) {
        return null;
      }
    }

    return branch;
  }
  /**
   * 初始OrdOrderItemMeta相关信息
   *
   * @param ordOrderItemMateMap
   * @param branchItem
   */
  private void initOrdOrderItemMeta(
      Map<Long, OrdOrderItemMeta> ordOrderItemMateMap,
      ProdProductBranchItem branchItem,
      Date visitTime) {
    TimePrice timePrice =
        metaTimePriceDAO.getMetaTimePriceByIdAndDate(branchItem.getMetaBranchId(), visitTime);

    OrdOrderItemMeta ordOrderItemMeta = new OrdOrderItemMeta();
    ordOrderItemMeta.setSettlementPrice(timePrice.getSettlementPrice());
    ordOrderItemMateMap.put(branchItem.getMetaProductId(), ordOrderItemMeta);
  }
 /**
  * 更新时间价格表.
  *
  * @param housePriceId
  */
 private void updateRouteStockTimePrice(EbkHousePrice ehp) {
   TimePrice tp = new TimePrice();
   tp.setMetaBranchId(ehp.getMetaBranchId());
   tp.setBeginDate(ehp.getStartDate());
   tp.setEndDate(ehp.getEndDate());
   // 是否关班
   // 若关班则库存清零,不可超卖;否则正常流程
   if ("true".equalsIgnoreCase(ehp.getIsStockZero())) {
     tp.setOverSale("false");
     tp.setDayStock(0);
   } else { // 库存不清零
     tp.setOverSale(ehp.getIsOverSale());
     // 设定日库存
     if (ehp.getStockAddOrMinus() < 0) {
       throw new RuntimeException("增减库存不能为负数");
     }
     tp.setDayStock(ehp.getStockAddOrMinus());
     tp.setIsAddDayStock(ehp.getIsAddDayStock());
   }
   // 不修改资源状态
   if (tp.getDayStock() >= 0) {
     tp.setResourceConfirm("false");
   } else {
     tp.setResourceConfirm(null);
   }
   tp.setClose("false");
   String result = productProxy.saveOrUpdateMetaTimePrice("op2", tp, ehp.getSubmitUser());
   if (result != null) {
     throw new RuntimeException(result);
   }
 }