diff --git a/laws-base/laws-base-core/src/main/java/com/jero/common/es/JeroElasticsearchTemplate.java b/laws-base/laws-base-core/src/main/java/com/jero/common/es/JeroElasticsearchTemplate.java
index d1a9a8d3..b0f3d35c 100644
--- a/laws-base/laws-base-core/src/main/java/com/jero/common/es/JeroElasticsearchTemplate.java
+++ b/laws-base/laws-base-core/src/main/java/com/jero/common/es/JeroElasticsearchTemplate.java
@@ -477,5 +477,19 @@ public class JeroElasticsearchTemplate {
return json;
}
+ /**
+ * 按条件删除数据
+ *
+ * 请求地址:POST http://{baseUrl}/{indexName}/{typeName}/_delete_by_query
+ */
+ public JSONObject delete(String indexName, String typeName, JSONObject queryObject) {
+ String url = this.getBaseUrl(indexName, typeName).append("/_delete_by_query").toString();
+
+ log.info("url:" + url + " ,delete: " + queryObject.toJSONString());
+ JSONObject res = RestUtil.post(url, queryObject);
+ log.info("url:" + url + " ,return res: \n" + res.toJSONString());
+ return res;
+ }
+
}
diff --git a/laws-modules/src/main/java/com/jero/modules/laws/home/job/HomeSearchCheckEsPlanJob.java b/laws-modules/src/main/java/com/jero/modules/laws/home/job/HomeSearchCheckEsPlanJob.java
new file mode 100644
index 00000000..e2b96a9d
--- /dev/null
+++ b/laws-modules/src/main/java/com/jero/modules/laws/home/job/HomeSearchCheckEsPlanJob.java
@@ -0,0 +1,233 @@
+package com.jero.modules.laws.home.job;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.jero.common.es.JeroElasticsearchTemplate;
+import com.jero.modules.laws.home.common.LawsHomeSearchCommon;
+import com.jero.modules.laws.home.enums.HomeSearchEnum;
+import com.jero.modules.laws.home.service.ILawsHomeSearchService;
+import com.jero.modules.laws.standard.entity.LawsDomesticStandard;
+import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard;
+import com.jero.modules.laws.standard.entity.LawsNewsFeed;
+import com.jero.modules.laws.standard.entity.LawsOverseasStandard;
+import com.jero.modules.laws.standard.service.ILawsDomesticStandardService;
+import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
+import com.jero.modules.laws.standard.service.ILawsNewsFeedService;
+import com.jero.modules.laws.standard.service.ILawsOverseasStandardService;
+import io.minio.messages.DeleteRequest;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.jetbrains.annotations.NotNull;
+import org.quartz.Job;
+import org.quartz.JobDataMap;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ForkJoinPool;
+import java.util.stream.Collectors;
+
+/**
+ * 每天定时比对ES数据条数与业务数据条数是否一致,不一致重新更新
+ * @author lqt
+ * @version 1.0
+ * @date 2023/11/27 10:30
+ */
+@Slf4j
+public class HomeSearchCheckEsPlanJob implements Job {
+ @Resource
+ private ILawsDomesticStandardService lawsDomesticStandardService;
+ @Resource
+ private ILawsOverseasStandardService lawsOverseasStandardService;
+ @Resource
+ private ILawsEnterpriseStandardService lawsEnterpriseStandardService;
+ @Resource
+ private ILawsNewsFeedService lawsNewsFeedService;
+ @Resource
+ private JeroElasticsearchTemplate jeroElasticsearchTemplate;
+ @Resource
+ private ILawsHomeSearchService lawsHomeSearchService;
+
+
+ @Override
+ public void execute(JobExecutionContext context) throws JobExecutionException {
+ // 获取外部传来的参数
+ JobDataMap map = context.getJobDetail().getJobDataMap();
+ String resourceType = map.getString("parameter");
+ List listType = getList(resourceType);
+ Map mapHash = getTypeCount();
+ listType.parallelStream().forEach(p->{
+ switch (p){
+ // 比对国内标准
+ case LawsHomeSearchCommon.LAWS_DOMESTIC_STANDARD:
+ checkLawsDomesticStandard(resourceType, mapHash);
+ break;
+ // 比对国外标准
+ case LawsHomeSearchCommon.LAWS_OVERSEAS_STANDARD:
+ checkLawsOverseasStandard(resourceType, mapHash);
+ break;
+ // 比对企业标准
+ case LawsHomeSearchCommon.LAWS_ENTERPRISE_STANDARD:
+ checkLawsEnterpriseStandard(resourceType, mapHash);
+ break;
+ // 比对动态消息
+ case LawsHomeSearchCommon.LAWS_NEWS_FEED:
+ checkLawsNewsFeed(resourceType, mapHash);
+ break;
+ default:break;
+ }
+ });
+ }
+
+ private void checkLawsNewsFeed(String resourceType, Map mapHash) {
+ List listLawsNewsFeed = lawsNewsFeedService.list();
+ int count4 = mapHash.getOrDefault(LawsHomeSearchCommon.LAWS_NEWS_FEED, 0);
+ int m4 = 0;
+ if(!CollectionUtils.isEmpty(listLawsNewsFeed)){
+ m4 = listLawsNewsFeed.size();
+ }
+ if(count4 != m4){
+ // 清理数据重新更新
+ delete(resourceType);
+ if(!CollectionUtils.isEmpty(listLawsNewsFeed)){
+ List listIds = listLawsNewsFeed.stream().map(LawsNewsFeed::getId).collect(Collectors.toList());
+ addES(listIds, LawsHomeSearchCommon.LAWS_NEWS_FEED);
+ }
+ }
+ }
+
+ private void checkLawsEnterpriseStandard(String resourceType, Map mapHash) {
+ List listLawsEnterpriseStandard = lawsEnterpriseStandardService.list();
+ int count3 = mapHash.getOrDefault(LawsHomeSearchCommon.LAWS_ENTERPRISE_STANDARD, 0);
+ int m3 = 0;
+ if(!CollectionUtils.isEmpty(listLawsEnterpriseStandard)){
+ m3 = listLawsEnterpriseStandard.size();
+ }
+ if(count3 != m3){
+ // 清理数据重新更新
+ delete(resourceType);
+ if(!CollectionUtils.isEmpty(listLawsEnterpriseStandard)){
+ List listIds = listLawsEnterpriseStandard.stream().map(LawsEnterpriseStandard::getId).collect(Collectors.toList());
+ addES(listIds, LawsHomeSearchCommon.LAWS_ENTERPRISE_STANDARD);
+ }
+ }
+ }
+
+ private void checkLawsOverseasStandard(String resourceType, Map mapHash) {
+ List listLawsOverseasStandard = lawsOverseasStandardService.list();
+ int count2 = mapHash.getOrDefault(LawsHomeSearchCommon.LAWS_OVERSEAS_STANDARD, 0);
+ int m2 = 0;
+ if(!CollectionUtils.isEmpty(listLawsOverseasStandard)){
+ m2 = listLawsOverseasStandard.size();
+ }
+ if(count2 != m2){
+ // 清理数据重新更新
+ delete(resourceType);
+ if(!CollectionUtils.isEmpty(listLawsOverseasStandard)){
+ List listIds = listLawsOverseasStandard.stream().map(LawsOverseasStandard::getId).collect(Collectors.toList());
+ addES(listIds, LawsHomeSearchCommon.LAWS_OVERSEAS_STANDARD);
+ }
+ }
+ }
+
+ private void checkLawsDomesticStandard(String resourceType, Map mapHash) {
+ List listLawsDomesticStandard = lawsDomesticStandardService.list();
+ // 比对数据
+ int count1 = mapHash.getOrDefault(LawsHomeSearchCommon.LAWS_DOMESTIC_STANDARD, 0);
+ int m1 = 0;
+ if(!CollectionUtils.isEmpty(listLawsDomesticStandard)){
+ m1 = listLawsDomesticStandard.size();
+ }
+ if(count1 != m1){
+ // 清理数据重新更新
+ delete(resourceType);
+ if(!CollectionUtils.isEmpty(listLawsDomesticStandard)){
+ List listIds = listLawsDomesticStandard.stream().map(LawsDomesticStandard::getId).collect(Collectors.toList());
+ addES(listIds, LawsHomeSearchCommon.LAWS_DOMESTIC_STANDARD);
+ }
+ }
+ }
+
+ @NotNull
+ private List getList(String resourceType) {
+ List listType = new ArrayList<>();
+ if(StringUtils.isBlank(resourceType)){
+ listType.add(LawsHomeSearchCommon.LAWS_DOMESTIC_STANDARD);
+ listType.add(LawsHomeSearchCommon.LAWS_OVERSEAS_STANDARD);
+ listType.add(LawsHomeSearchCommon.LAWS_ENTERPRISE_STANDARD);
+ listType.add(LawsHomeSearchCommon.LAWS_NEWS_FEED);
+ }else{
+ listType.add(resourceType);
+ }
+ return listType;
+ }
+
+ private void addES(List listIds, String lawsNewsFeed) {
+ int startIndex = 0; // 从第0个下标开始
+ int batchCount = 1000;
+ while (startIndex < listIds.size()) {
+ int endIndex = 0;
+ if (listIds.size() - batchCount < startIndex) {
+ endIndex = listIds.size();
+ } else {
+ endIndex = startIndex + batchCount;
+ }
+ List ids = listIds.subList(startIndex, endIndex);
+ // 异步生成记录
+ ForkJoinPool pool = new ForkJoinPool();
+ // 异步调用
+ CompletableFuture.runAsync(() -> {
+ try {
+ lawsHomeSearchService.updateEsData(lawsNewsFeed, String.join(",", ids), LawsHomeSearchCommon.LAWS_ES_ADD);
+ } catch (Exception e) {
+ log.error("ES同步异常:", e.getMessage());
+ }
+ }, pool);
+ startIndex = startIndex + batchCount; // 下一批
+ }
+ }
+
+ private Map getTypeCount(){
+ Map mapHash = new HashMap<>();
+ JSONObject jsonObject = new JSONObject();
+ Map map = new HashMap<>();
+ Map map1 = new HashMap<>();
+ Map map2 = new HashMap<>();
+ map1.put("field","resource_type.keyword");
+ map2.put("terms",map1);
+ map.put("resource_type_aggs",map2);
+ jsonObject.put("aggs",map);
+ jsonObject.put("size",0);
+ //2. 数据查询
+ JSONObject search = jeroElasticsearchTemplate.search(HomeSearchEnum.INDEX_NAME_DOCUMENT_ZQ.getValue(), HomeSearchEnum.TYPE_NAME_DOCUMENT_ZQ.getValue(), jsonObject);
+ List