linwe
2024-05-29 c10d6358b9f014375a13821465bc978d0c0da22e
src/main/java/org/springblade/es/service/ElasticsearchDocumentService.java
@@ -1,5 +1,7 @@
package org.springblade.es.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.logging.log4j.util.Strings;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
@@ -21,12 +23,16 @@
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springblade.common.cache.SysCache;
import org.springblade.common.constant.EsTableConstant;
import org.springblade.common.param.CommonParamSet;
import org.springblade.common.utils.SpringUtils;
import org.springblade.es.vo.EsParam;
import org.springblade.modules.article.entity.Article;
import org.springblade.modules.article.service.ArticleService;
import org.springblade.modules.doorplateAddress.entity.DoorplateAddressEntity;
import org.springblade.modules.doorplateAddress.service.IDoorplateAddressService;
import org.springblade.modules.grid.service.IGridRangeService;
import org.springblade.modules.house.entity.HouseEntity;
import org.springblade.modules.house.entity.HouseholdEntity;
import org.springblade.modules.house.service.IHouseService;
@@ -66,6 +72,12 @@
   @Autowired
   private IHouseholdService householdService;
   @Autowired
   private IGridRangeService gridRangeService;
   @Autowired
   private IDoorplateAddressService doorplateAddressService;
   @Value("${elasticsearch.sync}")
   private boolean elasticsearchSync;
@@ -96,14 +108,24 @@
    * @return
    */
   public boolean init(EsParam esParam) {
      // 场所
      initPlace(esParam);
      // 通知文章
      initArticle(esParam);
      // 房屋
      initHouse(esParam);
      // 住户
      initHousehold(esParam);
      if (!Strings.isBlank(esParam.getTableName())) {
         if (esParam.getTableName().equals("jczz_place")) {
            // 场所
            initPlace(esParam);
         }
         if (esParam.getTableName().equals("jczz_article")) {
            // 通知文章
            initArticle(esParam);
         }
         if (esParam.getTableName().equals("jczz_house")) {
            // 房屋
            initHouse(esParam);
         }
         if (esParam.getTableName().equals("jczz_household")) {
            // 住户
            initHousehold(esParam);
         }
      }
      // 返回
      return true;
   }
