From 2d37fa5cf4ebf8bdcae40c5a9f63d561f307e2af Mon Sep 17 00:00:00 2001
From: lin <sbla5888@163.com>
Date: Wed, 10 Apr 2024 10:22:48 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/main/java/org/springblade/modules/house/mapper/HouseholdMapper.java             |   20 
 src/main/resources/application-prod.yml                                             |    7 
 src/main/java/org/springblade/modules/article/controller/ArticleController.java     |   14 
 pom.xml                                                                             |   32 
 src/main/java/org/springblade/es/controller/EsController.java                       |   79 ++
 src/main/java/org/springblade/es/vo/EsParam.java                                    |   32 +
 src/main/java/org/springblade/modules/house/mapper/HouseMapper.xml                  |   32 +
 src/main/java/org/springblade/es/service/ElasticsearchIndexService.java             |   37 +
 src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java                 |   19 
 src/main/java/org/springblade/es/service/ElasticsearchSearchService.java            |   29 
 src/main/java/org/springblade/modules/place/service/IPlaceService.java              |   18 
 src/main/java/org/springblade/modules/house/service/impl/HouseServiceImpl.java      |   30 
 src/main/java/org/springblade/modules/house/mapper/HouseMapper.java                 |   21 
 src/main/resources/application-dev.yml                                              |    7 
 src/main/java/org/springblade/es/config/ElasticsearchConfig.java                    |   24 
 src/main/java/org/springblade/modules/article/service/ArticleService.java           |   12 
 src/main/java/org/springblade/modules/house/service/impl/HouseholdServiceImpl.java  |   29 
 src/main/java/org/springblade/es/service/ElasticsearchDocumentService.java          |  695 +++++++++++++++++++++
 src/main/java/org/springblade/modules/backblast/mapper/BackblastPubPersonMapper.xml |    2 
 src/main/java/org/springblade/common/constant/EsTableConstant.java                  |   69 ++
 src/main/java/org/springblade/es/test/ElasticSearchExample.java                     |   96 +++
 src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java      |   28 
 src/main/java/org/springblade/common/interceptor/DataSyncInterceptor.java           |  225 +++++++
 src/main/java/org/springblade/modules/house/service/IHouseService.java              |   21 
 src/main/java/org/springblade/modules/article/mapper/ArticleMapper.xml              |   21 
 src/main/resources/application-test.yml                                             |    7 
 src/main/java/org/springblade/modules/article/mapper/ArticleMapper.java             |   12 
 src/main/java/org/springblade/modules/article/service/impl/ArticleServiceImpl.java  |   18 
 src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml                  |   29 
 src/main/java/org/springblade/common/utils/SQLParseUtils.java                       |   41 +
 src/main/java/org/springblade/modules/place/entity/PlaceEntity.java                 |    3 
 src/main/java/org/springblade/modules/house/mapper/HouseholdMapper.xml              |   34 +
 src/main/java/org/springblade/common/param/CommonParamSet.java                      |   74 ++
 src/main/java/org/springblade/modules/house/service/IHouseholdService.java          |   27 
 src/main/java/org/springblade/es/service/ElasticsearchIndexInitializer.java         |   33 +
 src/main/java/org/springblade/common/config/MyBatisPlusConfig.java                  |   15 
 src/main/java/org/springblade/es/config/ElasticsearchInitializer.java               |   24 
 37 files changed, 1,903 insertions(+), 13 deletions(-)

diff --git a/pom.xml b/pom.xml
index 8aae144..682985a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -267,8 +267,36 @@
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
         </dependency>
