From 9ce138b3d28c31ad7dc76f452c27dbd18a7fda61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E7=90=A6=E6=B6=9B?= Date: Wed, 22 Nov 2023 09:55:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E8=88=AC=E6=A3=80=E7=B4=A2=EF=BC=88?= =?UTF-8?q?=E5=85=A8=E6=96=87=EF=BC=89=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/LawsHomeSearchServiceImpl.java | 238 ++++++++++++++---- 1 file changed, 187 insertions(+), 51 deletions(-) diff --git a/laws-modules/src/main/java/com/jero/modules/laws/home/service/impl/LawsHomeSearchServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/home/service/impl/LawsHomeSearchServiceImpl.java index 7853fb19..5020d41a 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/home/service/impl/LawsHomeSearchServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/home/service/impl/LawsHomeSearchServiceImpl.java @@ -42,8 +42,6 @@ import com.jero.modules.laws.standard.service.ILawsNewsFeedService; import com.jero.modules.laws.standard.service.ILawsOverseasStandardService; import com.jero.modules.oss.entity.OSSFile; import com.jero.modules.oss.service.IOSSFileService; -import com.jero.modules.system.service.ISysDepartService; -import com.jero.modules.system.service.ISysUserService; import com.jero.modules.tag.entity.LawsTag; import com.jero.modules.tag.service.ILawsTagService; import lombok.extern.slf4j.Slf4j; @@ -351,96 +349,100 @@ public class LawsHomeSearchServiceImpl implements ILawsHomeSearchService { LawsHomeNormalSearchStatisticsVO obj = new LawsHomeNormalSearchStatisticsVO(); switch (lawsHomeNormalSearchDTO.getResourceType()){ case LawsHomeSearchCommon.LAWS_DOMESTIC_STANDARD: - count1(queryWrapper,obj); + List list1 = lawsHomeSearchMapper.getCount1(queryWrapper); + count1(list1,obj); break; case LawsHomeSearchCommon.LAWS_OVERSEAS_STANDARD: - count2(queryWrapper,obj); + List list2 = lawsHomeSearchMapper.getCount2(queryWrapper); + count2(list2,obj); break; case LawsHomeSearchCommon.LAWS_ENTERPRISE_STANDARD: - count3(queryWrapper,obj); + List list3 = lawsHomeSearchMapper.getCount2(queryWrapper); + count3(list3,obj); break; default:break; } return obj; } - private void count3(QueryWrapper queryWrapper,LawsHomeNormalSearchStatisticsVO obj) { - List list = lawsHomeSearchMapper.getCount2(queryWrapper); + private void count3(List list,LawsHomeNormalSearchStatisticsVO obj) { // 企业标准代号 - List list1 = addLawsHomeNormalSearchStatistics(list, obj, "enterprise_standard_code", "standard_code"); + List list1 = addLawsHomeNormalSearchStatistics(list, "enterprise_standard_code", "standard_code"); if(!CollectionUtils.isEmpty(list1)){ obj.setStandardCode(list1); } // 标准状态 - List list2 = addLawsHomeNormalSearchStatistics(list, obj, "enterprise_standard_state", "standard_state"); + List list2 = addLawsHomeNormalSearchStatistics(list, "enterprise_standard_state", "standard_state"); if(!CollectionUtils.isEmpty(list2)){ obj.setEnterpriseStandardState(list2); } // 标准等级分类 - List list3 = addLawsHomeNormalSearchStatistics(list, obj, "standard_grade_classify", "grade_classification"); + List list3 = addLawsHomeNormalSearchStatistics(list,"standard_grade_classify", "grade_classification"); if(!CollectionUtils.isEmpty(list3)){ obj.setGradeClassification(list3); } } - private void count2(QueryWrapper queryWrapper,LawsHomeNormalSearchStatisticsVO obj) { - List list = lawsHomeSearchMapper.getCount2(queryWrapper); + private void count2(List list,LawsHomeNormalSearchStatisticsVO obj) { // 标准类别 - List list1 = addLawsHomeNormalSearchStatistics(list, obj, "standard_type_overseas", "standard_class"); + List list1 = addLawsHomeNormalSearchStatistics(list, "standard_type_overseas", "standard_class"); if(!CollectionUtils.isEmpty(list1)){ obj.setStandardClass(list1); } // 适用车辆类型 - List list2 = addLawsHomeNormalSearchStatistics(list, obj, "APPLICATIONS_OVERSEAS", "applicable_vehicle"); + List list2 = addLawsHomeNormalSearchStatistics(list, "APPLICATIONS_OVERSEAS", "applicable_vehicle"); if(!CollectionUtils.isEmpty(list2)){ obj.setApplicableVehicle(list2); } // 状态 - List list3 = addLawsHomeNormalSearchStatistics(list, obj, "standard_state", "standard_state"); + List list3 = addLawsHomeNormalSearchStatistics(list, "standard_state", "standard_state"); if(!CollectionUtils.isEmpty(list3)){ obj.setStandardState(list3); } } - private void count1(QueryWrapper queryWrapper,LawsHomeNormalSearchStatisticsVO obj) { - List list = lawsHomeSearchMapper.getCount1(queryWrapper); + private void count1(List list, LawsHomeNormalSearchStatisticsVO obj) { // 标准类别 - List list1 = addLawsHomeNormalSearchStatistics(list, obj, "standard_type", "standard_class"); + List list1 = addLawsHomeNormalSearchStatistics(list,"standard_type", "standard_class"); if(!CollectionUtils.isEmpty(list1)){ obj.setStandardClass(list1); } // 动力类型 - List list2 = addLawsHomeNormalSearchStatistics(list, obj, "dynamic_type", "dynamic_type"); + List list2 = addLawsHomeNormalSearchStatistics(list, "POWER_TYPE_DOMESTIC", "dynamic_type"); if(!CollectionUtils.isEmpty(list2)){ obj.setDynamicType(list2); } // 适用车辆类型 - List list3 = addLawsHomeNormalSearchStatistics(list, obj, "APPLICATIONS_DOMESTIC", "applicable_vehicle"); + List list3 = addLawsHomeNormalSearchStatistics(list,"APPLICATIONS_DOMESTIC", "applicable_vehicle"); if(!CollectionUtils.isEmpty(list3)){ obj.setApplicableVehicle(list3); } // 标准类型 - List list4 = addLawsHomeNormalSearchStatistics(list, obj, "standard_property", "standard_property"); + List list4 = addLawsHomeNormalSearchStatistics(list, "standard_property", "standard_property"); if(!CollectionUtils.isEmpty(list4)){ obj.setStandardProperty(list4); } // 状态 - List list5 = addLawsHomeNormalSearchStatistics(list, obj, "standard_state", "standard_state"); + List list5 = addLawsHomeNormalSearchStatistics(list,"standard_state", "standard_state"); if(!CollectionUtils.isEmpty(list5)){ obj.setStandardState(list5); } } - private List addLawsHomeNormalSearchStatistics(List list, LawsHomeNormalSearchStatisticsVO obj, String dictVal, String data) { + private List addLawsHomeNormalSearchStatistics(List list, String dictVal, String data) { List listStandardClass = sysBaseAPI.getDictItems(dictVal); List listDict = new ArrayList<>(); for (DictModel dict : listStandardClass) { LawsHomeNormalSearchStatisticsObjVO objVO = new LawsHomeNormalSearchStatisticsObjVO(); objVO.setItemText(dict.getText()); objVO.setItemValue(dict.getValue()); - Optional op = list.stream().filter(o -> !StringUtils.isBlank(o.getDict()) && Arrays.asList(o.getDict().split(",")).contains(dict.getValue()) && Objects.equals(o.getFieldName(),data)).findFirst(); - if(op.isPresent()){ - objVO.setStatisticsCount(op.get().getCount()); + if(!CollectionUtils.isEmpty(list)){ + Optional op = list.stream().filter(o -> !StringUtils.isBlank(o.getDict()) && Arrays.asList(o.getDict().split(",")).contains(dict.getValue()) && Objects.equals(o.getFieldName(),data)).findFirst(); + if(op.isPresent()){ + objVO.setStatisticsCount(op.get().getCount()); + }else{ + objVO.setStatisticsCount("0"); + } }else{ objVO.setStatisticsCount("0"); } @@ -479,40 +481,71 @@ public class LawsHomeSearchServiceImpl implements ILawsHomeSearchService { } String selectValue = searchVO.getSelectValue(); + //1. 需要查询的字段 - List fieldList = new ArrayList<>(); - fieldList.add("content");//权重1 +// List fieldList = new ArrayList<>(); +// fieldList.add("content");//权重1 + Map mapDict = new HashMap<>(); + if(!StringUtils.isBlank(homeNormalSearchDTO.getResourceType())){ + mapDict.put("resource_type",homeNormalSearchDTO.getResourceType()); + } + if(!StringUtils.isBlank(homeNormalSearchDTO.getStandardClass())){ + mapDict.put("standard_class",homeNormalSearchDTO.getStandardClass()); + } + if(!StringUtils.isBlank(homeNormalSearchDTO.getDynamicType())){ + mapDict.put("dynamic_type",homeNormalSearchDTO.getDynamicType()); + } + if(!StringUtils.isBlank(homeNormalSearchDTO.getApplicableVehicle())){ + mapDict.put("applicable_vehicle",homeNormalSearchDTO.getApplicableVehicle()); + } + if(!StringUtils.isBlank(homeNormalSearchDTO.getStandardProperty())){ + mapDict.put("standard_property",homeNormalSearchDTO.getStandardProperty()); + } + if(!StringUtils.isBlank(homeNormalSearchDTO.getStandardState())){ + mapDict.put("standard_state",homeNormalSearchDTO.getStandardState()); + } + if(!StringUtils.isBlank(homeNormalSearchDTO.getStandardCode())){ + mapDict.put("standard_code",homeNormalSearchDTO.getStandardCode()); + } + if(!StringUtils.isBlank(homeNormalSearchDTO.getEnterpriseStandardState())){ + mapDict.put("enterprise_standard_state",homeNormalSearchDTO.getEnterpriseStandardState()); + } + if(!StringUtils.isBlank(homeNormalSearchDTO.getGradeClassification())){ + mapDict.put("grade_classification",homeNormalSearchDTO.getGradeClassification()); + } + JSONObject jsonAll = new JSONObject(); + JSONArray queryMapJsonAll = new JSONArray(); + JSONArray queryMapJsonDict = new JSONArray(); + mapDict.forEach((k,v)->{ + Map map1 = new HashMap<>(); + Map map2 = new HashMap<>(); + map2.put(k,v); + map1.put("match_phrase",map2); + queryMapJsonDict.add(map1); + }); JSONArray queryMapJson = new JSONArray(); - JSONArray queryMapJsonAll = new JSONArray(); - Map mapHighlight = new HashMap<>(); Map mapHighlight1 = new HashMap<>(); - //封装首次的条件 + // 封装首次的条件 if (StringUtils.isNotBlank(selectValue)) { selectValue = selectValue.toLowerCase(); - for (String field : fieldList) { - getQueryMapJson(queryMapJson, selectValue, field); - //高亮 - if(!"flag".equals(field)){ - highlight(mapHighlight, field); - } else { - // query_string查询 - Map map25 = new HashMap<>(); - Map map45 = new HashMap<>(); - map25.put("query", selectValue); - map25.put("fields", fieldList.toArray()); - map25.put("allow_leading_wildcard", false); //禁用了前置通配符 - map45.put("query_string", map25); - queryMapJson.add(map45); - } - } + getQueryMapJson(queryMapJson, selectValue, "content"); + //高亮 + highlight(mapHighlight, "content"); mapHighlight1.put("fields",mapHighlight); } if(CollectionUtils.isNotEmpty(queryMapJson)){ JSONObject jsonObject = jeroElasticsearchTemplate.buildBoolQuery(null, null, queryMapJson); - queryMapJsonAll.add(jsonObject); + queryMapJsonDict.add(jsonObject); } + if(CollectionUtils.isNotEmpty(queryMapJsonDict)){ + jsonAll.put("must",queryMapJsonDict); + JSONObject all = new JSONObject(); + all.put("bool",jsonAll); + queryMapJsonAll.add(all); + } + JSONObject sort = new JSONObject(); Map issueTimeDesc = new HashMap<>(); @@ -522,8 +555,6 @@ public class LawsHomeSearchServiceImpl implements ILawsHomeSearchService { issueTimeAsc.put("order","asc"); issueTime.put("resource_type",issueTimeAsc); issueTime.put("standard_type",issueTimeDesc); - // todo 排序号 -// issueTime.put("resource_type",issueTime); issueTime.put("create_time",issueTimeDesc); sort.putAll(issueTime); IPage page = getIPage(selectValue, queryMapJsonAll, mapHighlight1, @@ -659,7 +690,106 @@ public class LawsHomeSearchServiceImpl implements ILawsHomeSearchService { @Override public LawsHomeNormalSearchStatisticsVO getNormalSearchAllCount(LawsHomeNormalSearchDTO homeNormalSearchDTO) { - return null; + LawsHomeNormalSearchStatisticsVO obj = new LawsHomeNormalSearchStatisticsVO(); + String searchContent = homeNormalSearchDTO.getSearchContent(); + if(StringUtils.isBlank(searchContent)){ + throw new JeroBootException(ResultCommon.PLEASE_SEARCH_TO_IMPORT); + } + + //判断索引是否存在 + boolean flagTemp; + flagTemp = jeroElasticsearchTemplate.indexExists(HomeSearchEnum.INDEX_NAME_DOCUMENT_ZQ.getValue()); + if (!flagTemp) { + return obj; + } + + SearchVO searchVO = new SearchVO(); + searchVO.setSelectValue(homeNormalSearchDTO.getSearchContent()); + if(StringUtils.isBlank(searchVO.getSelectValue())){ + searchVO.setSelectValue(SEARCH_FLAG); + } + String selectValue = searchVO.getSelectValue().toLowerCase(); + + List listField = new ArrayList<>(); + listField.add("resource_type"); + listField.add("standard_class"); + listField.add("dynamic_type"); + listField.add("applicable_vehicle"); + listField.add("standard_property"); + listField.add("standard_state"); + listField.add("standard_code"); + listField.add("enterprise_standard_state"); + listField.add("grade_classification"); + JSONObject jsonObject = new JSONObject(); + Map map = new HashMap<>(); + for (String s : listField) { + Map map1 = new HashMap<>(); + Map map2 = new HashMap<>(); + map1.put("field",s + ".keyword"); + map2.put("terms",map1); + map.put(s + "_aggs",map2); + } + jsonObject.put("aggs",map); + jsonObject.put("size",0); + +// JSONArray queryMapJson = new JSONArray(); +// // 封装首次的条件 +// if (StringUtils.isNotBlank(selectValue)) { +// getQueryMapJson(queryMapJson, selectValue, "content"); +// } +// if(CollectionUtils.isNotEmpty(queryMapJson)){ +// JSONObject object = new JSONObject(); +// object.put("should",queryMapJson); +// jsonObject.put("query",object); +// } + + + //2. 数据查询 + JSONObject search = jeroElasticsearchTemplate.search(HomeSearchEnum.INDEX_NAME_DOCUMENT_ZQ.getValue(), HomeSearchEnum.TYPE_NAME_DOCUMENT_ZQ.getValue(), jsonObject); + LawsHomeNormalSearchStatisticsVO objVo = new LawsHomeNormalSearchStatisticsVO(); + switch (homeNormalSearchDTO.getResourceType()){ + case LawsHomeSearchCommon.LAWS_DOMESTIC_STANDARD: + List list1 = new ArrayList<>(); + addVo(search, list1, "standard_class_aggs", "standard_class"); + addVo(search, list1, "dynamic_type_aggs", "dynamic_type"); + addVo(search, list1, "applicable_vehicle_aggs", "applicable_vehicle"); + addVo(search, list1, "standard_property_aggs", "standard_property"); + addVo(search, list1, "standard_state_aggs", "standard_state"); + count1(list1,objVo); + break; + case LawsHomeSearchCommon.LAWS_OVERSEAS_STANDARD: + List list2 = new ArrayList<>(); + addVo(search, list2, "standard_class_aggs", "standard_class"); + addVo(search, list2, "applicable_vehicle_aggs", "applicable_vehicle"); + addVo(search, list2, "standard_state_aggs", "standard_state"); + count2(list2,objVo); + break; + case LawsHomeSearchCommon.LAWS_ENTERPRISE_STANDARD: + List list3 = new ArrayList<>(); + addVo(search, list3, "standard_code_aggs", "standard_code"); + addVo(search, list3, "standard_state_aggs", "standard_state"); + addVo(search, list3, "grade_classification_aggs", "grade_classification"); + count3(list3,objVo); + break; + default:break; + } + return objVo; + } + + private void addVo(JSONObject search, List list, String standard_class_aggs, String standard_class) { + List> list1 = (List>) ((Map) ((Map) search.get("aggregations")).get(standard_class_aggs)).get("buckets"); + if (!CollectionUtils.isEmpty(list1)) { + for (Map stringObjectMap : list1) { + LawsHomeNormalSearchCountVO objVo = new LawsHomeNormalSearchCountVO(); + if (Objects.isNull(stringObjectMap.get("key"))) { + continue; + } + objVo.setFieldName(standard_class); + objVo.setDict(stringObjectMap.get("key").toString()); + objVo.setCount(Objects.isNull(stringObjectMap.get("doc_count")) ? "0" : stringObjectMap.get("doc_count").toString()); + list.add(objVo); + } + } } @Override @@ -669,6 +799,12 @@ public class LawsHomeSearchServiceImpl implements ILawsHomeSearchService { } log.info("================ES更新数据开始================="); try{ + //判断索引是否存在 + boolean flagTemp; + flagTemp = jeroElasticsearchTemplate.indexExists(HomeSearchEnum.INDEX_NAME_DOCUMENT_ZQ.getValue()); + if (!flagTemp) { + jeroElasticsearchTemplate.createIndex(HomeSearchEnum.INDEX_NAME_DOCUMENT_ZQ.getValue()); + } switch (resourceType){ case LawsHomeSearchCommon.LAWS_DOMESTIC_STANDARD: updateLawsDomesticStandardToEs(resourceType,ids,opType);