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

View File

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

View File

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

View File

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

View File

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

View File

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