-
-
+        <!-- ElasticSearch -->
+<!--        <dependency>-->
+<!--            <groupId>org.springframework.boot</groupId>-->
+<!--            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>-->
+<!--            <version>2.7.1</version>-->
+<!--        </dependency>-->
+        <!--导入了elasticsearch  -->
+        <dependency>
+            <groupId>org.elasticsearch.client</groupId>
+            <artifactId>elasticsearch-rest-high-level-client</artifactId>
+            <version>7.17.4</version>
+            <!--            <version>6.7.2</version>-->
+            <exclusions>
+                <exclusion>
+                    <artifactId>elasticsearch</artifactId>
+                    <groupId>org.elasticsearch</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.elasticsearch</groupId>
+            <artifactId>elasticsearch</artifactId>
+            <version>7.17.4</version>
+<!--            <version>6.7.2</version>-->
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid</artifactId>
+            <scope>provided</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/src/main/java/org/springblade/common/config/MyBatisPlusConfig.java b/src/main/java/org/springblade/common/config/MyBatisPlusConfig.java
new file mode 100644
index 0000000..56906b2
--- /dev/null
+++ b/src/main/java/org/springblade/common/config/MyBatisPlusConfig.java
@@ -0,0 +1,15 @@
+package org.springblade.common.config;
+
+import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
+import org.springblade.common.interceptor.DataSyncInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class MyBatisPlusConfig {
+
+	@Bean
+	public DataSyncInterceptor dataSyncInterceptor() {
+		return new DataSyncInterceptor();
+	}
+}
diff --git a/src/main/java/org/springblade/common/constant/EsTableConstant.java b/src/main/java/org/springblade/common/constant/EsTableConstant.java
new file mode 100644
index 0000000..0c8ebf9
--- /dev/null
+++ b/src/main/java/org/springblade/common/constant/EsTableConstant.java
@@ -0,0 +1,69 @@
+package org.springblade.common.constant;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * es 表对应的属性常量
+ * @author zhongrj
+ * @since 2024-04-08
+ */
+public class EsTableConstant {
+
+
+	/**
+	 * 1. 通知
+	 */
+	public static List<String> articleList = new ArrayList<String>()
+	{{
+		add("tableId");
+		add("tableName");
+		add("title");
+		add("type");
+		add("content");
+		add("articleType");
+		add("articleRange");
+	}};
+
+
+	/**
+	 * 2. 场所
+	 */
+	public static List<String> placeList = new ArrayList<String>()
+	{{
+		add("tableId");
+		add("tableName");
+		add("placeName");
+		add("principal");
+		add("principalPhone");
+		add("principalIdCard");
+		add("location");
+	}};
+
+
+	/**
+	 * 3. 房屋
+	 */
+	public static List<String> houseList = new ArrayList<String>()
+	{{
+		add("tableId");
+		add("tableName");
+		add("houseName");
+	}};
+
+
+	/**
+	 * 4. 住户
+	 */
+	public static List<String> householdList = new ArrayList<String>()
+	{{
+		add("tableId");
+		add("tableName");
+		add("name");
+		add("idCard");
+		add("phoneNumber");
+		add("address");
+	}};
+
+
+}
diff --git a/src/main/java/org/springblade/common/interceptor/DataSyncInterceptor.java b/src/main/java/org/springblade/common/interceptor/DataSyncInterceptor.java
new file mode 100644
index 0000000..a23c31b
--- /dev/null
+++ b/src/main/java/org/springblade/common/interceptor/DataSyncInterceptor.java
@@ -0,0 +1,225 @@
+package org.springblade.common.interceptor;
+
+import org.apache.ibatis.binding.MapperMethod;
+import org.apache.ibatis.executor.Executor;
+import org.apache.ibatis.mapping.BoundSql;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.plugin.*;
+import org.apache.logging.log4j.util.Strings;
+import org.springblade.common.constant.EsTableConstant;
+import org.springblade.common.utils.SQLParseUtils;
+import org.springblade.es.service.ElasticsearchDocumentService;
+import org.springblade.es.vo.EsParam;
+import org.springblade.modules.article.entity.Article;
+import org.springblade.modules.house.entity.HouseEntity;
+import org.springblade.modules.house.entity.HouseholdEntity;
+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.vo.PlaceVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+@Component
+@Intercepts({
+	@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})
+})
+public class DataSyncInterceptor implements Interceptor {
+
+	@Lazy
+	@Autowired
+	private ElasticsearchDocumentService elasticsearchDocumentService;
+
+	@Value("${elasticsearch.indexName}")
+	private String indexName;
+
+	/**
+	 * 拦截器在sql执行成功后同步到es,
+	 * 如果同步失败抛出异常,保证数据一致性
+	 *
+	 * @param invocation
+	 * @return
+	 * @throws Throwable
+	 */
+	@Override
+	public Object intercept(Invocation invocation) throws Throwable {
+		// 获取StatementHandler,进行自定义处理
+//		StatementHandler statementHandler = PluginUtils.realTarget(invocation.getTarget());
+
+		Object res = invocation.proceed();
+		System.out.println("res = " + res);
+
+		Object[] args = invocation.getArgs();
+		MappedStatement ms = (MappedStatement) args[0];
+		if (args.length >= 2) {
+			//参数
+			Object parameter = invocation.getArgs()[1];
+			BoundSql boundSql = ms.getBoundSql(parameter);
+			//sql
+			String sql = boundSql.getSql();
+			sql = sql.replaceAll("\n", "");
+			//获取表名
+			String tableName = SQLParseUtils.getTableName(sql);
+			String sqlType = SQLParseUtils.parseSQLType(sql);
+			if (!Strings.isBlank(tableName)) {
+				if (tableName.equals("jczz_article") ||
+					tableName.equals("jczz_house") ||
+					tableName.equals("jczz_household") ||
+					tableName.equals("jczz_place"))
+				syncDataAfterUpdate(tableName,sqlType,invocation.getArgs()[1]);
+			}
+		}
+		return res;
+	}
+
+
+	/**
+	 * 数据同步
+	 * @param tableName
+	 * @param sqlType
+	 * @param parameter
+	 */
+	private void syncDataAfterUpdate(String tableName,String sqlType,Object parameter) {
+		EsParam esParam = new EsParam();
+		esParam.setIndexName(indexName);
+		esParam.setTableName(tableName);
+		// 判断操作类型
+		if (sqlType.equals("INSERT")){
+			//insert 可用直接拦截到实体类
+			if (tableName.equals("jczz_article")) {
+				Article entity = (Article) parameter;
+				elasticsearchDocumentService.addArticle(esParam,entity);
+			}
+			if (tableName.equals("jczz_place")) {
+				PlaceVO entity = (PlaceVO) parameter;
+				elasticsearchDocumentService.addPlace(esParam,entity);
+			}
+			if (tableName.equals("jczz_house")) {
+				HouseVO entity = (HouseVO) parameter;
+				elasticsearchDocumentService.addHouse(esParam,entity);
+			}
+			if (tableName.equals("jczz_household")) {
+				HouseholdVO entity = (HouseholdVO) parameter;
+				elasticsearchDocumentService.addHousehold(esParam,entity);
+			}
+		}
+		if(sqlType.equals("UPDATE")){
+			//update 方法需要特殊处理
+			if (tableName.equals("jczz_article")) {
+				Article entity = (Article) ((MapperMethod.ParamMap) parameter).get("param1");
+				if (null!=entity.getId()) {
+					esParam.setTableId(entity.getId().toString());
+					elasticsearchDocumentService.update(esParam, entity, EsTableConstant.articleList);
+				}
+			}
+			if (tableName.equals("jczz_place")) {
+				PlaceEntity entity = new PlaceEntity();
+				PlaceEntity placeEntity = new PlaceEntity();
+				if (parameter instanceof MapperMethod.ParamMap){
+					placeEntity = (PlaceEntity) ((MapperMethod.ParamMap) parameter).get("param1");
+					if (null!=placeEntity.getId()) {
+						setPlaceInfo(entity, placeEntity);
+						esParam.setTableId(entity.getId().toString());
+						elasticsearchDocumentService.update(esParam, entity, EsTableConstant.placeList);
+					}
+				}else {
+					placeEntity = (PlaceEntity) parameter;
+					// 删除
+					esParam.setTableId(placeEntity.getId().toString());
+					elasticsearchDocumentService.removeByQuery(esParam);
+				}
+			}
+			if (tableName.equals("jczz_house")) {
+				HouseEntity houseEntity = new HouseEntity();
+				HouseEntity entity = new HouseEntity();
+				if (parameter instanceof MapperMethod.ParamMap){
+					entity = (HouseEntity) ((MapperMethod.ParamMap) parameter).get("param1");
+					if (null!=entity.getId()) {
+						setHouseInfo(houseEntity, entity);
+						esParam.setTableId(entity.getId().toString());
+						elasticsearchDocumentService.update(esParam, entity, EsTableConstant.houseList);
+					}
+				}else {
+					entity = (HouseEntity) parameter;
+					// 删除
+					esParam.setTableId(entity.getId().toString());
+					elasticsearchDocumentService.removeByQuery(esParam);
+				}
+			}
+			if (tableName.equals("jczz_household")) {
+				HouseholdEntity householdEntity = new HouseholdEntity();
+				HouseholdEntity entity = new HouseholdEntity();
+				if (parameter instanceof MapperMethod.ParamMap){
+					entity = (HouseholdEntity) ((MapperMethod.ParamMap) parameter).get("param1");
+					if (null!=entity.getId()) {
+						setHouseholdInfo(householdEntity, entity);
+						esParam.setTableId(entity.getId().toString());
+						elasticsearchDocumentService.update(esParam, entity, EsTableConstant.householdList);
+					}
+				}else {
+					entity = (HouseholdEntity) parameter;
+					// 删除
+					esParam.setTableId(entity.getId().toString());
+					elasticsearchDocumentService.removeByQuery(esParam);
+				}
+			}
+		}
+		// 删除处理
+		if(sqlType.equals("DELETE")){
+			List<Long> list =(List<Long>) ((MapperMethod.ParamMap) parameter).get("param1");
+			esParam.setTableId(list.get(0).toString());
+			elasticsearchDocumentService.removeByQuery(esParam);
+		}
+	}
+
+	/**
+	 * 场所值复制
+	 * @param entity
+	 * @param placeEntity
+	 */
+	private void setPlaceInfo(PlaceEntity entity, PlaceEntity placeEntity) {
+		entity.setId(placeEntity.getId());
+		entity.setPlaceName(placeEntity.getPlaceName());
+		entity.setPrincipal(placeEntity.getPrincipal());
+		entity.setPrincipalPhone(placeEntity.getPrincipalPhone());
+		entity.setPrincipalIdCard(placeEntity.getPrincipalIdCard());
+		entity.setLocation(placeEntity.getLocation());
+	}
+	/**
+	 * 房屋值复制
+	 * @param entity
+	 * @param houseEntity
+	 */
+	private void setHouseInfo(HouseEntity entity, HouseEntity houseEntity) {
+		entity.setId(houseEntity.getId());
+		entity.setHouseName(houseEntity.getHouseName());
+	}
+
+	/**
+	 * 住户值复制
+	 * @param entity
+	 * @param householdEntity
+	 */
+	private void setHouseholdInfo(HouseholdEntity entity, HouseholdEntity householdEntity) {
+		entity.setId(householdEntity.getId());
+		entity.setName(householdEntity.getName());
+		entity.setPhoneNumber(householdEntity.getPhoneNumber());
+		entity.setIdCard(householdEntity.getIdCard());
+		entity.setCurrentAddress(householdEntity.getCurrentAddress());
+	}
+
+
+	@Override
+	public Object plugin(Object target) {
+		return Plugin.wrap(target, this);
+	}
+
+	@Override
+	public void setProperties(Properties properties) {
+	}
+}
diff --git a/src/main/java/org/springblade/common/param/CommonParamSet.java b/src/main/java/org/springblade/common/param/CommonParamSet.java
index 11bc9e7..4420207 100644
--- a/src/main/java/org/springblade/common/param/CommonParamSet.java
+++ b/src/main/java/org/springblade/common/param/CommonParamSet.java
@@ -2,6 +2,7 @@
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.logging.log4j.util.Strings;
+import org.apache.poi.hssf.record.DVALRecord;
 import org.springblade.common.cache.SysCache;
 import org.springblade.common.utils.AuthUtils;
 import org.springblade.common.utils.SpringUtils;
