@Override
  public List<NMenuItemBean> menuItemDishAndReviewsByCondition(MenuSearchConditionBean condition) {

    Map<String, String> results = mDishDAO.getDishAndReviewsMenuItemsByConditon(condition);
    List<NMenuItemBean> list = new ArrayList<NMenuItemBean>(results.size());
    for (String key : results.keySet()) {
      String type = key.substring(0, 1);
      String id = key.substring(1);
      NMenuItemBean bean = null;
      if (ParameterConstant.MENU_ITEM_TYPE_DISH.equals(type)) {
        NMenuItemDishBean _bean = mDishDAO.getDishMenuItemById(id);
        if (StringUtil.isEmpty(_bean.dishImageUrl)) continue;
        _bean.dishImageUrl = AwsS3Utils.getAwsS3RestaurantResUrl() + _bean.dishImageUrl;
        bean = _bean;
      } else {
        NMenuItemReviewBean _bean = mReviewDAO.getReviewMenuItemById(id);
        DetachedCriteria detachedCriteria = DetachedCriteria.forClass(ReviewItem.class);
        detachedCriteria.add(Restrictions.eq("mReview.mId", Long.parseLong(_bean.reviewId)));
        List<ReviewItem> reviewItems =
            mReviewDAO.findByCriteria(detachedCriteria, ReviewItem.class);
        List<NMenuItemReviewItemBean> urls =
            new ArrayList<NMenuItemReviewItemBean>(reviewItems.size());
        for (ReviewItem reviewItem : reviewItems) {

          Dish dish = mReviewDAO.findById(Dish.class, Long.valueOf(reviewItem.getmDishId()));
          NMenuItemReviewItemBean itemBean =
              new NMenuItemReviewItemBean(
                  AwsS3Utils.getAwsS3RootResUrl() + reviewItem.getmImageUrl());
          itemBean.comment = reviewItem.getmComment();
          itemBean.dishId = reviewItem.getmDishId();
          itemBean.dishName = dish.getmName();
          itemBean.dishPrice = String.valueOf(dish.getmPrice());
          urls.add(itemBean);
        }
        _bean.reviewItemArray = urls;
        NMenuItemReviewCustomerBean customer = new NMenuItemReviewCustomerBean();
        customer.setAvatarUrl(AwsS3Utils.getAwsS3CustomerResUrl() + _bean.avatarUrl);
        // customer.setCustomerCompany(_bean.customerCompany);
        // customer.setCustomerName(_bean.customerName);
        // customer.setCustomerProfession(_bean.customerProfession);

        //
        _bean.avatarUrl = null;
        _bean.customerCompany = null;
        _bean.customerName = null;
        _bean.customerProfession = null;
        // _bean.summary= null;

        _bean.customer = customer;

        bean = _bean;
      }
      list.add(bean);
    }
    return list;
  }
  private String getDishImageUrl(String dishImageName, Restaurant restaurant) {

    if (restaurant == null) {
      return "";
    }

    if (dishImageName == null || dishImageName == "") {
      return "";
    }

    return AwsS3Utils.getAwsS3RestaurantResUrl()
        + restaurant.getmFolderName()
        + "/"
        + dishImageName;
  }
  @Override
  public List<NMenuItemBean> menuItemDishsByCondition(MenuSearchConditionBean condition) {

    List<NMenuItemDishBean> list = mDishDAO.getDishMenuItemsByConditon(condition);

    List<NMenuItemBean> _list = new ArrayList<NMenuItemBean>(list.size());

    for (NMenuItemDishBean bean : list) {
      if (logger.isDebugEnabled()) logger.debug("NMenuItemDishBean:" + bean);
      bean.dishImageUrl = AwsS3Utils.getAwsS3RestaurantResUrl() + bean.dishImageUrl;
      _list.add(bean);
      if (logger.isDebugEnabled()) logger.debug("NMenuItemDishBean:" + bean);
    }

    return _list;
  }
  public String getDishImageUrl(Dish dish) {

    if (dish.getmImageName() == null || dish.getmImageName() == "") {
      return "";
    }

    if (dish.getmDishCategory() == null) {
      return "";
    }

    if (dish.getmDishCategory().getmRestaurant() == null) {
      return "";
    }

    return AwsS3Utils.getAwsS3RestaurantResUrl()
        + dish.getmDishCategory().getmRestaurant().getmFolderName()
        + "/"
        + dish.getmImageName();
  }
  @Override
  public DishBean getDishBeanById(MenuSearchConditionBean condition, long id) {

    Dish dish = getBaseDAO().findById(Dish.class, id);
    Restaurant restaurant = dish.getmDishCategory().getmRestaurant();
    DishBean dishBean = new DishBean();
    String curTime = TimestampUtil.dateToStr(new Date(), DateFormatType.Time24);
    if (dish != null) {

      dishBean.dishId = String.valueOf(dish.getmId());
      dishBean.dishPrice = String.valueOf(dish.getmPrice());
      if (dish.getmName() != null) dishBean.dishName = dish.getmName();
      if (dish.getmDescription() != null) {
        dishBean.desc = dish.getmDescription();
      }
      if (dish.getmCustomization() != null) {
        dishBean.customization = JsonFormatUtils.getCustomization(dish.getmCustomization());
      }
      if (dish.getmDishCategory().getmRestaurant().getmFolderName() != null
          && dish.getmImageName() != null)
        dishBean.dishImageUrl =
            AwsS3Utils.getAwsS3RestaurantResUrl()
                + dish.getmDishCategory().getmRestaurant().getmFolderName()
                + "/"
                + dish.getmImageName();

      dishBean.restaurant.restaurantId =
          String.valueOf(dish.getmDishCategory().getmRestaurant().getmId());
      if (dish.getmDishCategory().getmRestaurant().getmName() != null)
        dishBean.restaurant.restaurantName = dish.getmDishCategory().getmRestaurant().getmName();
      dishBean.restaurant.freeDeliveryLimit =
          String.valueOf(dish.getmDishCategory().getmRestaurant().getmFreeDeliveryLimit());
      dishBean.restaurant.deliveryFee =
          String.valueOf(dish.getmDishCategory().getmRestaurant().getmDeliveryFee());
      if (dish.getmDishCategory().getmRestaurant().getmFolderName() != null
          && dish.getmDishCategory().getmRestaurant().getmLogo() != null)
        dishBean.restaurant.restaurantLogoUrl =
            AwsS3Utils.getAwsS3RestaurantResUrl()
                + dish.getmDishCategory().getmRestaurant().getmFolderName()
                + "/"
                + dish.getmDishCategory().getmRestaurant().getmLogo();

      // set different open time and delivery through different week
      int week = FormatUtils.getCurrentWeek();
      RestaurantDeliveryTimeBean restaurantDeliveryTimeBean = new RestaurantDeliveryTimeBean();
      switch (week) {
        case 0:
          if (restaurant.getmSunOpenStartTime() != null)
            dishBean.restaurant.openingStartTime = restaurant.getmSunOpenStartTime();
          if (restaurant.getmSunOpenEndTime() != null)
            dishBean.restaurant.openingEndTime = restaurant.getmSunOpenEndTime();
          if (restaurant.getmSunDeliveryStartTime() != null)
            restaurantDeliveryTimeBean.startTime = restaurant.getmSunDeliveryStartTime();
          if (restaurant.getmSunDeliveryEndTime() != null)
            restaurantDeliveryTimeBean.endTime = restaurant.getmSunDeliveryEndTime();
          break;

        case 1:
          if (restaurant.getmMonOpenStartTime() != null)
            dishBean.restaurant.openingStartTime = restaurant.getmMonOpenStartTime();
          if (restaurant.getmMonOpenEndTime() != null)
            dishBean.restaurant.openingEndTime = restaurant.getmMonOpenEndTime();
          if (restaurant.getmMonDeliveryStartTime() != null)
            restaurantDeliveryTimeBean.startTime = restaurant.getmMonDeliveryStartTime();
          if (restaurant.getmMonDeliveryEndTime() != null)
            restaurantDeliveryTimeBean.endTime = restaurant.getmMonDeliveryEndTime();
          break;

        case 2:
          if (restaurant.getmTueOpenStartTime() != null)
            dishBean.restaurant.openingStartTime = restaurant.getmTueOpenStartTime();
          if (restaurant.getmTueOpenEndTime() != null)
            dishBean.restaurant.openingEndTime = restaurant.getmTueOpenEndTime();
          if (restaurant.getmTueDeliveryStartTime() != null)
            restaurantDeliveryTimeBean.startTime = restaurant.getmTueDeliveryStartTime();
          if (restaurant.getmTueDeliveryEndTime() != null)
            restaurantDeliveryTimeBean.endTime = restaurant.getmTueDeliveryEndTime();
          break;

        case 3:
          if (restaurant.getmWedOpenStartTime() != null)
            dishBean.restaurant.openingStartTime = restaurant.getmWedOpenStartTime();
          if (restaurant.getmWedOpenEndTime() != null)
            dishBean.restaurant.openingEndTime = restaurant.getmWedOpenEndTime();
          if (restaurant.getmWedDeliveryStartTime() != null)
            restaurantDeliveryTimeBean.startTime = restaurant.getmWedDeliveryStartTime();
          if (restaurant.getmWedDeliveryEndTime() != null)
            restaurantDeliveryTimeBean.endTime = restaurant.getmWedDeliveryEndTime();
          break;

        case 4:
          if (restaurant.getmThuOpenStartTime() != null)
            dishBean.restaurant.openingStartTime = restaurant.getmThuOpenStartTime();
          if (restaurant.getmThuOpenEndTime() != null)
            dishBean.restaurant.openingEndTime = restaurant.getmThuOpenEndTime();
          if (restaurant.getmThuDeliveryStartTime() != null)
            restaurantDeliveryTimeBean.startTime = restaurant.getmThuDeliveryStartTime();
          if (restaurant.getmThuDeliveryEndTime() != null)
            restaurantDeliveryTimeBean.endTime = restaurant.getmThuDeliveryEndTime();
          break;

        case 5:
          if (restaurant.getmFriOpenStartTime() != null)
            dishBean.restaurant.openingStartTime = restaurant.getmFriOpenStartTime();
          if (restaurant.getmFriOpenEndTime() != null)
            dishBean.restaurant.openingEndTime = restaurant.getmFriOpenEndTime();
          if (restaurant.getmFriDeliveryStartTime() != null)
            restaurantDeliveryTimeBean.startTime = restaurant.getmFriDeliveryStartTime();
          if (restaurant.getmFriDeliveryEndTime() != null)
            restaurantDeliveryTimeBean.endTime = restaurant.getmFriDeliveryEndTime();
          break;

        case 6:
          if (restaurant.getmSatOpenStartTime() != null)
            dishBean.restaurant.openingStartTime = restaurant.getmSatOpenStartTime();
          if (restaurant.getmSatOpenEndTime() != null)
            dishBean.restaurant.openingEndTime = restaurant.getmSatOpenEndTime();
          if (restaurant.getmSatDeliveryStartTime() != null)
            restaurantDeliveryTimeBean.startTime = restaurant.getmSatDeliveryStartTime();
          if (restaurant.getmSatDeliveryEndTime() != null)
            restaurantDeliveryTimeBean.endTime = restaurant.getmSatDeliveryEndTime();
          break;

        default:
          break;
      }

      // 营业开始时间
      String beginHour = dishBean.restaurant.openingStartTime;
      // 营业结束时间
      String endHour = dishBean.restaurant.openingEndTime;
      // 如果超过则设置为非营业时间(默认是 营业时间)
      if (curTime.compareTo(beginHour) < 0 || curTime.compareTo(endHour) > 0)
        dishBean.restaurant.isOutOfBusinessHour = "1";

      // 送餐时间
      String beginTime = restaurantDeliveryTimeBean.startTime;
      String endTime = restaurantDeliveryTimeBean.endTime;
      if (curTime.compareTo(beginTime) < 0 || curTime.compareTo(endTime) > 0)
        dishBean.restaurant.isOutOfDeliveryTime = "1";

      dishBean.restaurant.deliveryTimeArray.add(restaurantDeliveryTimeBean);

      if (dish.getmStatus() != null) {
        dishBean.dishStatus = dish.getmStatus();
      }

      if (dish.getmDishCategory().getmRestaurant().getmStatus() != null) {
        dishBean.restaurant.restaurantStatus =
            String.valueOf(dish.getmDishCategory().getmRestaurant().getmStatus());
      }

      dishBean.restaurant.minDeliveryTotal = String.valueOf(restaurant.getmMinDeliveryTotal());
      dishBean.restaurant.deliveryDistance = String.valueOf(restaurant.getmDeliveryDistance());

      if (condition.latitude == null || condition.longitude == null) {
        dishBean.restaurant.distance = "999999";

      } else {
        dishBean.restaurant.distance =
            String.valueOf(
                MapUtils.getDistance(
                    condition.latitude,
                    condition.longitude,
                    dish.getmDishCategory().getmRestaurant().getmLatitude(),
                    dish.getmDishCategory().getmRestaurant().getmLongitude()));

        if (dishBean.restaurant.distance.compareTo(dishBean.restaurant.deliveryDistance) <= 0)
          dishBean.restaurant.isOutOfRange = "0";
      }
    }

    return dishBean;
  }