/**
  * 查询产品类别,顺便初始化产品
  *
  * @param prodBranchId
  * @return
  */
 public ProdProductBranch getProdProductBranch(final Long prodBranchId) {
   ProdProductBranch ppb = prodProductBranchDAO.selectByPrimaryKey(prodBranchId);
   if (ppb != null) {
     ppb.setProdProduct(prodProductDAO.selectProductDetailByPrimaryKey(ppb.getProductId()));
   }
   return ppb;
 }
  /**
   * 需要检查最晚取消时间在废单时间一小时之前的使用该方法
   *
   * @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;
  }