diff --git a/contact-center/app/src/main/java/com/chatopera/cc/basic/resource/ActivityResource.java b/contact-center/app/src/main/java/com/chatopera/cc/basic/resource/ActivityResource.java index 54e60bf0..1722917a 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/basic/resource/ActivityResource.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/basic/resource/ActivityResource.java @@ -100,7 +100,7 @@ public class ActivityResource extends Resource { //回收数据 , 需要传入回收的目标 : 包括 批次ID,任务ID,筛选ID,活动ID dataList = SearchTools.recoversearch(this.jobDetail.getOrgi(), this.jobDetail.getExectype(), this.jobDetail.getExectarget(), metadataTable, (int) Math.ceil(this.jobDetail.getStartindex() / 50000.0), 50000); } else { - dataList = SearchTools.dissearch(this.jobDetail.getOrgi(), formFilter, formFilterList, metadataTable, (int) Math.ceil(this.jobDetail.getStartindex() / 50000.0), 50000); + dataList = SearchTools.dissearch(this.jobDetail.getOrgi(), formFilterList, metadataTable, (int) Math.ceil(this.jobDetail.getStartindex() / 50000.0), 50000); } } this.callAgentList = MainContext.getContext().getBean(CallAgentRepository.class).findByActidAndOrgi(this.jobDetail.getId(), this.jobDetail.getOrgi()); diff --git a/contact-center/app/src/main/java/com/chatopera/cc/persistence/impl/ESDataExchangeImpl.java b/contact-center/app/src/main/java/com/chatopera/cc/persistence/impl/ESDataExchangeImpl.java index 87f0febf..b9c08919 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/persistence/impl/ESDataExchangeImpl.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/persistence/impl/ESDataExchangeImpl.java @@ -1,462 +1,395 @@ -/* - * Copyright (C) 2017 优客服-多渠道客服系统 - * Modifications copyright (C) 2018-2019 Chatopera Inc, - * - * 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.impl; - -import com.chatopera.cc.basic.Constants; -import com.chatopera.cc.basic.MainContext; -import com.chatopera.cc.model.*; -import com.chatopera.cc.persistence.repository.OrganRepository; -import com.chatopera.cc.persistence.repository.UKefuCallOutTaskRepository; -import com.chatopera.cc.persistence.repository.UserRepository; -import com.chatopera.cc.util.es.UKDataBean; -import org.apache.commons.lang3.StringUtils; -import org.elasticsearch.action.bulk.BulkRequestBuilder; -import org.elasticsearch.action.get.GetResponse; -import org.elasticsearch.action.index.IndexRequestBuilder; -import org.elasticsearch.action.search.SearchRequestBuilder; -import org.elasticsearch.action.search.SearchResponse; -import org.elasticsearch.action.search.SearchType; -import org.elasticsearch.index.query.QueryBuilder; -import org.elasticsearch.search.SearchHit; -import org.elasticsearch.search.aggregations.Aggregation; -import org.elasticsearch.search.aggregations.AggregationBuilder; -import org.elasticsearch.search.aggregations.AggregationBuilders; -import org.elasticsearch.search.aggregations.bucket.histogram.InternalDateHistogram; -import org.elasticsearch.search.aggregations.bucket.terms.StringTerms; -import org.elasticsearch.search.aggregations.bucket.terms.Terms; -import org.elasticsearch.search.sort.FieldSortBuilder; -import org.elasticsearch.search.sort.SortOrder; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort.Order; -import org.springframework.stereotype.Repository; - -import java.util.*; - -@Repository("esdataservice") -public class ESDataExchangeImpl{ - - @Autowired - private UserRepository userRes ; - - @Autowired - private UKefuCallOutTaskRepository taskRes ; - - @Autowired - private OrganRepository organRes ; - - public void saveIObject(UKDataBean dataBean) throws Exception { - if(dataBean.getId() == null) { - dataBean.setId((String) dataBean.getValues().get("id")); - } - this.saveBulk(dataBean).execute().actionGet() ; - } - /** - * 实时刷新,仅限于 回收到部门和回收到 公共使用,其他地方禁用 - * @param dataBean - * @param refresh - * @throws Exception - */ - public void saveIObject(UKDataBean dataBean , boolean refresh) throws Exception { - if(dataBean.getId() == null) { - dataBean.setId((String) dataBean.getValues().get("id")); - } - this.saveBulk(dataBean).setRefresh(refresh).execute().actionGet() ; - } - /** - * @param dataBean - * @return - * @throws Exception - */ - public IndexRequestBuilder saveBulk(UKDataBean dataBean) throws Exception { - IndexRequestBuilder indexRequestBuilder ; - if(dataBean.getId() == null) { - dataBean.setId((String) dataBean.getValues().get("id")); - } - if(!StringUtils.isBlank(dataBean.getType())) { - indexRequestBuilder = MainContext.getTemplet().getClient().prepareIndex(Constants.SYSTEM_INDEX, - dataBean.getType(), dataBean.getId()) - .setSource(processValues(dataBean)); - }else { - indexRequestBuilder = MainContext.getTemplet().getClient().prepareIndex(Constants.SYSTEM_INDEX, - dataBean.getTable().getTablename(), dataBean.getId()) - .setSource(processValues(dataBean)); - } - return indexRequestBuilder ; - } - /** - * 处理数据,包含 自然语言处理算法计算 智能处理字段 - * @param dataBean - * @return - * @throws Exception - */ - private Map processValues(UKDataBean dataBean) throws Exception{ - Map values = new HashMap() ; - if(dataBean.getTable()!=null) { - for(TableProperties tp : dataBean.getTable().getTableproperty()){ - if(dataBean.getValues().get(tp.getFieldname())!=null){ - values.put(tp.getFieldname(), dataBean.getValues().get(tp.getFieldname())) ; - }else if(tp.getDatatypename().equals("nlp") && dataBean.getValues()!=null){ - //智能处理, 需要计算过滤HTML内容,自动获取关键词、摘要、实体识别、情感分析、信息指纹 等功能 - values.put(tp.getFieldname(), dataBean.getValues().get(tp.getFieldname())) ; - }else{ - values.put(tp.getFieldname(), dataBean.getValues().get(tp.getFieldname())) ; - } - } - }else { - values.putAll(dataBean.getValues()); - } - return values ; - } - - public void deleteIObject(UKDataBean dataBean ) throws Exception { - if(dataBean.getTable()!=null){ - MainContext.getTemplet().getClient().prepareDelete(Constants.SYSTEM_INDEX, dataBean.getTable().getTablename(), dataBean.getId()).setRefresh(true).execute().actionGet(); - } - } - /** - * 批量删除,单次最大删除 10000条 - * @param query - * @param index - * @param type - * @throws Exception - */ - public void deleteByCon(QueryBuilder query ,String type) throws Exception { - BulkRequestBuilder bulkRequest = MainContext.getTemplet().getClient().prepareBulk(); - SearchResponse response = MainContext.getTemplet().getClient().prepareSearch(Constants.SYSTEM_INDEX).setTypes(type) - .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) - .setQuery(query) - .setFrom(0).setSize(10000).setExplain(true).execute().actionGet(); - if(response.getHits().getTotalHits() > 0) { - for(SearchHit hit : response.getHits()){ - String id = hit.getId(); - bulkRequest.add(MainContext.getTemplet().getClient().prepareDelete(Constants.SYSTEM_INDEX, type, id).request()); - } - bulkRequest.get(); - } - } - - public void deleteById(String type , String id){ - if(!StringUtils.isBlank(type) && !StringUtils.isBlank(id)){ - MainContext.getTemplet().getClient() - .prepareDelete(Constants.SYSTEM_INDEX, type, id).execute().actionGet(); - } - } - - - public UKDataBean getIObjectByPK(UKDataBean dataBean , String id) { - if(dataBean.getTable()!=null){ - GetResponse getResponse = MainContext.getTemplet().getClient() - .prepareGet(Constants.SYSTEM_INDEX, - dataBean.getTable().getTablename(), dataBean.getId()) - .execute().actionGet(); - dataBean.setValues(getResponse.getSource()); - dataBean.setType(getResponse.getType()); - }else{ - dataBean.setValues(new HashMap()); - } - - return processDate(dataBean); - } - - public UKDataBean getIObjectByPK(String type , String id) { - UKDataBean dataBean = new UKDataBean() ; - if(!StringUtils.isBlank(type)){ - GetResponse getResponse = MainContext.getTemplet().getClient() - .prepareGet(Constants.SYSTEM_INDEX, - type, id) - .execute().actionGet(); - dataBean.setValues(getResponse.getSource()); - dataBean.setType(getResponse.getType()); - }else{ - dataBean.setValues(new HashMap()); - } - return dataBean; - } - - public void updateIObject(UKDataBean dataBean) throws Exception { - if(dataBean.getId() == null) { - dataBean.setId((String) dataBean.getValues().get("id")); - } - UKDataBean oldDataBean = this.getIObjectByPK(dataBean , dataBean.getId()); - - for(TableProperties tp : dataBean.getTable().getTableproperty()){ - if(oldDataBean.getValues()!=null&&oldDataBean.getValues().get(tp.getFieldname())!=null){ - if(dataBean.getValues().get(tp.getFieldname())==null){ - dataBean.getValues().put(tp.getFieldname(), oldDataBean.getValues().get(tp.getFieldname())) ; - } - } - } - MainContext.getTemplet().getClient() - .prepareUpdate(Constants.SYSTEM_INDEX, - dataBean.getTable().getTablename(), dataBean.getId()).setDoc(processValues(dataBean)).execute().actionGet(); - } - - /** - * - * @param dataBean - * @param ps - * @param start - * @return - */ - public PageImpl findPageResult(QueryBuilder query,String index ,MetadataTable metadata, Pageable page , boolean loadRef) { - return findAllPageResult(query, index, metadata, page, loadRef, metadata!=null ? metadata.getTablename() : null); - } - - /** - * - * @param dataBean - * @param ps - * @param start - * @return - */ - public PageImpl findAllPageResult(QueryBuilder query,String index ,MetadataTable metadata, Pageable page , boolean loadRef , String types) { - List dataBeanList = new ArrayList() ; - SearchRequestBuilder searchBuilder = MainContext.getTemplet().getClient().prepareSearch(Constants.SYSTEM_INDEX); - if(!StringUtils.isBlank(types)) { - searchBuilder.setTypes(types) ; - } - - int start = page.getPageSize() * page.getPageNumber(); - searchBuilder.setFrom(start).setSize(page.getPageSize()); - if(page!=null && page.getSort()!=null) { - Iterator iterator = page.getSort().iterator(); - while(iterator.hasNext()) { - Order order = iterator.next() ; - searchBuilder.addSort(new FieldSortBuilder(order.getProperty()).unmappedType(order.getProperty().equals("createtime")? "long" : "string").order( order.isDescending() ? SortOrder.DESC : SortOrder.ASC)) ; - } - } - SearchResponse response = searchBuilder.setQuery(query).execute().actionGet(); - List users = new ArrayList() , organs = new ArrayList() , taskList = new ArrayList(),batchList = new ArrayList(),activityList = new ArrayList(); - for(SearchHit hit : response.getHits().getHits()){ - UKDataBean temp = new UKDataBean() ; - temp.setType(hit.getType()); - temp.setTable(metadata); - temp.setValues(hit.getSource()); - temp.setId((String)temp.getValues().get("id")); - dataBeanList.add(processDate(temp)) ; - - - if(loadRef == true) { - if(!StringUtils.isBlank((String)temp.getValues().get(Constants.CSKEFU_SYSTEM_DIS_AGENT))) { - users.add((String)temp.getValues().get(Constants.CSKEFU_SYSTEM_DIS_AGENT)) ; - } - if(!StringUtils.isBlank((String)temp.getValues().get(Constants.CSKEFU_SYSTEM_ASSUSER))) { - users.add((String)temp.getValues().get(Constants.CSKEFU_SYSTEM_ASSUSER)) ; - } - if(!StringUtils.isBlank((String)temp.getValues().get(Constants.CSKEFU_SYSTEM_DIS_ORGAN))) { - organs.add((String)temp.getValues().get(Constants.CSKEFU_SYSTEM_DIS_ORGAN)) ; - } - if(!StringUtils.isBlank((String)temp.getValues().get("taskid"))) { - taskList.add((String)temp.getValues().get("taskid")) ; - } - if(!StringUtils.isBlank((String)temp.getValues().get("batid"))) { - batchList.add((String)temp.getValues().get("batid")) ; - } - if(!StringUtils.isBlank((String)temp.getValues().get("actid"))) { - activityList.add((String)temp.getValues().get("actid")) ; - } - } - } - if(loadRef) { - if(users.size() > 0) { - List userList = userRes.findAll(users) ; - for(UKDataBean dataBean : dataBeanList) { - String userid = (String)dataBean.getValues().get(Constants.CSKEFU_SYSTEM_DIS_AGENT) ; - if(!StringUtils.isBlank(userid)) { - for(User user : userList) { - if(user.getId().equals(userid)) { - dataBean.setUser(user); - break ; - } - } - } - String assuer = (String)dataBean.getValues().get(Constants.CSKEFU_SYSTEM_ASSUSER) ; - if(!StringUtils.isBlank(assuer)) { - for(User user : userList) { - if(user.getId().equals(assuer)) { - dataBean.setAssuser(user); - break ; - } - } - } - } - } - if(organs.size() > 0) { - List organList = organRes.findAll(organs) ; - for(UKDataBean dataBean : dataBeanList) { - String organid = (String)dataBean.getValues().get(Constants.CSKEFU_SYSTEM_DIS_ORGAN) ; - if(!StringUtils.isBlank(organid)) { - for(Organ organ : organList) { - if(organ.getId().equals(organid)) { - dataBean.setOrgan(organ); - break ; - } - } - } - } - } - if(taskList.size() > 0) { - List ukefuCallOutTaskList = taskRes.findAll(taskList) ; - for(UKDataBean dataBean : dataBeanList) { - String taskid = (String)dataBean.getValues().get("taskid") ; - if(!StringUtils.isBlank(taskid)) { - for(UKefuCallOutTask task : ukefuCallOutTaskList) { - if(task.getId().equals(taskid)) { - dataBean.setTask(task); - break ; - } - } - } - } - } - } - return new PageImpl(dataBeanList,page , (int)response.getHits().getTotalHits()); - } - - - /** - * - * @param dataBean - * @param ps - * @param start - * @return - */ - public PageImpl findAllPageAggResult(QueryBuilder query,String aggField,Pageable page , boolean loadRef , String types) { - List dataBeanList = new ArrayList() ; - SearchRequestBuilder searchBuilder = MainContext.getTemplet().getClient().prepareSearch(Constants.SYSTEM_INDEX); - if(!StringUtils.isBlank(types)) { - searchBuilder.setTypes(types) ; - } - - int size = page.getPageSize() * (page.getPageNumber() + 1); - searchBuilder.setFrom(0).setSize(0); - - AggregationBuilder aggregition = AggregationBuilders.terms(aggField).field(aggField).size(size) ; - aggregition.subAggregation(AggregationBuilders.terms("apstatus").field("apstatus")) ; - aggregition.subAggregation(AggregationBuilders.terms("callstatus").field("callstatus")) ; - - searchBuilder.addAggregation(aggregition) ; - - - SearchResponse response = searchBuilder.setQuery(query).execute().actionGet(); - List users = new ArrayList() , organs = new ArrayList() , taskList = new ArrayList(),batchList = new ArrayList(),activityList = new ArrayList(); - - if(response.getAggregations().get(aggField) instanceof Terms){ - Terms agg = response.getAggregations().get(aggField) ; - if(agg!=null){ - if(loadRef == true) { - if(aggField.equals(Constants.CSKEFU_SYSTEM_DIS_AGENT)) { - users.add(agg.getName()) ; - } - if(aggField.equals(Constants.CSKEFU_SYSTEM_DIS_ORGAN)) { - organs.add(agg.getName()) ; - } - if(aggField.equals("taskid")) { - taskList.add(agg.getName()) ; - } - if(aggField.equals("batid")) { - batchList.add(agg.getName()) ; - } - if(aggField.equals("actid")) { - activityList.add(agg.getName()) ; - } - } - if(agg.getBuckets()!=null && agg.getBuckets().size()>0){ - for (Terms.Bucket entry : agg.getBuckets()) { - UKDataBean dataBean = new UKDataBean(); - dataBean.getValues().put("id", entry.getKeyAsString()) ; - dataBean.getValues().put(aggField, entry.getKeyAsString()) ; - dataBean.setId(agg.getName()); - dataBean.setType(aggField); - dataBean.getValues().put("total", entry.getDocCount()) ; - - for (Aggregation temp : entry.getAggregations()) { - if(temp instanceof StringTerms) { - StringTerms agg2 = (StringTerms) temp ; - for (Terms.Bucket entry2 : agg2.getBuckets()) { - dataBean.getValues().put(temp.getName()+"."+entry2.getKeyAsString(), entry2.getDocCount()) ; - } - } - } - dataBeanList.add(dataBean) ; - } - } - } - }else if(response.getAggregations().get(aggField) instanceof InternalDateHistogram){ -// InternalDateHistogram agg = response.getAggregations().get(aggField) ; -// long total = response.getHits().getTotalHits() ; - } - - if(loadRef) { - if(users.size() > 0) { - List userList = userRes.findAll(users) ; - for(UKDataBean dataBean : dataBeanList) { - String userid = (String)dataBean.getValues().get(Constants.CSKEFU_SYSTEM_DIS_AGENT) ; - if(!StringUtils.isBlank(userid)) { - for(User user : userList) { - if(user.getId().equals(userid)) { - dataBean.setUser(user); - break ; - } - } - } - } - } - if(organs.size() > 0) { - List organList = organRes.findAll(organs) ; - for(UKDataBean dataBean : dataBeanList) { - String organid = (String)dataBean.getValues().get(Constants.CSKEFU_SYSTEM_DIS_ORGAN) ; - if(!StringUtils.isBlank(organid)) { - for(Organ organ : organList) { - if(organ.getId().equals(organid)) { - dataBean.setOrgan(organ); - break ; - } - } - } - } - } - if(taskList.size() > 0) { - List ukefuCallOutTaskList = taskRes.findAll(taskList) ; - for(UKDataBean dataBean : dataBeanList) { - String taskid = (String)dataBean.getValues().get("taskid") ; - if(!StringUtils.isBlank(taskid)) { - for(UKefuCallOutTask task : ukefuCallOutTaskList) { - if(task.getId().equals(taskid)) { - dataBean.setTask(task); - break ; - } - } - } - } - } - } - return new PageImpl(dataBeanList,page , (int)response.getHits().getTotalHits()); - } - - - - /** - * - * @param dataBean - */ - public UKDataBean processDate(UKDataBean dataBean) { - return dataBean; - } -} +/* + * Copyright (C) 2017 优客服-多渠道客服系统 + * Modifications copyright (C) 2018-2019 Chatopera Inc, + * + * 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.impl; + +import com.chatopera.cc.basic.Constants; +import com.chatopera.cc.basic.MainContext; +import com.chatopera.cc.model.*; +import com.chatopera.cc.persistence.repository.OrganRepository; +import com.chatopera.cc.persistence.repository.UKefuCallOutTaskRepository; +import com.chatopera.cc.persistence.repository.UserRepository; +import com.chatopera.cc.util.es.UKDataBean; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.elasticsearch.action.get.GetResponse; +import org.elasticsearch.action.index.IndexRequestBuilder; +import org.elasticsearch.action.search.SearchRequestBuilder; +import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.index.query.QueryBuilder; +import org.elasticsearch.search.SearchHit; +import org.elasticsearch.search.aggregations.Aggregation; +import org.elasticsearch.search.aggregations.AggregationBuilder; +import org.elasticsearch.search.aggregations.AggregationBuilders; +import org.elasticsearch.search.aggregations.bucket.terms.StringTerms; +import org.elasticsearch.search.aggregations.bucket.terms.Terms; +import org.elasticsearch.search.sort.FieldSortBuilder; +import org.elasticsearch.search.sort.SortOrder; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort.Order; +import org.springframework.lang.NonNull; +import org.springframework.stereotype.Repository; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@RequiredArgsConstructor +@Repository("esdataservice") +public class ESDataExchangeImpl { + + @NonNull + private final UserRepository userRes; + + @NonNull + private final UKefuCallOutTaskRepository taskRes; + + @NonNull + private final OrganRepository organRes; + + public void saveIObject(UKDataBean dataBean) { + if (dataBean.getId() == null) { + dataBean.setId((String) dataBean.getValues().get("id")); + } + this.saveBulk(dataBean).execute().actionGet(); + } + + /** + * + */ + public IndexRequestBuilder saveBulk(UKDataBean dataBean) { + IndexRequestBuilder indexRequestBuilder; + if (dataBean.getId() == null) { + dataBean.setId((String) dataBean.getValues().get("id")); + } + if (!StringUtils.isBlank(dataBean.getType())) { + indexRequestBuilder = MainContext.getTemplet().getClient().prepareIndex(Constants.SYSTEM_INDEX, + dataBean.getType(), dataBean.getId()) + .setSource(processValues(dataBean)); + } else { + indexRequestBuilder = MainContext.getTemplet().getClient().prepareIndex(Constants.SYSTEM_INDEX, + dataBean.getTable().getTablename(), dataBean.getId()) + .setSource(processValues(dataBean)); + } + return indexRequestBuilder; + } + + /** + * 处理数据,包含 自然语言处理算法计算 智能处理字段 + */ + private Map processValues(UKDataBean dataBean) { + Map values = new HashMap<>(); + if (dataBean.getTable() != null) { + for (TableProperties tp : dataBean.getTable().getTableproperty()) { + if (dataBean.getValues().get(tp.getFieldname()) != null) { + values.put(tp.getFieldname(), dataBean.getValues().get(tp.getFieldname())); + } else if (tp.getDatatypename().equals("nlp") && dataBean.getValues() != null) { + //智能处理, 需要计算过滤HTML内容,自动获取关键词、摘要、实体识别、情感分析、信息指纹 等功能 + values.put(tp.getFieldname(), dataBean.getValues().get(tp.getFieldname())); + } else { + values.put(tp.getFieldname(), dataBean.getValues().get(tp.getFieldname())); + } + } + } else { + values.putAll(dataBean.getValues()); + } + return values; + } + + public void deleteById(String type, String id) { + if (!StringUtils.isBlank(type) && !StringUtils.isBlank(id)) { + MainContext.getTemplet().getClient() + .prepareDelete(Constants.SYSTEM_INDEX, type, id).execute().actionGet(); + } + } + + + public UKDataBean getIObjectByPK(UKDataBean dataBean) { + if (dataBean.getTable() != null) { + GetResponse getResponse = MainContext.getTemplet().getClient() + .prepareGet(Constants.SYSTEM_INDEX, + dataBean.getTable().getTablename(), dataBean.getId()) + .execute().actionGet(); + dataBean.setValues(getResponse.getSource()); + dataBean.setType(getResponse.getType()); + } else { + dataBean.setValues(new HashMap<>()); + } + + return processDate(dataBean); + } + + public UKDataBean getIObjectByPK(String type, String id) { + UKDataBean dataBean = new UKDataBean(); + if (!StringUtils.isBlank(type)) { + GetResponse getResponse = MainContext.getTemplet().getClient() + .prepareGet(Constants.SYSTEM_INDEX, + type, id) + .execute().actionGet(); + dataBean.setValues(getResponse.getSource()); + dataBean.setType(getResponse.getType()); + } else { + dataBean.setValues(new HashMap<>()); + } + return dataBean; + } + + /** + * + */ + public PageImpl findPageResult(QueryBuilder query, MetadataTable metadata, Pageable page, boolean loadRef) { + return findAllPageResult(query, metadata, page, loadRef, metadata != null ? metadata.getTablename() : null); + } + + /** + * + */ + public PageImpl findAllPageResult(QueryBuilder query, MetadataTable metadata, Pageable page, boolean loadRef, String types) { + List dataBeanList = new ArrayList<>(); + SearchRequestBuilder searchBuilder = MainContext.getTemplet().getClient().prepareSearch(Constants.SYSTEM_INDEX); + if (!StringUtils.isBlank(types)) { + searchBuilder.setTypes(types); + } + + int start = page.getPageSize() * page.getPageNumber(); + searchBuilder.setFrom(start).setSize(page.getPageSize()); + page.getSort(); + for (Order order : page.getSort()) { + searchBuilder.addSort(new FieldSortBuilder(order.getProperty()).unmappedType(order.getProperty().equals("createtime") ? "long" : "string").order(order.isDescending() ? SortOrder.DESC : SortOrder.ASC)); + } + SearchResponse response = searchBuilder.setQuery(query).execute().actionGet(); + List users = new ArrayList<>(); + List organs = new ArrayList<>(); + List taskList = new ArrayList<>(); + // List batchList = new ArrayList<>(); + // List activityList = new ArrayList<>(); + for (SearchHit hit : response.getHits().getHits()) { + UKDataBean temp = new UKDataBean(); + temp.setType(hit.getType()); + temp.setTable(metadata); + temp.setValues(hit.getSourceAsMap()); + temp.setId((String) temp.getValues().get("id")); + dataBeanList.add(processDate(temp)); + + + if (loadRef) { + if (!StringUtils.isBlank((String) temp.getValues().get(Constants.CSKEFU_SYSTEM_DIS_AGENT))) { + users.add((String) temp.getValues().get(Constants.CSKEFU_SYSTEM_DIS_AGENT)); + } + if (!StringUtils.isBlank((String) temp.getValues().get(Constants.CSKEFU_SYSTEM_ASSUSER))) { + users.add((String) temp.getValues().get(Constants.CSKEFU_SYSTEM_ASSUSER)); + } + if (!StringUtils.isBlank((String) temp.getValues().get(Constants.CSKEFU_SYSTEM_DIS_ORGAN))) { + organs.add((String) temp.getValues().get(Constants.CSKEFU_SYSTEM_DIS_ORGAN)); + } + if (!StringUtils.isBlank((String) temp.getValues().get("taskid"))) { + taskList.add((String) temp.getValues().get("taskid")); + } + // if (!StringUtils.isBlank((String) temp.getValues().get("batid"))) { + // batchList.add((String) temp.getValues().get("batid")); + // } + // if (!StringUtils.isBlank((String) temp.getValues().get("actid"))) { + // activityList.add((String) temp.getValues().get("actid")); + // } + } + } + if (loadRef) { + if (users.size() > 0) { + List userList = userRes.findAllById(users); + for (UKDataBean dataBean : dataBeanList) { + String userid = (String) dataBean.getValues().get(Constants.CSKEFU_SYSTEM_DIS_AGENT); + if (!StringUtils.isBlank(userid)) { + for (User user : userList) { + if (user.getId().equals(userid)) { + dataBean.setUser(user); + break; + } + } + } + String assuer = (String) dataBean.getValues().get(Constants.CSKEFU_SYSTEM_ASSUSER); + if (!StringUtils.isBlank(assuer)) { + for (User user : userList) { + if (user.getId().equals(assuer)) { + dataBean.setAssuser(user); + break; + } + } + } + } + } + if (organs.size() > 0) { + List organList = organRes.findAllById(organs); + for (UKDataBean dataBean : dataBeanList) { + String organid = (String) dataBean.getValues().get(Constants.CSKEFU_SYSTEM_DIS_ORGAN); + if (!StringUtils.isBlank(organid)) { + for (Organ organ : organList) { + if (organ.getId().equals(organid)) { + dataBean.setOrgan(organ); + break; + } + } + } + } + } + if (taskList.size() > 0) { + List ukefuCallOutTaskList = taskRes.findAllById(taskList); + for (UKDataBean dataBean : dataBeanList) { + String taskid = (String) dataBean.getValues().get("taskid"); + if (!StringUtils.isBlank(taskid)) { + for (UKefuCallOutTask task : ukefuCallOutTaskList) { + if (task.getId().equals(taskid)) { + dataBean.setTask(task); + break; + } + } + } + } + } + } + return new PageImpl<>(dataBeanList, page, (int) response.getHits().getTotalHits()); + } + + + /** + * + */ + public PageImpl findAllPageAggResult(QueryBuilder query, String aggField, Pageable page, boolean loadRef, String types) { + List dataBeanList = new ArrayList<>(); + SearchRequestBuilder searchBuilder = MainContext.getTemplet().getClient().prepareSearch(Constants.SYSTEM_INDEX); + if (!StringUtils.isBlank(types)) { + searchBuilder.setTypes(types); + } + + int size = page.getPageSize() * (page.getPageNumber() + 1); + searchBuilder.setFrom(0).setSize(0); + + AggregationBuilder aggregition = AggregationBuilders.terms(aggField).field(aggField).size(size); + aggregition.subAggregation(AggregationBuilders.terms("apstatus").field("apstatus")); + aggregition.subAggregation(AggregationBuilders.terms("callstatus").field("callstatus")); + + searchBuilder.addAggregation(aggregition); + + + SearchResponse response = searchBuilder.setQuery(query).execute().actionGet(); + List users = new ArrayList<>(); + List organs = new ArrayList<>(); + List taskList = new ArrayList<>(); + // List batchList = new ArrayList<>(); + // List activityList = new ArrayList<>(); + + if (response.getAggregations().get(aggField) instanceof Terms) { + Terms agg = response.getAggregations().get(aggField); + if (agg != null) { + if (loadRef) { + if (aggField.equals(Constants.CSKEFU_SYSTEM_DIS_AGENT)) { + users.add(agg.getName()); + } + if (aggField.equals(Constants.CSKEFU_SYSTEM_DIS_ORGAN)) { + organs.add(agg.getName()); + } + if (aggField.equals("taskid")) { + taskList.add(agg.getName()); + } + // if (aggField.equals("batid")) { + // batchList.add(agg.getName()); + // } + // if (aggField.equals("actid")) { + // activityList.add(agg.getName()); + // } + } + if (agg.getBuckets() != null && agg.getBuckets().size() > 0) { + for (Terms.Bucket entry : agg.getBuckets()) { + UKDataBean dataBean = new UKDataBean(); + dataBean.getValues().put("id", entry.getKeyAsString()); + dataBean.getValues().put(aggField, entry.getKeyAsString()); + dataBean.setId(agg.getName()); + dataBean.setType(aggField); + dataBean.getValues().put("total", entry.getDocCount()); + + for (Aggregation temp : entry.getAggregations()) { + if (temp instanceof StringTerms) { + StringTerms agg2 = (StringTerms) temp; + for (Terms.Bucket entry2 : agg2.getBuckets()) { + dataBean.getValues().put(temp.getName() + "." + entry2.getKeyAsString(), entry2.getDocCount()); + } + } + } + dataBeanList.add(dataBean); + } + } + } + } else { + response.getAggregations().get(aggField);// InternalDateHistogram agg = response.getAggregations().get(aggField) ; +// long total = response.getHits().getTotalHits() ; + } + + if (loadRef) { + if (users.size() > 0) { + List userList = userRes.findAllById(users); + for (UKDataBean dataBean : dataBeanList) { + String userid = (String) dataBean.getValues().get(Constants.CSKEFU_SYSTEM_DIS_AGENT); + if (!StringUtils.isBlank(userid)) { + for (User user : userList) { + if (user.getId().equals(userid)) { + dataBean.setUser(user); + break; + } + } + } + } + } + if (organs.size() > 0) { + List organList = organRes.findAllById(organs); + for (UKDataBean dataBean : dataBeanList) { + String organid = (String) dataBean.getValues().get(Constants.CSKEFU_SYSTEM_DIS_ORGAN); + if (!StringUtils.isBlank(organid)) { + for (Organ organ : organList) { + if (organ.getId().equals(organid)) { + dataBean.setOrgan(organ); + break; + } + } + } + } + } + if (taskList.size() > 0) { + List ukefuCallOutTaskList = taskRes.findAllById(taskList); + for (UKDataBean dataBean : dataBeanList) { + String taskid = (String) dataBean.getValues().get("taskid"); + if (!StringUtils.isBlank(taskid)) { + for (UKefuCallOutTask task : ukefuCallOutTaskList) { + if (task.getId().equals(taskid)) { + dataBean.setTask(task); + break; + } + } + } + } + } + } + return new PageImpl<>(dataBeanList, page, (int) response.getHits().getTotalHits()); + } + + + /** + * + */ + public UKDataBean processDate(UKDataBean dataBean) { + return dataBean; + } +} diff --git a/contact-center/app/src/main/java/com/chatopera/cc/util/es/SearchTools.java b/contact-center/app/src/main/java/com/chatopera/cc/util/es/SearchTools.java index 54af050f..8c3dee8f 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/util/es/SearchTools.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/util/es/SearchTools.java @@ -18,7 +18,6 @@ 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; @@ -38,315 +37,233 @@ import static org.elasticsearch.index.query.QueryBuilders.termQuery; public class SearchTools { - public static PageImpl search(String orgi , FormFilter formFilter , List itemList , MetadataTable metadataTable , boolean loadRef , int p, int ps){ - BoolQueryBuilder queryBuilder = new BoolQueryBuilder(); - queryBuilder.must(termQuery("orgi", orgi)) ; + public static PageImpl search(String orgi, List 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) ; - } + 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 dissearch(String orgi , FormFilter formFilter , List 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 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 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 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 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 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 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 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, PageRequest.of(p, ps, Sort.Direction.ASC, "createtime"), loadRef); + return search(queryBuilder, metadataTable, loadRef, p, ps); } - /** - * - * @param queryBuilder - * @param metadataTable - * @param loadRef - * @param p - * @param ps - * @return - */ - public static PageImpl aggregation(BoolQueryBuilder queryBuilder , String aggField, boolean loadRef , int p, int ps) { + public static PageImpl dissearch(String orgi, List 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 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); + } + + + /** + * + */ + public static PageImpl 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())); + StringBuilder strb = new StringBuilder(); + 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); + } + + /** + * + */ + public static PageImpl search(BoolQueryBuilder queryBuilder, int p, int ps) { + return search(queryBuilder, null, true, p, ps); + } + + /** + * + */ + private static PageImpl search(BoolQueryBuilder queryBuilder, MetadataTable metadataTable, boolean loadRef, int p, int ps) { + ESDataExchangeImpl esDataExchange = MainContext.getContext().getBean(ESDataExchangeImpl.class); + return esDataExchange.findPageResult(queryBuilder, metadataTable, PageRequest.of(p, ps, Sort.Direction.ASC, "createtime"), loadRef); + } + + /** + * + */ + public static PageImpl aggregation(BoolQueryBuilder queryBuilder, String aggField, boolean loadRef, int p, int ps) { ESDataExchangeImpl esDataExchange = MainContext.getContext().getBean(ESDataExchangeImpl.class); return esDataExchange.findAllPageAggResult(queryBuilder, aggField, PageRequest.of(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()); - } + /** + * + */ + public static UKDataBean get(UKDataBean dataBean) { + ESDataExchangeImpl esDataExchange = MainContext.getContext().getBean(ESDataExchangeImpl.class); + return esDataExchange.getIObjectByPK(dataBean); + } - /** - * - * @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); - } + /** + * + */ + 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(); - } - } + /** + * + */ + public static void save(UKDataBean dataBean) { + ESDataExchangeImpl esDataExchange = MainContext.getContext().getBean(ESDataExchangeImpl.class); + try { + esDataExchange.saveIObject(dataBean); + } catch (Exception e) { + e.printStackTrace(); + } + } }