@RequestMapping(method = RequestMethod.GET)
 public String list(
     ModelMap map, HttpSession session, @RequestParam(value = "page", defaultValue = "1") int page)
     throws Exception {
   SellerReviewSearch reviewSearch = new SellerReviewSearch();
   reviewSearch.setPageIndex(page - 1);
   reviewSearch.setPageSize(20);
   DataPage<SellerReview> search = sellerReviewService.search(reviewSearch);
   List<String> userIds = new ArrayList<>();
   for (SellerReview sellerReview : search.getData()) {
     if (!userIds.contains(sellerReview.getUserId())) {
       userIds.add(sellerReview.getUserId());
     }
     if (!userIds.contains(sellerReview.getSellerId())) {
       userIds.add(sellerReview.getSellerId());
     }
   }
   List<User> users = userService.getUserByIds(userIds);
   for (User user : users) {
     for (SellerReview sellerReview : search.getData()) {
       if (sellerReview.getSellerId() != null && sellerReview.getSellerId().equals(user.getId())) {
         sellerReview.setUserNameSeller(user.getName());
       }
       if (sellerReview.getSellerId() != null && sellerReview.getUserId().equals(user.getId())) {
         sellerReview.setUserNameBuyer(user.getName());
       }
     }
   }
   map.put("dataPage", search);
   map.put("clientScript", "sellerreview.init();");
   return "cp.sellerreview";
 }
 @ModelAttribute
 public void init(ModelMap map) {
   NewsCategorySearch critSearch = new NewsCategorySearch();
   critSearch.setLevel(0);
   critSearch.setPageIndex(0);
   critSearch.setPageSize(5);
   DataPage<NewsCategory> allNewsCate = newsCategoryService.search(critSearch);
   map.put("newsCate", allNewsCate.getData());
   map.put(
       "clientScript",
       "listCate=" + gson.toJson(allNewsCate.getData()) + "; newscategory.init();");
 }
  /**
   * Danh sách sản phẩm cần review
   *
   * @param modelMap
   * @param session
   * @param page
   * @return
   */
  @RequestMapping(
      value = {"/reviewitem"},
      method = RequestMethod.GET)
  public String reviewList(
      ModelMap modelMap,
      HttpSession session,
      @RequestParam(value = "page", defaultValue = "0") int page) {

    ItemSearch itemSearch = new ItemSearch();
    itemSearch.setStatus(4);
    List<String> cateIds = new ArrayList<>();
    List<String> shopCateIds = new ArrayList<>();
    List<String> manufIds = new ArrayList<>();
    List<String> modelIds = new ArrayList<>();
    if (itemSearch.getCategoryIds() == null) {
      itemSearch.setCategoryIds(new ArrayList<String>());
    }
    itemSearch.setSource(ItemSource.SELLER);
    long createTime = 1388509200 * 1000L;
    itemSearch.setCreateTimeFrom(createTime);
    itemSearch.setCreateTimeTo(System.currentTimeMillis());
    if (session.getAttribute("itemSearch") != null && page != 0) {
      itemSearch = (ItemSearch) session.getAttribute("itemSearch");
    } else {
      session.setAttribute("itemSearch", itemSearch);
    }
    Map<String, Object> parentCategorys = new HashMap<>();
    getAncestors(itemSearch, parentCategorys);

    if (page > 0) {
      itemSearch.setPageIndex(page - 1);
    } else {
      itemSearch.setPageIndex(0);
    }
    itemSearch.setPageSize(50);

    DataPage<Item> itemPage = itemService.searchMongo(itemSearch);
    for (Item item : itemPage.getData()) {
      if (item.getCategoryId() != null
          && !item.getCategoryId().equals("")
          && !cateIds.contains(item.getCategoryId())) {
        cateIds.add(item.getCategoryId());
      }
      if (item.getShopCategoryId() != null
          && !item.getShopCategoryId().equals("")
          && !shopCateIds.contains(item.getShopCategoryId())) {
        shopCateIds.add(item.getShopCategoryId());
      }
      if (item.getManufacturerId() != null
          && !item.getManufacturerId().equals("")
          && !manufIds.contains(item.getManufacturerId())) {
        manufIds.add(item.getManufacturerId());
      }
      if (item.getModelId() != null
          && !item.getModelId().equals("")
          && !modelIds.contains(item.getModelId())) {
        modelIds.add(item.getModelId());
      }
    }
    for (Item item : itemPage.getData()) {
      List<String> images = new ArrayList<>();
      if (item != null && item.getImages() != null && !item.getImages().isEmpty()) {
        for (String img : item.getImages()) {
          images.add(
              imageService.getUrl(img).thumbnail(200, 200, "outbound").getUrl(item.getName()));
        }
        item.setImages(images);
      }
      if (item.getSellerName() == null || item.getSellerName().equals("")) {
        try {
          User seller = userService.get(item.getSellerId());
          item.setSellerName(seller.getEmail());
        } catch (Exception ex) {
        }
      }
    }
    List<City> cities = cityService.list();
    modelMap.put("itemSearch", itemSearch);
    modelMap.put("itemPage", itemPage);
    modelMap.put("cities", cities);
    modelMap.put("itemCates", categoryService.getCategories(cateIds));
    modelMap.put("itemShopCates", shopCategoryService.get(shopCateIds));
    modelMap.put("itemManuf", manufacturerService.getManufacturers(manufIds));
    modelMap.put("itemModels", modelService.getModels(modelIds));
    modelMap.put(
        "clientScript",
        "category = "
            + gson.toJson(categoryService.getChilds(null))
            + ",cities="
            + gson.toJson(cities)
            + ";reviewitem.init({parentCategorys:"
            + gson.toJson(parentCategorys)
            + ", categoryId:'"
            + (itemSearch.getCategoryIds().isEmpty() ? "" : itemSearch.getCategoryIds().get(0))
            + "'});");
    return "cp.item.review";
  }
  /**
   * Tìm kiếm tất cả sản phẩm
   *
   * @param itemSearch
   * @param session
   * @param modelMap
   * @return
   */
  @RequestMapping(
      value = {"/reviewitem"},
      method = RequestMethod.POST)
  public String reviewSearch(
      @ModelAttribute("itemSearch") ItemSearch itemSearch, HttpSession session, ModelMap modelMap) {
    Map<String, Object> parentCategorys = new HashMap<>();
    List<String> cateIds = new ArrayList<>();
    List<String> shopCateIds = new ArrayList<>();
    List<String> manufIds = new ArrayList<>();
    List<String> modelIds = new ArrayList<>();

    itemSearch.setPageIndex(0);
    itemSearch.setPageSize(50);
    if (itemSearch.getCategoryId() != null && !itemSearch.getCategoryId().equals("")) {
      itemSearch.setCategoryIds(new ArrayList<String>());
      itemSearch.getCategoryIds().add(itemSearch.getCategoryId());
    }
    getAncestors(itemSearch, parentCategorys);
    session.setAttribute("itemSearch", itemSearch);
    DataPage<Item> itemPage = itemService.searchMongo(itemSearch);
    for (Item item : itemPage.getData()) {
      if (item.getCategoryId() != null
          && !item.getCategoryId().equals("")
          && !cateIds.contains(item.getCategoryId())) {
        cateIds.add(item.getCategoryId());
      }
      if (item.getShopCategoryId() != null
          && !item.getShopCategoryId().equals("")
          && !shopCateIds.contains(item.getShopCategoryId())) {
        shopCateIds.add(item.getShopCategoryId());
      }
      if (item.getManufacturerId() != null
          && !item.getManufacturerId().equals("")
          && !manufIds.contains(item.getManufacturerId())) {
        manufIds.add(item.getManufacturerId());
      }
      if (item.getModelId() != null
          && !item.getModelId().equals("")
          && !modelIds.contains(item.getModelId())) {
        modelIds.add(item.getModelId());
      }
    }
    for (Item item : itemPage.getData()) {
      List<String> images = new ArrayList<>();
      if (item != null && item.getImages() != null && !item.getImages().isEmpty()) {
        for (String img : item.getImages()) {
          images.add(
              imageService.getUrl(img).thumbnail(200, 200, "outbound").getUrl(item.getName()));
        }
        item.setImages(images);
      }
      if (item.getSellerName() == null || item.getSellerName().equals("")) {
        try {
          User seller = userService.get(item.getSellerId());
          item.setSellerName(seller.getEmail());
        } catch (Exception ex) {
        }
      }
    }
    if (itemSearch.getCategoryIds() == null) {
      itemSearch.setCategoryIds(new ArrayList<String>());
    }
    List<City> cities = cityService.list();
    modelMap.put("itemSearch", itemSearch);
    modelMap.put("itemPage", itemPage);
    modelMap.put("cities", cities);
    modelMap.put("itemCates", categoryService.getCategories(cateIds));
    modelMap.put("itemShopCates", shopCategoryService.get(shopCateIds));
    modelMap.put("itemManuf", manufacturerService.getManufacturers(manufIds));
    modelMap.put("itemModels", modelService.getModels(modelIds));
    modelMap.put(
        "clientScript",
        "category = "
            + gson.toJson(categoryService.getChilds(null))
            + ",cities="
            + gson.toJson(cities)
            + ";reviewitem.init({parentCategorys:"
            + gson.toJson(parentCategorys)
            + ", categoryId:'"
            + (itemSearch.getCategoryIds().isEmpty() ? "" : itemSearch.getCategoryIds().get(0))
            + "'});");
    return "cp.item.review";
  }