@@ -180,12 +202,17 @@
            for (Article article : articleList) {
               // 初始化Elasticsearch客户端
               IndexRequest indexRequest = new IndexRequest(esParam.getIndexName());
               String communityNameListString
                  = SysCache.getAllCommunityNameListString(article.getArticleRange(),article.getId().toString());
               Map<String, Object> map = new HashMap<>(1);
               map.put("communityCode",communityNameListString);
               String toString = new JSONObject(map).toString();
               // 不设置id
               // indexRequest.id("1");
               indexRequest.source("tableId", article.getId().toString(),
                  "tableName", "jczz_article",
                  "title", article.getTitle(),
                  "communityCode", article.getArticleRange(),
                  "communityCode", toString,
                  "type", null != article.getType() ? article.getType().toString() : "",
                  "content", article.getContent(),
                  "articleType", article.getArticleType());
@@ -234,6 +261,7 @@
                  "tableId", household.getId().toString(),
                  "tableName", "jczz_household",
                  "title", household.getName(),
                  "relationship", household.getRelationship(),
                  "name", household.getName(),
                  "phone", household.getPhoneNumber(),
                  "idCard", household.getIdCard(),
@@ -319,12 +347,17 @@
   @Async
   public void addArticle(EsParam esParam, Article article) {
      if (elasticsearchSync) {
         // 查询当前文章范围对应的社区名称字符串集合
         String communityNameListString = SysCache.getAllCommunityNameListString(article.getArticleRange(),article.getId().toString());
         Map<String, Object> map = new HashMap<>(1);
         map.put("communityCode",communityNameListString);
         String toString = new JSONObject(map).toString();
         try {
            indexDocument(esParam.getIndexName(),
               "tableId", article.getId().toString(),
               "tableName", "jczz_article",
               "title", article.getTitle(),
               "communityCode", article.getArticleRange(),
               "communityCode", toString,
               "type", null != article.getType() ? article.getType().toString() : "",
               "content", article.getContent(),
               "articleType", article.getArticleType()
@@ -404,13 +437,38 @@
               "name", household.getName(),
               "phone", household.getPhoneNumber(),
               "idCard", household.getIdCard(),
               "content", household.getCurrentAddress(),
               "relationship", household.getRelationship().toString(),
               "content", getAddress(household),
               "communityCode", householdService.getCommunityCode(household.getId())
            );
         } catch (IOException e) {
            e.printStackTrace();
         }
      }
   }
   /**
    * 获取房屋地址
    * @param household
    * @return
    */
   public String getAddress(HouseholdEntity household) {
      if (!Strings.isBlank(household.getHouseCode())){
         // 查询对应的房屋地址
         QueryWrapper<DoorplateAddressEntity> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("address_code",household.getHouseCode());
         List<DoorplateAddressEntity> list = doorplateAddressService.list(queryWrapper);
         if (list.size()>0){
            return list.get(0).getAddressName();
         }
         // 房屋查不到的情况
         if (!Strings.isBlank(household.getCurrentAddress())){
            return household.getCurrentAddress();
         }
      }else {
         return household.getCurrentAddress();
      }
      return null;
   }
   /**
@@ -464,18 +522,24 @@
         BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//         boolQueryBuilder.should(QueryBuilders.matchQuery("content", esParam.getSearchKey()));
//         boolQueryBuilder.should(QueryBuilders.matchQuery("name", esParam.getSearchKey()));
         boolQueryBuilder.must(QueryBuilders.matchQuery("title", esParam.getSearchKey()));
         boolQueryBuilder.should(QueryBuilders.matchPhraseQuery("title", esParam.getSearchKey()));
//         boolQueryBuilder.should(QueryBuilders.matchQuery("location", esParam.getSearchKey()));
//         boolQueryBuilder.should(QueryBuilders.matchQuery("phone", esParam.getSearchKey()));
//         boolQueryBuilder.should(QueryBuilders.matchQuery("idCard", esParam.getSearchKey()));
         if (!Strings.isBlank(esParam.getTableName())) {
            boolQueryBuilder.must(QueryBuilders.matchQuery("tableName", esParam.getTableName()));
         }
         String roleName = SpringUtils.getRequestParam("roleName");
         String communityCode = SpringUtils.getRequestParam("communityCode");
         if (!Strings.isBlank(communityCode)) {
            boolQueryBuilder.must(QueryBuilders.matchQuery("communityCode", communityCode));
            if (!Strings.isBlank(roleName) && roleName.equals("inhabitant") && !Strings.isBlank(esParam.getHouseCode())){
               // 居民根据房屋对应的小区过滤
               boolQueryBuilder.must(QueryBuilders.matchPhraseQuery("communityCode",gridRangeService.getDistrictIdByHouseCode(esParam.getHouseCode())));
            }else {
               // 设置查询社区名称,编号有多个,数字类型目前无法匹配到
               boolQueryBuilder.must(QueryBuilders.matchPhraseQuery("communityCode", communityCode));
            }
         }
         String roleName = SpringUtils.getRequestParam("roleName");
         if (!Strings.isBlank(roleName)){
            if (roleName.equals("wgy") || roleName.equals("mj")){
               // 不查公告
@@ -610,7 +674,7 @@
            setHouseMap((HouseEntity) item, data);
         }
         if (esParam.getTableName().equals("jczz_household")) {
            setHousehouldMap((HouseholdEntity) item, data);
            setHouseholdMap((HouseholdEntity) item, data);
         }
         Map<String, Object> param = new HashMap<String, Object>();
         param.put("data", data);
@@ -636,12 +700,17 @@
    * @param data
    */
   private void setArticleMap(Article item, Map<String, Object> data) {
      // 查询当前文章范围对应的社区名称字符串集合
      String communityNameListString = SysCache.getAllCommunityNameListString(item.getArticleRange(),item.getId().toString());
      Map<String, Object> map = new HashMap<>(1);
      map.put("communityCode",communityNameListString);
      String toString = new JSONObject(map).toString();
      data.put("tableId",item.getId());
      data.put("title",item.getTitle());
      data.put("type",item.getType());
      data.put("content",item.getContent());
      data.put("articleType",item.getArticleType());
      data.put("communityCode",item.getArticleRange());
      data.put("communityCode",toString);
   }
   /**
    * 设置场所map
@@ -672,14 +741,15 @@
    * @param item
    * @param data
    */
   private void setHousehouldMap(HouseholdEntity item, Map<String, Object> data) {
   private void setHouseholdMap(HouseholdEntity item, Map<String, Object> data) {
      data.put("communityCode",householdService.getCommunityCode(item.getId()));
      data.put("tableId",item.getId());
      data.put("title",item.getName());
      data.put("relationship",item.getRelationship());
      data.put("name",item.getName());
      data.put("phone",item.getPhoneNumber());
      data.put("idCard",item.getIdCard());
      data.put("content",item.getCurrentAddress());
      data.put("content",getAddress(item));
   }
   /**
@@ -690,9 +760,14 @@
         DeleteByQueryRequest deleteByQueryRequest = new DeleteByQueryRequest(esParam.getIndexName());
         // 根据多个条件 生成 boolQueryBuilder
         BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
         boolQueryBuilder
            .must(QueryBuilders.matchQuery("tableId", esParam.getTableId()))
            .must(QueryBuilders.matchQuery("tableName", esParam.getTableName()));
         if (!Strings.isBlank(esParam.getTableId())){
            boolQueryBuilder
               .must(QueryBuilders.matchQuery("tableId", esParam.getTableId()));
         }
         if (!Strings.isBlank(esParam.getTableName())) {
            boolQueryBuilder
               .must(QueryBuilders.matchQuery("tableName", esParam.getTableName()));
         }
         deleteByQueryRequest.setQuery(boolQueryBuilder);
         try {
            BulkByScrollResponse bulkResponse =