package com.paic.icore.ph.search.biz.service.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.paic.icore.ph.search.biz.service.SearchUtilService;
import com.paic.icore.ph.search.dto.Condition;
import com.paic.icore.ph.search.dto.SearchResultItem;
import com.paic.icore.ph.util.DateUtil;
import com.paic.pafa.app.biz.service.BaseService;
import com.sun.org.apache.bcel.internal.generic.NEW;
/**
*
* @author EX-GOUDINGCHENG001
*
*/
@Component("assemebleSearchResultUtil")
public class AssemebleSearchResultUtil extends BaseService {
// /**
// * 根据传入的Condition对象封装成为一个solrQuery
// *
// * @param con
// * @return SolrQuery
// */
public static ModifiableSolrParams assembleSolrCondtion(Condition con,
ArrayList<String> deptList) {
ModifiableSolrParams query = new ModifiableSolrParams();
SolrQuery filterQuery = new SolrQuery();
if (null == con.getKeyword()) {
query.add("q", "keyword:*");
} else {
query.add("q", "keyword:" + con.getKeyword() + "");
}
if (null != con.getProffession()) {
String string = con.getProffession().substring(0, con.getProffession().length()-1);
filterQuery.addFilterQuery("pproffession:"
+ string + "");
}
if (null != con.getFiletype()) {
filterQuery.addFilterQuery("filetype:"
+ con.getFiletype() + "");
}
if (null != con.getProffession1()) {
String string = con.getProffession1().substring(0, con.getProffession1().length()-1);
filterQuery.addFilterQuery("proffession:"
+ string + "");
}
if (null == con.getOrganization()
|| "".equalsIgnoreCase(con.getOrganization())) {
} else {
filterQuery.addFilterQuery("organization:"
+ con.getOrganization() + "");
}
// 查询一天内的数据
if ("week".equalsIgnoreCase(con.getDuring())) {
filterQuery.addFilterQuery("day:[NOW/DAY-7DAY TO NOW/DAY]");
}
// 查询一周内的数据
if ("month".equalsIgnoreCase(con.getDuring())) {
filterQuery.addFilterQuery("day:[NOW/DAY-1MONTH TO NOW/DAY]");
}
// 查询近一年的数据
if ("year".equalsIgnoreCase(con.getDuring())) {
filterQuery.addFilterQuery("day:[NOW/DAY-1YEAR TO NOW/DAY]");
}
if ("heated".equalsIgnoreCase(con.getOderBy())) {
query.add("sort", "day desc");
}
if ("atime".equalsIgnoreCase(con.getOderBy())) {
query.add("sort", "day desc");
}
if ("algorithm".equalsIgnoreCase(con.getOderBy())) {
query.add("sort", "day desc");
}
query.add("sort", "day desc");
int startRow = ((int) con.getPage() == 0) ? 0 : (con.getPage() - 1)
* con.getMaxResults();
query.add("start", String.valueOf(startRow));
query.add("rows", String.valueOf(con.getMaxResults()));
query.add(filterQuery);
// 设置高亮信息
// query.add("hl", "true");// 高亮开关
// query.add("hl.fl", "title,content");// 高亮返回字段
// query.add("hl.fragsize", "150");// 高亮字段长度,0代表返回全部
// query.add("hl.encoder", "html");
// query.add("hl.fragmenter", "regex");
// query.add("hl.useFastVectorHighlighter", "true");
// query.add("f.content.hl.alternateField", "description");
// query.add("f.content.hl.maxAlternateFieldLength", "150");
// 对经验的可见性进行处理
if ("ROLE_PH_SYS_MANAGER".equalsIgnoreCase(con.getRolecode())) {
// 如果是超级管理员,全部可见
if ("all".equalsIgnoreCase(con.getType()) || null == con.getType()) {
filterQuery.addFilterQuery("type:*");
} else {
filterQuery.addFilterQuery("type:" + con.getType());
}
} else if("ROLE_PH_DEPT_MANAGER".equalsIgnoreCase(con.getRolecode())){//
String string="(NOT visiflag:1 AND (";
StringBuffer visibilitycontent = new StringBuffer();
if (deptList.size() > 0) {
//如果指定的人可见中包含有自己的UMCODE
visibilitycontent.append("visiInstitution:"+con.getUmCode()+" OR ");
for (int i = 0; i < deptList.size(); i++) {
visibilitycontent.append("visiInstitution:"
+ deptList.get(i).toString() + " OR ");
}
} else {
//如果指定的人可见中包含有自己的UMCODE
visibilitycontent.append("visiInstitution:"+con.getUmCode()+" OR ");
visibilitycontent.append("visiInstitution:' '");
}
if (deptList.size() > 0) {
visibilitycontent.delete(visibilitycontent.length() - 3,
visibilitycontent.length());
}
visibilitycontent.append("))");
visibilitycontent.append("OR (visiflag:1)");
// 对用户所处的机构进行查询 处理结束
string += visibilitycontent.toString();
System.out.println("String:"+string);
filterQuery.addFilterQuery(string);
if (null != con.getType()) {
if ("all".equalsIgnoreCase(con.getType())) {
filterQuery.addFilterQuery( "type:*");
} else {
filterQuery.addFilterQuery("type:" + con.getType() + "");
}
}
}else if("ROLE_PH_KNG_MANAGER".equalsIgnoreCase(con.getRolecode())){
String string="(NOT visiflag:1 AND (";
StringBuffer visibilitycontent = new StringBuffer();
if (deptList.size() > 0) {
//如果指定的人可见中包含有自己的UMCODE
visibilitycontent.append("visiInstitution:"+con.getUmCode()+" OR ");
for (int i = 0; i < deptList.size(); i++) {
visibilitycontent.append("visiInstitution:"
+ deptList.get(i).toString() + " OR ");
}
} else {
//如果指定的人可见中包含有自己的UMCODE
visibilitycontent.append("visiInstitution:"+con.getUmCode()+" OR ");
visibilitycontent.append("visiInstitution:' '");
}
if (deptList.size() > 0) {
visibilitycontent.delete(visibilitycontent.length() - 3,
visibilitycontent.length());
}
visibilitycontent.append("))");
visibilitycontent.append("OR (visiflag:1)");
// 对用户所处的机构进行查询 处理结束
string += visibilitycontent.toString();
System.out.println("String:"+string);
String type=con.getType();
filterQuery.addFilterQuery(string);
if (null != type) {
if ("all".equalsIgnoreCase(con.getType())||null==con.getType()) {
filterQuery.addFilterQuery( "type:wenwen OR type:yunpan OR (type:jingyan AND visiInstitution:"+con.getUmCode()+") OR user:"+con.getUmCode()+"");
} else if("wenwen".equalsIgnoreCase(con.getType())) {
filterQuery.addFilterQuery("type:"+con.getType());
}else if("jingyan".equalsIgnoreCase(con.getType())){
filterQuery.addFilterQuery("type:jingyan AND visiInstitution:"+con.getUmCode());
}else if("yunpan".equalsIgnoreCase(con.getType())){
filterQuery.addFilterQuery("type:"+con.getType());
}
}
}else if ("ROLE_PH_NORMAL".equalsIgnoreCase(con.getRolecode())) {
if ("all".equalsIgnoreCase(con.getType()) || null == con.getType()) {
filterQuery.addFilterQuery("type:*");
String string="visiInstitution:" + con.getUmCode() + " OR visiflag:1";
if (deptList.size() > 0) {
//如果指定的人可见中包含有自己的UMCODE
for (int i = 0; i < deptList.size(); i++) {
string+=" OR visiInstitution:"+deptList.get(i);
}
}
filterQuery.addFilterQuery(string);
} else {
filterQuery.addFilterQuery("type:" + con.getType());
String string="visiInstitution:" + con.getUmCode() + " OR visiflag:1";
if (deptList.size() > 0) {
//如果指定的人可见中包含有自己的UMCODE
for (int i = 0; i < deptList.size(); i++) {
string+=" OR visiInstitution:"+deptList.get(i);
}
}
//filterQuery.addFilterQuery("visiInstitution:" + con.getUmCode() + " OR visiflag:1");
filterQuery.addFilterQuery(string);
}
// filterQuery.addFilterQuery("type:" + con.getType() + "");
// filterQuery.addFilterQuery("visiInstitution:" + con.getUmCode() + " OR visiflag:1");
}
query.add(filterQuery);
System.out.println("query:" + query.toString());
return query;
}
/**
* 传入一个solrDocument封装成为一个SearchResultItem
*
* @param doc
* @return SearchResultItem
*/
public SearchResultItem assembleWenwenResult(SolrDocument doc,
QueryResponse response) {
SearchResultItem item = new SearchResultItem();
if (null != doc.get("id")) {
item.setId(doc.get("id").toString());// 设置ID
}
if (null != doc.get("title")) {
item.setTitle(doc.get("title").toString());// 设置标题栏
}
if (null != doc.get("user")) {
item.setAskedBy(doc.get("user").toString());// 设置提问人
}
if (null != doc.get("acontent")) {
item.setContent(doc.get("acontent").toString());
}
if (null != doc.get("type")) {
item.setType(doc.get("type").toString());
}
String proffesString = "";
if (null == doc.get("pproffession")) {
proffesString += "";
} else {
proffesString += doc.get("pproffession").toString();
}
if (null == doc.get("proffession")) {
proffesString += "";
} else {
proffesString += doc.get("proffession").toString();
}
item.setProffession(proffesString);
Date showDate = (Date) doc.get("day");
String ttString = DateUtil.getShowDate(showDate);
item.setPublishDateStr(DateUtil.getShowDate(showDate));
if (response.getHighlighting() != null
&& response.getHighlighting().get(item.getId()) != null) {
List<String> highlightSnippets = response.getHighlighting()
.get(item.getId()).get("title");
if (highlightSnippets != null) {
item.setTitle(StringUtils.join(highlightSnippets.iterator(), ""));
}
}
if (response.getHighlighting() != null
&& response.getHighlighting().get(item.getId()) != null) {
List<String> highlightSnippets = response.getHighlighting()
.get(item.getId()).get("acontent");
if (highlightSnippets != null) {
item.setContent(StringUtils.join(highlightSnippets.iterator(),
""));
}
}
if (response.getHighlighting() != null
&& response.getHighlighting().get(item.getId()) != null) {
List<String> highlightSnippets = response.getHighlighting()
.get(item.getId()).get("desc");
if (highlightSnippets != null) {
item.setContent(StringUtils.join(highlightSnippets.iterator(),
""));
}
}
return item;
}
public SearchResultItem assembleJinyanResult(SolrDocument doc,
QueryResponse response) {
SearchResultItem item = new SearchResultItem();
if (null != doc.get("id")) {
item.setId(doc.get("id").toString());// 设置ID
}
if (null != doc.get("title")) {
item.setTitle(doc.get("title").toString());// 设置标题栏
}
if (null != doc.get("user")) {
item.setAskedBy(doc.get("user").toString());// 设置提问人
}
if (null != doc.get("desc")) {
item.setContent(doc.get("desc").toString());
}
if (null != doc.get("type")) {
item.setType(doc.get("type").toString());
}
if (null != doc.get("day")) {
Date showDate = (Date) doc.get("day");
String ttString = DateUtil.getShowDate(showDate);
item.setPublishDateStr(DateUtil.getShowDate(showDate));
}
String proffesString = "";
if (null == doc.get("pproffession")) {
proffesString += "";
} else {
proffesString += doc.get("pproffession").toString();
}
if (null == doc.get("proffession")) {
proffesString += "";
} else {
proffesString += doc.get("proffession").toString();
}
item.setProffession(proffesString);
if (response.getHighlighting() != null
&& response.getHighlighting().get(item.getId()) != null) {
List<String> highlightSnippets = response.getHighlighting()
.get(item.getId()).get("title");
if (highlightSnippets != null) {
item.setTitle(StringUtils.join(highlightSnippets.iterator(), ""));
}
}
if (response.getHighlighting() != null
&& response.getHighlighting().get(item.getId()) != null) {
List<String> highlightSnippets = response.getHighlighting()
.get(item.getId()).get("acontent");
if (highlightSnippets != null) {
item.setContent(StringUtils.join(highlightSnippets.iterator(),
""));
}
}
if (response.getHighlighting() != null
&& response.getHighlighting().get(item.getId()) != null) {
List<String> highlightSnippets = response.getHighlighting()
.get(item.getId()).get("desc");
if (highlightSnippets != null) {
item.setContent(StringUtils.join(highlightSnippets.iterator(),
""));
}
}
return item;
}
public SearchResultItem assembleYunpanResult(SolrDocument doc,
QueryResponse response) {
SearchResultItem item = new SearchResultItem();
if (null != doc.get("id")) {
item.setId(doc.get("id").toString());// 设置ID
}
if (null != doc.get("title")) {
item.setTitle(doc.get("title").toString());// 设置标题栏
}
if (null != doc.get("user")) {
item.setAskedBy(doc.get("user").toString());// 设置提问人
}
if (null != doc.get("desc")) {
item.setContent(doc.get("desc").toString());
}
if (null != doc.get("type")) {
item.setType(doc.get("type").toString());
}
if (null != doc.get("day")) {
Date showDate = (Date) doc.get("day");
String ttString = DateUtil.getShowDate(showDate);
item.setPublishDateStr(DateUtil.getShowDate(showDate));
}
String proffesString = "";
if (null == doc.get("pproffession")) {
proffesString += "";
} else {
proffesString += doc.get("pproffession").toString();
}
if (null == doc.get("proffession")) {
proffesString += "";
} else {
proffesString += doc.get("proffession").toString();
}
item.setProffession(proffesString);
if (response.getHighlighting() != null
&& response.getHighlighting().get(item.getId()) != null) {
List<String> highlightSnippets = response.getHighlighting()
.get(item.getId()).get("title");
if (highlightSnippets != null) {
item.setTitle(StringUtils.join(highlightSnippets.iterator(), ""));
}
}
if (response.getHighlighting() != null
&& response.getHighlighting().get(item.getId()) != null) {
List<String> highlightSnippets = response.getHighlighting()
.get(item.getId()).get("acontent");
if (highlightSnippets != null) {
item.setContent(StringUtils.join(highlightSnippets.iterator(),
""));
}
}
if (response.getHighlighting() != null
&& response.getHighlighting().get(item.getId()) != null) {
List<String> highlightSnippets = response.getHighlighting()
.get(item.getId()).get("desc");
if (highlightSnippets != null) {
item.setContent(StringUtils.join(highlightSnippets.iterator(),
""));
}
}
return item;
}
}