package com.fang.bbks.modules.sys.web;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import com.fang.bbks.common.persistence.Page;
import com.fang.bbks.common.utils.SessionUtil;
import com.fang.bbks.common.utils.StringUtils;
import com.fang.bbks.common.web.BaseController;
import com.fang.bbks.modules.social.entity.InterestType;
import com.fang.bbks.modules.social.service.InterestService;
import com.fang.bbks.modules.sys.dao.CategoryDao;
import com.fang.bbks.modules.sys.entity.Book;
import com.fang.bbks.modules.sys.entity.Category;
import com.fang.bbks.modules.sys.entity.Comment;
import com.fang.bbks.modules.sys.entity.CommentType;
import com.fang.bbks.modules.sys.entity.User;
import com.fang.bbks.modules.sys.service.BookService;
import com.fang.bbks.modules.sys.service.CommentService;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
/**
* @Intro 书籍搜索controoler
* @author Lee
* @Date 2013-8-9
*/
@Controller
@RequestMapping("/book")
public class SearchBookController extends BaseController{
@Autowired
private CommentService commentService;
@Autowired
private BookService bs;
@Autowired
private CategoryDao categoryDao;
@Autowired
private InterestService interestService;
@Autowired
private SessionUtil sessionUtil;
@RequestMapping(value={"/search/list"}, method={RequestMethod.GET,RequestMethod.POST})
public String searchIndex(Model model,HttpServletRequest request,
HttpServletResponse response,
@RequestParam(value="typeStr",required=false) String typeStr,
@RequestParam(value="categroy_id",required=false) String catlog,
@RequestParam(value="kw",required=false) String kw,
@RequestParam(value="sortby",required=false) String sortBy,
@RequestParam(value="sortOders",required=false) Integer sortOders) {
Page<Book> page = new Page<Book>(request, response);
if(sortOders == null){
sortOders = 1;
}
if (StringUtils.isNotBlank(kw)){
if ("cmd:reindex".equals(kw)){
System.out.println("重建索引!--start");
bs.createdAndUpdateIndex();
System.out.println("重建索引!--end");
model.addAttribute("message", "重建索引成功");
}else{
page = bs.findByKeyWords(page, kw,sortBy,sortOders);
}
}else if(StringUtils.isNotBlank(typeStr) && "news".equals(typeStr)){
catlog = "13";
page = doSearch(request,response,catlog,sortBy,sortOders);
}else if(StringUtils.isNotBlank(typeStr) && "promotion".equals(typeStr)){
catlog = "6";
page = doSearch(request,response,catlog,sortBy,sortOders);
}else if(StringUtils.isNotBlank(typeStr) && "salerank".equals(typeStr)){
catlog = "9";
page = doSearch(request,response,catlog,sortBy,sortOders);
}else if(StringUtils.isNotBlank(typeStr) && "searchrank".equals(typeStr)){
catlog = "11";
page = doSearch(request,response,catlog,sortBy,sortOders);
}else if(StringUtils.isNotBlank(typeStr) && "ebooks".equals(typeStr)){
page = searchEbooks(catlog);
}else{
page = doSearch(request,response,catlog,sortBy,sortOders);
}
User user = sessionUtil.getSignInUser(request.getSession());
if(user != null){
adapteeDate(page,model,user.getId());
}else{
adapteeDate(page,model,null);
}
return "book/list";
}
@RequestMapping(value={"/search/{bookId}"},method=RequestMethod.GET)
public String search(@PathVariable("bookId") Long bookId,
Model uiModel,HttpServletRequest request){
Book book = bs.findOne(bookId);
if(book ==null)
return "redirect:/index";
User user = sessionUtil.getSignInUser(request.getSession());
if(user != null){
//设置喜欢按钮
book.setIslike(interestService.isExit(user.getId(), book.getId(), InterestType.book_like));
//设置喜欢按钮
book.setReading(interestService.isExit(user.getId(), book.getId(), InterestType.book_reading));
//设置喜欢按钮
book.setIswantRead(interestService.isExit(user.getId(), book.getId(), InterestType.book_wantRead));
//已读
book.setIshasRead(interestService.isExit(user.getId(), book.getId(), InterestType.book_hasRead));
}
uiModel.addAttribute("bookInfo",book);
Comment comment = new Comment();
comment.setContentId(bookId);
comment.setModule(CommentType.BOOK.getType());
uiModel.addAttribute("commentList", commentService.find(comment));
uiModel.addAttribute("bookInteresting", interestService.findSimilarByTarget(bookId,null));
return "/book/detail";
}
/**
* 数据分页
* @param request
* @return
*/
private Page<Book> doSearch(HttpServletRequest request,HttpServletResponse response,String catlog,String sortby,int orders){
Page<Book> page = new Page<Book>(request, response);
int queryPageNo = page.getPageNo();
Book book = new Book();
String bookName = request.getParameter("name");
String author = request.getParameter("author");
String translator = request.getParameter("translator");
book.setAuthor(author);
book.setBookName(bookName);
book.setTranslator(translator);
if(StringUtils.isNotBlank(catlog) && StringUtils.isNumeric(catlog)){
Long catlog_id = Long.parseLong(catlog);
if(catlog_id != null && catlog_id > 0){
Category ca = categoryDao.findOne(catlog_id);
if(ca != null && ca.getId() == catlog_id){
book.setCategory(ca);
}
}
}
page = bs.findBook(page, book,sortby,orders);
if(!page.isNormal(queryPageNo)){
return null;
}
return page;
}
public Page<Book> searchEbooks(String catlog){
Integer caId = 0;
if(StringUtils.isEmpty(catlog) || !StringUtils.isNumeric(catlog)){
caId = 0;
}else{
caId = Integer.parseInt(catlog);
}
Page<Book> page = new Page<Book>(request, response);
int queryPageNo = page.getPageNo();
page = bs.findEbook(page, caId);
if(!page.isNormal(queryPageNo)){
return null;
}
return page;
}
/**
* 填充数据
* @param books
* @param mode
*/
private void adapteeDate(Page<Book> page,Model model,Long uid){
if(page != null && !page.getList().isEmpty()){
List<Book> books = page.getList();
List<Book> results = Lists.newArrayList();
Map<Long,List<Comment>> map = Maps.newHashMap();
for(int a=0;a<books.size();a++){
Book b = books.get(a);
Comment c = new Comment();
c.setContentId(b.getId());
Page<Comment> pageComment = commentService.find(new Page<Comment>(1,10), c);
if(pageComment != null && pageComment.getList() != null){
map.put(b.getId(), pageComment.getList());
}
//设置喜欢按钮
b.setIslike(interestService.isExit(uid, b.getId(), InterestType.book_like));
results.add(b);
}
model.addAttribute("booksInfo", results);
model.addAttribute("commentMap", map);
}
}
}