@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;
  }
  @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;
  }
  @Override
  public List<DishBean> validateDish(DishValidationConditionBean condition, List<Long> dishIdList)
      throws ParseException {

    List<DishBean> dishBeanList = new ArrayList<DishBean>();

    List<Dish> dishList = mDishDAO.validateDish(condition, dishIdList);

    for (Dish dish : dishList) {

      DishBean dishBean = new DishBean();

      dishBean.dishId = String.valueOf(dish.getmId());
      dishBean.dishName = String.valueOf(dish.getmName());

      dishBeanList.add(dishBean);
    }

    return dishBeanList;
  }
  @Override
  public List<DishBean> listDishMenuItemByCondition(MenuSearchConditionBean condition) {

    List<Dish> dishList = mDishDAO.getDishMenuItemListByConditon(condition);

    List<DishBean> dishBeanlList = new ArrayList<DishBean>();
    for (Dish dish : dishList) {
      DishBean dishBean = new DishBean();

      dishBean.dishId = String.valueOf(dish.getmId());
      if (dish.getmName() != null) dishBean.dishName = dish.getmName();
      if (dish.getmPrice() != null) dishBean.dishPrice = FormatUtils.formatPrice(dish.getmPrice());
      if (dish.getmImageName() != null && dish.getmDishCategory().getmRestaurant() != null)
        dishBean.dishImageUrl =
            getDishImageUrl(dish.getmImageName(), dish.getmDishCategory().getmRestaurant());

      int pageView = 0;
      int purchaseVolume = 0;
      DishRank dishRank = dish.getmDishRank();
      if (dishRank != null) {
        pageView = (int) dishRank.getmPageView();
        purchaseVolume = (int) dishRank.getmPurchaseVolume();
      }

      dishBean.rank = (double) (pageView + purchaseVolume);

      dishBeanlList.add(dishBean);
    }

    // Collections.sort(dishBeanlList, new Comparator<DishBean>() {
    //
    // public int compare(DishBean arg0, DishBean arg1) {
    // return arg0.rank.compareTo(arg1.rank);
    // }
    // });

    return dishBeanlList;
  }