From 764d883b5ea3bdc06abbec548b6df0511e567978 Mon Sep 17 00:00:00 2001
From: linwe <872216996@qq.com>
Date: Tue, 03 Sep 2024 09:46:05 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/binlog' into binlog

---
 src/main/java/org/springblade/es/service/ElasticsearchDocumentService.java |  787 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 787 insertions(+), 0 deletions(-)

diff --git a/src/main/java/org/springblade/es/service/ElasticsearchDocumentService.java b/src/main/java/org/springblade/es/service/ElasticsearchDocumentService.java
new file mode 100644
index 0000000..7fcfe2d
--- /dev/null
+++ b/src/main/java/org/springblade/es/service/ElasticsearchDocumentService.java
@@ -0,0 +1,787 @@
+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;
+import org.elasticsearch.action.admin.indices.refresh.RefreshRequest;
+import org.elasticsearch.action.bulk.BulkRequest;
+import org.elasticsearch.action.bulk.BulkResponse;
+import org.elasticsearch.action.index.IndexRequest;
+import org.elasticsearch.action.index.IndexResponse;
+import org.elasticsearch.action.search.SearchRequest;
+import org.elasticsearch.action.search.SearchResponse;
+import org.elasticsearch.action.support.master.AcknowledgedResponse;
+import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.elasticsearch.client.indices.GetIndexRequest;
+import org.elasticsearch.index.query.BoolQueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.index.reindex.BulkByScrollResponse;
+import org.elasticsearch.index.reindex.DeleteByQueryRequest;
+import org.elasticsearch.index.reindex.UpdateByQueryRequest;
+import org.elasticsearch.script.Script;
+import org.elasticsearch.script.ScriptType;
+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;
+import org.springblade.modules.house.service.IHouseholdService;
+import org.springblade.modules.house.vo.HouseVO;
+import org.springblade.modules.house.vo.HouseholdVO;
+import org.springblade.modules.place.entity.PlaceEntity;
+import org.springblade.modules.place.service.IPlaceService;
+import org.springblade.modules.place.vo.PlaceVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class ElasticsearchDocumentService<T> {
+
+	@Autowired
+	private RestHighLevelClient client;
+
+	@Autowired
+	private ArticleService articleService;
+
+	@Autowired
+	private IPlaceService placeService;
+
+	@Autowired
+	private IHouseService houseService;
+
+	@Autowired
+	private IHouseholdService householdService;
+
+	@Autowired
+	private IGridRangeService gridRangeService;
+
+	@Autowired
+	private IDoorplateAddressService doorplateAddressService;
+
+	@Value("${elasticsearch.sync}")
+	private boolean elasticsearchSync;
+
+	@Value("${elasticsearch.indexName}")
+	private String indexName;
+
+	/**
+	 * 检查索引是否已存在
+	 *
+	 * @param indexName
+	 * @return
+	 */
+	public boolean isIndexExists(String indexName) {
+		// 检查索引是否已存在
+		GetIndexRequest request = new GetIndexRequest(indexName);
+		try {
+			return client.indices().exists(request, RequestOptions.DEFAULT);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return false;
+	}
+
+	/**
+	 * 初始化数据
+	 *
+	 * @param esParam
+	 * @return
+	 */
+	public boolean init(EsParam 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;
+	}
+
+	/**
+	 * 初始化数据
+	 *
+	 * @param esParam
+	 * @return
+	 */
+	public boolean initPlace(EsParam esParam) {
+		// 查询
+		int total = placeService.getAllListTotal();
+		int size = 1000;
+		int num = total / size;
+		for (int i = 1; i <= num + 1; i++) {
+			List<PlaceVO> placeVOList = placeService.getAllList((i - 1) * size, size);
+			// 遍历
+			if (placeVOList.size() > 0) {
+				// 创建批量请求对象
+				BulkRequest bulkRequest = new BulkRequest();
+				for (PlaceVO place : placeVOList) {
+					// 入es库
+					// 初始化Elasticsearch客户端
+					IndexRequest indexRequest = new IndexRequest(esParam.getIndexName());
+					// 不设置id
+					// indexRequest.id("1");
+					indexRequest.source(
+						"tableId", place.getId().toString(),
+						"tableName", "jczz_place",
+						"title", place.getPlaceName(),
+						"name", place.getPrincipal(),
+						"phone", place.getPrincipalPhone(),
+						"idCard", place.getPrincipalIdCard(),
+						"content", place.getLocation(),
+						"communityCode", place.getCommunityCode()
+					);
+					// 加入集合
+					bulkRequest.add(indexRequest);
+				}
+				BulkResponse bulkResponse = null;
+				try {
+					// 执行批量插入
+					bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
+					// 刷新索引,确保文档可搜索
+					client.indices().refresh(new RefreshRequest(esParam.getIndexName()), RequestOptions.DEFAULT);
+				} catch (IOException e) {
+//					e.printStackTrace();
+				}
+//				System.out.println("批量插入结果: " + !bulkResponse.hasFailures());
+			}
+		}
+		// 返回
+		return true;
+	}
+
+	/**
+	 * 初始化公告数据
+	 *
+	 * @param esParam
+	 * @return
+	 */
+	public boolean initArticle(EsParam esParam) {
+		// 查询
+		int total = articleService.getAllListTotal();
+		int size = 10;
+		int num = total / size;
+		for (int i = 1; i <= num + 1; i++) {
+			// 查询
+			List<Article> articleList = articleService.getAllList((i - 1) * size, size);
+			// 遍历
+			if (articleList.size() > 0) {
+				BulkRequest bulkRequest = new BulkRequest();
+				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", toString,
+						"type", null != article.getType() ? article.getType().toString() : "",
+						"content", article.getContent(),
+						"articleType", article.getArticleType());
+					// 加入集合
+					bulkRequest.add(indexRequest);
+				}
+				BulkResponse bulkResponse = null;
+				try {
+					// 执行批量插入
+					bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
+					// 刷新索引,确保文档可搜索
+					client.indices().refresh(new RefreshRequest(esParam.getIndexName()), RequestOptions.DEFAULT);
+				} catch (IOException e) {
+//					e.printStackTrace();
+				}
+//				System.out.println("批量插入结果: " + !bulkResponse.hasFailures());
+			}
+		}
+		// 返回
+		return true;
+	}
+
+	/**
+	 * 初始化住户数据
+	 *
+	 * @param esParam
+	 * @return
+	 */
+	public boolean initHousehold(EsParam esParam) {
+		// 查询
+		int total = householdService.getAllListTotal();
+		int size = 1000;
+		int num = total / size;
+		for (int i = 1; i <= num + 1; i++) {
+			// 查询
+			List<HouseholdVO> householdVOList = householdService.getAllList((i - 1) * size, size);
+			// 遍历
+			if (householdVOList.size() > 0) {
+				BulkRequest bulkRequest = new BulkRequest();
+				for (HouseholdVO household : householdVOList) {
+					// 初始化Elasticsearch客户端
+					IndexRequest indexRequest = new IndexRequest(esParam.getIndexName());
+					// 不设置id
+					// indexRequest.id("1");
+					indexRequest.source(
+						"tableId", household.getId().toString(),
+						"tableName", "jczz_household",
+						"title", household.getName(),
+						"relationship", household.getRelationship(),
+						"name", household.getName(),
+						"phone", household.getPhoneNumber(),
+						"idCard", household.getIdCard(),
+						"content", household.getAddress(),
+						"communityCode", household.getCommunityCode()
+					);
+					// 加入集合
+					bulkRequest.add(indexRequest);
+				}
+				BulkResponse bulkResponse = null;
+				try {
+					// 执行批量插入
+					bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
+					// 刷新索引,确保文档可搜索
+					client.indices().refresh(new RefreshRequest(esParam.getIndexName()), RequestOptions.DEFAULT);
+				} catch (IOException e) {
+//					e.printStackTrace();
+				}
+//				System.out.println("批量插入结果: " + !bulkResponse.hasFailures());
+			}
+		}
+		// 返回
+		return true;
+	}
+
+	/**
+	 * 初始化房屋数据
+	 *
+	 * @param esParam
+	 * @return
+	 */
+	public boolean initHouse(EsParam esParam) {
+		// 查询
+		int total = houseService.getAllListTotal();
+		int size = 1000;
+		int num = total / size;
+		for (int i = 1; i <= num + 1; i++) {
+			// 查询
+			List<HouseVO> houseVOList = houseService.getAllList((i - 1) * size, size);
+			// 遍历
+			if (houseVOList.size() > 0) {
+				BulkRequest bulkRequest = new BulkRequest();
+				for (HouseVO house : houseVOList) {
+					// 初始化Elasticsearch客户端
+					IndexRequest indexRequest = new IndexRequest(esParam.getIndexName());
+					// 不设置id
+					// indexRequest.id("1");
+					indexRequest.source(
+						"tableId", house.getId().toString(),
+						"tableName", "jczz_house",
+						"title", house.getHouseName(),
+						"name", null,
+						"phone", null,
+						"idCard", null,
+						"content", null,
+						"communityCode", house.getCommunityCode()
+					);
+					// 加入集合
+					bulkRequest.add(indexRequest);
+				}
+				BulkResponse bulkResponse = null;
+				try {
+					// 执行批量插入
+					bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
+					// 刷新索引,确保文档可搜索
+					client.indices().refresh(new RefreshRequest(esParam.getIndexName()), RequestOptions.DEFAULT);
+				} catch (IOException e) {
+//					e.printStackTrace();
+				}
+//				System.out.println("批量插入结果: " + !bulkResponse.hasFailures());
+			}
+		}
+		// 返回
+		return true;
+	}
+
+	/**
+	 * 新增公告同步
+	 *
+	 * @param esParam
+	 * @param article
+	 */
+	@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", toString,
+					"type", null != article.getType() ? article.getType().toString() : "",
+					"content", article.getContent(),
+					"articleType", article.getArticleType()
+				);
+			} catch (IOException e) {
+//				e.printStackTrace();
+			}
+		}
+	}
+
+	/**
+	 * 新增场所同步
+	 *
+	 * @param esParam
+	 * @param place
+	 */
+	@Async
+	public void addPlace(EsParam esParam, PlaceEntity place) {
+		if (elasticsearchSync) {
+			try {
+				indexDocument(esParam.getIndexName(),
+					"tableId", place.getId().toString(),
+					"tableName", "jczz_place",
+					"title", place.getPlaceName(),
+					"name", place.getPrincipal(),
+					"phone", place.getPrincipalPhone(),
+					"idCard", place.getPrincipalIdCard(),
+					"content", place.getLocation(),
+					"communityCode", placeService.getCommunityCode(place.getId())
+				);
+			} catch (IOException e) {
+//				e.printStackTrace();
+			}
+		}
+	}
+
+	/**
+	 * 新增房屋同步
+	 *
+	 * @param esParam
+	 * @param house
+	 */
+	@Async
+	public void addHouse(EsParam esParam, HouseEntity house) {
+		if (elasticsearchSync) {
+			try {
+				indexDocument(esParam.getIndexName(),
+					"tableId", house.getId().toString(),
+					"tableName", "jczz_house",
+					"title", house.getHouseName(),
+					"name", null,
+					"phone", null,
+					"idCard", null,
+					"content", null,
+					"communityCode", houseService.getCommunityCode(house.getId())
+				);
+			} catch (IOException e) {
+//				e.printStackTrace();
+			}
+		}
+	}
+
+	/**
+	 * 新增住户同步
+	 *
+	 * @param esParam
+	 * @param household
+	 */
+	@Async
+	public void addHousehold(EsParam esParam, HouseholdEntity household) {
+		if (elasticsearchSync) {
+			// 如果关系为空,则默认为19
+			if (household.getRelationship() == null) {
+				household.setRelationship(19);
+			}
+			try {
+				indexDocument(esParam.getIndexName(),
+					"tableId", household.getId().toString(),
+					"tableName", "jczz_household",
+					"title", household.getName(),
+					"name", household.getName(),
+					"phone", household.getPhoneNumber(),
+					"idCard", household.getIdCard(),
+					"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;
+	}
+
+	/**
+	 * 插入数据到es
+	 *
+	 * @param index
+	 * @param values
+	 * @throws IOException
+	 */
+	public void indexDocument(String index, String... values) throws IOException {
+		// 初始化Elasticsearch客户端
+		IndexRequest indexRequest = new IndexRequest(index);
+
+		// 不设置id
+//		indexRequest.id("1");
+		indexRequest.source(values);
+
+		IndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);
+		// 刷新索引,确保文档可搜索
+		client.indices().refresh(new RefreshRequest(index), RequestOptions.DEFAULT);
+		System.out.println("Indexed document with id: " + indexResponse.getId());
+
+	}
+
+	/**
+	 * 查询数据
+	 *
+	 * @param page
+	 * @param esParam
+	 * @return
+	 */
+	public Object selectDocumentPage(IPage<Object> page, EsParam esParam) {
+		if (Strings.isBlank(esParam.getIndexName())){
+			esParam.setIndexName(indexName);
+		}
+		// 判断索引是否存在
+		if (isIndexExists(esParam.getIndexName())) {
+			// 全文搜索
+			SearchRequest searchRequest = new SearchRequest(esParam.getIndexName());
+			SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
+			//		searchSourceBuilder.query(QueryBuilders.multiMatchQuery(esParam.getSearchKey(),
+			//			"content",
+			//			"name",
+			//			"title",
+			//			"location",
+			//			"phone",
+			//			"idCard",
+			//			"communityCode")
+			//			.type(MultiMatchQueryBuilder.Type.BEST_FIELDS)
+			//		);
+			BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
+//			boolQueryBuilder.should(QueryBuilders.matchQuery("content", esParam.getSearchKey()));
+//			boolQueryBuilder.should(QueryBuilders.matchQuery("name", 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)) {
+				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));
+				}
+			}
+			if (!Strings.isBlank(roleName)){
+				if (roleName.equals("wgy") || roleName.equals("mj")){
+					// 不查公告
+					boolQueryBuilder.mustNot(QueryBuilders.matchQuery("tableName", "jczz_article"));
+				}
+				if (roleName.equals("inhabitant")){
+					// 只查公告
+					boolQueryBuilder.must(QueryBuilders.matchQuery("tableName", "jczz_article"));
+				}
+				if (roleName.equals("wzcj")){
+					// 只查场所
+					boolQueryBuilder.must(QueryBuilders.matchQuery("tableName", "jczz_place"));
+				}
+			}
+
+			boolQueryBuilder.minimumShouldMatch(1);
+			searchSourceBuilder.query(boolQueryBuilder);
+
+			int current = (int) page.getCurrent();
+			int size = (int) page.getSize();
+			//设置分页
+			searchSourceBuilder.size(size);
+			searchSourceBuilder.from((current - 1) * size);
+
+			//将搜索资源对象设置到搜索客户端中
+			searchRequest.source(searchSourceBuilder);
+			//查询
+			SearchResponse searchResponse = null;
+			try {
+				searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+			//解析搜索返回值
+			SearchHits searchHits = searchResponse.getHits();
+			//查询的总数
+			long count = searchHits.getTotalHits().value;
+			List<Object> list = new ArrayList<>();
+			for (SearchHit hit : searchHits) {
+//				System.out.println("hit.getId() = " + hit.getId());
+				Map<String, Object> result = hit.getSourceAsMap();
+				if (null != result){
+					if (result.get("tableName").toString().equals("jczz_article")){
+						result.put("typeName","通知公告");
+					}
+					if (result.get("tableName").toString().equals("jczz_place")){
+						result.put("typeName","经营场所");
+					}
+					if (result.get("tableName").toString().equals("jczz_house")){
+						result.put("typeName","房屋");
+					}
+					if (result.get("tableName").toString().equals("jczz_household")){
+						result.put("typeName","住户");
+					}
+				}
+				// 文档源数据
+//			String source = hit.getSourceAsString();
+				list.add(result);
+			}
+			page.setRecords(list);
+			page.setTotal(count);
+		}
+		return page;
+	}
+
+	/**
+	 * 根据索引删除
+	 */
+	public boolean removeBatchByIndexNames(List<String> indexNames) {
+		for (String indexName : indexNames) {
+			// 索引存在才删除
+			if (isIndexExists(indexName)) {
+				DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest(indexName);
+				try {
+					// 执行删除索引操作
+					AcknowledgedResponse deleteResponse = client.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
+
+					// 输出操作结果
+					boolean acknowledged = deleteResponse.isAcknowledged();
+//					System.out.println("索引删除成功: " + acknowledged);
+				} catch (IOException e) {
+//					e.printStackTrace();
+				}
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * 新增数据--有问题,待调整
+	 */
+	@Async
+	public boolean add(EsParam esParam, T item) {
+		String str = "tableName," + esParam.getTableName() + ",";
+		CommonParamSet commonParamSet =
+			new CommonParamSet().setFieldValue(item.getClass(), item, EsTableConstant.articleList, str);
+		try {
+			indexDocument(esParam.getIndexName(), str);
+		} catch (IOException e) {
+//			e.printStackTrace();
+		}
+		return true;
+	}
+
+
+	/**
+	 * 修改数据
+	 */
+	@Async
+	public void update(EsParam esParam, T item,List<String> columnList) {
+		// 判断索引是否存在
+		if (elasticsearchSync && isIndexExists(esParam.getIndexName())) {
+			// 创建更新请求
+			UpdateByQueryRequest updateRequest = new UpdateByQueryRequest(esParam.getIndexName());
+
+			// 设置查询条件,例如:更新所有字段text包含"old text"的文档
+			updateRequest.setQuery(
+				QueryBuilders.boolQuery()
+					.must(QueryBuilders.matchQuery("tableId", esParam.getTableId()))
+					.must(QueryBuilders.matchQuery("tableName", esParam.getTableName()))
+			);
+
+			Map<String, Object> data = new HashMap<String, Object>();
+			data.put("tableName", esParam.getTableName());
+			if (esParam.getTableName().equals("jczz_article")) {
+				setArticleMap((Article) item, data);
+			}
+			if (esParam.getTableName().equals("jczz_place")) {
+				setPlaceMap((PlaceEntity) item, data);
+			}
+			if (esParam.getTableName().equals("jczz_house")) {
+				setHouseMap((HouseEntity) item, data);
+			}
+			if (esParam.getTableName().equals("jczz_household")) {
+				setHouseholdMap((HouseholdEntity) item, data);
+			}
+			Map<String, Object> param = new HashMap<String, Object>();
+			param.put("data", data);
+
+			// script will read data param value and assign to document source
+			String source = "ctx._source=params.data";
+			Script script = new Script(ScriptType.INLINE, "painless", source, param);
+			updateRequest.setScript(script);
+			// 执行更新操作
+			try {
+				client.updateByQuery(updateRequest, RequestOptions.DEFAULT);
+				// 刷新索引,确保文档可搜索
+				client.indices().refresh(new RefreshRequest(esParam.getIndexName()), RequestOptions.DEFAULT);
+			} catch (IOException e) {
+//				e.printStackTrace();
+			}
+		}
+	}
+
+	/**
+	 * 设置公告map
+	 * @param item
+	 * @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",toString);
+	}
+	/**
+	 * 设置场所map
+	 * @param item
+	 * @param data
+	 */
+	private void setPlaceMap(PlaceEntity item, Map<String, Object> data) {
+		data.put("communityCode",placeService.getCommunityCode(item.getId()));
+		data.put("tableId",item.getId());
+		data.put("title",item.getPlaceName());
+		data.put("name",item.getPrincipal());
+		data.put("phone",item.getPrincipalPhone());
+		data.put("idCard",item.getPrincipalIdCard());
+		data.put("content",item.getLocation());
+	}
+	/**
+	 * 设置房屋map
+	 * @param item
+	 * @param data
+	 */
+	private void setHouseMap(HouseEntity item, Map<String, Object> data) {
+		data.put("communityCode",houseService.getCommunityCode(item.getId()));
+		data.put("tableId",item.getId());
+		data.put("title",item.getHouseName());
+	}
+	/**
+	 * 设置住户map
+	 * @param item
+	 * @param 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",getAddress(item));
+	}
+
+	/**
+	 * 删除数据--根据条件
+	 */
+	public boolean removeByQuery(EsParam esParam) {
+		if (elasticsearchSync && isIndexExists(esParam.getIndexName())) {
+			DeleteByQueryRequest deleteByQueryRequest = new DeleteByQueryRequest(esParam.getIndexName());
+			// 根据多个条件 生成 boolQueryBuilder
+			BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
+			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 =
+					client.deleteByQuery(deleteByQueryRequest, RequestOptions.DEFAULT);
+			} catch (IOException e) {
+//				e.printStackTrace();
+			}
+		}
+		return true;
+	}
+}

--
Gitblit v1.9.3