zhongrj
2024-04-13 d5f77a020d823d64b8f6f7a6cc5a8432ee11b1ab
es 搜索及数据初始化调整
13 files modified
164 ■■■■■ changed files
src/main/java/org/springblade/common/cache/CacheNames.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/common/cache/SysCache.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/es/service/ElasticsearchDocumentService.java 50 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/es/vo/EsParam.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/article/controller/ArticleController.java 4 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/grid/mapper/GridRangeMapper.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/grid/mapper/GridRangeMapper.xml 7 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/grid/service/IGridRangeService.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/grid/service/impl/GridRangeServiceImpl.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/mapper/RegionMapper.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/mapper/RegionMapper.xml 35 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/service/IRegionService.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/service/impl/RegionServiceImpl.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/common/cache/CacheNames.java
@@ -58,4 +58,9 @@
     */
    String USER_FAIL_KEY = "blade:user::blade:fail:";
    /**
     *
     */
    String ARTICLE_KEY = "blade:article:";
}
src/main/java/org/springblade/common/cache/SysCache.java
@@ -13,6 +13,7 @@
import java.util.List;
import java.util.stream.Collectors;
import static org.springblade.common.cache.CacheNames.ARTICLE_KEY;
import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
/**
@@ -508,4 +509,12 @@
        return CacheUtil.get(SYS_CACHE, REGION_CHILD_CODE, regionCode, () -> regionService.getRegionChild(regionCode,communityCode));
    }
    /**
     * 查询当前文章范围对应的社区编号字符串集合
     * @param articleRange
     * @return
     */
    public static String getAllCommunityNameListString(String articleRange,String id) {
        return CacheUtil.get(ARTICLE_KEY, "id", id ,() -> regionService.getAllCommunityNameListString(articleRange));
    }
}
src/main/java/org/springblade/es/service/ElasticsearchDocumentService.java
@@ -1,5 +1,6 @@
package org.springblade.es.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.logging.log4j.util.Strings;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
@@ -21,12 +22,14 @@
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.grid.service.IGridRangeService;
import org.springblade.modules.house.entity.HouseEntity;
import org.springblade.modules.house.entity.HouseholdEntity;
import org.springblade.modules.house.service.IHouseService;
@@ -65,6 +68,9 @@
    @Autowired
    private IHouseholdService householdService;
    @Autowired
    private IGridRangeService gridRangeService;
    @Value("${elasticsearch.sync}")
    private boolean elasticsearchSync;
@@ -180,12 +186,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());
@@ -319,12 +330,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()
@@ -464,18 +480,24 @@
            BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//            boolQueryBuilder.should(QueryBuilders.matchQuery("content", esParam.getSearchKey()));
//            boolQueryBuilder.should(QueryBuilders.matchQuery("name", esParam.getSearchKey()));
            boolQueryBuilder.should(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")){
                    // 不查公告
@@ -636,12 +658,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
@@ -690,9 +717,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 =
src/main/java/org/springblade/es/vo/EsParam.java
@@ -29,4 +29,9 @@
     * 社区编号
     */
    private String communityCode;
    /**
     * 地址编码
     */
    private String houseCode;
}
src/main/java/org/springblade/modules/article/controller/ArticleController.java
@@ -7,6 +7,7 @@
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.AllArgsConstructor;
import org.springblade.core.cache.utils.CacheUtil;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
@@ -21,6 +22,8 @@
import javax.validation.Valid;
import java.util.Date;
import java.util.List;
import static org.springblade.common.cache.CacheNames.ARTICLE_KEY;
/**
 * @author zhongrj
@@ -169,6 +172,7 @@
    @ApiOperationSupport(order = 6)
    @ApiOperation(value = "新增或修改资讯信息", notes = "传入article")
    public R submit(@RequestBody Article article) {
        CacheUtil.clear(ARTICLE_KEY);
        boolean flag = false;
        if (null == article.getId()) {
            flag = true;
src/main/java/org/springblade/modules/grid/mapper/GridRangeMapper.java
@@ -47,4 +47,11 @@
     * @return
     */
    List<GridVO> getTestGridData();
    /**
     * 根据房屋查询对应的小区
     * @param houseCode
     * @return
     */
    String getDistrictIdByHouseCode(@Param("houseCode") String houseCode);
}
src/main/java/org/springblade/modules/grid/mapper/GridRangeMapper.xml
@@ -12,5 +12,12 @@
        select grid as gridName,SUBSTRING_INDEX(area, "-", -1) as communityName,std_id as principal from jczz_test
    </select>
    <!--根据房屋查询对应的小区-->
    <select id="getDistrictIdByHouseCode" resultType="java.lang.String">
        SELECT jd.id
        FROM jczz_district jd
        LEFT JOIN jczz_doorplate_address jda ON jda.aoi_code = jd.aoi_code
        WHERE jda.address_code = #{houseCode}
    </select>
