xufei 1 year ago
parent
commit
e25ac16d39

+ 27 - 0
src/main/java/com/winhc/task/bean/CaseOut.java

@@ -0,0 +1,27 @@
+package com.winhc.task.bean;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * company
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class CaseOut {
+    @ExcelProperty("被告")
+    private String bg_name;
+    @ExcelProperty("原告")
+    private String yg_name;
+    @ExcelProperty("原告电话")
+    private String phones;
+    @ExcelProperty("原告法人")
+    private String legal;
+    @ExcelProperty("原告地址")
+    private String reg_location;
+}

+ 25 - 0
src/main/java/com/winhc/task/bean/CompanyBackOut.java

@@ -0,0 +1,25 @@
+package com.winhc.task.bean;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * company
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class CompanyBackOut {
+    @ExcelProperty("公司名称")
+    private String company_name;
+    @ExcelProperty("法人")
+    private String legal;
+    @ExcelProperty("联系电话")
+    private String phones;
+    @ExcelProperty("地址")
+    private String reg_location;
+}

+ 49 - 0
src/main/java/com/winhc/task/common/SummaryArgs.java

@@ -928,6 +928,55 @@ public class SummaryArgs {
             return new ArrayList<>(set);
         }
         ));
+        a.put("company_bid_all", new SummaryArgs(
+                "ng_rt_company_bid_all"
+                , Arrays.asList(new ArgsInfo("supplier"
+                        , "supplier"
+                        , "deleted")
+                , new ArgsInfo("purchaser"
+                        , "purchaser"
+                        , "deleted")
+                ,new ArgsInfo("winner"
+                        , "winner"
+                        , "deleted")
+                , new ArgsInfo("wtbamt"
+                        , "wtbamt"
+                        , "deleted")
+        )
+                , Arrays.asList(new ValueAlias("supplier"
+                        , "0"
+                        , "company_bid_all_del_0_supplier")
+                , new ValueAlias("supplier"
+                        , "1"
+                        , "company_bid_all_del_1_supplier")
+                , new ValueAlias("purchaser"
+                        , "0"
+                        , "company_bid_all_del_0_purchaser")
+                , new ValueAlias("purchaser"
+                        , "1"
+                        , "company_bid_all_del_1_purchaser")
+                , new ValueAlias("winner"
+                        , "0"
+                        , "company_bid_all_del_0_winner")
+                , new ValueAlias("winner"
+                        , "1"
+                        , "company_bid_all_del_1_winner")
+                , new ValueAlias("wtbamt"
+                        , "0"
+                        , "company_bid_all_del_0_wtbamt")
+                , new ValueAlias("wtbamt"
+                        , "1"
+                        , "company_bid_all_del_1_wtbamt")
+        )
+                , (j) -> {
+            Set<String> set = new HashSet<>();
+            set.addAll(parseJsonArray(j.getString("supplier_info"), "$.keyno"));
+            set.addAll(parseJsonArray(j.getString("purchaser_info"), "$.keyno"));
+            set.addAll(parseJsonArray(j.getString("winner_candidate"), "$.keyno"));
+            set.addAll(parseJsonArray(j.getString("wtbamt_info"), "$.keyno"));
+            return new ArrayList<>(set);
+        }
+        ));
         a.put("reduction_registered_capital_info", new SummaryArgs(
                 "ng_rt_reduction_registered_capital_info"
                 , Collections.singletonList(new ArgsInfo(

+ 1 - 1
src/main/java/com/winhc/task/framework/es/EsFastScan.java

@@ -35,7 +35,7 @@ public class EsFastScan {
     private String index;
     private String type;
     private String dsl;
-    private int batchSize = 10000;
+    private int batchSize = 1000;
     private int thread_num = 1;
     private int scanSize = 0;
     private String routing = null;

+ 126 - 0
src/main/java/com/winhc/task/job/CompanyBackUpdate.java

@@ -0,0 +1,126 @@
+package com.winhc.task.job;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.mongodb.client.MongoCollection;
+import com.mongodb.client.MongoDatabase;
+import com.mongodb.client.model.UpdateOneModel;
+import com.mongodb.client.model.UpdateOptions;
+import com.mongodb.client.model.WriteModel;
+import com.winhc.task.bean.CaseOut;
+import com.winhc.task.bean.CompanyBackOut;
+import com.winhc.task.framework.es.EsFastScan;
+import com.winhc.task.framework.mongo.MongoDbFastScan;
+import com.winhc.task.util.BaseUtils;
+import com.winhc.task.util.EasyExcelUtil;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import lombok.val;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hadoop.hbase.TableName;
+import org.apache.hadoop.hbase.client.Connection;
+import org.apache.hadoop.hbase.client.Get;
+import org.bson.Document;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.elasticsearch.search.SearchHit;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.stereotype.Component;
+
+import java.nio.charset.StandardCharsets;
+import java.util.*;
+import java.util.function.Consumer;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * π
+ */
+@Slf4j
+@Component
+@AllArgsConstructor
+public class CompanyBackUpdate {
+    private final MongoTemplate mongoTemplate;
+
+    @Autowired
+    Connection connection;
+
+    public void start() {
+        MongoDatabase db = mongoTemplate.getDb();
+
+        List<List<String>> head_list = Arrays.stream("公司名称@法人@联系电话@地址".split("@"))
+                .map(Collections::singletonList)
+                .collect(Collectors.toList());
+
+        EasyExcelUtil company_shanghai = new EasyExcelUtil().init("D:\\tmp\\case\\" + "上海.xlsx", "上海", head_list, new HashSet<>());
+        EasyExcelUtil company_guangzhou = new EasyExcelUtil().init("D:\\tmp\\case\\" + "广州.xlsx", "广州", head_list, new HashSet<>());
+        EasyExcelUtil company_shengzheng = new EasyExcelUtil().init("D:\\tmp\\case\\" + "深圳.xlsx", "深圳", head_list, new HashSet<>());
+        EasyExcelUtil company_suzhou = new EasyExcelUtil().init("D:\\tmp\\case\\" + "苏州.xlsx", "苏州", head_list, new HashSet<>());
+
+
+        Consumer<List<Document>> func = list -> {
+            List<CompanyBackOut> list1 = new ArrayList<>();
+            List<CompanyBackOut> list2 = new ArrayList<>();
+            List<CompanyBackOut> list3 = new ArrayList<>();
+            List<CompanyBackOut> list4 = new ArrayList<>();
+            list.forEach(d -> {
+                JSONObject j = new JSONObject(d);
+                String name = j.getString("name");
+                String reg_location = j.getString("reg_location");
+                String province_code = j.getString("province_code");
+                String city_code = j.getString("city_code");
+
+                String phones = Optional.ofNullable(j.getJSONArray("tel_info")).orElse(new JSONArray())
+                        .toJavaList(JSONObject.class).stream()
+                        .filter(x -> StringUtils.isNotBlank(x.getString("tel"))).map(x -> x.getString("tel"))
+                        .distinct().collect(Collectors.joining("\n"));
+
+                String legals = Optional.ofNullable(j.getJSONArray("lolegal_entities")).orElse(new JSONArray())
+                        .toJavaList(JSONObject.class)
+                        .stream()
+                        .map(x -> {
+                            JSONObject tj = new JSONObject();
+                            tj.fluentPut("legal", x.getString("name"))
+                                    .fluentPut("id", x.getString("id"))
+                                    .fluentPut("legal_deleted", x.getInteger("deleted"));
+                            return tj;
+                        }).filter(x -> x.getString("legal_deleted").equals("0") && StringUtils.isNotBlank(x.getString("legal")))
+                        .map(r1 -> r1.getString("legal"))
+                        .collect(Collectors.joining("\n"));
+
+                CompanyBackOut re = CompanyBackOut.builder()
+                        .company_name(name)
+                        .legal(legals)
+                        .phones(phones)
+                        .reg_location(reg_location)
+                        .build();
+                if (province_code.equals("31")) {
+                    list1.add(re);
+
+                } else if (province_code.equals("44") && city_code.equals("01")) {
+                    list2.add(re);
+                } else if (province_code.equals("44") && city_code.equals("03")) {
+                    list3.add(re);
+                } else if (province_code.equals("32") && city_code.equals("05")) {
+                    list4.add(re);
+                }
+            });
+            company_shanghai.doExportExcel(list1);
+            company_guangzhou.doExportExcel(list2);
+            company_shengzheng.doExportExcel(list3);
+            company_suzhou.doExportExcel(list4);
+
+        };
+
+        MongoDbFastScan mongoDbFastScan = new MongoDbFastScan("xf_company_back_0728", func, db)
+                .batchSize(200).threadNum(1);
+        mongoDbFastScan.scan();
+
+        company_shanghai.finish();
+        company_guangzhou.finish();
+        company_shengzheng.finish();
+        company_suzhou.finish();
+    }
+
+
+}

+ 95 - 0
src/main/java/com/winhc/task/job/EsScanContractTemplateInfoJob.java

@@ -0,0 +1,95 @@
+package com.winhc.task.job;
+
+import com.alibaba.fastjson.JSONObject;
+import com.mongodb.client.MongoCollection;
+import com.mongodb.client.model.InsertManyOptions;
+import com.mongodb.client.result.InsertManyResult;
+import com.winhc.task.framework.es.EsFastScan;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.bson.BsonValue;
+import org.bson.Document;
+import org.elasticsearch.action.bulk.BulkRequest;
+import org.elasticsearch.action.update.UpdateRequest;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.elasticsearch.common.xcontent.XContentType;
+import org.elasticsearch.search.SearchHit;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Consumer;
+import java.util.stream.Collectors;
+
+import static com.winhc.task.util.DateUtils.randomDate;
+
+/**
+ * 合同模板 更新字段
+ */
+@Slf4j
+@Component
+@AllArgsConstructor
+public class EsScanContractTemplateInfoJob {
+
+    @Autowired
+    @Qualifier(value = "v5")
+    RestHighLevelClient getOldClient;
+
+    public void start() {
+        String dsl = "{\n" +
+                "  \"query\": {\n" +
+                "    \"match_all\": {}\n" +
+                "  }\n" +
+                "}";
+        scan(dsl);
+    }
+
+    public void scan(String dsl) {
+
+        Consumer<SearchHit[]> func = list -> {
+            BulkRequest bulkRequest = new BulkRequest();
+            Arrays.stream(list).forEach(d -> {
+                Map<String, Object> m1 = d.getSourceAsMap();
+                String id = d.getId();
+                JSONObject data = new JSONObject(m1);
+
+                String update_time = randomDate(2023, 2023, 3, 6);
+
+                String content = data.getString("content");
+                String re_content = content.replaceAll("合同法", "民法典")
+                        .replaceAll("中华人民共和国合同法", "中华人民共和国民法典")
+                        .replaceAll("婚姻法", "民法典")
+                        .replaceAll("继承法", "民法典")
+                        .replaceAll("民法通则", "民法典")
+                        .replaceAll("收养法", "民法典")
+                        .replaceAll("担保法", "民法典")
+                        .replaceAll("物权法", "民法典")
+                        .replaceAll("侵权责任法", "民法典")
+                        .replaceAll("民法总则", "民法典");
+
+                UpdateRequest request = new UpdateRequest("new_contract_template_info_v2", "new_contract_template_info_type", id);
+                request.docAsUpsert(true);
+                JSONObject rej = new JSONObject()
+                        .fluentPut("update_time", update_time)
+                        .fluentPut("content", re_content);
+                request.doc(JSONObject.toJSONString(rej), XContentType.JSON);
+                request.retryOnConflict(6);
+                bulkRequest.add(request);
+            });
+
+            try {
+                getOldClient.bulk(bulkRequest);
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+
+        };
+        new EsFastScan(getOldClient, func, "new_contract_template_info_v2", "new_contract_template_info_type", dsl, null).scan();
+    }
+
+}

+ 21 - 0
src/main/java/com/winhc/task/util/DateUtils.java

@@ -1,10 +1,16 @@
 package com.winhc.task.util;
 
+import com.alibaba.fastjson.JSONObject;
+
+import java.text.SimpleDateFormat;
 import java.time.Instant;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
+import java.util.Calendar;
 import java.util.Locale;
+import java.util.Random;
+import java.util.function.Function;
 
 /**
  * @Author: XuJiakai
@@ -34,7 +40,22 @@ public class DateUtils {
         return df.format(instant);
     }
 
+    public static String randomDate(Integer year_start, Integer year_end, Integer month_start, Integer month_end) {
+        Random random = new Random();
+        int year = random.nextInt(year_end - year_start + 1) + year_start;
+        Calendar c = Calendar.getInstance();
+        c.set(Calendar.YEAR, year);
+        int month = random.nextInt(month_end - month_start + 1) + month_start;
+        int day = random.nextInt(c.getActualMaximum(Calendar.DAY_OF_MONTH)) + 1;
+        c.set(Calendar.MONTH, month - 1);
+        c.set(Calendar.DATE, day);
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        return sdf.format(c.getTime());
+    }
+
+
     public static void main(String[] args) {
+        System.out.println(randomDate(2023, 2023, 3, 6));
         System.out.println(getYesterday());
         System.out.println(getYesterday_ymd());
         System.out.println(getMinusDay(30));

+ 1 - 1
src/test/java/com/winhc/task/DataWorksSummaryJob.java

@@ -35,7 +35,7 @@ public class DataWorksSummaryJob {
 
         //确定重跑集合(集合为空跑全量)
 
-        List<String> add = Arrays.asList("company_judicial_assistance");
+        List<String> add = Arrays.asList("company_bid_all");
         //List<String> add = Arrays.asList("company_copyright_reg","company_copyright_works");
         //List<String> add = Arrays.asList("company_patent","company_copyright_reg","company_copyright_works");
 

+ 18 - 3
src/test/java/com/winhc/task/EsTest.java

@@ -9,9 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.util.*;
 
 @SpringBootTest
 public class EsTest {
@@ -88,4 +86,21 @@ public class EsTest {
         });
 
     }
+
+    @Test
+    public void start5() {
+        Random random = new Random();
+        int year = random.nextInt(11) + 2010;
+
+        Calendar c = Calendar.getInstance();
+        c.set(Calendar.YEAR, year);
+
+        int month = random.nextInt(12) + 1;
+        int day = random.nextInt(c.getActualMaximum(Calendar.DAY_OF_MONTH)) + 1;
+
+        c.set(Calendar.MONTH, month - 1);
+        c.set(Calendar.DATE, day);
+
+        System.out.println(c.getTime());
+    }
 }

+ 260 - 0
src/test/java/com/winhc/task/JudicialCaseQueryJob.java

@@ -0,0 +1,260 @@
+package com.winhc.task;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.winhc.task.bean.CaseOut;
+import com.winhc.task.bean.Summary;
+import com.winhc.task.job.CompanyBackUpdate;
+import com.winhc.task.listener.NoModelDataListener;
+import com.winhc.task.util.BaseUtils;
+import com.winhc.task.util.EasyExcelUtil;
+import com.winhc.task.util.QueryBuilderUtils;
+import lombok.val;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hadoop.hbase.TableName;
+import org.apache.hadoop.hbase.client.Connection;
+import org.apache.hadoop.hbase.client.Get;
+import org.apache.hadoop.hbase.client.ResultScanner;
+import org.apache.hadoop.hbase.client.Scan;
+import org.apache.hadoop.hbase.filter.PageFilter;
+import org.elasticsearch.action.search.SearchRequest;
+import org.elasticsearch.action.search.SearchResponse;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.elasticsearch.index.query.WrapperQueryBuilder;
+import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
+
+import static com.winhc.task.common.Constant.hbase_scan_v8;
+import static com.winhc.task.common.Constant.staff_head;
+
+
+/**
+ * @author π
+ * @Description:
+ * @date 2023/7/19 15:16
+ */
+@SpringBootTest
+public class JudicialCaseQueryJob {
+
+    @Autowired
+    @Qualifier(value = "v6")
+    RestHighLevelClient getClient;
+
+    @Autowired
+    Connection connection;
+
+    @Autowired
+    CompanyBackUpdate companyBackUpdate;
+
+    @Test
+    public void start1() throws Exception {
+        String fileName = "C:\\Users\\batmr\\Documents\\WeChat Files\\XU1759380082\\FileStorage\\File\\2023-07\\2023-3-31破产信息.xls";
+        // 这里 只要,然后读取第一个sheet
+        List<Map<Integer, String>> dataList = new ArrayList<>();
+        EasyExcel.read(fileName, new NoModelDataListener(dataList)).sheet().doRead();
+        System.out.println(dataList.size());
+        val futures = new ArrayList<CompletableFuture<JSONObject>>();
+
+        dataList.stream()
+                .map(m -> m.get(4))
+                .forEach(d -> {
+                    futures.add(fetchEs(d));
+                });
+
+        CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).get();
+        List<JSONObject> reList = futures.stream().map(x -> {
+            try {
+                return x.get();
+            } catch (Exception e) {
+                throw new RuntimeException("error 1111 :" + e.getMessage(), e);
+            }
+        }).filter(Objects::nonNull).collect(Collectors.toList());
+        System.out.println(JSONObject.toJSONString(reList.size()));
+
+
+        val futures2 = new ArrayList<CompletableFuture<List<JSONObject>>>();
+        reList.forEach((keys) -> {
+            futures2.add(fetchHbaseById(keys));
+        });
+
+
+        CompletableFuture.allOf(futures2.toArray(new CompletableFuture[0])).get();
+
+        List<List<JSONObject>> reList2 = futures2.stream().map(x -> {
+            try {
+                return x.get();
+            } catch (Exception e) {
+                throw new RuntimeException("error 1111 :" + e.getMessage(), e);
+            }
+        }).filter(Objects::nonNull).collect(Collectors.toList());
+
+
+        List<List<String>> head_list = Arrays.stream("企业@原告@原告电话@原告法人@原告地址".split("@"))
+                .map(Collections::singletonList)
+                .collect(Collectors.toList());
+
+        EasyExcelUtil case_xlsx = new EasyExcelUtil().init("D:\\tmp\\case\\" + "case_list.xlsx", "sheet1", head_list, new HashSet<>());
+        List<CaseOut> final_list = new ArrayList<>();
+
+        reList2.forEach(d1 -> {
+            d1.forEach(d2 -> {
+                String bg_name = d2.getString("bg_name");
+                String yg_name = d2.getString("name");
+                String reg_location = d2.getString("reg_location");
+                String legals = Optional.ofNullable(d2.getJSONArray("legal_entities")).orElse(new JSONArray())
+                        .toJavaList(JSONObject.class)
+                        .stream()
+                        .map(x -> {
+                            JSONObject tj = new JSONObject();
+                            tj.fluentPut("legal", x.getString("name"))
+                                    .fluentPut("id", x.getString("id"))
+                                    .fluentPut("legal_deleted", x.getInteger("deleted"));
+                            return tj;
+                        }).filter(x -> x.getString("legal_deleted").equals("0") && StringUtils.isNotBlank(x.getString("legal")))
+                        .map(r1 -> r1.getString("legal"))
+                        .collect(Collectors.joining("\n"));
+
+
+                String phones = Optional.ofNullable(d2.getJSONArray("tel_info")).orElse(new JSONArray())
+                        .toJavaList(JSONObject.class).stream()
+                        .filter(x -> StringUtils.isNotBlank(x.getString("tel"))).map(x -> x.getString("tel"))
+                        .distinct().collect(Collectors.joining("\n"));
+
+
+                CaseOut cc = CaseOut.builder().bg_name(bg_name)
+                        .yg_name(yg_name).phones(phones)
+                        .legal(legals).reg_location(reg_location).build();
+                final_list.add(cc);
+            });
+        });
+
+        case_xlsx.doExportExcel(final_list);
+        case_xlsx.finish();
+    }
+
+    @Test
+    public void start2() throws Exception {
+        companyBackUpdate.start();
+    }
+
+    private CompletableFuture<JSONObject> fetchEs(String companyName) {
+        return CompletableFuture.supplyAsync(() -> {
+            try {
+                List<String> ids = queryCaseByCompanyName(companyName);
+                return new JSONObject()
+                        .fluentPut("company_name", companyName)
+                        .fluentPut("ids", ids);
+            } catch (Exception e) {
+                e.printStackTrace();
+                return new JSONObject();
+            }
+        }, BaseUtils.COMMON_POOL);
+    }
+
+
+    private CompletableFuture<List<JSONObject>> fetchHbaseById(JSONObject keys) {
+        String tableName = "NG_RT_COMPANY";
+        return CompletableFuture.supplyAsync(() -> {
+            List<JSONObject> re = new ArrayList<>();
+            List<Get> gs = keys.getJSONArray("ids").toJavaList(String.class)
+                    .stream().
+                    distinct().map(vk -> vk.getBytes(StandardCharsets.UTF_8))
+                    .map(Get::new).collect(Collectors.toList());
+
+            try (val table = connection.getTable(TableName.valueOf(tableName))) {
+                val rs = table.get(gs);
+                if (rs != null) {
+                    re = Stream.of(rs)
+                            .filter(result -> result != null && !result.isEmpty())
+                            .map(BaseUtils::toJSONObjectLowerCase)
+                            .map(data -> data.fluentPut("bg_name", keys.getString("company_name")))
+                            .collect(Collectors.toList());
+                }
+            } catch (Exception e) {
+                throw new RuntimeException("fetchHbase error" + e.getMessage(), e);
+            }
+            return re;
+        }, BaseUtils.COMMON_POOL);
+    }
+
+    private List<String> queryCaseByCompanyName(String companyName) throws IOException {
+        String dsl = "{\n" +
+                "  \"query\": {\n" +
+                "    \"bool\": {\n" +
+                "      \"must\": [\n" +
+                "        {\n" +
+                "          \"term\": {\n" +
+                "            \"bg_name.name.keyword\": {\n" +
+                "              \"value\": \"&company_name\"\n" +
+                "            }\n" +
+                "          }\n" +
+                "        },\n" +
+                "        {\n" +
+                "          \"term\": {\n" +
+                "            \"deleted\": {\n" +
+                "              \"value\": \"0\"\n" +
+                "            }\n" +
+                "          }\n" +
+                "        },\n" +
+                "        {\n" +
+                "          \"exists\": {\n" +
+                "            \"field\": \"yg_name.litigant_id\"\n" +
+                "          }\n" +
+                "        }\n" +
+                "      ],\n" +
+                "      \"must_not\": [\n" +
+                "        {\n" +
+                "          \"term\": {\n" +
+                "            \"yg_name.litigant_id\": {\n" +
+                "              \"value\": \"\"\n" +
+                "            }\n" +
+                "          }\n" +
+                "        }\n" +
+                "      ]\n" +
+                "    }\n" +
+                "  },\n" +
+                "  \"_source\": {\n" +
+                "    \"includes\": [\n" +
+                "      \"bg_name\",\n" +
+                "      \"yg_name\"\n" +
+                "    ],\n" +
+                "    \"excludes\": []\n" +
+                "  }\n" +
+                "}";
+
+        String ds1 = dsl.replaceAll("&company_name", companyName);
+        SearchRequest searchRequest = new SearchRequest("winhc_judicial_case_v9").types("_doc");
+        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
+        searchSourceBuilder.size(10000);
+        if (StringUtils.isNotEmpty(ds1)) {
+            WrapperQueryBuilder query = QueryBuilderUtils.getQuery(JSONObject.parseObject(ds1));
+            searchSourceBuilder.query(query);
+        }
+        searchRequest.source(searchSourceBuilder);
+        SearchResponse searchResponse = getClient.search(searchRequest);
+        List<String> ids = Arrays.stream(searchResponse.getHits().getHits())
+                .flatMap(x -> {
+                    Map<String, Object> sourceAsMap = x.getSourceAsMap();
+                    String str = JSONObject.toJSONString(sourceAsMap);
+                    JSONObject c = JSONObject.parseObject(str);
+                    return c.getJSONArray("yg_name").toJavaList(JSONObject.class)
+                            .stream()
+                            .map(m -> m.getString("litigant_id"))
+                            .filter(d -> StringUtils.isNotBlank(d) && d.length() == 32).distinct()
+                            ;
+                }).collect(Collectors.toList());
+        return ids;
+    }
+}

+ 18 - 0
src/test/java/com/winhc/task/SynMongoCompanyContract.java

@@ -0,0 +1,18 @@
+package com.winhc.task;
+
+import com.winhc.task.job.EsScanCompanyFinanceJob;
+import com.winhc.task.job.EsScanContractTemplateInfoJob;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+public class SynMongoCompanyContract {
+    @Autowired
+    EsScanContractTemplateInfoJob ee;
+
+    @Test
+    public void start(){
+        ee.start();
+    }
+}