feat: There is no way the,

This commit is contained in:
super_liu
2021-11-06 23:17:29 +08:00
parent 3171ce4622
commit 8b12a63925
10 changed files with 598 additions and 156 deletions
@@ -267,6 +267,7 @@ public class SeniorSearchInfoEO extends BasePage {
private String lawsLabel;
private String lawsRemark;
private String CYSDLAWS;
private String NYLXCLASS;
@@ -7,7 +7,9 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.formula.functions.T;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
@@ -32,6 +34,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
@@ -386,6 +389,12 @@ public class SearchCenterServiceImpl implements SearchCenterService {
collectAttrMap.put("CYSDLAWS",array);
}
if(searchInfoEO.getNYLXCLASS() != null && StringUtils.isNotBlank(searchInfoEO.getNYLXCLASS())){
List<String> fieldList = Arrays.asList(searchInfoEO.getNYLXCLASS() .split(",")).stream().map(s -> (s.trim())).collect(Collectors.toList());
JSONArray array= JSONArray.parseArray(JSON.toJSONString(fieldList));
collectAttrMap.put("NYLXCLASS",array);
}
}
List<String> fieldList = getStringField(searchInfoEO);
@@ -503,11 +512,11 @@ public class SearchCenterServiceImpl implements SearchCenterService {
if(list.size() > 1){
BoolQueryBuilder boolQueryBuilderShould = new BoolQueryBuilder();
list.forEach(s -> {
boolQueryBuilderShould.should(QueryBuilders.wildcardQuery("numbershow.keyword", "*"+s+" "+"*"));
boolQueryBuilderShould.should(QueryBuilders.termQuery("standSort.keyword", s));
});
boolQueryBuilder.must(boolQueryBuilderShould);
}else {
boolQueryBuilder.must(QueryBuilders.wildcardQuery("numbershow.keyword", "*"+searchInfoEO.getStandSort()+" "+"*"));
boolQueryBuilder.must(QueryBuilders.termQuery("standSort.keyword", searchInfoEO.getStandSort()));
}
}
if (StringUtils.isNotBlank(searchInfoEO.getStandNumber())) {
@@ -776,22 +785,36 @@ public class SearchCenterServiceImpl implements SearchCenterService {
// 循环统计各种类型数据
String[] seniortype;
if("stand".equals(searchInfoEO.getSelectIndex())) {
String[] seniortypeStand = {"standSort", "statecode","CYSD","ZRLX","CLLX","CBCD","textStatus","textStatusName"};
String[] seniortypeStand = {"standSort", "numbershow","statecode","CYSD","ZRLX","CLLX","CBCD","textStatus","textStatusName","NYLXCLASS"};
seniortype = seniortypeStand.clone();
} else if("laws".equals(searchInfoEO.getSelectIndex())){
String[] seniortypeLaws = {"lawsSyqy","lawsSycx","CYSDLAWS"};
seniortype = seniortypeLaws.clone();
} else if ("bussstand".equals(searchInfoEO.getSelectIndex())) {
String[] seniortypeBuss = {"textStatusBuss","QCDW"};
String[] seniortypeBuss = {"standSort", "numbershow", "statecode","CYSD","ZRLX","CLLX","CBCD","textStatus","textStatusName","NYLXCLASS"};
seniortype = seniortypeBuss.clone();
} else {
String[] seniortypeMsg = {"module"};
seniortype = seniortypeMsg.clone();
}
String standType = searchInfoEO.getStandType();
String[] standVerify = {"GB","GB/T","QC/T","JT","JB","GA","GJB","HJ"};
String[] standEnVerify = {"ECE","EU","EC","EEC","ISO","IEC","GTR","CFR",
"JASO","JIS","GSO","GOST","ΓOCT","TP","SASO","UAE","CONTRAN","DENATRAN","ABNT NBR","NBR","INMETRO","CONAMA","Normative Instruction","ADR"};
String[] bussStandVerify = {"Q/FT A","Q/FT B","Q/FT E","Q/FT F","Q/FT G","Q/FT M","Q/FT Q","Q/FT R","Q/FT S","Q/FT T","Q/FT V","Q/FT X","Q/FT Y","Q/FT Z","Q/QCBFC"};
List<String> list = new ArrayList<>();
if(standType.equals("INLAND")){
list = Stream.of(standVerify).collect(Collectors.toList());
}else if(standType.equals("bussstand")){
list = Stream.of(bussStandVerify).collect(Collectors.toList());
}else if(standType.equals("FOREIGN")){
list = Stream.of(standEnVerify).collect(Collectors.toList());
}
Map<String, Object> map = new HashMap<>();
for (int i = 0; i < seniortype.length; i++) {
//分组依靠关键字terms
TermsAggregationBuilder aggregationBuilders = AggregationBuilders.terms("by_" + seniortype[i]).field(seniortype[i] + ".keyword").size(1000);
TermsAggregationBuilder aggregationBuilders = AggregationBuilders.terms("by_" + seniortype[i]).field(seniortype[i] + ".keyword").size(100000);
searchRequestBuilder.addAggregation(aggregationBuilders);
}
// 获取查询到的结果
@@ -808,27 +831,17 @@ public class SearchCenterServiceImpl implements SearchCenterService {
Map<String, Object> submap = new HashMap<>();
for (StringTerms.Bucket bucket : stResult.getBuckets()) {
// 多选处理,当前全部允许多选
String keyname = bucket.getKeyAsString();
String[] keynamelist = keyname.split(",");
String keyName = bucket.getKeyAsString();
String[] keyNameList = keyName.split(",");
// 对于属性允许多选,此处做出处理
if(keynamelist.length>0){
for (String itemkeyname: keynamelist){
if(keyNameList.length>0){
for (String itemKeyName: keyNameList){
// put 之前判断是否已存在该key ,如果不存在,直接放入值,如果存在,需要进行一个累加
if(submap.containsKey(itemkeyname)){
submap.put(itemkeyname.trim(), (long)submap.get(itemkeyname)+ bucket.getDocCount());
}
else {
submap.put(itemkeyname.trim(), bucket.getDocCount());
}
keyNameFilter(standType, list, submap, bucket, itemKeyName);
}
}
else {
if(submap.containsKey(keyname)){
submap.put(keyname.trim(), (long)submap.get(keyname)+ bucket.getDocCount());
}
else {
submap.put(keyname.trim(), bucket.getDocCount());
}
keyNameFilter(standType, list, submap, bucket, keyName);
}
}
map.put(seniortype[i], submap);
@@ -839,11 +852,60 @@ public class SearchCenterServiceImpl implements SearchCenterService {
}
}
if(standType.equals("bussstand")){
map.forEach((s, o) -> {
if(s.equals("numbershow")){
map.put("standSort",o);
}
});
}
result.get(0).put("groupdata", map);
}
return result;
}
public static Map<String, Object> objectToMap(Object obj){
if(obj == null){
return null;
}
Map<String, Object> map = new HashMap<String, Object>();
Field[] declaredFields = obj.getClass().getDeclaredFields();
try {
for (Field field : declaredFields) {
field.setAccessible(true);
map.put(field.getName(), field.get(obj));
}
}catch (Exception e){
e.getMessage();
}
return map;
}
private void keyNameFilter(String standType, List<String> list, Map<String, Object> submap, StringTerms.Bucket bucket, String keyname) {
if(standType.equals("bussstand")){
if(!list.isEmpty()){
String finalKeyName = keyname;
List<String> list1 = list.stream().filter(string-> (finalKeyName.contains(string))).collect(Collectors.toList());
if(!list1.isEmpty()){
if(submap.containsKey(list1.get(0))){
submap.put(list1.get(0).trim(), (long)submap.get(list1.get(0).trim())+ bucket.getDocCount());
}else {
submap.put(list1.get(0).trim(), bucket.getDocCount());
}
}
}
}else {
if(submap.containsKey(keyname)){
submap.put(keyname.trim(), (long)submap.get(keyname)+ bucket.getDocCount());
}else {
submap.put(keyname.trim(), bucket.getDocCount());
}
}
}
@Override
public List<Map<String, Object>> SearchResponseToList(SearchResponse searchResponse) {
List<Map<String, Object>> sourceList = new ArrayList<Map<String, Object>>();