</mapper>
src/main/java/org/springblade/modules/grid/service/IGridRangeService.java
@@ -43,4 +43,11 @@
     * 网格范围表数据处理
     */
    Object dataHandle();
    /**
     * 根据房屋查询对应的小区
     * @param houseCode
     * @return
     */
    String getDistrictIdByHouseCode(String houseCode);
}
src/main/java/org/springblade/modules/grid/service/impl/GridRangeServiceImpl.java
@@ -81,4 +81,14 @@
        }
        return null;
    }
    /**
     * 根据房屋查询对应的小区
     * @param houseCode
     * @return
     */
    @Override
    public String getDistrictIdByHouseCode(String houseCode) {
        return baseMapper.getDistrictIdByHouseCode(houseCode);
    }
}
src/main/java/org/springblade/modules/system/mapper/RegionMapper.java
@@ -121,4 +121,11 @@
     * @return
     */
    List<Region> getGridRegionChildList(@Param("regionCode") String regionCode);
    /**
     * 查询当前文章范围对应的社区编号字符串集合
     * @param articleRange
     * @return
     */
    List<String> getAllCommunityNameListString(@Param("articleRange") String articleRange);
}
src/main/java/org/springblade/modules/system/mapper/RegionMapper.xml
@@ -289,4 +289,39 @@
        WHERE is_deleted = 0  AND pcs_code IS NOT NULL
    </select>
    <!--查询当前文章范围对应的社区编号字符串集合-->
    <select id="getAllCommunityNameListString" resultType="java.lang.String">
        SELECT
        code
        FROM blade_region
        where
        <foreach collection="articleRange.split(',')" item="item" open="(" close=")" separator="OR">
            ancestors like concat('%',#{item},'%')
        </foreach>
        and region_level = 5
        union
        (
        SELECT
        br.code
        FROM jczz_district jd
        left join blade_region br on jd.community_code = br.village_code
        where br.region_level = 5
        and jd.id in
        <foreach collection="articleRange.split(',')" item="item" open="(" close=")" separator=",">
            #{item}
        </foreach>
        )
        union
        (
        SELECT
        jd.id
        FROM jczz_district jd
        where
        jd.id in
        <foreach collection="articleRange.split(',')" item="item" open="(" close=")" separator=",">
            #{item}
        </foreach>
        )
    </select>
</mapper>
src/main/java/org/springblade/modules/system/service/IRegionService.java
@@ -131,4 +131,11 @@
     * @return
     */
    List<Region> getGridRegionChild(String regionCode, String communityCode, String roleName);
    /**
     * 查询当前文章范围对应的社区名称字符串集合
     * @param articleRange
     * @return
     */
    String getAllCommunityNameListString(String articleRange);
}
src/main/java/org/springblade/modules/system/service/impl/RegionServiceImpl.java
@@ -330,4 +330,15 @@
        }
        return list;
    }
    /**
     * 查询当前文章范围对应的社区编号字符串集合
     * @param articleRange
     * @return
     */
    @Override
    public String getAllCommunityNameListString(String articleRange) {
        // 分割后es搜索才有效果,不能用逗号分割
        return String.join("\\",baseMapper.getAllCommunityNameListString(articleRange));
    }
}