1
0
mirror of https://github.com/chatopera/cosin.git synced 2025-08-01 16:38:02 +08:00

Replace Operator's package path

This commit is contained in:
dengchao@xgtl 2020-04-15 17:28:24 +08:00
parent 33b41ed395
commit d0d85ead52
8 changed files with 1885 additions and 1909 deletions

View File

@ -1,197 +1,193 @@
/* /*
* Copyright (C) 2017 优客服-多渠道客服系统 * Copyright (C) 2017 优客服-多渠道客服系统
* Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com> * Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com>
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package com.chatopera.cc.persistence.es; package com.chatopera.cc.persistence.es;
import com.chatopera.cc.model.Contacts; import com.chatopera.cc.model.Contacts;
import com.chatopera.cc.model.User; import com.chatopera.cc.model.User;
import com.chatopera.cc.persistence.repository.UserRepository; import com.chatopera.cc.persistence.repository.UserRepository;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.*;
import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.sort.FieldSortBuilder;
import org.elasticsearch.index.query.QueryStringQueryBuilder; import org.elasticsearch.search.sort.SortOrder;
import org.elasticsearch.index.query.QueryStringQueryBuilder.Operator; import org.springframework.beans.factory.annotation.Autowired;
import org.elasticsearch.index.query.RangeQueryBuilder; import org.springframework.data.domain.Page;
import org.elasticsearch.search.sort.FieldSortBuilder; import org.springframework.data.domain.Pageable;
import org.elasticsearch.search.sort.SortOrder; import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.domain.Page; import org.springframework.stereotype.Component;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; import java.util.ArrayList;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import java.util.Date;
import org.springframework.stereotype.Component; import java.util.List;
import java.util.ArrayList; import static org.elasticsearch.index.query.QueryBuilders.termQuery;
import java.util.Date;
import java.util.List; @Component
public class ContactsRepositoryImpl implements ContactsEsCommonRepository {
import static org.elasticsearch.index.query.QueryBuilders.termQuery; @Autowired
private UserRepository userRes;
@Component
public class ContactsRepositoryImpl implements ContactsEsCommonRepository { private ElasticsearchTemplate elasticsearchTemplate;
@Autowired
private UserRepository userRes; @Autowired
public void setElasticsearchTemplate(ElasticsearchTemplate elasticsearchTemplate) {
private ElasticsearchTemplate elasticsearchTemplate; this.elasticsearchTemplate = elasticsearchTemplate;
}
@Autowired
public void setElasticsearchTemplate(ElasticsearchTemplate elasticsearchTemplate) { @Override
this.elasticsearchTemplate = elasticsearchTemplate; public Page<Contacts> findByCreaterAndSharesAndOrgi(String creater, String shares, String orgi, boolean includeDeleteData, String q, Pageable page) {
}
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
@Override BoolQueryBuilder boolQueryBuilder1 = new BoolQueryBuilder();
public Page<Contacts> findByCreaterAndSharesAndOrgi(String creater, String shares, String orgi, boolean includeDeleteData, String q, Pageable page) { boolQueryBuilder1.should(termQuery("creater", creater));
boolQueryBuilder1.should(termQuery("shares", creater));
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); boolQueryBuilder1.should(termQuery("shares", "all"));
BoolQueryBuilder boolQueryBuilder1 = new BoolQueryBuilder(); boolQueryBuilder.must(boolQueryBuilder1);
boolQueryBuilder1.should(termQuery("creater", creater)); boolQueryBuilder.must(termQuery("orgi", orgi));
boolQueryBuilder1.should(termQuery("shares", creater)); if (includeDeleteData) {
boolQueryBuilder1.should(termQuery("shares", "all")); boolQueryBuilder.must(termQuery("datastatus", true));
boolQueryBuilder.must(boolQueryBuilder1); } else {
boolQueryBuilder.must(termQuery("orgi", orgi)); boolQueryBuilder.must(termQuery("datastatus", false));
if (includeDeleteData) { }
boolQueryBuilder.must(termQuery("datastatus", true)); if (StringUtils.isNotBlank(q)) {
} else { boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND));
boolQueryBuilder.must(termQuery("datastatus", false)); }
} return processQuery(boolQueryBuilder, page);
if (StringUtils.isNotBlank(q)) { }
boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND));
} @Override
return processQuery(boolQueryBuilder, page); public Page<Contacts> findByCreaterAndSharesAndOrgi(String creater,
} String shares, String orgi, Date begin, Date end, boolean includeDeleteData,
BoolQueryBuilder boolQueryBuilder, String q, Pageable page) {
@Override BoolQueryBuilder boolQueryBuilder1 = new BoolQueryBuilder();
public Page<Contacts> findByCreaterAndSharesAndOrgi(String creater, boolQueryBuilder1.should(termQuery("creater", creater));
String shares, String orgi, Date begin, Date end, boolean includeDeleteData, boolQueryBuilder1.should(termQuery("shares", creater));
BoolQueryBuilder boolQueryBuilder, String q, Pageable page) { boolQueryBuilder1.should(termQuery("shares", "all"));
BoolQueryBuilder boolQueryBuilder1 = new BoolQueryBuilder(); boolQueryBuilder.must(boolQueryBuilder1);
boolQueryBuilder1.should(termQuery("creater", creater)); boolQueryBuilder.must(termQuery("orgi", orgi));
boolQueryBuilder1.should(termQuery("shares", creater)); if (includeDeleteData) {
boolQueryBuilder1.should(termQuery("shares", "all")); boolQueryBuilder.must(termQuery("datastatus", true));
boolQueryBuilder.must(boolQueryBuilder1); } else {
boolQueryBuilder.must(termQuery("orgi", orgi)); boolQueryBuilder.must(termQuery("datastatus", false));
if (includeDeleteData) { }
boolQueryBuilder.must(termQuery("datastatus", true)); RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("createtime");
} else { if (begin != null) {
boolQueryBuilder.must(termQuery("datastatus", false)); rangeQuery.from(begin.getTime());
} }
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("createtime"); if (end != null) {
if (begin != null) { rangeQuery.to(end.getTime());
rangeQuery.from(begin.getTime()); } else {
} rangeQuery.to(new Date().getTime());
if (end != null) { }
rangeQuery.to(end.getTime()); if (begin != null || end != null) {
} else { boolQueryBuilder.must(rangeQuery);
rangeQuery.to(new Date().getTime()); }
} if (StringUtils.isNotBlank(q)) {
if (begin != null || end != null) { boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND));
boolQueryBuilder.must(rangeQuery); }
} return processQuery(boolQueryBuilder, page);
if (StringUtils.isNotBlank(q)) { }
boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND));
} @Override
return processQuery(boolQueryBuilder, page); public Page<Contacts> findByOrgi(String orgi, boolean includeDeleteData,
} String q, Pageable page) {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
@Override boolQueryBuilder.must(termQuery("orgi", orgi));
public Page<Contacts> findByOrgi(String orgi, boolean includeDeleteData, if (includeDeleteData) {
String q, Pageable page) { boolQueryBuilder.must(termQuery("datastatus", true));
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); } else {
boolQueryBuilder.must(termQuery("orgi", orgi)); boolQueryBuilder.must(termQuery("datastatus", false));
if (includeDeleteData) { }
boolQueryBuilder.must(termQuery("datastatus", true)); if (StringUtils.isNotBlank(q)) {
} else { boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND));
boolQueryBuilder.must(termQuery("datastatus", false)); }
} return processQuery(boolQueryBuilder, page);
if (StringUtils.isNotBlank(q)) { }
boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND));
} @Override
return processQuery(boolQueryBuilder, page); public Page<Contacts> findByCreaterAndSharesAndOrgi(String creater, String shares, String orgi, Date begin, Date end, boolean includeDeleteData, String q, Pageable page) {
} BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
BoolQueryBuilder boolQueryBuilder1 = new BoolQueryBuilder();
@Override boolQueryBuilder1.should(termQuery("creater", creater));
public Page<Contacts> findByCreaterAndSharesAndOrgi(String creater, String shares, String orgi, Date begin, Date end, boolean includeDeleteData, String q, Pageable page) { boolQueryBuilder1.should(termQuery("shares", creater));
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); boolQueryBuilder1.should(termQuery("shares", "all"));
BoolQueryBuilder boolQueryBuilder1 = new BoolQueryBuilder(); boolQueryBuilder.must(boolQueryBuilder1);
boolQueryBuilder1.should(termQuery("creater", creater)); boolQueryBuilder.must(termQuery("orgi", orgi));
boolQueryBuilder1.should(termQuery("shares", creater)); if (includeDeleteData) {
boolQueryBuilder1.should(termQuery("shares", "all")); boolQueryBuilder.must(termQuery("datastatus", true));
boolQueryBuilder.must(boolQueryBuilder1); } else {
boolQueryBuilder.must(termQuery("orgi", orgi)); boolQueryBuilder.must(termQuery("datastatus", false));
if (includeDeleteData) { }
boolQueryBuilder.must(termQuery("datastatus", true)); RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("createtime");
} else { if (begin != null) {
boolQueryBuilder.must(termQuery("datastatus", false)); rangeQuery.from(begin.getTime());
} }
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("createtime"); if (end != null) {
if (begin != null) { rangeQuery.to(end.getTime());
rangeQuery.from(begin.getTime()); } else {
} rangeQuery.to(new Date().getTime());
if (end != null) { }
rangeQuery.to(end.getTime()); if (begin != null || end != null) {
} else { boolQueryBuilder.must(rangeQuery);
rangeQuery.to(new Date().getTime()); }
} if (StringUtils.isNotBlank(q)) {
if (begin != null || end != null) { boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND));
boolQueryBuilder.must(rangeQuery); }
} return processQuery(boolQueryBuilder, page);
if (StringUtils.isNotBlank(q)) { }
boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND));
}
return processQuery(boolQueryBuilder, page); private Page<Contacts> processQuery(BoolQueryBuilder boolQueryBuilder, Pageable page) {
} NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withSort(new FieldSortBuilder("creater").unmappedType("boolean").order(SortOrder.DESC)).withSort(new FieldSortBuilder("name").unmappedType("string").order(SortOrder.DESC));
searchQueryBuilder.withPageable(page);
private Page<Contacts> processQuery(BoolQueryBuilder boolQueryBuilder, Pageable page) {
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withSort(new FieldSortBuilder("creater").unmappedType("boolean").order(SortOrder.DESC)).withSort(new FieldSortBuilder("name").unmappedType("string").order(SortOrder.DESC)); Page<Contacts> entCustomerList = null;
if (elasticsearchTemplate.indexExists(Contacts.class)) {
searchQueryBuilder.withPageable(page); entCustomerList = elasticsearchTemplate.queryForPage(searchQueryBuilder.build(), Contacts.class);
}
Page<Contacts> entCustomerList = null; if (entCustomerList.getContent().size() > 0) {
if (elasticsearchTemplate.indexExists(Contacts.class)) { List<String> ids = new ArrayList<String>();
entCustomerList = elasticsearchTemplate.queryForPage(searchQueryBuilder.build(), Contacts.class); for (Contacts contacts : entCustomerList.getContent()) {
} if (contacts.getCreater() != null && ids.size() < 1024) {
if (entCustomerList.getContent().size() > 0) { ids.add(contacts.getCreater());
List<String> ids = new ArrayList<String>(); }
for (Contacts contacts : entCustomerList.getContent()) { }
if (contacts.getCreater() != null && ids.size() < 1024) { List<User> users = userRes.findAll(ids);
ids.add(contacts.getCreater()); for (Contacts contacts : entCustomerList.getContent()) {
} for (User user : users) {
} if (user.getId().equals(contacts.getCreater())) {
List<User> users = userRes.findAll(ids); contacts.setUser(user);
for (Contacts contacts : entCustomerList.getContent()) { break;
for (User user : users) { }
if (user.getId().equals(contacts.getCreater())) { }
contacts.setUser(user); }
break; }
} return entCustomerList;
} }
}
} @Override
return entCustomerList; public Page<Contacts> findByDataAndOrgi(String orgi, String q, Pageable page) {
} BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(termQuery("datastatus", false));
@Override boolQueryBuilder.must(termQuery("orgi", orgi));
public Page<Contacts> findByDataAndOrgi(String orgi, String q, Pageable page) { if (StringUtils.isNotBlank(q)) {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND));
boolQueryBuilder.must(termQuery("datastatus", false)); }
boolQueryBuilder.must(termQuery("orgi", orgi)); return processQuery(boolQueryBuilder, page);
if (StringUtils.isNotBlank(q)) { }
boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND)); }
}
return processQuery(boolQueryBuilder, page);
}
}

View File

@ -1,174 +1,170 @@
/* /*
* Copyright (C) 2017 优客服-多渠道客服系统 * Copyright (C) 2017 优客服-多渠道客服系统
* Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com> * Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com>
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package com.chatopera.cc.persistence.es; package com.chatopera.cc.persistence.es;
import com.chatopera.cc.model.EntCustomer; import com.chatopera.cc.model.EntCustomer;
import com.chatopera.cc.model.User; import com.chatopera.cc.model.User;
import com.chatopera.cc.persistence.repository.UserRepository; import com.chatopera.cc.persistence.repository.UserRepository;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.*;
import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.sort.FieldSortBuilder;
import org.elasticsearch.index.query.QueryStringQueryBuilder; import org.elasticsearch.search.sort.SortOrder;
import org.elasticsearch.index.query.QueryStringQueryBuilder.Operator; import org.springframework.beans.factory.annotation.Autowired;
import org.elasticsearch.index.query.RangeQueryBuilder; import org.springframework.data.domain.Page;
import org.elasticsearch.search.sort.FieldSortBuilder; import org.springframework.data.domain.Pageable;
import org.elasticsearch.search.sort.SortOrder; import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.domain.Page; import org.springframework.stereotype.Repository;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; import java.text.SimpleDateFormat;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import java.util.ArrayList;
import org.springframework.stereotype.Repository; import java.util.Date;
import java.util.List;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import static org.elasticsearch.index.query.QueryBuilders.termQuery;
import java.util.Date;
import java.util.List; @Repository
public class EntCustomerRepositoryImpl implements EntCustomerEsCommonRepository {
import static org.elasticsearch.index.query.QueryBuilders.termQuery;
private final SimpleDateFormat dateFromate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Repository
public class EntCustomerRepositoryImpl implements EntCustomerEsCommonRepository{ @Autowired
private UserRepository userRes;
private SimpleDateFormat dateFromate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;
private ElasticsearchTemplate elasticsearchTemplate;
@Autowired
private UserRepository userRes ; @Autowired
public void setElasticsearchTemplate(ElasticsearchTemplate elasticsearchTemplate) {
private ElasticsearchTemplate elasticsearchTemplate; this.elasticsearchTemplate = elasticsearchTemplate;
}
@Autowired
public void setElasticsearchTemplate(ElasticsearchTemplate elasticsearchTemplate) { @Override
this.elasticsearchTemplate = elasticsearchTemplate; public Page<EntCustomer> findByCreaterAndSharesAndOrgi(String creater, String shares ,String orgi, boolean includeDeleteData ,String q , Pageable page) {
}
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
@Override BoolQueryBuilder boolQueryBuilder1 = new BoolQueryBuilder();
public Page<EntCustomer> findByCreaterAndSharesAndOrgi(String creater, String shares ,String orgi, boolean includeDeleteData ,String q , Pageable page) { boolQueryBuilder1.should(termQuery("creater" , creater)) ;
boolQueryBuilder1.should(termQuery("shares" , creater)) ;
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); boolQueryBuilder1.should(termQuery("shares" , "all")) ;
BoolQueryBuilder boolQueryBuilder1 = new BoolQueryBuilder(); boolQueryBuilder.must(boolQueryBuilder1) ;
boolQueryBuilder1.should(termQuery("creater" , creater)) ; boolQueryBuilder.must(termQuery("orgi" , orgi)) ;
boolQueryBuilder1.should(termQuery("shares" , creater)) ; if(includeDeleteData){
boolQueryBuilder1.should(termQuery("shares" , "all")) ; boolQueryBuilder.must(termQuery("datastatus" , true)) ;
boolQueryBuilder.must(boolQueryBuilder1) ; }else{
boolQueryBuilder.must(termQuery("orgi" , orgi)) ; boolQueryBuilder.must(termQuery("datastatus" , false)) ;
if(includeDeleteData){ }
boolQueryBuilder.must(termQuery("datastatus" , true)) ; if(!StringUtils.isBlank(q)){
}else{ boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND)) ;
boolQueryBuilder.must(termQuery("datastatus" , false)) ; }
} return processQuery(boolQueryBuilder , page);
if(!StringUtils.isBlank(q)){ }
boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND)) ;
} @Override
return processQuery(boolQueryBuilder , page); public Page<EntCustomer> findByCreaterAndSharesAndOrgi(String creater,
} String shares,String orgi, Date begin, Date end, boolean includeDeleteData,
BoolQueryBuilder boolQueryBuilder , String q, Pageable page) {
@Override BoolQueryBuilder boolQueryBuilder1 = new BoolQueryBuilder();
public Page<EntCustomer> findByCreaterAndSharesAndOrgi(String creater, boolQueryBuilder1.should(termQuery("creater" , creater)) ;
String shares,String orgi, Date begin, Date end, boolean includeDeleteData, boolQueryBuilder1.should(termQuery("shares" , creater)) ;
BoolQueryBuilder boolQueryBuilder , String q, Pageable page) { boolQueryBuilder1.should(termQuery("shares" , "all")) ;
BoolQueryBuilder boolQueryBuilder1 = new BoolQueryBuilder(); boolQueryBuilder.must(boolQueryBuilder1) ;
boolQueryBuilder1.should(termQuery("creater" , creater)) ; boolQueryBuilder.must(termQuery("orgi" , orgi)) ;
boolQueryBuilder1.should(termQuery("shares" , creater)) ; if(includeDeleteData){
boolQueryBuilder1.should(termQuery("shares" , "all")) ; boolQueryBuilder.must(termQuery("datastatus" , true)) ;
boolQueryBuilder.must(boolQueryBuilder1) ; }else{
boolQueryBuilder.must(termQuery("orgi" , orgi)) ; boolQueryBuilder.must(termQuery("datastatus" , false)) ;
if(includeDeleteData){ }
boolQueryBuilder.must(termQuery("datastatus" , true)) ; RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("createtime") ;
}else{ if(begin!=null){
boolQueryBuilder.must(termQuery("datastatus" , false)) ; rangeQuery.from(begin.getTime()) ;
} }
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("createtime") ; if(end!=null){
if(begin!=null){ rangeQuery.to(end.getTime()) ;
rangeQuery.from(begin.getTime()) ; }else{
} rangeQuery.to(new Date().getTime()) ;
if(end!=null){ }
rangeQuery.to(end.getTime()) ; if(begin!=null || end!=null){
}else{ boolQueryBuilder.must(rangeQuery) ;
rangeQuery.to(new Date().getTime()) ; }
} if(!StringUtils.isBlank(q)){
if(begin!=null || end!=null){ boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND)) ;
boolQueryBuilder.must(rangeQuery) ; }
} return processQuery(boolQueryBuilder , page);
if(!StringUtils.isBlank(q)){ }
boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND)) ;
} @Override
return processQuery(boolQueryBuilder , page); public Page<EntCustomer> findByCreaterAndSharesAndOrgi(String creater,String shares,String orgi, Date begin, Date end, boolean includeDeleteData,String q, Pageable page) {
} BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
BoolQueryBuilder boolQueryBuilder1 = new BoolQueryBuilder();
@Override boolQueryBuilder1.should(termQuery("creater" , creater)) ;
public Page<EntCustomer> findByCreaterAndSharesAndOrgi(String creater,String shares,String orgi, Date begin, Date end, boolean includeDeleteData,String q, Pageable page) { boolQueryBuilder1.should(termQuery("shares" , creater)) ;
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); boolQueryBuilder1.should(termQuery("shares" , "all")) ;
BoolQueryBuilder boolQueryBuilder1 = new BoolQueryBuilder(); boolQueryBuilder.must(boolQueryBuilder1) ;
boolQueryBuilder1.should(termQuery("creater" , creater)) ; boolQueryBuilder.must(termQuery("orgi" , orgi)) ;
boolQueryBuilder1.should(termQuery("shares" , creater)) ; if(includeDeleteData){
boolQueryBuilder1.should(termQuery("shares" , "all")) ; boolQueryBuilder.must(termQuery("datastatus" , true)) ;
boolQueryBuilder.must(boolQueryBuilder1) ; }else{
boolQueryBuilder.must(termQuery("orgi" , orgi)) ; boolQueryBuilder.must(termQuery("datastatus" , false)) ;
if(includeDeleteData){ }
boolQueryBuilder.must(termQuery("datastatus" , true)) ; RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("createtime") ;
}else{ if(begin!=null){
boolQueryBuilder.must(termQuery("datastatus" , false)) ; rangeQuery.from(dateFromate.format(begin)) ;
} }
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("createtime") ; if(end!=null){
if(begin!=null){ rangeQuery.to(dateFromate.format(end)) ;
rangeQuery.from(dateFromate.format(begin)) ; }else{
} rangeQuery.to(dateFromate.format(new Date())) ;
if(end!=null){ }
rangeQuery.to(dateFromate.format(end)) ; if(begin!=null || end!=null){
}else{ boolQueryBuilder.must(rangeQuery) ;
rangeQuery.to(dateFromate.format(new Date())) ; }
} if(!StringUtils.isBlank(q)){
if(begin!=null || end!=null){ boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND)) ;
boolQueryBuilder.must(rangeQuery) ; }
} return processQuery(boolQueryBuilder , page);
if(!StringUtils.isBlank(q)){ }
boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND)) ;
}
return processQuery(boolQueryBuilder , page); private Page<EntCustomer> processQuery(BoolQueryBuilder boolQueryBuilder , Pageable page){
} NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withSort(new FieldSortBuilder("creater").unmappedType("boolean").order(SortOrder.DESC)).withSort(new FieldSortBuilder("name").unmappedType("string").order(SortOrder.DESC));
searchQueryBuilder.withPageable(page);
private Page<EntCustomer> processQuery(BoolQueryBuilder boolQueryBuilder , Pageable page){
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withSort(new FieldSortBuilder("creater").unmappedType("boolean").order(SortOrder.DESC)).withSort(new FieldSortBuilder("name").unmappedType("string").order(SortOrder.DESC)); Page<EntCustomer> entCustomerList = null ;
if(elasticsearchTemplate.indexExists(EntCustomer.class)){
searchQueryBuilder.withPageable(page); entCustomerList = elasticsearchTemplate.queryForPage(searchQueryBuilder.build() , EntCustomer.class ) ;
}
Page<EntCustomer> entCustomerList = null ; if(entCustomerList.getContent().size() > 0){
if(elasticsearchTemplate.indexExists(EntCustomer.class)){ List<String> ids = new ArrayList<String>() ;
entCustomerList = elasticsearchTemplate.queryForPage(searchQueryBuilder.build() , EntCustomer.class ) ; for(EntCustomer entCustomer : entCustomerList.getContent()){
} if(entCustomer.getCreater()!=null && ids.size()<1024){
if(entCustomerList.getContent().size() > 0){ ids.add(entCustomer.getCreater()) ;
List<String> ids = new ArrayList<String>() ; }
for(EntCustomer entCustomer : entCustomerList.getContent()){ }
if(entCustomer.getCreater()!=null && ids.size()<1024){ List<User> users = userRes.findAll(ids) ;
ids.add(entCustomer.getCreater()) ; for(EntCustomer entCustomer : entCustomerList.getContent()){
} for(User user : users){
} if(user.getId().equals(entCustomer.getCreater())) {
List<User> users = userRes.findAll(ids) ; entCustomer.setUser(user);
for(EntCustomer entCustomer : entCustomerList.getContent()){ break;
for(User user : users){ }
if(user.getId().equals(entCustomer.getCreater())){ }
entCustomer.setUser(user); }
break ; }
} return entCustomerList;
} }
} }
}
return entCustomerList;
}
}

View File

@ -1,107 +1,107 @@
/* /*
* Copyright (C) 2017 优客服-多渠道客服系统 * Copyright (C) 2017 优客服-多渠道客服系统
* Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com> * Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com>
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package com.chatopera.cc.persistence.es; package com.chatopera.cc.persistence.es;
import com.chatopera.cc.model.KbsTopicComment; import com.chatopera.cc.model.KbsTopicComment;
import com.chatopera.cc.model.Topic; import com.chatopera.cc.model.Topic;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.elasticsearch.index.query.QueryStringQueryBuilder; import org.elasticsearch.index.query.Operator;
import org.elasticsearch.index.query.QueryStringQueryBuilder.Operator; import org.elasticsearch.index.query.QueryStringQueryBuilder;
import org.elasticsearch.search.highlight.HighlightBuilder; import org.elasticsearch.search.highlight.HighlightBuilder;
import org.elasticsearch.search.sort.FieldSortBuilder; import org.elasticsearch.search.sort.FieldSortBuilder;
import org.elasticsearch.search.sort.SortOrder; import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery; import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List; import java.util.List;
import static org.elasticsearch.index.query.QueryBuilders.termQuery; import static org.elasticsearch.index.query.QueryBuilders.termQuery;
@Component @Component
public class KbsTopicCommentRepositoryImpl implements KbsTopicCommentEsCommonRepository{ public class KbsTopicCommentRepositoryImpl implements KbsTopicCommentEsCommonRepository{
private ElasticsearchTemplate elasticsearchTemplate; private ElasticsearchTemplate elasticsearchTemplate;
@Autowired @Autowired
public void setElasticsearchTemplate(ElasticsearchTemplate elasticsearchTemplate) { public void setElasticsearchTemplate(ElasticsearchTemplate elasticsearchTemplate) {
this.elasticsearchTemplate = elasticsearchTemplate; this.elasticsearchTemplate = elasticsearchTemplate;
} }
@Override @Override
public Page<KbsTopicComment> findByDataid(String id , int p , int ps) { public Page<KbsTopicComment> findByDataid(String id , int p , int ps) {
Page<KbsTopicComment> pages = null ; Page<KbsTopicComment> pages = null;
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("dataid" , id)).withSort(new FieldSortBuilder("optimal").unmappedType("boolean").order(SortOrder.DESC)).withSort(new FieldSortBuilder("updatetime").unmappedType("date").order(SortOrder.DESC)).build().setPageable(new PageRequest(p, ps)) ; SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("dataid", id)).withSort(new FieldSortBuilder("optimal").unmappedType("boolean").order(SortOrder.DESC)).withSort(new FieldSortBuilder("updatetime").unmappedType("date").order(SortOrder.DESC)).build().setPageable(new PageRequest(p, ps));
if(elasticsearchTemplate.indexExists(KbsTopicComment.class)){ if (elasticsearchTemplate.indexExists(KbsTopicComment.class)) {
pages = elasticsearchTemplate.queryForPage(searchQuery, KbsTopicComment.class); pages = elasticsearchTemplate.queryForPage(searchQuery, KbsTopicComment.class);
} }
return pages ; return pages;
} }
@Override @Override
public List<KbsTopicComment> findByOptimal(String dataid) { public List<KbsTopicComment> findByOptimal(String dataid) {
List<KbsTopicComment> commentList = null ; List<KbsTopicComment> commentList = null ;
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("dataid" , dataid)).withQuery(termQuery("optimal" , true)).build(); SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("dataid" , dataid)).withQuery(termQuery("optimal" , true)).build();
if(elasticsearchTemplate.indexExists(KbsTopicComment.class)){ if(elasticsearchTemplate.indexExists(KbsTopicComment.class)){
commentList = elasticsearchTemplate.queryForList(searchQuery, KbsTopicComment.class); commentList = elasticsearchTemplate.queryForList(searchQuery, KbsTopicComment.class);
} }
return commentList ; return commentList ;
} }
@Override @Override
public Page<KbsTopicComment> findByCon(NativeSearchQueryBuilder searchQueryBuilder , String field , String aggname, String q , final int p , final int ps) { public Page<KbsTopicComment> findByCon(NativeSearchQueryBuilder searchQueryBuilder , String field , String aggname, String q , final int p , final int ps) {
Page<KbsTopicComment> pages = null ; Page<KbsTopicComment> pages = null ;
if(!StringUtils.isBlank(q)){ if(!StringUtils.isBlank(q)){
searchQueryBuilder.withQuery(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND)) ; searchQueryBuilder.withQuery(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND));
} }
SearchQuery searchQuery = searchQueryBuilder.build(); SearchQuery searchQuery = searchQueryBuilder.build();
if(elasticsearchTemplate.indexExists(KbsTopicComment.class)){ if (elasticsearchTemplate.indexExists(KbsTopicComment.class)) {
if(!StringUtils.isBlank(q)){ if (!StringUtils.isBlank(q)) {
pages = elasticsearchTemplate.queryForPage(searchQuery, KbsTopicComment.class , new UKResultMapper()); pages = elasticsearchTemplate.queryForPage(searchQuery, KbsTopicComment.class, new UKResultMapper());
}else{ } else {
pages = elasticsearchTemplate.queryForPage(searchQuery, KbsTopicComment.class , new UKAggTopResultExtractor(field , aggname)); pages = elasticsearchTemplate.queryForPage(searchQuery, KbsTopicComment.class, new UKAggTopResultExtractor(field, aggname));
} }
} }
return pages ; return pages;
} }
@Override @Override
public Page<KbsTopicComment> findByCon( public Page<KbsTopicComment> findByCon(
NativeSearchQueryBuilder searchQueryBuilder, String q, int p, int ps) { NativeSearchQueryBuilder searchQueryBuilder, String q, int p, int ps) {
searchQueryBuilder.withPageable(new PageRequest(p, ps)).withSort(new FieldSortBuilder("updatetime").unmappedType("date").order(SortOrder.DESC)) ; searchQueryBuilder.withPageable(new PageRequest(p, ps)).withSort(new FieldSortBuilder("updatetime").unmappedType("date").order(SortOrder.DESC)) ;
searchQueryBuilder.withHighlightFields(new HighlightBuilder.Field("content").fragmentSize(200)) ; searchQueryBuilder.withHighlightFields(new HighlightBuilder.Field("content").fragmentSize(200)) ;
if(!StringUtils.isBlank(q)){ if(!StringUtils.isBlank(q)){
searchQueryBuilder.withQuery(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND)) ; searchQueryBuilder.withQuery(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND)) ;
} }
return elasticsearchTemplate.queryForPage(searchQueryBuilder.build(), KbsTopicComment.class , new UKResultMapper()) ; return elasticsearchTemplate.queryForPage(searchQueryBuilder.build(), KbsTopicComment.class , new UKResultMapper()) ;
} }
@Override @Override
public Page<KbsTopicComment> countByCon( public Page<KbsTopicComment> countByCon(
NativeSearchQueryBuilder searchQueryBuilder, String q, int p, int ps) { NativeSearchQueryBuilder searchQueryBuilder, String q, int p, int ps) {
Page<KbsTopicComment> pages = null ; Page<KbsTopicComment> pages = null;
if(!StringUtils.isBlank(q)){ if (!StringUtils.isBlank(q)) {
searchQueryBuilder.withQuery(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND)) ; searchQueryBuilder.withQuery(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND));
} }
SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps)); SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps));
if(elasticsearchTemplate.indexExists(Topic.class)){ if (elasticsearchTemplate.indexExists(Topic.class)) {
pages = elasticsearchTemplate.queryForPage(searchQuery, KbsTopicComment.class , new UKAggResultExtractor("creater") ); pages = elasticsearchTemplate.queryForPage(searchQuery, KbsTopicComment.class, new UKAggResultExtractor("creater"));
} }
return pages ; return pages;
} }
} }

View File

@ -1,152 +1,148 @@
/* /*
* Copyright (C) 2017 优客服-多渠道客服系统 * Copyright (C) 2017 优客服-多渠道客服系统
* Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com> * Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com>
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package com.chatopera.cc.persistence.es; package com.chatopera.cc.persistence.es;
import com.chatopera.cc.model.KbsTopic; import com.chatopera.cc.model.KbsTopic;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.*;
import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.search.highlight.HighlightBuilder;
import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.sort.FieldSortBuilder;
import org.elasticsearch.index.query.QueryStringQueryBuilder; import org.elasticsearch.search.sort.SortOrder;
import org.elasticsearch.index.query.QueryStringQueryBuilder.Operator; import org.springframework.beans.factory.annotation.Autowired;
import org.elasticsearch.search.highlight.HighlightBuilder; import org.springframework.data.domain.Page;
import org.elasticsearch.search.sort.FieldSortBuilder; import org.springframework.data.domain.PageRequest;
import org.elasticsearch.search.sort.SortOrder; import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.domain.Page; import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Component;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import java.util.Date;
import org.springframework.data.elasticsearch.core.query.SearchQuery; import java.util.List;
import org.springframework.stereotype.Component;
import static org.elasticsearch.index.query.QueryBuilders.termQuery;
import java.util.Date;
import java.util.List; @Component
public class KbsTopicRepositoryImpl implements KbsTopicEsCommonRepository{
import static org.elasticsearch.index.query.QueryBuilders.termQuery; private ElasticsearchTemplate elasticsearchTemplate;
@Component @Autowired
public class KbsTopicRepositoryImpl implements KbsTopicEsCommonRepository{ public void setElasticsearchTemplate(ElasticsearchTemplate elasticsearchTemplate) {
private ElasticsearchTemplate elasticsearchTemplate; this.elasticsearchTemplate = elasticsearchTemplate;
}
@Autowired @Override
public void setElasticsearchTemplate(ElasticsearchTemplate elasticsearchTemplate) { public Page<KbsTopic> getTopicByCate(String cate , String q, final int p , final int ps) {
this.elasticsearchTemplate = elasticsearchTemplate;
} Page<KbsTopic> pages = null ;
@Override
public Page<KbsTopic> getTopicByCate(String cate , String q, final int p , final int ps) { BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(termQuery("cate" , cate)) ;
Page<KbsTopic> pages = null ;
if (!StringUtils.isBlank(q)) {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND));
boolQueryBuilder.must(termQuery("cate" , cate)) ; }
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withSort(new FieldSortBuilder("createtime").unmappedType("date").order(SortOrder.DESC));
if(!StringUtils.isBlank(q)){ searchQueryBuilder.withHighlightFields(new HighlightBuilder.Field("title").fragmentSize(200));
boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND)) ; SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps));
} if (elasticsearchTemplate.indexExists(KbsTopic.class)) {
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withSort(new FieldSortBuilder("createtime").unmappedType("date").order(SortOrder.DESC)); pages = elasticsearchTemplate.queryForPage(searchQuery, KbsTopic.class, new UKResultMapper());
searchQueryBuilder.withHighlightFields(new HighlightBuilder.Field("title").fragmentSize(200)) ; }
SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps)) ; return pages;
if(elasticsearchTemplate.indexExists(KbsTopic.class)){ }
pages = elasticsearchTemplate.queryForPage(searchQuery, KbsTopic.class , new UKResultMapper());
} @SuppressWarnings("deprecation")
return pages ; @Override
} public Page<KbsTopic> getTopicByTop(boolean top , final int p , final int ps) {
@SuppressWarnings("deprecation") Page<KbsTopic> pages = null ;
@Override
public Page<KbsTopic> getTopicByTop(boolean top , final int p , final int ps) { BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(termQuery("top" , top)) ;
Page<KbsTopic> pages = null ;
QueryBuilder beginFilter = QueryBuilders.boolQuery().should(QueryBuilders.missingQuery("begintime")).should(QueryBuilders.rangeQuery("begintime").from(new Date().getTime()));
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); QueryBuilder endFilter = QueryBuilders.boolQuery().should(QueryBuilders.missingQuery("endtime")).should(QueryBuilders.rangeQuery("endtime").to(new Date().getTime()));
boolQueryBuilder.must(termQuery("top" , top)) ;
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withFilter(QueryBuilders.boolQuery().must(beginFilter).must(endFilter)).withSort(new FieldSortBuilder("createtime").unmappedType("date").order(SortOrder.DESC));
QueryBuilder beginFilter = QueryBuilders.boolQuery().should(QueryBuilders.missingQuery("begintime")).should(QueryBuilders.rangeQuery("begintime").from(new Date().getTime())) ;
QueryBuilder endFilter = QueryBuilders.boolQuery().should(QueryBuilders.missingQuery("endtime")).should(QueryBuilders.rangeQuery("endtime").to(new Date().getTime())) ; searchQueryBuilder.withHighlightFields(new HighlightBuilder.Field("title").fragmentSize(200));
SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps));
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withFilter(QueryBuilders.boolQuery().must(beginFilter).must(endFilter)).withSort(new FieldSortBuilder("createtime").unmappedType("date").order(SortOrder.DESC)); if (elasticsearchTemplate.indexExists(KbsTopic.class)) {
pages = elasticsearchTemplate.queryForPage(searchQuery, KbsTopic.class, new UKResultMapper());
searchQueryBuilder.withHighlightFields(new HighlightBuilder.Field("title").fragmentSize(200)) ; }
SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps)) ; return pages;
if(elasticsearchTemplate.indexExists(KbsTopic.class)){ }
pages = elasticsearchTemplate.queryForPage(searchQuery, KbsTopic.class , new UKResultMapper());
} @Override
return pages ; public Page<KbsTopic> getTopicByCateAndUser(String cate , String q , String user ,final int p , final int ps) {
}
Page<KbsTopic> pages = null ;
@Override
public Page<KbsTopic> getTopicByCateAndUser(String cate , String q , String user ,final int p , final int ps) { BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(termQuery("cate" , cate)) ;
Page<KbsTopic> pages = null ;
if (!StringUtils.isBlank(q)) {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND));
boolQueryBuilder.must(termQuery("cate" , cate)) ; }
if(!StringUtils.isBlank(q)){ NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withQuery(termQuery("creater", user)).withSort(new FieldSortBuilder("top").unmappedType("boolean").order(SortOrder.DESC)).withSort(new FieldSortBuilder("updatetime").unmappedType("date").order(SortOrder.DESC));
boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND)) ; SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps));
} if (elasticsearchTemplate.indexExists(KbsTopic.class)) {
pages = elasticsearchTemplate.queryForPage(searchQuery, KbsTopic.class, new UKResultMapper());
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withQuery(termQuery("creater" , user)).withSort(new FieldSortBuilder("top").unmappedType("boolean").order(SortOrder.DESC)).withSort(new FieldSortBuilder("updatetime").unmappedType("date").order(SortOrder.DESC)); }
SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps)); return pages;
if(elasticsearchTemplate.indexExists(KbsTopic.class)){ }
pages = elasticsearchTemplate.queryForPage(searchQuery, KbsTopic.class, new UKResultMapper());
} @SuppressWarnings("deprecation")
return pages ; @Override
} public Page<KbsTopic> getTopicByCon(BoolQueryBuilder boolQueryBuilder, final int p , final int ps) {
@SuppressWarnings("deprecation") Page<KbsTopic> pages = null ;
@Override
public Page<KbsTopic> getTopicByCon(BoolQueryBuilder boolQueryBuilder, final int p , final int ps) { QueryBuilder beginFilter = QueryBuilders.boolQuery().should(QueryBuilders.missingQuery("begintime")).should(QueryBuilders.rangeQuery("begintime").from(new Date().getTime()));
QueryBuilder endFilter = QueryBuilders.boolQuery().should(QueryBuilders.missingQuery("endtime")).should(QueryBuilders.rangeQuery("endtime").to(new Date().getTime()));
Page<KbsTopic> pages = null ;
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withFilter(QueryBuilders.boolQuery().must(beginFilter).must(endFilter)).withSort(new FieldSortBuilder("createtime").unmappedType("date").order(SortOrder.DESC));
QueryBuilder beginFilter = QueryBuilders.boolQuery().should(QueryBuilders.missingQuery("begintime")).should(QueryBuilders.rangeQuery("begintime").from(new Date().getTime())) ;
QueryBuilder endFilter = QueryBuilders.boolQuery().should(QueryBuilders.missingQuery("endtime")).should(QueryBuilders.rangeQuery("endtime").to(new Date().getTime())) ; SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps));
if (elasticsearchTemplate.indexExists(KbsTopic.class)) {
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withFilter(QueryBuilders.boolQuery().must(beginFilter).must(endFilter)).withSort(new FieldSortBuilder("createtime").unmappedType("date").order(SortOrder.DESC)); pages = elasticsearchTemplate.queryForPage(searchQuery, KbsTopic.class);
}
SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps)) ; return pages;
if(elasticsearchTemplate.indexExists(KbsTopic.class)){ }
pages = elasticsearchTemplate.queryForPage(searchQuery, KbsTopic.class); @Override
} public List<KbsTopic> getTopicByOrgi(String orgi , String type, String q) {
return pages ;
} List<KbsTopic> list = null ;
@Override
public List<KbsTopic> getTopicByOrgi(String orgi , String type, String q) { BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(termQuery("orgi" , orgi)) ;
List<KbsTopic> list = null ;
if(!StringUtils.isBlank(type)){
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); boolQueryBuilder.must(termQuery("cate" , type)) ;
boolQueryBuilder.must(termQuery("orgi" , orgi)) ; }
if(!StringUtils.isBlank(type)){ if (!StringUtils.isBlank(q)) {
boolQueryBuilder.must(termQuery("cate" , type)) ; boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND));
} }
if(!StringUtils.isBlank(q)){ NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withSort(new FieldSortBuilder("top").unmappedType("boolean").order(SortOrder.DESC)).withSort(new FieldSortBuilder("updatetime").unmappedType("date").order(SortOrder.DESC));
boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND)) ; SearchQuery searchQuery = searchQueryBuilder.build();
} if (elasticsearchTemplate.indexExists(KbsTopic.class)) {
list = elasticsearchTemplate.queryForList(searchQuery, KbsTopic.class);
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withSort(new FieldSortBuilder("top").unmappedType("boolean").order(SortOrder.DESC)).withSort(new FieldSortBuilder("updatetime").unmappedType("date").order(SortOrder.DESC)); }
SearchQuery searchQuery = searchQueryBuilder.build(); return list;
if(elasticsearchTemplate.indexExists(KbsTopic.class)){ }
list = elasticsearchTemplate.queryForList(searchQuery, KbsTopic.class); }
}
return list ;
}
}

View File

@ -1,219 +1,215 @@
/* /*
* Copyright (C) 2017 优客服-多渠道客服系统 * Copyright (C) 2017 优客服-多渠道客服系统
* Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com> * Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com>
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package com.chatopera.cc.persistence.es; package com.chatopera.cc.persistence.es;
import com.chatopera.cc.basic.MainContext; import com.chatopera.cc.basic.MainContext;
import com.chatopera.cc.model.QuickReply; import com.chatopera.cc.model.QuickReply;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.*;
import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.search.highlight.HighlightBuilder;
import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.sort.FieldSortBuilder;
import org.elasticsearch.index.query.QueryStringQueryBuilder; import org.elasticsearch.search.sort.SortOrder;
import org.elasticsearch.index.query.QueryStringQueryBuilder.Operator; import org.springframework.beans.factory.annotation.Autowired;
import org.elasticsearch.search.highlight.HighlightBuilder; import org.springframework.data.domain.Page;
import org.elasticsearch.search.sort.FieldSortBuilder; import org.springframework.data.domain.PageRequest;
import org.elasticsearch.search.sort.SortOrder; import org.springframework.data.domain.Pageable;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.domain.Page; import org.springframework.data.elasticsearch.core.query.DeleteQuery;
import org.springframework.data.domain.PageRequest; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.domain.Pageable; import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; import org.springframework.stereotype.Component;
import org.springframework.data.elasticsearch.core.query.DeleteQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import java.util.Date;
import org.springframework.data.elasticsearch.core.query.SearchQuery; import java.util.List;
import org.springframework.stereotype.Component;
import static org.elasticsearch.index.query.QueryBuilders.termQuery;
import java.util.Date;
import java.util.List; @Component
public class QuickReplyRepositoryImpl implements QuickReplyEsCommonRepository{
import static org.elasticsearch.index.query.QueryBuilders.termQuery; private ElasticsearchTemplate elasticsearchTemplate;
@Component @Autowired
public class QuickReplyRepositoryImpl implements QuickReplyEsCommonRepository{ public void setElasticsearchTemplate(ElasticsearchTemplate elasticsearchTemplate) {
private ElasticsearchTemplate elasticsearchTemplate; this.elasticsearchTemplate = elasticsearchTemplate ;
}
@Autowired @Override
public void setElasticsearchTemplate(ElasticsearchTemplate elasticsearchTemplate) { public Page<QuickReply> getByOrgiAndCate(String orgi , String cate , String q, Pageable page) {
this.elasticsearchTemplate = elasticsearchTemplate ;
} Page<QuickReply> pages = null ;
@Override
public Page<QuickReply> getByOrgiAndCate(String orgi , String cate , String q, Pageable page) { BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(termQuery("cate" , cate)) ;
Page<QuickReply> pages = null ;
if (!StringUtils.isBlank(q)) {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND));
boolQueryBuilder.must(termQuery("cate" , cate)) ; }
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withSort(new FieldSortBuilder("createtime").unmappedType("date").order(SortOrder.DESC));
if(!StringUtils.isBlank(q)){ searchQueryBuilder.withHighlightFields(new HighlightBuilder.Field("title").fragmentSize(200));
boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND)) ; SearchQuery searchQuery = searchQueryBuilder.build().setPageable(page);
} if (elasticsearchTemplate.indexExists(QuickReply.class)) {
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withSort(new FieldSortBuilder("createtime").unmappedType("date").order(SortOrder.DESC)); pages = elasticsearchTemplate.queryForPage(searchQuery, QuickReply.class, new UKResultMapper());
searchQueryBuilder.withHighlightFields(new HighlightBuilder.Field("title").fragmentSize(200)) ; }
SearchQuery searchQuery = searchQueryBuilder.build().setPageable(page) ; return pages;
if(elasticsearchTemplate.indexExists(QuickReply.class)){ }
pages = elasticsearchTemplate.queryForPage(searchQuery, QuickReply.class , new UKResultMapper());
} @Override
return pages ; public List<QuickReply> findByOrgiAndCreater(String orgi ,String creater , String q) {
}
List<QuickReply> pages = null ;
@Override
public List<QuickReply> findByOrgiAndCreater(String orgi ,String creater , String q) { BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(termQuery("orgi" , orgi)) ;
List<QuickReply> pages = null ;
BoolQueryBuilder quickQueryBuilder = QueryBuilders.boolQuery();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(termQuery("orgi" , orgi)) ; quickQueryBuilder.should(termQuery("type" , MainContext.QuickType.PUB.toString())) ;
BoolQueryBuilder quickQueryBuilder = QueryBuilders.boolQuery(); BoolQueryBuilder priQueryBuilder = QueryBuilders.boolQuery();
quickQueryBuilder.should(termQuery("type" , MainContext.QuickType.PUB.toString())) ; priQueryBuilder.must(termQuery("type" , MainContext.QuickType.PRI.toString())) ;
priQueryBuilder.must(termQuery("creater" , creater)) ;
BoolQueryBuilder priQueryBuilder = QueryBuilders.boolQuery();
quickQueryBuilder.should(priQueryBuilder) ;
priQueryBuilder.must(termQuery("type" , MainContext.QuickType.PRI.toString())) ;
priQueryBuilder.must(termQuery("creater" , creater)) ; boolQueryBuilder.must(quickQueryBuilder) ;
quickQueryBuilder.should(priQueryBuilder) ; if (!StringUtils.isBlank(q)) {
boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND));
boolQueryBuilder.must(quickQueryBuilder) ; }
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withSort(new FieldSortBuilder("createtime").unmappedType("date").order(SortOrder.DESC));
if(!StringUtils.isBlank(q)){ searchQueryBuilder.withHighlightFields(new HighlightBuilder.Field("title").fragmentSize(200));
boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND)) ; SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(0, 10000));
} if (elasticsearchTemplate.indexExists(QuickReply.class)) {
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withSort(new FieldSortBuilder("createtime").unmappedType("date").order(SortOrder.DESC)); pages = elasticsearchTemplate.queryForList(searchQuery, QuickReply.class);
searchQueryBuilder.withHighlightFields(new HighlightBuilder.Field("title").fragmentSize(200)) ; }
SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(0, 10000)) ; return pages;
if(elasticsearchTemplate.indexExists(QuickReply.class)){ }
pages = elasticsearchTemplate.queryForList(searchQuery, QuickReply.class);
}
return pages ; @Override
} public Page<QuickReply> getByQuicktype(String quicktype , final int p , final int ps) {
Page<QuickReply> pages = null ;
@Override
public Page<QuickReply> getByQuicktype(String quicktype , final int p , final int ps) { BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(termQuery("type", quicktype));
Page<QuickReply> pages = null ;
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withSort(new FieldSortBuilder("createtime").unmappedType("date").order(SortOrder.DESC));
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(termQuery("type" , quicktype)) ; searchQueryBuilder.withHighlightFields(new HighlightBuilder.Field("title").fragmentSize(200));
SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps));
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withSort(new FieldSortBuilder("createtime").unmappedType("date").order(SortOrder.DESC)); if (elasticsearchTemplate.indexExists(QuickReply.class)) {
pages = elasticsearchTemplate.queryForPage(searchQuery, QuickReply.class, new UKResultMapper());
searchQueryBuilder.withHighlightFields(new HighlightBuilder.Field("title").fragmentSize(200)) ; }
SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps)) ; return pages;
if(elasticsearchTemplate.indexExists(QuickReply.class)){ }
pages = elasticsearchTemplate.queryForPage(searchQuery, QuickReply.class , new UKResultMapper());
} @Override
return pages ; public Page<QuickReply> getByCateAndUser(String cate , String q , String user ,final int p , final int ps) {
}
Page<QuickReply> pages = null ;
@Override
public Page<QuickReply> getByCateAndUser(String cate , String q , String user ,final int p , final int ps) { BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(termQuery("cate" , cate)) ;
Page<QuickReply> pages = null ;
if (!StringUtils.isBlank(q)) {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND));
boolQueryBuilder.must(termQuery("cate" , cate)) ; }
if(!StringUtils.isBlank(q)){ NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withQuery(termQuery("creater", user)).withSort(new FieldSortBuilder("top").unmappedType("boolean").order(SortOrder.DESC)).withSort(new FieldSortBuilder("updatetime").unmappedType("date").order(SortOrder.DESC));
boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND)) ; SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps));
} if (elasticsearchTemplate.indexExists(QuickReply.class)) {
pages = elasticsearchTemplate.queryForPage(searchQuery, QuickReply.class, new UKResultMapper());
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withQuery(termQuery("creater" , user)).withSort(new FieldSortBuilder("top").unmappedType("boolean").order(SortOrder.DESC)).withSort(new FieldSortBuilder("updatetime").unmappedType("date").order(SortOrder.DESC)); }
SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps)); return pages;
if(elasticsearchTemplate.indexExists(QuickReply.class)){ }
pages = elasticsearchTemplate.queryForPage(searchQuery, QuickReply.class, new UKResultMapper());
} @SuppressWarnings("deprecation")
return pages ; @Override
} public Page<QuickReply> getByCon(BoolQueryBuilder boolQueryBuilder, final int p , final int ps) {
@SuppressWarnings("deprecation") Page<QuickReply> pages = null ;
@Override
public Page<QuickReply> getByCon(BoolQueryBuilder boolQueryBuilder, final int p , final int ps) { QueryBuilder beginFilter = QueryBuilders.boolQuery().should(QueryBuilders.missingQuery("begintime")).should(QueryBuilders.rangeQuery("begintime").from(new Date().getTime()));
QueryBuilder endFilter = QueryBuilders.boolQuery().should(QueryBuilders.missingQuery("endtime")).should(QueryBuilders.rangeQuery("endtime").to(new Date().getTime()));
Page<QuickReply> pages = null ;
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withFilter(QueryBuilders.boolQuery().must(beginFilter).must(endFilter)).withSort(new FieldSortBuilder("createtime").unmappedType("date").order(SortOrder.DESC));
QueryBuilder beginFilter = QueryBuilders.boolQuery().should(QueryBuilders.missingQuery("begintime")).should(QueryBuilders.rangeQuery("begintime").from(new Date().getTime())) ;
QueryBuilder endFilter = QueryBuilders.boolQuery().should(QueryBuilders.missingQuery("endtime")).should(QueryBuilders.rangeQuery("endtime").to(new Date().getTime())) ; SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps));
if (elasticsearchTemplate.indexExists(QuickReply.class)) {
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withFilter(QueryBuilders.boolQuery().must(beginFilter).must(endFilter)).withSort(new FieldSortBuilder("createtime").unmappedType("date").order(SortOrder.DESC)); pages = elasticsearchTemplate.queryForPage(searchQuery, QuickReply.class);
}
SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps)) ; return pages;
if(elasticsearchTemplate.indexExists(QuickReply.class)){ }
pages = elasticsearchTemplate.queryForPage(searchQuery, QuickReply.class); @Override
} public Page<QuickReply> getByOrgiAndType(String orgi ,String type, String q , Pageable page) {
return pages ;
} Page<QuickReply> list = null ;
@Override
public Page<QuickReply> getByOrgiAndType(String orgi ,String type, String q , Pageable page) { BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(termQuery("orgi" , orgi)) ;
Page<QuickReply> list = null ; if(!StringUtils.isBlank(type)) {
boolQueryBuilder.must(termQuery("type" , type)) ;
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); }
boolQueryBuilder.must(termQuery("orgi" , orgi)) ;
if(!StringUtils.isBlank(type)) { if (!StringUtils.isBlank(q)) {
boolQueryBuilder.must(termQuery("type" , type)) ; boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND));
} }
if(!StringUtils.isBlank(q)){ NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withSort(new FieldSortBuilder("createtime").unmappedType("date").order(SortOrder.DESC));
boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND)) ; SearchQuery searchQuery = searchQueryBuilder.build().setPageable(page);
} if (elasticsearchTemplate.indexExists(QuickReply.class)) {
list = elasticsearchTemplate.queryForPage(searchQuery, QuickReply.class);
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withSort(new FieldSortBuilder("createtime").unmappedType("date").order(SortOrder.DESC)); }
SearchQuery searchQuery = searchQueryBuilder.build().setPageable(page); return list;
if(elasticsearchTemplate.indexExists(QuickReply.class)){ }
list = elasticsearchTemplate.queryForPage(searchQuery, QuickReply.class); @Override
} public void deleteByCate(String cate ,String orgi) {
return list ; DeleteQuery deleteQuery = new DeleteQuery();
} BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
@Override boolQueryBuilder.must(termQuery("orgi" , orgi)) ;
public void deleteByCate(String cate ,String orgi) { boolQueryBuilder.must(termQuery("cate" , cate)) ;
DeleteQuery deleteQuery = new DeleteQuery(); deleteQuery.setQuery(boolQueryBuilder);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); elasticsearchTemplate.delete(deleteQuery);
boolQueryBuilder.must(termQuery("orgi" , orgi)) ; }
boolQueryBuilder.must(termQuery("cate" , cate)) ;
deleteQuery.setQuery(boolQueryBuilder); @Override
elasticsearchTemplate.delete(deleteQuery); public List<QuickReply> getQuickReplyByOrgi(String orgi , String cate,String type, String q) {
}
List<QuickReply> list = null ;
@Override
public List<QuickReply> getQuickReplyByOrgi(String orgi , String cate,String type, String q) { BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(termQuery("orgi" , orgi)) ;
List<QuickReply> list = null ;
if(!StringUtils.isBlank(cate)){
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); boolQueryBuilder.must(termQuery("cate" , cate)) ;
boolQueryBuilder.must(termQuery("orgi" , orgi)) ; }
if(!StringUtils.isBlank(type)){
if(!StringUtils.isBlank(cate)){ boolQueryBuilder.must(termQuery("type" , type)) ;
boolQueryBuilder.must(termQuery("cate" , cate)) ; }
} if (!StringUtils.isBlank(q)) {
if(!StringUtils.isBlank(type)){ boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND));
boolQueryBuilder.must(termQuery("type" , type)) ; }
}
if(!StringUtils.isBlank(q)){ NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withSort(new FieldSortBuilder("top").unmappedType("boolean").order(SortOrder.DESC)).withSort(new FieldSortBuilder("updatetime").unmappedType("date").order(SortOrder.DESC));
boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND)) ; SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(0, 10000));
} if (elasticsearchTemplate.indexExists(QuickReply.class)) {
list = elasticsearchTemplate.queryForList(searchQuery, QuickReply.class);
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withSort(new FieldSortBuilder("top").unmappedType("boolean").order(SortOrder.DESC)).withSort(new FieldSortBuilder("updatetime").unmappedType("date").order(SortOrder.DESC)); }
SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(0, 10000)); return list;
if(elasticsearchTemplate.indexExists(QuickReply.class)){ }
list = elasticsearchTemplate.queryForList(searchQuery, QuickReply.class); }
}
return list ;
}
}

View File

@ -1,159 +1,155 @@
/* /*
* Copyright (C) 2017 优客服-多渠道客服系统 * Copyright (C) 2017 优客服-多渠道客服系统
* Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com> * Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com>
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package com.chatopera.cc.persistence.es; package com.chatopera.cc.persistence.es;
import com.chatopera.cc.model.Topic; import com.chatopera.cc.model.Topic;
import com.chatopera.cc.persistence.repository.XiaoEUKResultMapper; import com.chatopera.cc.persistence.repository.XiaoEUKResultMapper;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.*;
import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.search.highlight.HighlightBuilder;
import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.sort.FieldSortBuilder;
import org.elasticsearch.index.query.QueryStringQueryBuilder; import org.elasticsearch.search.sort.SortOrder;
import org.elasticsearch.index.query.QueryStringQueryBuilder.Operator; import org.springframework.beans.factory.annotation.Autowired;
import org.elasticsearch.search.highlight.HighlightBuilder; import org.springframework.data.domain.Page;
import org.elasticsearch.search.sort.FieldSortBuilder; import org.springframework.data.domain.PageRequest;
import org.elasticsearch.search.sort.SortOrder; import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.domain.Page; import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Component;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import java.util.Date;
import org.springframework.data.elasticsearch.core.query.SearchQuery; import java.util.List;
import org.springframework.stereotype.Component;
import static org.elasticsearch.index.query.QueryBuilders.termQuery;
import java.util.Date;
import java.util.List; @Component
public class TopicRepositoryImpl implements TopicEsCommonRepository{
import static org.elasticsearch.index.query.QueryBuilders.termQuery; private ElasticsearchTemplate elasticsearchTemplate;
@Component @Autowired
public class TopicRepositoryImpl implements TopicEsCommonRepository{ public void setElasticsearchTemplate(ElasticsearchTemplate elasticsearchTemplate) {
private ElasticsearchTemplate elasticsearchTemplate; this.elasticsearchTemplate = elasticsearchTemplate;
}
@Autowired @Override
public void setElasticsearchTemplate(ElasticsearchTemplate elasticsearchTemplate) { public Page<Topic> getTopicByCateAndOrgi(String cate ,String orgi, String q, final int p , final int ps) {
this.elasticsearchTemplate = elasticsearchTemplate;
} Page<Topic> pages = null ;
@Override
public Page<Topic> getTopicByCateAndOrgi(String cate ,String orgi, String q, final int p , final int ps) { BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
if(!StringUtils.isBlank(cate)) {
Page<Topic> pages = null ; boolQueryBuilder.must(termQuery("cate" , cate)) ;
}
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); boolQueryBuilder.must(termQuery("orgi", orgi));
if(!StringUtils.isBlank(cate)) { if (!StringUtils.isBlank(q)) {
boolQueryBuilder.must(termQuery("cate" , cate)) ; boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND));
} }
boolQueryBuilder.must(termQuery("orgi" , orgi)) ; NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withSort(new FieldSortBuilder("top").unmappedType("boolean").order(SortOrder.DESC)).withSort(new FieldSortBuilder("createtime").unmappedType("date").order(SortOrder.DESC));
if(!StringUtils.isBlank(q)){ searchQueryBuilder.withHighlightFields(new HighlightBuilder.Field("title").fragmentSize(200));
boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND)) ; SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps));
} if (elasticsearchTemplate.indexExists(Topic.class)) {
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withSort(new FieldSortBuilder("top").unmappedType("boolean").order(SortOrder.DESC)).withSort(new FieldSortBuilder("createtime").unmappedType("date").order(SortOrder.DESC)); pages = elasticsearchTemplate.queryForPage(searchQuery, Topic.class, new XiaoEUKResultMapper());
searchQueryBuilder.withHighlightFields(new HighlightBuilder.Field("title").fragmentSize(200)) ; }
SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps)) ; return pages;
if(elasticsearchTemplate.indexExists(Topic.class)){ }
pages = elasticsearchTemplate.queryForPage(searchQuery, Topic.class , new XiaoEUKResultMapper());
} @SuppressWarnings("deprecation")
return pages ; @Override
} public Page<Topic> getTopicByTopAndOrgi(boolean top ,String orgi, String aiid ,final int p , final int ps) {
@SuppressWarnings("deprecation") Page<Topic> pages = null ;
@Override
public Page<Topic> getTopicByTopAndOrgi(boolean top ,String orgi, String aiid ,final int p , final int ps) { BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(termQuery("top" , top)) ;
Page<Topic> pages = null ; boolQueryBuilder.must(termQuery("orgi" , orgi)) ;
if(!StringUtils.isBlank(aiid)) {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); boolQueryBuilder.must(termQuery("aiid" , aiid)) ;
boolQueryBuilder.must(termQuery("top" , top)) ; }
boolQueryBuilder.must(termQuery("orgi" , orgi)) ;
if(!StringUtils.isBlank(aiid)) { QueryBuilder beginFilter = QueryBuilders.boolQuery().should(QueryBuilders.missingQuery("begintime")).should(QueryBuilders.rangeQuery("begintime").to(new Date().getTime())) ;
boolQueryBuilder.must(termQuery("aiid" , aiid)) ; QueryBuilder endFilter = QueryBuilders.boolQuery().should(QueryBuilders.missingQuery("endtime")).should(QueryBuilders.rangeQuery("endtime").from(new Date().getTime()));
}
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withFilter(QueryBuilders.boolQuery().must(beginFilter).must(endFilter)).withSort(new FieldSortBuilder("createtime").unmappedType("date").order(SortOrder.DESC));
QueryBuilder beginFilter = QueryBuilders.boolQuery().should(QueryBuilders.missingQuery("begintime")).should(QueryBuilders.rangeQuery("begintime").to(new Date().getTime())) ;
QueryBuilder endFilter = QueryBuilders.boolQuery().should(QueryBuilders.missingQuery("endtime")).should(QueryBuilders.rangeQuery("endtime").from(new Date().getTime())) ;
searchQueryBuilder.withHighlightFields(new HighlightBuilder.Field("title").fragmentSize(200));
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withFilter(QueryBuilders.boolQuery().must(beginFilter).must(endFilter)).withSort(new FieldSortBuilder("createtime").unmappedType("date").order(SortOrder.DESC)); SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps));
if (elasticsearchTemplate.indexExists(Topic.class)) {
pages = elasticsearchTemplate.queryForPage(searchQuery, Topic.class, new XiaoEUKResultMapper());
searchQueryBuilder.withHighlightFields(new HighlightBuilder.Field("title").fragmentSize(200)) ; }
SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps)) ; return pages;
if(elasticsearchTemplate.indexExists(Topic.class)){ }
pages = elasticsearchTemplate.queryForPage(searchQuery, Topic.class , new XiaoEUKResultMapper());
} @Override
return pages ; public Page<Topic> getTopicByCateAndUser(String cate , String q , String user ,final int p , final int ps) {
}
Page<Topic> pages = null ;
@Override
public Page<Topic> getTopicByCateAndUser(String cate , String q , String user ,final int p , final int ps) { BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(termQuery("cate" , cate)) ;
Page<Topic> pages = null ;
if (!StringUtils.isBlank(q)) {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND));
boolQueryBuilder.must(termQuery("cate" , cate)) ; }
if(!StringUtils.isBlank(q)){ NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withQuery(termQuery("creater", user)).withSort(new FieldSortBuilder("top").unmappedType("boolean").order(SortOrder.DESC)).withSort(new FieldSortBuilder("updatetime").unmappedType("date").order(SortOrder.DESC));
boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND)) ; SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps));
} if (elasticsearchTemplate.indexExists(Topic.class)) {
pages = elasticsearchTemplate.queryForPage(searchQuery, Topic.class, new XiaoEUKResultMapper());
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withQuery(termQuery("creater" , user)).withSort(new FieldSortBuilder("top").unmappedType("boolean").order(SortOrder.DESC)).withSort(new FieldSortBuilder("updatetime").unmappedType("date").order(SortOrder.DESC)); }
SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps)); return pages;
if(elasticsearchTemplate.indexExists(Topic.class)){ }
pages = elasticsearchTemplate.queryForPage(searchQuery, Topic.class, new XiaoEUKResultMapper());
} @SuppressWarnings("deprecation")
return pages ; @Override
} public Page<Topic> getTopicByCon(BoolQueryBuilder boolQueryBuilder, final int p , final int ps) {
@SuppressWarnings("deprecation") Page<Topic> pages = null;
@Override
public Page<Topic> getTopicByCon(BoolQueryBuilder boolQueryBuilder, final int p , final int ps) { QueryBuilder beginFilter = QueryBuilders.boolQuery().should(QueryBuilders.missingQuery("begintime")).should(QueryBuilders.rangeQuery("begintime").to(new Date().getTime()));
QueryBuilder endFilter = QueryBuilders.boolQuery().should(QueryBuilders.missingQuery("endtime")).should(QueryBuilders.rangeQuery("endtime").from(new Date().getTime()));
Page<Topic> pages = null ;
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withFilter(QueryBuilders.boolQuery().must(beginFilter).must(endFilter)).withSort(new FieldSortBuilder("createtime").unmappedType("date").order(SortOrder.DESC));
QueryBuilder beginFilter = QueryBuilders.boolQuery().should(QueryBuilders.missingQuery("begintime")).should(QueryBuilders.rangeQuery("begintime").to(new Date().getTime())) ; SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps));
QueryBuilder endFilter = QueryBuilders.boolQuery().should(QueryBuilders.missingQuery("endtime")).should(QueryBuilders.rangeQuery("endtime").from(new Date().getTime())) ; if (elasticsearchTemplate.indexExists(Topic.class)) {
pages = elasticsearchTemplate.queryForPage(searchQuery, Topic.class);
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withFilter(QueryBuilders.boolQuery().must(beginFilter).must(endFilter)).withSort(new FieldSortBuilder("createtime").unmappedType("date").order(SortOrder.DESC)); }
SearchQuery searchQuery = searchQueryBuilder.build().setPageable(new PageRequest(p, ps)) ; return pages;
if(elasticsearchTemplate.indexExists(Topic.class)){ }
pages = elasticsearchTemplate.queryForPage(searchQuery, Topic.class); @Override
} public List<Topic> getTopicByOrgi(String orgi , String type, String q) {
return pages ;
} List<Topic> list = null ;
@Override
public List<Topic> getTopicByOrgi(String orgi , String type, String q) { BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(termQuery("orgi" , orgi)) ;
List<Topic> list = null ;
if(!StringUtils.isBlank(type)){
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); boolQueryBuilder.must(termQuery("cate" , type)) ;
boolQueryBuilder.must(termQuery("orgi" , orgi)) ; }
if(!StringUtils.isBlank(type)){ if (!StringUtils.isBlank(q)) {
boolQueryBuilder.must(termQuery("cate" , type)) ; boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND));
} }
if(!StringUtils.isBlank(q)){ NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withSort(new FieldSortBuilder("top").unmappedType("boolean").order(SortOrder.DESC)).withSort(new FieldSortBuilder("updatetime").unmappedType("date").order(SortOrder.DESC));
boolQueryBuilder.must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND)) ; SearchQuery searchQuery = searchQueryBuilder.build();
} if (elasticsearchTemplate.indexExists(Topic.class)) {
list = elasticsearchTemplate.queryForList(searchQuery, Topic.class);
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withSort(new FieldSortBuilder("top").unmappedType("boolean").order(SortOrder.DESC)).withSort(new FieldSortBuilder("updatetime").unmappedType("date").order(SortOrder.DESC)); }
SearchQuery searchQuery = searchQueryBuilder.build(); return list;
if(elasticsearchTemplate.indexExists(Topic.class)){ }
list = elasticsearchTemplate.queryForList(searchQuery, Topic.class); }
}
return list ;
}
}

View File

@ -1,352 +1,352 @@
/* /*
* Copyright (C) 2017 优客服-多渠道客服系统 * Copyright (C) 2017 优客服-多渠道客服系统
* Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com> * Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com>
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package com.chatopera.cc.util.es; package com.chatopera.cc.util.es;
import com.chatopera.cc.basic.Constants; import com.chatopera.cc.basic.Constants;
import com.chatopera.cc.basic.MainContext; import com.chatopera.cc.basic.MainContext;
import com.chatopera.cc.model.FormFilter; import com.chatopera.cc.model.FormFilter;
import com.chatopera.cc.model.FormFilterItem; import com.chatopera.cc.model.FormFilterItem;
import com.chatopera.cc.model.MetadataTable; import com.chatopera.cc.model.MetadataTable;
import com.chatopera.cc.persistence.impl.ESDataExchangeImpl; import com.chatopera.cc.persistence.impl.ESDataExchangeImpl;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.Operator;
import org.elasticsearch.index.query.QueryStringQueryBuilder; import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryStringQueryBuilder.Operator; import org.elasticsearch.index.query.QueryStringQueryBuilder;
import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
import java.util.List; import java.util.List;
import static org.elasticsearch.index.query.QueryBuilders.rangeQuery; import static org.elasticsearch.index.query.QueryBuilders.rangeQuery;
import static org.elasticsearch.index.query.QueryBuilders.termQuery; import static org.elasticsearch.index.query.QueryBuilders.termQuery;
public class SearchTools { public class SearchTools {
public static PageImpl<UKDataBean> search(String orgi , FormFilter formFilter , List<FormFilterItem> itemList , MetadataTable metadataTable , boolean loadRef , int p, int ps){ public static PageImpl<UKDataBean> search(String orgi , FormFilter formFilter , List<FormFilterItem> itemList , MetadataTable metadataTable , boolean loadRef , int p, int ps){
BoolQueryBuilder queryBuilder = new BoolQueryBuilder(); BoolQueryBuilder queryBuilder = new BoolQueryBuilder();
queryBuilder.must(termQuery("orgi", orgi)) ; queryBuilder.must(termQuery("orgi", orgi)) ;
BoolQueryBuilder orBuilder = new BoolQueryBuilder(); BoolQueryBuilder orBuilder = new BoolQueryBuilder();
int orNums = 0 ; int orNums = 0 ;
for(FormFilterItem formFilterItem : itemList) { for(FormFilterItem formFilterItem : itemList) {
QueryBuilder tempQueryBuilder = null ; QueryBuilder tempQueryBuilder = null ;
if(formFilterItem.getField().equals("q")) { if(formFilterItem.getField().equals("q")) {
tempQueryBuilder = new QueryStringQueryBuilder(formFilterItem.getValue()).defaultOperator(Operator.AND) ; tempQueryBuilder = new QueryStringQueryBuilder(formFilterItem.getValue()).defaultOperator(Operator.AND) ;
}else { }else {
switch(formFilterItem.getCond()) { switch(formFilterItem.getCond()) {
case "01" : case "01":
tempQueryBuilder = rangeQuery(formFilterItem.getField()).from(formFilterItem.getValue()).includeLower(false) ; tempQueryBuilder = rangeQuery(formFilterItem.getField()).from(formFilterItem.getValue()).includeLower(false);
break ; break;
case "02" : case "02":
tempQueryBuilder = rangeQuery(formFilterItem.getField()).from(formFilterItem.getValue()).includeLower(true) ; tempQueryBuilder = rangeQuery(formFilterItem.getField()).from(formFilterItem.getValue()).includeLower(true);
break ; break;
case "03" : case "03":
tempQueryBuilder = rangeQuery(formFilterItem.getField()).to(formFilterItem.getValue()).includeUpper(false) ; tempQueryBuilder = rangeQuery(formFilterItem.getField()).to(formFilterItem.getValue()).includeUpper(false);
break ; break;
case "04" : case "04":
tempQueryBuilder = rangeQuery(formFilterItem.getField()).to(formFilterItem.getValue()).includeUpper(true) ; tempQueryBuilder = rangeQuery(formFilterItem.getField()).to(formFilterItem.getValue()).includeUpper(true);
break ; break;
case "05" : case "05":
tempQueryBuilder = termQuery(formFilterItem.getField() , formFilterItem.getValue()) ; tempQueryBuilder = termQuery(formFilterItem.getField(), formFilterItem.getValue());
break ; break;
case "06" : case "06":
tempQueryBuilder = termQuery(formFilterItem.getField() , formFilterItem.getValue()) ; tempQueryBuilder = termQuery(formFilterItem.getField(), formFilterItem.getValue());
break ; break;
case "07" : case "07":
tempQueryBuilder = new QueryStringQueryBuilder(formFilterItem.getValue()).field(formFilterItem.getField()).defaultOperator(Operator.AND) ; tempQueryBuilder = new QueryStringQueryBuilder(formFilterItem.getValue()).field(formFilterItem.getField()).defaultOperator(Operator.AND);
break ; break;
default : default:
break ; break;
} }
} }
if("AND".equalsIgnoreCase(formFilterItem.getComp())) { if("AND".equalsIgnoreCase(formFilterItem.getComp())) {
if("06".equals(formFilterItem.getCond())) { if("06".equals(formFilterItem.getCond())) {
queryBuilder.mustNot(tempQueryBuilder) ; queryBuilder.mustNot(tempQueryBuilder) ;
}else { }else {
queryBuilder.must(tempQueryBuilder) ; queryBuilder.must(tempQueryBuilder) ;
} }
}else { }else {
orNums ++ ; orNums ++ ;
if("06".equals(formFilterItem.getCond())) { if("06".equals(formFilterItem.getCond())) {
orBuilder.mustNot(tempQueryBuilder) ; orBuilder.mustNot(tempQueryBuilder) ;
}else { }else {
orBuilder.should(tempQueryBuilder) ; orBuilder.should(tempQueryBuilder) ;
} }
} }
} }
if(orNums > 0) { if(orNums > 0) {
queryBuilder.must(orBuilder) ; queryBuilder.must(orBuilder) ;
} }
return search(queryBuilder, metadataTable, loadRef, p, ps); return search(queryBuilder, metadataTable, loadRef, p, ps);
} }
public static PageImpl<UKDataBean> dissearch(String orgi , FormFilter formFilter , List<FormFilterItem> itemList , MetadataTable metadataTable , int p, int ps){ public static PageImpl<UKDataBean> dissearch(String orgi , FormFilter formFilter , List<FormFilterItem> itemList , MetadataTable metadataTable , int p, int ps){
BoolQueryBuilder queryBuilder = new BoolQueryBuilder(); BoolQueryBuilder queryBuilder = new BoolQueryBuilder();
queryBuilder.must(termQuery("orgi", orgi)) ; queryBuilder.must(termQuery("orgi", orgi)) ;
queryBuilder.must(termQuery("status", MainContext.NamesDisStatusType.NOT.toString())) ; queryBuilder.must(termQuery("status", MainContext.NamesDisStatusType.NOT.toString())) ;
queryBuilder.must(termQuery("validresult", "valid")) ; queryBuilder.must(termQuery("validresult", "valid")) ;
BoolQueryBuilder orBuilder = new BoolQueryBuilder(); BoolQueryBuilder orBuilder = new BoolQueryBuilder();
int orNums = 0 ; int orNums = 0 ;
for(FormFilterItem formFilterItem : itemList) { for(FormFilterItem formFilterItem : itemList) {
QueryBuilder tempQueryBuilder = null ; QueryBuilder tempQueryBuilder = null ;
if(formFilterItem.getField().equals("q")) { if(formFilterItem.getField().equals("q")) {
tempQueryBuilder = new QueryStringQueryBuilder(formFilterItem.getValue()).defaultOperator(Operator.AND) ; tempQueryBuilder = new QueryStringQueryBuilder(formFilterItem.getValue()).defaultOperator(Operator.AND) ;
}else { }else {
switch(formFilterItem.getCond()) { switch(formFilterItem.getCond()) {
case "01" : case "01":
tempQueryBuilder = rangeQuery(formFilterItem.getField()).from(formFilterItem.getValue()).includeLower(false) ; tempQueryBuilder = rangeQuery(formFilterItem.getField()).from(formFilterItem.getValue()).includeLower(false);
break ; break;
case "02" : case "02":
tempQueryBuilder = rangeQuery(formFilterItem.getField()).from(formFilterItem.getValue()).includeLower(true) ; tempQueryBuilder = rangeQuery(formFilterItem.getField()).from(formFilterItem.getValue()).includeLower(true);
break ; break;
case "03" : case "03":
tempQueryBuilder = rangeQuery(formFilterItem.getField()).to(formFilterItem.getValue()).includeUpper(false) ; tempQueryBuilder = rangeQuery(formFilterItem.getField()).to(formFilterItem.getValue()).includeUpper(false);
break ; break;
case "04" : case "04":
tempQueryBuilder = rangeQuery(formFilterItem.getField()).to(formFilterItem.getValue()).includeUpper(true) ; tempQueryBuilder = rangeQuery(formFilterItem.getField()).to(formFilterItem.getValue()).includeUpper(true);
break ; break;
case "05" : case "05":
tempQueryBuilder = termQuery(formFilterItem.getField() , formFilterItem.getValue()) ; tempQueryBuilder = termQuery(formFilterItem.getField(), formFilterItem.getValue());
break ; break;
case "06" : case "06":
tempQueryBuilder = termQuery(formFilterItem.getField() , formFilterItem.getValue()) ; tempQueryBuilder = termQuery(formFilterItem.getField(), formFilterItem.getValue());
break ; break;
case "07" : case "07":
tempQueryBuilder = new QueryStringQueryBuilder(formFilterItem.getValue()).field(formFilterItem.getField()).defaultOperator(Operator.AND) ; tempQueryBuilder = new QueryStringQueryBuilder(formFilterItem.getValue()).field(formFilterItem.getField()).defaultOperator(Operator.AND);
break ; break;
default : default:
break ; break;
} }
} }
if("AND".equalsIgnoreCase(formFilterItem.getComp())) { if("AND".equalsIgnoreCase(formFilterItem.getComp())) {
if("06".equals(formFilterItem.getCond())) { if("06".equals(formFilterItem.getCond())) {
queryBuilder.mustNot(tempQueryBuilder) ; queryBuilder.mustNot(tempQueryBuilder) ;
}else { }else {
queryBuilder.must(tempQueryBuilder) ; queryBuilder.must(tempQueryBuilder) ;
} }
}else { }else {
orNums ++ ; orNums ++ ;
if("06".equals(formFilterItem.getCond())) { if("06".equals(formFilterItem.getCond())) {
orBuilder.mustNot(tempQueryBuilder) ; orBuilder.mustNot(tempQueryBuilder) ;
}else { }else {
orBuilder.should(tempQueryBuilder) ; orBuilder.should(tempQueryBuilder) ;
} }
} }
} }
if(orNums > 0) { if(orNums > 0) {
queryBuilder.must(orBuilder) ; queryBuilder.must(orBuilder) ;
} }
return search(queryBuilder, metadataTable, false, p, ps); return search(queryBuilder, metadataTable, false, p, ps);
} }
public static PageImpl<UKDataBean> recoversearch(String orgi , String cmd ,String id, MetadataTable metadataTable , int p, int ps){ public static PageImpl<UKDataBean> recoversearch(String orgi , String cmd ,String id, MetadataTable metadataTable , int p, int ps){
BoolQueryBuilder queryBuilder = new BoolQueryBuilder(); BoolQueryBuilder queryBuilder = new BoolQueryBuilder();
queryBuilder.must(termQuery("orgi", orgi)) ; queryBuilder.must(termQuery("orgi", orgi)) ;
queryBuilder.mustNot(termQuery("status", MainContext.NamesDisStatusType.NOT.toString())) ; queryBuilder.mustNot(termQuery("status", MainContext.NamesDisStatusType.NOT.toString())) ;
queryBuilder.must(termQuery("validresult", "valid")) ; queryBuilder.must(termQuery("validresult", "valid")) ;
switch(cmd) { switch(cmd) {
case "actid" : queryBuilder.must(termQuery("actid", id)) ; break ; case "actid" : queryBuilder.must(termQuery("actid", id)) ; break ;
case "batid" : queryBuilder.must(termQuery("batid", id)) ; break ; case "batid" : queryBuilder.must(termQuery("batid", id)) ; break ;
case "taskid" : queryBuilder.must(termQuery("taskid", id)) ; break ; case "taskid" : queryBuilder.must(termQuery("taskid", id)) ; break ;
case "filterid" : queryBuilder.must(termQuery("filterid", id)) ; break ; case "filterid" : queryBuilder.must(termQuery("filterid", id)) ; break ;
case "agent" : queryBuilder.must(termQuery(Constants.CSKEFU_SYSTEM_DIS_AGENT, id)) ; break ; case "agent" : queryBuilder.must(termQuery(Constants.CSKEFU_SYSTEM_DIS_AGENT, id)) ; break ;
case "skill" : queryBuilder.must(termQuery(Constants.CSKEFU_SYSTEM_DIS_ORGAN, id)) ; break ; case "skill" : queryBuilder.must(termQuery(Constants.CSKEFU_SYSTEM_DIS_ORGAN, id)) ; break ;
case "taskskill" : queryBuilder.must(termQuery("taskid", id)).must(termQuery("status", MainContext.NamesDisStatusType.DISAGENT.toString())) ; break ; case "taskskill" : queryBuilder.must(termQuery("taskid", id)).must(termQuery("status", MainContext.NamesDisStatusType.DISAGENT.toString())) ; break ;
case "filterskill" : queryBuilder.must(termQuery("filterid", id)).must(termQuery("status", MainContext.NamesDisStatusType.DISAGENT.toString())) ; break ; case "filterskill" : queryBuilder.must(termQuery("filterid", id)).must(termQuery("status", MainContext.NamesDisStatusType.DISAGENT.toString())) ; break ;
default : queryBuilder.must(termQuery("actid", "NOT_EXIST_KEY")) ; //必须传入一个进来; default : queryBuilder.must(termQuery("actid", "NOT_EXIST_KEY")) ; //必须传入一个进来;
} }
return search(queryBuilder, metadataTable, false, p, ps); return search(queryBuilder, metadataTable, false, p, ps);
} }
/**
* /**
* @param orgi * @param orgi
* @param agent * @param agent
* @param p * @param p
* @param ps * @param ps
* @return * @return
*/ */
public static PageImpl<UKDataBean> agentsearch(String orgi ,boolean excludeCalled , String agent , int p, int ps){ public static PageImpl<UKDataBean> agentsearch(String orgi ,boolean excludeCalled , String agent , int p, int ps){
BoolQueryBuilder queryBuilder = new BoolQueryBuilder(); BoolQueryBuilder queryBuilder = new BoolQueryBuilder();
queryBuilder.must(termQuery("orgi", orgi)) ; queryBuilder.must(termQuery("orgi", orgi)) ;
if(excludeCalled){ if(excludeCalled){
queryBuilder.must(termQuery("callstatus", MainContext.NameStatusType.NOTCALL.toString())) ; queryBuilder.must(termQuery("callstatus", MainContext.NameStatusType.NOTCALL.toString())) ;
} }
queryBuilder.must(termQuery("validresult", "valid")) ; queryBuilder.must(termQuery("validresult", "valid")) ;
queryBuilder.must(termQuery(Constants.CSKEFU_SYSTEM_DIS_AGENT, agent)) ; queryBuilder.must(termQuery(Constants.CSKEFU_SYSTEM_DIS_AGENT, agent)) ;
queryBuilder.must(termQuery("status", MainContext.NamesDisStatusType.DISAGENT.toString())) ; queryBuilder.must(termQuery("status", MainContext.NamesDisStatusType.DISAGENT.toString())) ;
return search(queryBuilder, p, ps); return search(queryBuilder, p, ps);
} }
/** /**
* *
* @param orgi * @param orgi
* @param agent * @param agent
* @param p * @param p
* @param ps * @param ps
* @return * @return
*/ */
public static PageImpl<UKDataBean> agentapsearch(String orgi , String agent , int p, int ps){ public static PageImpl<UKDataBean> agentapsearch(String orgi , String agent , int p, int ps){
BoolQueryBuilder queryBuilder = new BoolQueryBuilder(); BoolQueryBuilder queryBuilder = new BoolQueryBuilder();
queryBuilder.must(termQuery("orgi", orgi)) ; queryBuilder.must(termQuery("orgi", orgi)) ;
queryBuilder.must(termQuery("validresult", "valid")) ; queryBuilder.must(termQuery("validresult", "valid")) ;
queryBuilder.must(termQuery(Constants.CSKEFU_SYSTEM_DIS_AGENT, agent)) ; queryBuilder.must(termQuery(Constants.CSKEFU_SYSTEM_DIS_AGENT, agent)) ;
queryBuilder.must(termQuery("apstatus", true)) ; //预约状态 queryBuilder.must(termQuery("apstatus", true)) ; //预约状态
queryBuilder.must(rangeQuery("aptime").to(System.currentTimeMillis())) ; //预约状态 queryBuilder.must(rangeQuery("aptime").to(System.currentTimeMillis())) ; //预约状态
return search(queryBuilder, p, ps); return search(queryBuilder, p, ps);
} }
/** /**
* *
* @param orgi * @param orgi
* @param agent * @param agent
* @param p * @param p
* @param ps * @param ps
* @return * @return
*/ */
public static PageImpl<UKDataBean> aisearch(String orgi , int p, int ps){ public static PageImpl<UKDataBean> aisearch(String orgi , int p, int ps){
BoolQueryBuilder queryBuilder = new BoolQueryBuilder(); BoolQueryBuilder queryBuilder = new BoolQueryBuilder();
queryBuilder.must(termQuery("orgi", orgi)) ; queryBuilder.must(termQuery("orgi", orgi)) ;
queryBuilder.must(termQuery("callstatus", MainContext.NameStatusType.NOTCALL.toString())) ; queryBuilder.must(termQuery("callstatus", MainContext.NameStatusType.NOTCALL.toString())) ;
queryBuilder.must(termQuery("validresult", "valid")) ; queryBuilder.must(termQuery("validresult", "valid")) ;
queryBuilder.must(termQuery("status", MainContext.NamesDisStatusType.DISAI.toString())) ; queryBuilder.must(termQuery("status", MainContext.NamesDisStatusType.DISAI.toString())) ;
return search(queryBuilder, p, ps); return search(queryBuilder, p, ps);
} }
/**
/** *
* * @param orgi
* @param orgi * @param agent
* @param agent * @param p
* @param p * @param ps
* @param ps * @return
* @return */
*/ public static PageImpl<UKDataBean> namesearch(String orgi , String phonenum){
public static PageImpl<UKDataBean> namesearch(String orgi , String phonenum){ BoolQueryBuilder queryBuilder = new BoolQueryBuilder();
BoolQueryBuilder queryBuilder = new BoolQueryBuilder(); queryBuilder.must(termQuery("orgi", orgi)) ;
queryBuilder.must(termQuery("orgi", orgi)) ; queryBuilder.must(termQuery("validresult", "valid")) ;
queryBuilder.must(termQuery("validresult", "valid")) ; queryBuilder.must(termQuery("status", MainContext.NamesDisStatusType.DISAGENT.toString())) ;
queryBuilder.must(termQuery("status", MainContext.NamesDisStatusType.DISAGENT.toString())) ; StringBuffer strb = new StringBuffer();
StringBuffer strb = new StringBuffer(); if(!StringUtils.isBlank(phonenum)) {
if(!StringUtils.isBlank(phonenum)) { strb.append(phonenum) ;
strb.append(phonenum) ; if(phonenum.startsWith("0")) {
if(phonenum.startsWith("0")) { strb.append(" ").append(phonenum.substring(1)) ;
strb.append(" ").append(phonenum.substring(1)) ; }
} }else {
}else { strb.append(Constants.CSKEFU_SYSTEM_NO_DAT) ;
strb.append(Constants.CSKEFU_SYSTEM_NO_DAT) ; }
} queryBuilder.must(new QueryStringQueryBuilder(strb.toString()).defaultOperator(Operator.OR) );
queryBuilder.must(new QueryStringQueryBuilder(strb.toString()).defaultOperator(Operator.OR) ); return search(queryBuilder, 0, 1);
return search(queryBuilder,0, 1); }
}
/**
/** *
* * @param orgi
* @param orgi * @param agent
* @param agent * @param p
* @param p * @param ps
* @param ps * @return
* @return */
*/ public static PageImpl<UKDataBean> search(BoolQueryBuilder queryBuilder, int p, int ps){
public static PageImpl<UKDataBean> search(BoolQueryBuilder queryBuilder, int p, int ps){ return search(queryBuilder, null, true, p, ps);
return search(queryBuilder, null, true, p, ps); }
}
/** /**
* *
* @param queryBuilder * @param queryBuilder
* @param metadataTable * @param metadataTable
* @param loadRef * @param loadRef
* @param p * @param p
* @param ps * @param ps
* @return * @return
*/ */
private static PageImpl<UKDataBean> search(BoolQueryBuilder queryBuilder , MetadataTable metadataTable , boolean loadRef , int p, int ps){ private static PageImpl<UKDataBean> search(BoolQueryBuilder queryBuilder , MetadataTable metadataTable , boolean loadRef , int p, int ps){
ESDataExchangeImpl esDataExchange = MainContext.getContext().getBean(ESDataExchangeImpl.class); ESDataExchangeImpl esDataExchange = MainContext.getContext().getBean(ESDataExchangeImpl.class);
return esDataExchange.findPageResult(queryBuilder, Constants.SYSTEM_INDEX, metadataTable, new PageRequest(p, ps , Sort.Direction.ASC, "createtime") , loadRef) ; return esDataExchange.findPageResult(queryBuilder, Constants.SYSTEM_INDEX, metadataTable, new PageRequest(p, ps , Sort.Direction.ASC, "createtime") , loadRef);
} }
/** /**
* *
* @param queryBuilder * @param queryBuilder
* @param metadataTable * @param metadataTable
* @param loadRef * @param loadRef
* @param p * @param p
* @param ps * @param ps
* @return * @return
*/ */
public static PageImpl<UKDataBean> aggregation(BoolQueryBuilder queryBuilder , String aggField, boolean loadRef , int p, int ps){ public static PageImpl<UKDataBean> aggregation(BoolQueryBuilder queryBuilder , String aggField, boolean loadRef , int p, int ps){
ESDataExchangeImpl esDataExchange = MainContext.getContext().getBean(ESDataExchangeImpl.class); ESDataExchangeImpl esDataExchange = MainContext.getContext().getBean(ESDataExchangeImpl.class);
return esDataExchange.findAllPageAggResult(queryBuilder , aggField , new PageRequest(p, ps , Sort.Direction.ASC, "createtime") , loadRef , null) ; return esDataExchange.findAllPageAggResult(queryBuilder , aggField , new PageRequest(p, ps , Sort.Direction.ASC, "createtime") , loadRef , null);
} }
/** /**
* *
* @param queryBuilder * @param queryBuilder
* @param metadataTable * @param metadataTable
* @param loadRef * @param loadRef
* @param p * @param p
* @param ps * @param ps
* @return * @return
*/ */
public static UKDataBean get(UKDataBean dataBean){ public static UKDataBean get(UKDataBean dataBean){
ESDataExchangeImpl esDataExchange = MainContext.getContext().getBean(ESDataExchangeImpl.class); ESDataExchangeImpl esDataExchange = MainContext.getContext().getBean(ESDataExchangeImpl.class);
return esDataExchange.getIObjectByPK(dataBean, dataBean.getId()); return esDataExchange.getIObjectByPK(dataBean, dataBean.getId());
} }
/** /**
* *
* @param queryBuilder * @param queryBuilder
* @param metadataTable * @param metadataTable
* @param loadRef * @param loadRef
* @param p * @param p
* @param ps * @param ps
* @return * @return
*/ */
public static UKDataBean get(String type, String id){ public static UKDataBean get(String type, String id){
ESDataExchangeImpl esDataExchange = MainContext.getContext().getBean(ESDataExchangeImpl.class); ESDataExchangeImpl esDataExchange = MainContext.getContext().getBean(ESDataExchangeImpl.class);
return esDataExchange.getIObjectByPK(type, id); return esDataExchange.getIObjectByPK(type, id);
} }
/** /**
* *
* @param queryBuilder * @param queryBuilder
* @param metadataTable * @param metadataTable
* @param loadRef * @param loadRef
* @param p * @param p
* @param ps * @param ps
* @return * @return
*/ */
public static void save(UKDataBean dataBean){ public static void save(UKDataBean dataBean){
ESDataExchangeImpl esDataExchange = MainContext.getContext().getBean(ESDataExchangeImpl.class); ESDataExchangeImpl esDataExchange = MainContext.getContext().getBean(ESDataExchangeImpl.class);
try { try {
esDataExchange.saveIObject(dataBean); esDataExchange.saveIObject(dataBean);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
} }