@@ -15,6 +16,7 @@
 import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 import static org.springblade.core.secure.utils.AuthUtil.getUserRole;
 
@@ -32,6 +34,11 @@
 	 */
 	private List<String> gridCodeList = new ArrayList<>();
 
+	/**
+	 *
+	 */
+	private String str = null;
+
 	public List<String> getRegionChildCodesList() {
 		return regionChildCodesList;
 	}
@@ -42,6 +49,10 @@
 
 	public List<String> getGridCodeList() {
 		return gridCodeList;
+	}
+
+	public String getStr() {
+		return str;
 	}
 
 	public <U> CommonParamSet invoke(Class<U> clazz, T t) {
@@ -108,5 +119,68 @@
 		return this;
 	}
 
+	/**
+	 * 设置对应的属性值
+	 * @param clazz
+	 * @param t
+	 * @param list 字段属性集合
+	 * @param pre 字段拼接
+	 * @return
+	 */
+	public <U> CommonParamSet setFieldValue(Class<U> clazz, T t,List<String> list,String pre) {
+		//获取传入对象信息
+		U u = clazz.cast(t);
+		try {
+			StringBuilder builder = new StringBuilder(pre);
+			for (String fieldName : list) {
+				if (!fieldName.equals("tableName")) {
+					if (fieldName.equals("tableId")) {
+						fieldName = "id";
+					}
+					Field field = u.getClass().getDeclaredField(fieldName);
+					field.setAccessible(true);
+					builder.append(field.get(t).toString()).append(",");
+				}
+			}
+			String toString = builder.toString();
+			str = toString.substring(0,toString.length()-1);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return this;
+	}
+
+	/**
+	 * 设置对应的属性值
+	 * @param clazz
+	 * @param t
+	 * @param list 字段属性集合
+	 * @param map
+	 * @return
+	 */
+	public <U> CommonParamSet setFieldValueByMap(Class<U> clazz, T t, List<String> list, Map<String,Object> map) {
+		//获取传入对象信息
+		U u = clazz.cast(t);
+		try {
+			for (String fieldName : list) {
+				if (!fieldName.equals("tableName")){
+					if (fieldName.equals("tableId")){
+						fieldName = "id";
+					}
+					Field field = u.getClass().getDeclaredField(fieldName);
+					field.setAccessible(true);
+					String value = field.get(t).toString();
+					if (fieldName.equals("id")){
+						fieldName = "tableId";
+					}
+					map.put(fieldName,value);
+				}
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return this;
+	}
+
 
 }
diff --git a/src/main/java/org/springblade/common/utils/SQLParseUtils.java b/src/main/java/org/springblade/common/utils/SQLParseUtils.java
new file mode 100644
index 0000000..d8e934d
--- /dev/null
+++ b/src/main/java/org/springblade/common/utils/SQLParseUtils.java
@@ -0,0 +1,41 @@
+package org.springblade.common.utils;
+
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+public class SQLParseUtils {
+
+	public static String parseSQLType(String sql){
+		if (sql==null){
+			return null;
+		}
+		String type = sql.split(" ")[0];
+		if (type.equalsIgnoreCase("INSERT")){
+			return "INSERT";
+		} else if (type.equalsIgnoreCase("UPDATE")) {
+			return "UPDATE";
+		} else if (type.equalsIgnoreCase("DELETE")) {
+			return "DELETE";
+		}else {
+			return null;
+		}
+	}
+
+	public static String getTableName(String sql) {
+
+		String tableName = null;
+		// 正则表达式匹配 INSERT、UPDATE 和 DELETE 语句
+		String regex = "(?i)(?:INSERT\\s+INTO|UPDATE|DELETE\\s+FROM)\\s+(\\w+)";
+		Pattern pattern = Pattern.compile(regex);
+		Matcher matcher = pattern.matcher(sql.trim());
+		if (matcher.find()) {
+			tableName = matcher.group(1);
+		}
+		return tableName;
+	}
+	public static void main(String[] args) {
+		String tableName = getTableName("INSERT INTO orders (customer_id, product_id, quantity) VALUES (789, 123, 5)");
+		System.out.println(tableName);
+	}
+
+}
+
diff --git a/src/main/java/org/springblade/es/config/ElasticsearchConfig.java b/src/main/java/org/springblade/es/config/ElasticsearchConfig.java
new file mode 100644
index 0000000..4498f6c
--- /dev/null
+++ b/src/main/java/org/springblade/es/config/ElasticsearchConfig.java
@@ -0,0 +1,24 @@
+package org.springblade.es.config;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.apache.http.HttpHost;
+import org.elasticsearch.client.RestClient;
+import org.elasticsearch.client.RestClientBuilder;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@ConditionalOnProperty(value = "elasticsearch.enabled")
+public class ElasticsearchConfig {
+
+	@Value("${elasticsearch.host}")
+	private String elasticsearchHost;
+
+	@Bean
+	public RestHighLevelClient elasticsearchClient() {
+		RestClientBuilder builder = RestClient.builder(new HttpHost(elasticsearchHost, 9200, "http"));
+		return new RestHighLevelClient(builder);
+	}
+}
diff --git a/src/main/java/org/springblade/es/config/ElasticsearchInitializer.java b/src/main/java/org/springblade/es/config/ElasticsearchInitializer.java
new file mode 100644
index 0000000..7428633
--- /dev/null
+++ b/src/main/java/org/springblade/es/config/ElasticsearchInitializer.java
@@ -0,0 +1,24 @@
+package org.springblade.es.config;
+
+import org.springblade.es.service.ElasticsearchIndexInitializer;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.stereotype.Component;
+// 暂时关闭
+//@Component
+public class ElasticsearchInitializer implements CommandLineRunner {
+
+	private final ElasticsearchIndexInitializer indexInitializer;
+
+	@Autowired
+	public ElasticsearchInitializer(ElasticsearchIndexInitializer indexInitializer) {
+		this.indexInitializer = indexInitializer;
+	}
+
+	@Override
+	public void run(String... args) {
+		String indexName = "your_index_name";
+		String mappingJson = "{\"properties\":{\"your_field\":{\"type\":\"text\"}}}";
+		indexInitializer.initializeIndex(indexName, mappingJson);
+	}
+}
diff --git a/src/main/java/org/springblade/es/controller/EsController.java b/src/main/java/org/springblade/es/controller/EsController.java
new file mode 100644
index 0000000..cf08cc7
--- /dev/null
+++ b/src/main/java/org/springblade/es/controller/EsController.java
@@ -0,0 +1,79 @@
+package org.springblade.es.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.es.service.ElasticsearchDocumentService;
+import org.springblade.es.vo.EsParam;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * es 全文检索
+ */
+@RestController
+@RequestMapping("/es/es")
+@AllArgsConstructor
+@Api(value = "es 全文检索", tags = "es 全文检索")
+public class EsController {
+
+	private final ElasticsearchDocumentService elasticsearchDocumentService;
+
+	/**
+	 * 查询
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 1)
+	public R page(EsParam esParam, Query query) {
+		return R.data(elasticsearchDocumentService.selectDocumentPage(Condition.getPage(query), esParam));
+	}
+
+	/**
+	 * 初始化
+	 */
+	@GetMapping("/init")
+	@ApiOperationSupport(order = 2)
+	public R init(EsParam esParam) {
+		return R.status(elasticsearchDocumentService.init(esParam));
+	}
+
+	/**
+	 * 新增数据
+	 */
+	@GetMapping("/add")
+	@ApiOperationSupport(order = 3)
+	public R add(EsParam esParam) {
+		return R.status(elasticsearchDocumentService.add(esParam,null));
+	}
+
+	/**
+	 * 修改数据
+	 */
+	@GetMapping("/update")
+	@ApiOperationSupport(order = 4)
+	public R update(EsParam esParam) {
+		elasticsearchDocumentService.update(esParam,null,null);
+		return R.status(true);
+	}
+
+	/**
+	 * 根据索引删除
+	 */
+	@PostMapping("/removeBatchByIndexNames")
+	@ApiOperationSupport(order = 5)
+	public R removeBatchByIndexNames(@RequestParam String indexNames) {
+		return R.status(elasticsearchDocumentService.removeBatchByIndexNames(Func.toStrList(indexNames)));
+	}
+
+	/**
+	 * 根据条件删除
+	 */
+	@PostMapping("/removeByQuery")
+	@ApiOperationSupport(order = 6)
+	public R removeByQuery(EsParam esParam) {
+		return R.status(elasticsearchDocumentService.removeByQuery(esParam));
+	}
+}
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..1906861
--- /dev/null
+++ b/src/main/java/org/springblade/es/service/ElasticsearchDocumentService.java
@@ -0,0 +1,695 @@
+package org.springblade.es.service;
+
+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.*;
+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.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.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 org.elasticsearch.script.Script;
+
+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;
+
+	@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) {
+		// 场所
+		initPlace(esParam);
+		// 通知文章
+		initArticle(esParam);
+		// 房屋
+		initHouse(esParam);
+		// 住户
+		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());
+					// 不设置id
+					// indexRequest.id("1");
+					indexRequest.source("tableId", article.getId().toString(),
+						"tableName", "jczz_article",
+						"title", article.getTitle(),
+						"communityCode", article.getArticleRange(),
+						"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(),
+						"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) {
+			try {
+				indexDocument(esParam.getIndexName(),
+					"tableId", article.getId().toString(),
+					"tableName", "jczz_article",
+					"title", article.getTitle(),
+					"communityCode", article.getArticleRange(),
+					"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, PlaceVO place) {
+		if (elasticsearchSync) {
+			if (!Strings.isBlank(place.getCommunityCode())) {
+				place.setCommunityCode(placeService.getCommunityCode(place.getId()));
+			}
+			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", place.getCommunityCode()
+				);
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+
+	/**
+	 * 新增房屋同步
+	 *
+	 * @param esParam
+	 * @param house
+	 */
+	@Async
+	public void addHouse(EsParam esParam, HouseVO house) {
+		if (elasticsearchSync) {
+			if (!Strings.isBlank(house.getCommunityCode())) {
+				house.setCommunityCode(houseService.getCommunityCode(house.getId()));
+			}
+			try {
+				indexDocument(esParam.getIndexName(),
+					"tableId", house.getId().toString(),
+					"tableName", "jczz_house",
+					"title", house.getHouseName(),
+					"name", null,
+					"phone", null,
+					"idCard", null,
+					"content", null,
+					"communityCode", house.getCommunityCode()
+				);
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+
+	/**
+	 * 新增住户同步
+	 *
+	 * @param esParam
+	 * @param household
+	 */
+	@Async
+	public void addHousehold(EsParam esParam, HouseholdVO household) {
+		if (elasticsearchSync) {
+			if (!Strings.isBlank(household.getCommunityCode())) {
+				household.setCommunityCode(householdService.getCommunityCode(household.getId()));
+			}
+			try {
+				indexDocument(esParam.getIndexName(),
+					"tableId", household.getId().toString(),
+					"tableName", "jczz_household",
+					"title", household.getName(),
+					"name", household.getName(),
+					"phone", household.getPhoneNumber(),
+					"idCard", household.getIdCard(),
+					"content", household.getAddress(),
+					"communityCode", household.getCommunityCode()
+				);
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+
+	/**
+	 * 插入数据到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.matchQuery("title", esParam.getSearchKey()));
+//			boolQueryBuilder.should(QueryBuilders.matchQuery("location", esParam.getSearchKey()));
+//			boolQueryBuilder.should(QueryBuilders.matchQuery("phone", esParam.getSearchKey()));
+//			boolQueryBuilder.should(QueryBuilders.matchQuery("idCard", esParam.getSearchKey()));
+			String communityCode = SpringUtils.getRequestParam("communityCode");
+			if (!Strings.isBlank(communityCode)) {
+				boolQueryBuilder.must(QueryBuilders.matchQuery("communityCode", communityCode));
+			}
+			if (!Strings.isBlank(esParam.getTableName())) {
+				boolQueryBuilder.must(QueryBuilders.matchQuery("tableName", esParam.getTableName()));
+			}
+			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) {
+			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) {
+			// 创建更新请求
+			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")){
+				setHousehouldMap((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) {
+		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());
+	}
+	/**
+	 * 设置场所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 setHousehouldMap(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("name",item.getName());
+		data.put("phone",item.getPhoneNumber());
+		data.put("idCard",item.getIdCard());
+		data.put("content",item.getCurrentAddress());
+	}
+
+	/**
+	 * 删除数据--根据条件
+	 */
+	public boolean removeByQuery(EsParam esParam) {
+		if (elasticsearchSync) {
+			DeleteByQueryRequest deleteByQueryRequest = new DeleteByQueryRequest(esParam.getIndexName());
+			// 根据多个条件 生成 boolQueryBuilder
+			BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
+			boolQueryBuilder
+				.must(QueryBuilders.matchQuery("tableId", esParam.getTableId()))
+				.must(QueryBuilders.matchQuery("tableName", esParam.getTableName()));
+			deleteByQueryRequest.setQuery(boolQueryBuilder);
+			try {
+				BulkByScrollResponse bulkResponse =
+					client.deleteByQuery(deleteByQueryRequest, RequestOptions.DEFAULT);
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+		return true;
+	}
+}
diff --git a/src/main/java/org/springblade/es/service/ElasticsearchIndexInitializer.java b/src/main/java/org/springblade/es/service/ElasticsearchIndexInitializer.java
new file mode 100644
index 0000000..dc3b490
--- /dev/null
+++ b/src/main/java/org/springblade/es/service/ElasticsearchIndexInitializer.java
@@ -0,0 +1,33 @@
+package org.springblade.es.service;
+
+import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.elasticsearch.client.indices.CreateIndexRequest;
+import org.elasticsearch.client.indices.GetIndexRequest;
+import org.elasticsearch.xcontent.XContentType;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class ElasticsearchIndexInitializer {
+
+	@Autowired
+	private RestHighLevelClient client;
+
+	public void initializeIndex(String indexName, String mappingJson) {
+		try {
+			// 检查索引是否已存在
+			GetIndexRequest request = new GetIndexRequest(indexName);
+			boolean indexExists = client.indices().exists(request, RequestOptions.DEFAULT);
+
+			// 如果索引不存在,则创建索引并设置映射
+			if (!indexExists) {
+				CreateIndexRequest createIndexRequest = new CreateIndexRequest(indexName);
+				createIndexRequest.mapping(mappingJson, XContentType.JSON);
+				client.indices().create(createIndexRequest, RequestOptions.DEFAULT);
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/src/main/java/org/springblade/es/service/ElasticsearchIndexService.java b/src/main/java/org/springblade/es/service/ElasticsearchIndexService.java
new file mode 100644
index 0000000..1ab0b3f
--- /dev/null
+++ b/src/main/java/org/springblade/es/service/ElasticsearchIndexService.java
@@ -0,0 +1,37 @@
+package org.springblade.es.service;
+
+import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
+import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
+import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.elasticsearch.xcontent.XContentBuilder;
+import org.elasticsearch.xcontent.json.JsonXContent;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+
+@Service
+public class ElasticsearchIndexService {
+
+	@Autowired
+	private RestHighLevelClient client;
+
+	public void createIndex() throws IOException {
+		CreateIndexRequest request = new CreateIndexRequest("your_index");
+
+		XContentBuilder builder = JsonXContent.contentBuilder()
+			.startObject()
+			.startObject("properties")
+			.startObject("field1").field("type", "text").endObject()
+			.startObject("field2").field("type", "text").endObject()
+			// ... 定义其他字段
+			.endObject()
+			.endObject();
+
+		request.mapping("_doc", builder);
+		CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
+		boolean acknowledged = createIndexResponse.isAcknowledged();
+		System.out.println(acknowledged);
+	}
+}
diff --git a/src/main/java/org/springblade/es/service/ElasticsearchSearchService.java b/src/main/java/org/springblade/es/service/ElasticsearchSearchService.java
new file mode 100644
index 0000000..63a0ec2
--- /dev/null
+++ b/src/main/java/org/springblade/es/service/ElasticsearchSearchService.java
@@ -0,0 +1,29 @@
+package org.springblade.es.service;
+
+import org.elasticsearch.action.search.SearchRequest;
+import org.elasticsearch.action.search.SearchResponse;
+import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+
+@Service
+public class ElasticsearchSearchService {
+
+	@Autowired
+	private RestHighLevelClient client;
+
+	public SearchResponse search(String index, String query) throws IOException {
+		SearchRequest searchRequest = new SearchRequest(index);
+		SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
+		searchSourceBuilder.query(QueryBuilders.matchQuery("field1", query)); // 搜索field1字段
+		searchSourceBuilder.query(QueryBuilders.matchQuery("field2", query)); // 搜索field2字段
+		searchRequest.source(searchSourceBuilder);
+
+		return client.search(searchRequest, RequestOptions.DEFAULT);
+	}
+}
diff --git a/src/main/java/org/springblade/es/test/ElasticSearchExample.java b/src/main/java/org/springblade/es/test/ElasticSearchExample.java
new file mode 100644
index 0000000..7919835
--- /dev/null
+++ b/src/main/java/org/springblade/es/test/ElasticSearchExample.java
@@ -0,0 +1,96 @@
+package org.springblade.es.test;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.http.HttpHost;
+import org.elasticsearch.action.admin.indices.refresh.RefreshRequest;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.client.RestClient;
+import org.elasticsearch.client.RestClientBuilder;
+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.index.query.QueryBuilders;
+import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.elasticsearch.search.SearchHit;
+import org.elasticsearch.search.SearchHits;
+
+import java.io.IOException;
+import java.util.Map;
+
+public class ElasticSearchExample {
+
+	public static void main(String[] args) throws IOException {
+		// 初始化Elasticsearch客户端
+		RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "http"));
+		RestHighLevelClient client = new RestHighLevelClient(builder);
+
+		// 索引用户数据
+		IndexRequest userIndexRequest = new IndexRequest("users_articles");
+		userIndexRequest.source("name", "John Doe", "type", "user");
+		IndexResponse userIndexResponse = client.index(userIndexRequest, RequestOptions.DEFAULT);
+
+		// 索引文章数据
+		IndexRequest articleIndexRequest = new IndexRequest("users_articles");
+		articleIndexRequest.source("title", "Elasticsearch Introduction", "type", "article");
+		IndexResponse articleIndexResponse = client.index(articleIndexRequest, RequestOptions.DEFAULT);
+
+		// 刷新索引,确保文档可搜索
+		client.indices().refresh(new RefreshRequest("users_articles"), RequestOptions.DEFAULT);
+
+		// 全文搜索
+		SearchRequest searchRequest = new SearchRequest("users_articles");
+		SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
+		searchSourceBuilder.query(QueryBuilders.multiMatchQuery("Elasticsearch", "name", "title"));
+
+		//设置分页
+		searchSourceBuilder.size(10);
+		searchSourceBuilder.from(0);
+
+		//将搜索资源对象设置到搜索客户端中
+		searchRequest.source(searchSourceBuilder);
+		//查询
+		SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
+		//解析搜索返回值
+		SearchHits searchHits = searchResponse.getHits();
+		//查询的总数
+		long count = searchHits.getTotalHits().value;
+
+		for (SearchHit hit : searchHits) {
+			Map<String, Object> result = hit.getSourceAsMap();
+			// 根据类型处理结果
+			String type = (String) result.get("type");
+			if ("user".equals(type)) {
+				// 处理用户名
+				String name = (String) result.get("name");
+				System.out.println("User: " + name);
+			} else if ("article".equals(type)) {
+				// 处理文章标题
+				String title = (String) result.get("title");
+				System.out.println("Article: " + title);
+			}
+		}
+
+		// 关闭客户端
+		client.close();
+	}
+
+	/**
+	 * 设置高亮
+	 * @param keywords
+	 * @param info
+	 * @return
+	 */
+	public static String setHighLight(String keywords, String info) {
+		if (StringUtils.isBlank(keywords)|| StringUtils.isBlank(info)) {
+			return info;
+		}
+		String[] keywordArray = keywords.split(" ");
+		String newInfo = info;
+		for (String keyword : keywordArray) {
+			newInfo = newInfo.replace(keyword, "<em style=\"color:red\">" + keyword + "</em>");
+		}
+		return newInfo;
+	}
+}
diff --git a/src/main/java/org/springblade/es/vo/EsParam.java b/src/main/java/org/springblade/es/vo/EsParam.java
new file mode 100644
index 0000000..a637caf
--- /dev/null
+++ b/src/main/java/org/springblade/es/vo/EsParam.java
@@ -0,0 +1,32 @@
+package org.springblade.es.vo;
+
+import lombok.Data;
+
+@Data
+public class EsParam {
+
+	/**
+	 * 索引名称
+	 */
+	private String indexName;
+
+	/**
+	 * 表名称
+	 */
+	private String tableName;
+
+	/**
+	 * searchKey
+	 */
+	private String searchKey;
+
+	/**
+	 * 表id
+	 */
+	private String tableId;
+
+	/**
+	 * 社区编号
+	 */
+	private String communityCode;
+}
diff --git a/src/main/java/org/springblade/modules/article/controller/ArticleController.java b/src/main/java/org/springblade/modules/article/controller/ArticleController.java
index e26cfdb..01a1409 100644
--- a/src/main/java/org/springblade/modules/article/controller/ArticleController.java
+++ b/src/main/java/org/springblade/modules/article/controller/ArticleController.java
@@ -11,6 +11,8 @@
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.es.service.ElasticsearchDocumentService;
+import org.springblade.es.vo.EsParam;
 import org.springblade.modules.article.entity.Article;
 import org.springblade.modules.article.service.ArticleService;
 import org.springblade.modules.article.vo.ArticleVO;
@@ -31,6 +33,7 @@
 public class ArticleController {
 
 	private final ArticleService articleService;
+	private final ElasticsearchDocumentService elasticsearchDocumentService;
 
 	/**
 	 * 查询资讯分页信息
@@ -165,14 +168,17 @@
 	@PostMapping("/submit")
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "新增或修改资讯信息", notes = "传入article")
-	public R submit(@RequestBody ArticleVO article) {
+	public R submit(@RequestBody Article article) {
+		boolean flag = false;
 		if (null == article.getId()) {
+			flag = true;
 			if (null == article.getCreateTime()) {
 				article.setCreateTime(new Date());
 			}
 		}
 		article.setUpdateTime(new Date());
-		return R.status(articleService.saveOrUpdate(article));
+		boolean saveOrUpdate = articleService.saveOrUpdate(article);
+		return R.status(saveOrUpdate);
 	}
 
 
@@ -185,7 +191,9 @@
 	@ApiOperationSupport(order = 8)
 	@ApiOperation(value = "删除", notes = "传入ids")
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-		return R.status(articleService.removeByIds(Func.toLongList(ids)));
+		List<Long> longs = Func.toLongList(ids);
+		boolean removeByIds = articleService.removeByIds(longs);
+		return R.status(removeByIds);
 	}
 
 	/**
diff --git a/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.java b/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.java
index 7fb96a7..55afae8 100644
--- a/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.java
+++ b/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.java
@@ -59,4 +59,16 @@
 	String getDistrictId(String houseCode);
 
     List<ArticleVO> getArticleByDistrictId(@Param("article") ArticleVO article);
+
+	/**
+	 * 查询所有文章数据
+	 * @return
+	 */
+    List<Article> getAllList(@Param("i") int i,@Param("size") int size);
+
+	/**
+	 * 查询所有文章数据总数
+	 * @return
+	 */
+	int getAllListTotal();
 }
diff --git a/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.xml b/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.xml
index c79a502..24d2f70 100644
--- a/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.xml
+++ b/src/main/java/org/springblade/modules/article/mapper/ArticleMapper.xml
@@ -598,4 +598,25 @@
         order by ja.create_time desc
 
     </select>
+
+    <select id="getAllList" resultType="org.springblade.modules.article.entity.Article">
+        SELECT
+        ja.*
+        FROM
+        jczz_article ja
+        where 1=1
+        and ja.is_deleted = 0
+        and ja.publish = 1
+        limit #{i},#{size}
+    </select>
+
+    <select id="getAllListTotal" resultType="java.lang.Integer">
+        SELECT
+        count(*)
+        FROM
+        jczz_article ja
+        where 1=1
+        and ja.is_deleted = 0
+        and ja.publish = 1
+    </select>
 </mapper>
diff --git a/src/main/java/org/springblade/modules/article/service/ArticleService.java b/src/main/java/org/springblade/modules/article/service/ArticleService.java
index 74ee6ea..403c13f 100644
--- a/src/main/java/org/springblade/modules/article/service/ArticleService.java
+++ b/src/main/java/org/springblade/modules/article/service/ArticleService.java
@@ -75,4 +75,16 @@
 	 * @return
 	 */
 	boolean updateArticle(UpdateWrapper<Article> objectUpdateWrapper,Long id,String houseCode);
+
+	/**
+	 * 查询所有文章数据
+	 * @return
+	 */
+    List<Article> getAllList(int i,int size);
+
+	/**
+	 * 查询所有文章数据总数
+	 * @return
+	 */
+	int getAllListTotal();
 }
diff --git a/src/main/java/org/springblade/modules/article/service/impl/ArticleServiceImpl.java b/src/main/java/org/springblade/modules/article/service/impl/ArticleServiceImpl.java
index e8f5f7c..91c6b67 100644
--- a/src/main/java/org/springblade/modules/article/service/impl/ArticleServiceImpl.java
+++ b/src/main/java/org/springblade/modules/article/service/impl/ArticleServiceImpl.java
@@ -226,4 +226,22 @@
 		// 返回
 		return update;
 	}
+
+	/**
+	 * 查询所有文章数据
+	 * @return
+	 */
+	@Override
+	public List<Article> getAllList(int i,int size) {
+		return baseMapper.getAllList(i,size);
+	}
+
+	/**
+	 * 查询所有文章数据总数
+	 * @return
+	 */
+	@Override
+	public int getAllListTotal() {
+		return baseMapper.getAllListTotal();
+	}
 }
diff --git a/src/main/java/org/springblade/modules/backblast/mapper/BackblastPubPersonMapper.xml b/src/main/java/org/springblade/modules/backblast/mapper/BackblastPubPersonMapper.xml
index fc81cd5..cc4c4db 100644
--- a/src/main/java/org/springblade/modules/backblast/mapper/BackblastPubPersonMapper.xml
+++ b/src/main/java/org/springblade/modules/backblast/mapper/BackblastPubPersonMapper.xml
@@ -35,7 +35,7 @@
             ifnull(jbpp.id_card,''),
             ifnull(jbpp.address,''),
             ifnull(jbpp.name,''),
-            ifnull(jbpp.name,'')
+            ifnull(jbpp.telephone,'')
             ) like CONCAT ('%', #{backblastPubPerson.searchKey},'%')
         </if>
         order by jbpp.id desc,jbpp.create_time desc
diff --git a/src/main/java/org/springblade/modules/house/mapper/HouseMapper.java b/src/main/java/org/springblade/modules/house/mapper/HouseMapper.java
index 92ba0e9..51110ce 100644
--- a/src/main/java/org/springblade/modules/house/mapper/HouseMapper.java
+++ b/src/main/java/org/springblade/modules/house/mapper/HouseMapper.java
@@ -123,4 +123,25 @@
 													 @Param("isAdministrator") Integer isAdministrator,
 													 @Param("regionChildCodesList")List<String> regionChildCodesList,
 													 @Param("gridCodeList")List<String> gridCodeList);
+
+	/**
+	 * 查询对应的社区编号
+	 * @param id
+	 * @return
+	 */
+    String getCommunityCode(@Param("id") Long id);
+
+	/**
+	 * 查询所有房屋总数
+	 * @return
+	 */
+	int getAllListTotal();
+
+	/**
+	 * 查询所有的房屋
+	 * @param i
+	 * @param size
+	 * @return
+	 */
+	List<HouseVO> getAllList(@Param("i") int i,@Param("size") int size);
 }
diff --git a/src/main/java/org/springblade/modules/house/mapper/HouseMapper.xml b/src/main/java/org/springblade/modules/house/mapper/HouseMapper.xml
index 8a9ebba..5de9fde 100644
--- a/src/main/java/org/springblade/modules/house/mapper/HouseMapper.xml
+++ b/src/main/java/org/springblade/modules/house/mapper/HouseMapper.xml
@@ -890,5 +890,37 @@
         ) b on a.label_name =b.labelName
     </select>
 
+    <!--查询对应的社区编号-->
+    <select id="getCommunityCode" resultType="java.lang.String">
+        SELECT
+        jpag.community_code
+        FROM
+        jczz_house jh
+        LEFT JOIN jczz_police_affairs_grid jpag on jh.jw_grid_code= jpag.jw_grid_code and jpag.is_deleted = 0
+        where jh.is_deleted = 0
+        and jh.id = #{id}
+    </select>
+
+    <!--查询所有房屋总数-->
+    <select id="getAllListTotal" resultType="java.lang.Integer">
+        SELECT
+        count(*)
+        FROM
+        jczz_house jh
+        where jh.is_deleted = 0
+    </select>
+
+    <!--查询所有的房屋-->
+    <select id="getAllList" resultType="org.springblade.modules.house.vo.HouseVO">
+        SELECT
+        jh.*,
+        jpag.community_code
+        FROM
+        jczz_house jh
+        LEFT JOIN jczz_police_affairs_grid jpag on jh.jw_grid_code= jpag.jw_grid_code and jpag.is_deleted = 0
+        where jh.is_deleted = 0
+        limit #{i},#{size}
+    </select>
+
 
 </mapper>
diff --git a/src/main/java/org/springblade/modules/house/mapper/HouseholdMapper.java b/src/main/java/org/springblade/modules/house/mapper/HouseholdMapper.java
index 869fde0..4e85451 100644
--- a/src/main/java/org/springblade/modules/house/mapper/HouseholdMapper.java
+++ b/src/main/java/org/springblade/modules/house/mapper/HouseholdMapper.java
@@ -161,4 +161,24 @@
 	 */
 	List<HouseholdVO> getUserInfoByDistrictIds(@Param("list") List<String> list, @Param("vo") HouseholdVO householdVO, IPage<HouseholdVO> page);
 
+	/**
+	 * 查询住户对应的社区编号
+	 * @param id
+	 * @return
+	 */
+    String getCommunityCode(@Param("id") Long id);
+
+	/**
+	 * 查询所有住户总数
+	 * @return
+	 */
+	int getAllListTotal();
+
+	/**
+	 * 查询对应的住户集合
+	 * @param i
+	 * @param size
+	 * @return
+	 */
+	List<HouseholdVO> getAllList(@Param("i") int i,@Param("size") int size);
 }
diff --git a/src/main/java/org/springblade/modules/house/mapper/HouseholdMapper.xml b/src/main/java/org/springblade/modules/house/mapper/HouseholdMapper.xml
index 56f0938..19d8e6f 100644
--- a/src/main/java/org/springblade/modules/house/mapper/HouseholdMapper.xml
+++ b/src/main/java/org/springblade/modules/house/mapper/HouseholdMapper.xml
@@ -1249,4 +1249,38 @@
         </where>
     </select>
 
+    <!--查询住户对应的社区编号-->
+    <select id="getCommunityCode" resultType="java.lang.String">
+        SELECT
+        jpag.community_code
+        FROM
+        jczz_household jh
+        LEFT JOIN jczz_house jhs ON jh.house_code = jhs.house_code and jhs.is_deleted = 0
+        LEFT JOIN jczz_police_affairs_grid jpag on jhs.jw_grid_code= jpag.jw_grid_code and jpag.is_deleted = 0
+        where jh.is_deleted = 0
+        and jh.id = #{id}
+    </select>
+
+    <!--查询所有住户总数-->
+    <select id="getAllListTotal" resultType="java.lang.Integer">
+        SELECT
+        count(*)
+        FROM
+        jczz_household jh
+        where jh.is_deleted = 0
+    </select>
+
+    <!--查询对应的住户集合-->
+    <select id="getAllList" resultType="org.springblade.modules.house.vo.HouseholdVO">
+        SELECT
+        jh.*,
+        jpag.community_code
+        FROM
+        jczz_household jh
+        LEFT JOIN jczz_house jhs ON jh.house_code = jhs.house_code and jhs.is_deleted = 0
+        LEFT JOIN jczz_police_affairs_grid jpag on jhs.jw_grid_code= jpag.jw_grid_code and jpag.is_deleted = 0
+        where jh.is_deleted = 0
+        limit #{i},#{size}
+    </select>
+
 </mapper>
diff --git a/src/main/java/org/springblade/modules/house/service/IHouseService.java b/src/main/java/org/springblade/modules/house/service/IHouseService.java
index 1f3c7cc..4cf8258 100644
--- a/src/main/java/org/springblade/modules/house/service/IHouseService.java
+++ b/src/main/java/org/springblade/modules/house/service/IHouseService.java
@@ -109,4 +109,25 @@
 	 * @return
 	 */
 	List<Map<String,Object>> getHouseLabelStatistic(HouseVO house);
+
+	/**
+	 * 查询对应的社区编号
+	 * @param id
+	 * @return
+	 */
+    String getCommunityCode(Long id);
+
+	/**
+	 * 查询所有房屋总数
+	 * @return
+	 */
+	int getAllListTotal();
+
+	/**
+	 * 查询所有的房屋
+	 * @param i
+	 * @param size
+	 * @return
+	 */
+	List<HouseVO> getAllList(int i, int size);
 }
diff --git a/src/main/java/org/springblade/modules/house/service/IHouseholdService.java b/src/main/java/org/springblade/modules/house/service/IHouseholdService.java
index 3166c47..8cc5315 100644
--- a/src/main/java/org/springblade/modules/house/service/IHouseholdService.java
+++ b/src/main/java/org/springblade/modules/house/service/IHouseholdService.java
@@ -120,11 +120,30 @@
 
 	/**
 	 * 通过小区id查询用户
-	 * @param districtIds
-	 * @param building
-	 * @param unit
-	 * @param name
+	 * @param householdVO
+	 * @param page
 	 * @return
 	 */
 	IPage<HouseholdVO> getUserInfoByDistrictIds(HouseholdVO householdVO,IPage<HouseholdVO> page);
+
+	/**
+	 * 查询住户对应的社区编号
+	 * @param id
+	 * @return
+	 */
+    String getCommunityCode(Long id);
+
+	/**
+	 * 查询所有住户总数
+	 * @return
+	 */
+	int getAllListTotal();
+
+	/**
+	 * 查询对应的住户集合
+	 * @param i
+	 * @param size
+	 * @return
+	 */
+	List<HouseholdVO> getAllList(int i, int size);
 }
diff --git a/src/main/java/org/springblade/modules/house/service/impl/HouseServiceImpl.java b/src/main/java/org/springblade/modules/house/service/impl/HouseServiceImpl.java
index defb6e2..b23a4a6 100644
--- a/src/main/java/org/springblade/modules/house/service/impl/HouseServiceImpl.java
+++ b/src/main/java/org/springblade/modules/house/service/impl/HouseServiceImpl.java
@@ -830,4 +830,34 @@
 		// 返回
 		return list;
 	}
+
+	/**
+	 * 查询对应的社区编号
+	 * @param id
+	 * @return
+	 */
+	@Override
+	public String getCommunityCode(Long id) {
+		return baseMapper.getCommunityCode(id);
+	}
+
+	/**
+	 * 查询所有房屋总数
+	 * @return
+	 */
+	@Override
+	public int getAllListTotal() {
+		return baseMapper.getAllListTotal();
+	}
+
+	/**
+	 * 查询所有的房屋
+	 * @param i
+	 * @param size
+	 * @return
+	 */
+	@Override
+	public List<HouseVO> getAllList(int i, int size) {
+		return baseMapper.getAllList(i,size);
+	}
 }
diff --git a/src/main/java/org/springblade/modules/house/service/impl/HouseholdServiceImpl.java b/src/main/java/org/springblade/modules/house/service/impl/HouseholdServiceImpl.java
index da26bcf..c31c07d 100644
--- a/src/main/java/org/springblade/modules/house/service/impl/HouseholdServiceImpl.java
+++ b/src/main/java/org/springblade/modules/house/service/impl/HouseholdServiceImpl.java
@@ -596,4 +596,33 @@
 		return page.setRecords(userInfoByDistrictIds);
 	}
 
+	/**
+	 * 查询住户对应的社区编号
+	 * @param id
+	 * @return
+	 */
+	@Override
+	public String getCommunityCode(Long id) {
+		return baseMapper.getCommunityCode(id);
+	}
+
+	/**
+	 * 查询所有住户总数
+	 * @return
+	 */
+	@Override
+	public int getAllListTotal() {
+		return baseMapper.getAllListTotal();
+	}
+
+	/**
+	 * 查询对应的住户集合
+	 * @param i
+	 * @param size
+	 * @return
+	 */
+	@Override
+	public List<HouseholdVO> getAllList(int i, int size) {
+		return baseMapper.getAllList(i,size);
+	}
 }
diff --git a/src/main/java/org/springblade/modules/place/entity/PlaceEntity.java b/src/main/java/org/springblade/modules/place/entity/PlaceEntity.java
index 5d65272..910089e 100644
--- a/src/main/java/org/springblade/modules/place/entity/PlaceEntity.java
+++ b/src/main/java/org/springblade/modules/place/entity/PlaceEntity.java
@@ -199,7 +199,4 @@
 	@ApiModelProperty(value = "1:是 2:否  三级消防单位", example = "")
 	@TableField("three_fire_protection")
 	private Integer threeFireProtection;
-
-
-
 }
diff --git a/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java b/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java
index 49f89e5..0a00735 100644
--- a/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java
+++ b/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java
@@ -214,4 +214,23 @@
 								 @Param("gridCodeList") List<String> gridCodeList,
 								 @Param("regionChildCodesList") List<String> regionChildCodesList,
 								 @Param("isAdministrator") Integer isAdministrator);
+
+	/**
+	 * 查询所有场所数据
+	 * @return
+	 */
+    List<PlaceVO> getAllList(@Param("i") int i,@Param("size") int size);
+
+	/**
+	 * 查询所有场所数据总数
+	 * @return
+	 */
+	int getAllListTotal();
+
+	/**
+	 * 查询对应的社区编号
+	 * @param id
+	 * @return
+	 */
+	String getCommunityCode(@Param("id") Long id);
 }
diff --git a/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml b/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml
index 8ee03f2..3ac88b1 100644
--- a/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml
+++ b/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml
@@ -911,4 +911,33 @@
         order by jp.create_time desc,jp.id desc
     </select>
 
+    <!--查询所有场所数据-->
+    <select id="getAllList" resultType="org.springblade.modules.place.vo.PlaceVO">
+        select
+        jp.*,
+        jpag.community_code
+        from jczz_place jp
+        left join jczz_police_affairs_grid jpag on jp.jw_grid_code = jpag.jw_grid_code and jpag.is_deleted =0
+        where jp.is_deleted = 0
+        limit #{i},#{size}
+    </select>
+
+    <!--查询所有场所数据-->
+    <select id="getAllListTotal" resultType="java.lang.Integer">
+        select
+        count(*)
+        from jczz_place jp
+        where jp.is_deleted = 0
+    </select>
+
+    <!--查询对应的社区编号-->
+    <select id="getCommunityCode" resultType="java.lang.String">
+        select
+        jpag.community_code
+        from jczz_place jp
+        left join jczz_police_affairs_grid jpag on jp.jw_grid_code = jpag.jw_grid_code and jpag.is_deleted =0
+        where jp.is_deleted = 0
+        and jp.id = #{id}
+    </select>
+
 </mapper>
diff --git a/src/main/java/org/springblade/modules/place/service/IPlaceService.java b/src/main/java/org/springblade/modules/place/service/IPlaceService.java
index c53431b..f603fff 100644
--- a/src/main/java/org/springblade/modules/place/service/IPlaceService.java
+++ b/src/main/java/org/springblade/modules/place/service/IPlaceService.java
@@ -192,4 +192,22 @@
 	 * @param place
 	 */
 	void jwGridCodeBind(PlaceVO place);
+
+	/**
+	 * 查询所有场所数据
+	 * @return
+	 */
+    List<PlaceVO> getAllList(int i,int size);
+	/**
+	 * 查询所有场所数据总数
+	 * @return
+	 */
+	int getAllListTotal();
+
+	/**
+	 * 查询对应的社区编号
+	 * @param id
+	 * @return
+	 */
+	String getCommunityCode(Long id);
 }
diff --git a/src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java b/src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java
index 8942f88..82510d0 100644
--- a/src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java
+++ b/src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java
@@ -1574,4 +1574,32 @@
 		// 返回
 		return page.setRecords(placeVOS);
 	}
+
+	/**
+	 * 查询所有场所数据
+	 * @return
+	 */
+	@Override
+	public List<PlaceVO> getAllList(int i,int size) {
+		return baseMapper.getAllList(i,size);
+	}
+
+	/**
+	 * 查询所有场所数据总数
+	 * @return
+	 */
+	@Override
+	public int getAllListTotal() {
+		return baseMapper.getAllListTotal();
+	}
+
+	/**
+	 * 查询对应的社区编号
+	 * @param id
+	 * @return
+	 */
+	@Override
+	public String getCommunityCode(Long id) {
+		return baseMapper.getCommunityCode(id);
+	}
 }
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index d907468..fa413bc 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -83,3 +83,10 @@
       url: jdbc:mysql://106.225.193.35:3306/srjw?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
       username: root
       password: HCyj@2022
+
+#es
+elasticsearch:
+  enabled: false
+  host: localhost
+  sync: true
+  indexName: jczz
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index 4a0893e..4c8178d 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -71,3 +71,10 @@
       url: jdbc:mysql://czfw_wx_web.xzga.top:13005/srjw?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
       username: ewm_user
       password: ft@135246
+
+#es
+elasticsearch:
+  enabled: false
+  host: localhost
+  sync: false
+  indexName: jczz
diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml
index ec5dff6..800e1e6 100644
--- a/src/main/resources/application-test.yml
+++ b/src/main/resources/application-test.yml
@@ -71,3 +71,10 @@
       url: jdbc:mysql://106.225.193.35:3306/srjw?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
       username: root
       password: HCyj@2022
+
+#es
+elasticsearch:
+  enabled: false
+  host: localhost
+  sync: true
+  indexName: test

--
Gitblit v1.9.3