Browse Source

fixed es search

zero 1 năm trước cách đây
mục cha
commit
6046e10578
37 tập tin đã thay đổi với 2520 bổ sung25 xóa
  1. 5 0
      pom.xml
  2. 38 0
      src/main/java/com/example/xiaoshiweixinback/business/jwt/JwtTokenUtil.java
  3. 11 0
      src/main/java/com/example/xiaoshiweixinback/business/utils/RegexUtil.java
  4. 47 0
      src/main/java/com/example/xiaoshiweixinback/entity/dto/common/ClientDTO.java
  5. 4 0
      src/main/java/com/example/xiaoshiweixinback/entity/dto/esPicture/EsPatentSearchDTO.java
  6. 13 0
      src/main/java/com/example/xiaoshiweixinback/entity/vo/esConfig/EsConfigVO.java
  7. 3 1
      src/main/java/com/example/xiaoshiweixinback/entity/vo/person/LoginByWxVO.java
  8. 18 7
      src/main/java/com/example/xiaoshiweixinback/service/LoginService.java
  9. 44 0
      src/main/java/com/example/xiaoshiweixinback/service/common/EsDenseVectorService.java
  10. 117 3
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/FormatQueryService.java
  11. 72 0
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/ChildQueryBuilder.java
  12. 124 0
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/CustomChildQueryBuilder.java
  13. 195 0
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/DateQueryBuilder.java
  14. 19 0
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/EsBuilderFactory.java
  15. 35 0
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/IQueryBuilder.java
  16. 63 0
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/KeyWordQueryBuilder.java
  17. 69 0
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/MatchPhaseQueryBuilder.java
  18. 71 0
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/MatchQueryBuilder.java
  19. 66 0
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/NestedMergePersonQueryBuilder.java
  20. 74 0
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/NestedPersonQueryBuilder.java
  21. 87 0
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/NestedQueryBuilder.java
  22. 88 0
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/NumberQueryBuilder.java
  23. 71 0
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/ParentQueryBuilder.java
  24. 106 0
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/PersonNameQueryBuilder.java
  25. 63 0
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/PrefixQueryBuilder.java
  26. 196 0
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/PrioritiesNestedQueryBuilder.java
  27. 71 0
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/ProductQueryBuilder.java
  28. 71 0
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/ProjectQueryBuilder.java
  29. 72 0
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/ProjectTaskQueryBuilder.java
  30. 71 0
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/TermOrWildcardQueryBuilder.java
  31. 82 0
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/WildcardQueryBuilder.java
  32. 2 1
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/getSqlFactorys/GetSqlFactory.java
  33. 1 1
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/getSqlFactorys/GetSqlObject.java
  34. 1 2
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/getSqlFactorys/GetWebQuerySql.java
  35. 272 0
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/permissions/PermissionService.java
  36. 150 0
      src/main/resources/jsons/patentVector.json
  37. 28 10
      src/test/java/com/example/xiaoshiweixinback/XiaoshiWeixinbackApplicationTests.java

+ 5 - 0
pom.xml

@@ -89,6 +89,11 @@
             <version>${jwt.version}</version>
         </dependency>
         <dependency>
+            <groupId>com.auth0</groupId>
+            <artifactId>java-jwt</artifactId>
+            <version>3.1.0</version>
+        </dependency>
+        <dependency>
             <groupId>com.ejlchina</groupId>
             <artifactId>okhttps</artifactId>
             <version>3.1.1</version>

+ 38 - 0
src/main/java/com/example/xiaoshiweixinback/business/jwt/JwtTokenUtil.java

@@ -1,5 +1,8 @@
 package com.example.xiaoshiweixinback.business.jwt;
 
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.JWTCreator;
+import com.auth0.jwt.algorithms.Algorithm;
 import com.example.xiaoshiweixinback.business.jwt.properties.JwtProperties;
 import com.example.xiaoshiweixinback.business.utils.ToolUtil;
 import io.jsonwebtoken.Claims;
@@ -9,12 +12,15 @@ import io.jsonwebtoken.SignatureAlgorithm;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.io.UnsupportedEncodingException;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 
 @Component
 public class JwtTokenUtil {
+    private static String SECRET = "xiaoshi-weixin-background";
 
     @Autowired
     private JwtProperties jwtProperties;
@@ -98,6 +104,38 @@ public class JwtTokenUtil {
         return doGenerateToken(claims, userInfo);
     }
 
+    public String createToken() throws UnsupportedEncodingException {
+        //签发时间
+        Date iatDate = new Date();
+        Calendar nowTime = Calendar.getInstance();
+        //设置过期时间 -1小时后过期
+        nowTime.add(Calendar.MINUTE,1);
+        //得到时间
+        Date expiresDate = nowTime.getTime();
+        //实例化组成头部header的map
+        Map<String, Object> map = new HashMap<String, Object>();
+        //声明类型,这里是jwt
+        map.put("typ", "JWT");
+        //声明加密的算法,通常直接使用HMAC SHA256
+        map.put("alg", "HS256");
+        //plyload 载荷,可以理解为承载的物品
+//		iss: jwt签发者
+//		sub: jwt所面向的用户
+//		aud: 接收jwt的一方
+//		exp: jwt的过期时间,这个过期时间必须要大于签发时间
+//		nbf: 定义在什么时间之前,该jwt都是不可用的.
+//		iat: jwt的签发时间
+//		jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
+        String token = JWT.create()
+                .withHeader(map)//头部 header
+                .withClaim("iss", "ADMIN") // 载荷 payload
+                .withClaim("aud", "All")
+                .withExpiresAt(expiresDate)//设置过期时间
+                .withIssuedAt(iatDate)//设置签发时间
+                .sign(Algorithm.HMAC256(SECRET));//验签singtrue加密
+        return token;
+    }
+
     /**
      * 生成token
      */

+ 11 - 0
src/main/java/com/example/xiaoshiweixinback/business/utils/RegexUtil.java

@@ -41,4 +41,15 @@ public class RegexUtil {
         Matcher m = p.matcher(str);
         return m.matches();
     }
+
+    public static boolean isRegExpReplace(String str) throws PatternSyntaxException {
+        if (str == null) {
+            return false;
+        }
+        String regExp = "[,。、;,./;]";
+        Pattern p = Pattern.compile(regExp);
+        Matcher m = p.matcher(str);
+        return m.matches();
+    }
+
 }

+ 47 - 0
src/main/java/com/example/xiaoshiweixinback/entity/dto/common/ClientDTO.java

@@ -0,0 +1,47 @@
+package com.example.xiaoshiweixinback.entity.dto.common;
+
+
+
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+/**
+ * <p>
+ * 委托方表
+ * </p>
+ *
+ * @author 王岩
+ * @since 2022-02-17
+ */
+@Data
+
+public class ClientDTO {
+
+    private Integer id;
+
+    /**
+     * 委托方名称
+     */
+
+    private String name;
+
+
+    /**
+     * 客户负责人
+     */
+    private Integer personnelId;
+
+
+
+    private Integer tenantId;
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+    @TableField(exist = false)
+    private String personnelName;
+
+}

+ 4 - 0
src/main/java/com/example/xiaoshiweixinback/entity/dto/esPicture/EsPatentSearchDTO.java

@@ -5,5 +5,9 @@ import lombok.Data;
 @Data
 public class EsPatentSearchDTO {
 
+    private Long pageNum;
+
+    private Long pageSize;
+
     private String key;
 }

+ 13 - 0
src/main/java/com/example/xiaoshiweixinback/entity/vo/esConfig/EsConfigVO.java

@@ -0,0 +1,13 @@
+package com.example.xiaoshiweixinback.entity.vo.esConfig;
+
+import lombok.Data;
+
+@Data
+public class EsConfigVO {
+    private String name;
+    private String type;
+    private String value;
+    private String field;
+    private String esField;
+    private String esClass;
+}

+ 3 - 1
src/main/java/com/example/xiaoshiweixinback/entity/vo/person/LoginByWxVO.java

@@ -2,8 +2,10 @@ package com.example.xiaoshiweixinback.entity.vo.person;
 
 import lombok.Data;
 
+import java.io.Serializable;
+
 @Data
-public class LoginByWxVO {
+public class LoginByWxVO implements Serializable {
     private Integer id;
 
     private String userName;

+ 18 - 7
src/main/java/com/example/xiaoshiweixinback/service/LoginService.java

@@ -1,6 +1,7 @@
 package com.example.xiaoshiweixinback.service;
 
 
+import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.captcha.CaptchaUtil;
 import cn.hutool.captcha.CircleCaptcha;
 import cn.hutool.core.img.ImgUtil;
@@ -38,6 +39,7 @@ import javax.crypto.spec.SecretKeySpec;
 import java.io.BufferedReader;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.util.*;
@@ -75,7 +77,7 @@ public class LoginService {
      * @return
      */
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
-    public LoginVO loginByPhone(LoginDTO dto) {
+    public LoginVO loginByPhone(LoginDTO dto) throws Exception {
         LogHelper.log("登录开始");
         //获取缓存中验证码
         Object codeObj = redisService.get(AppCacheKeyUtil.getLoginMessageCode(dto.getPhoneNum()));
@@ -119,7 +121,8 @@ public class LoginService {
         } else {
             BeanUtil.copy(person, loginVO);
         }
-        loginVO.setToken(this.getToken());
+        loginVO.setToken(jwtTokenUtil.createToken());
+        redisService.set(AppCacheKeyUtil.getUserIdToken(loginVO.getId()),loginVO.getToken());
         redisService.set(AppCacheKeyUtil.getTokenUserInfo(loginVO.getToken()), loginVO);
         LogHelper.log("登陆结束");
         return loginVO;
@@ -186,8 +189,9 @@ public class LoginService {
                 }
                 wxVO.setPhoneNum(phoneNumber);
             }
-            wxVO.setToken(this.getToken());
+            wxVO.setToken(jwtTokenUtil.createToken());
             wxVO.setOpenId(jscode2SessionWo.getOpenid());
+            redisService.set(AppCacheKeyUtil.getUserIdToken(wxVO.getId()), wxVO);
             redisService.set(AppCacheKeyUtil.getTokenUserInfo(wxVO.getToken()), wxVO);
         }
         return wxVO;
@@ -241,7 +245,7 @@ public class LoginService {
         Map<String, String> result = new HashMap<>();
         result.put("captcha", ImgUtil.toBase64DataUri(captcha.getImage(), "png"));
         result.put("uuid", uuid);
-        //4.将验证码存放到Redis里面并设置过期时间为 60 单位:秒 KEY值格式为: 验证码:UUID  VALUE值为:验证码生成工具所生成的验证码
+        //4.将验证码存放到Redis里面
         redisService.set(AppCacheKeyUtil.getCheckCode(vo.getPhoneNum()), captcha.getCode());
         return result;
     }
@@ -257,11 +261,12 @@ public class LoginService {
         if (ToolUtil.isEmpty(token)) {
             throw new BusinessException(ExceptionEnum.THE_LOG_OUT);
         }
-        Object obj = redisService.get(AppCacheKeyUtil.getTokenUserInfo(token));
+        Object obj = redisService.get(token);
         if (ToolUtil.isEmpty(obj)) {
             throw new BusinessException(ExceptionEnum.THE_LOG_OUT);
         }
-        Person person = personMapper.selectById(vo.getId());
+        LoginVO loginVO = JSONObject.parseObject(obj.toString(), LoginVO.class);
+        Person person = personMapper.selectById(loginVO.getId());
         PersonVO personVO = new PersonVO();
         BeanUtil.copy(person, personVO);
         return personVO;
@@ -298,7 +303,13 @@ public class LoginService {
      */
     public boolean logout(PersonIdDTO dto) {
         String token = LoginUtils.getToken();
-        redisService.delete(AppCacheKeyUtil.getTokenUserInfo(token));
+        Object obj = redisService.get(AppCacheKeyUtil.getTokenUserInfo(token));
+        if (ToolUtil.isNotEmpty(obj)) {
+            Object object = redisService.get(AppCacheKeyUtil.getTokenUserInfo(token));
+            LoginVO loginVO = JSONObject.parseObject(object.toString(), LoginVO.class);
+            redisService.delete(AppCacheKeyUtil.getUserIdToken(loginVO.getId()));
+            redisService.delete(AppCacheKeyUtil.getTokenUserInfo(token));
+        }
         return true;
     }
 

+ 44 - 0
src/main/java/com/example/xiaoshiweixinback/service/common/EsDenseVectorService.java

@@ -10,10 +10,15 @@ import co.elastic.clients.elasticsearch.core.SearchResponse;
 import co.elastic.clients.elasticsearch.core.search.Hit;
 import co.elastic.clients.json.JsonData;
 import com.example.xiaoshiweixinback.business.utils.BeanUtil;
+import com.example.xiaoshiweixinback.business.utils.parseQueryToTree.expressManager;
+import com.example.xiaoshiweixinback.business.utils.parseQueryToTree.operateNode;
+import com.example.xiaoshiweixinback.business.utils.parseQueryToTree.treeNode;
 import com.example.xiaoshiweixinback.domain.es.PatentVector;
+import com.example.xiaoshiweixinback.entity.dto.esPicture.EsPatentSearchDTO;
 import com.example.xiaoshiweixinback.entity.dto.esPicture.EsPictureNoDTO;
 import com.example.xiaoshiweixinback.entity.vo.esPicture.EsPictureNoVo;
 import com.example.xiaoshiweixinback.entity.vo.esPicture.EsPictureVectorVo;
+import com.example.xiaoshiweixinback.service.importPatent.FormatQueryService;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -32,9 +37,48 @@ public class EsDenseVectorService {
     private final ElasticsearchClient client;
 
     @Autowired
+    private FormatQueryService formatQueryService;
+
+    @Autowired
     private GetVectorService getVectorService;
 
+    public List<EsPictureVectorVo> getPatentList(EsPatentSearchDTO dto) throws Exception {
+        Long pageNum = dto.getPageNum();
+        Long pageSize = dto.getPageSize();
+//        String key = dto.getKey().replaceAll("[,。、;,./;\\s]"," OR ");
+        String key = dto.getKey().replaceAll("[,。、;,./;]"," OR ");
+        String s = "TI = " + "(" + key + ")";
+        System.out.println(s);
+
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent_vector");
+
+        //1. 解析检索条件
+        treeNode tree = expressManager.getInstance().Parse(s, false);
+        //3. 从es中检索数据
+        Query query = formatQueryService.EsQueryToQuery((operateNode) tree, "patentVector", null);
+        builder.query(query);
+
+        //分页
+        if (pageNum != null && pageSize != null && pageNum > 0 && pageSize > 0) {
+            builder.from((pageNum.intValue() - 1) * pageSize.intValue()).size(pageSize.intValue());
+        } else {
+            builder.from(0).size(99999);
+        }
 
+        SearchResponse<PatentVector> response = client.search(builder.build(), PatentVector.class);
+        List<EsPictureVectorVo> vectorVos = new ArrayList<>();
+        List<Hit<PatentVector>> hits = response.hits().hits();
+        for (Hit<PatentVector> hit : hits) {
+            PatentVector vector = hit.source();
+            EsPictureVectorVo vectorVo = new EsPictureVectorVo();
+            BeanUtil.copy(vector,vectorVo);
+            vectorVos.add(vectorVo);
+        }
+
+        return vectorVos;
+    }
 
     public List<EsPictureVectorVo> getPatentVectorSort(File file, String description) throws IOException {
         List<Float> imageList = new ArrayList<>();

+ 117 - 3
src/main/java/com/example/xiaoshiweixinback/service/importPatent/FormatQueryService.java

@@ -1,17 +1,22 @@
 package com.example.xiaoshiweixinback.service.importPatent;
 
 
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
 import com.alibaba.fastjson.JSON;
 import com.example.xiaoshiweixinback.business.utils.parseQueryToTree.*;
 import com.example.xiaoshiweixinback.entity.dto.common.SqlObject;
-import com.example.xiaoshiweixinback.service.importPatent.getSqlFactorys.GetSqlFactory;
-import com.example.xiaoshiweixinback.service.importPatent.getSqlFactorys.GetSqlObject;
+import com.example.xiaoshiweixinback.entity.vo.esConfig.EsConfigVO;
+import com.example.xiaoshiweixinback.service.importPatent.factorys.EsBuilderFactory.EsBuilderFactory;
+import com.example.xiaoshiweixinback.service.importPatent.factorys.EsBuilderFactory.IQueryBuilder;
+import com.example.xiaoshiweixinback.service.importPatent.factorys.GetSqlFactorys.GetSqlFactory;
+import com.example.xiaoshiweixinback.service.importPatent.factorys.GetSqlFactorys.GetSqlObject;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.text.ParseException;
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -21,9 +26,12 @@ import java.util.List;
 @Service
 @Slf4j
 public class FormatQueryService {
+
     @Autowired
     private GetSqlFactory getSqlFactory;
 
+    @Autowired
+    private EsBuilderFactory esBuilderFactory;
 
 
     /**
@@ -131,7 +139,113 @@ public class FormatQueryService {
         return reQuery;
     }
 
+    /**
+     * Es检索
+     *
+     * @param node
+     * @param configName
+     * @return
+     * @throws ParseException
+     */
+    public Query EsQueryToQuery(treeNode node, String configName, Integer projectId) throws ParseException {
+        if (node == null) {
+            return null;
+        } else {
+            if (node instanceof operateNode) {
+                operate operate1 = ((operateNode) node).getoperate();
+                treeNode Left = node.getLeft();
+                treeNode Right = node.getRight();
+                //如果and or  则递归本身
+                if (operate1.gettype().equals(enuType.Logic)) {
+                    Query q1 = this.EsQueryToQuery((operateNode) Left, configName, projectId);
+                    Query q2 = this.EsQueryToQuery((operateNode) Right, configName, projectId);
+                    switch (operate1.getShowName()) {
+                        case "AND":
+                            return QueryBuilders.bool(i -> i.must(q1, q2));
+                        case "OR":
+                            return QueryBuilders.bool(i -> i.should(q1, q2));
+                        case "NOT":
+                            Query temQ = (q1 == null) ? q2 : q1;
+                            return QueryBuilders.bool(i -> i.mustNot(temQ));
+                        case "TO":
+                            return QueryBuilders.bool(i -> i.must(q1, q2));
+                        case "*":
+                            return QueryBuilders.bool(i -> i.must(q1, q2));
+                        default:
+                            return null;
+                    }
 
+                } else {
+                    if (operate1.gettype().equals(enuType.Assignment)) {
+                        return HandleValueNode(((valueNode) Left).getvalue(), operate1.getCode(), Right, configName, "", "", projectId);
+                    } else {
+                        return null;
+                    }
+                }
+            } else {
+                return null;
+            }
+        }
+    }
+
+    public Query HandleValueNode(String field, String operate, treeNode valeNode, String configName, String op, String dp, Integer projectId) throws ParseException {
+        if (valeNode == null) {
+            return null;
+        } else {
+            if (valeNode instanceof operateNode) {
+                operate operate1 = ((operateNode) valeNode).getoperate();
+                if (operate1.getShowName().equals("TO")) {
+                    op = ">=";
+                    dp = "<=";
+                }
+                if (operate1.gettype().equals(enuType.Logic)) {
+                    Query q1 = this.HandleValueNode(field, operate, ((treeNode) valeNode).getLeft(), configName, op, "", projectId);
+                    Query q2 = this.HandleValueNode(field, operate, (treeNode) valeNode.getRight(), configName, "", dp, projectId);
+                    switch (operate1.getShowName()) {
+                        case "AND":
+                            return QueryBuilders.bool(i -> i.must(q1, q2));
+                        case "OR":
+                            return QueryBuilders.bool(i -> i.should(q1, q2));
+                        case "NOT":
+                            Query temQ = (q1 == null) ? q2 : q1;
+                            return QueryBuilders.bool(i -> i.mustNot(temQ));
+                        case "TO":
+                            return QueryBuilders.bool(i -> i.must(q1, q2));
+                        case "*":
+                            return QueryBuilders.bool(i -> i.must(q1, q2));
+                        default:
+                            return null;
+                    }
+                } else {
+                    return null;
+                }
+            } else {
+                if (StringUtils.isNotEmpty(op)) {
+                    operate = op;
+                } else if (StringUtils.isNotEmpty(dp))
+                    operate = dp;
+                //比较运算符
+                IQueryBuilder iQueryBuilder = null;
+                String json = CommonService.readJsonFile(configName + ".json");
+                List<EsConfigVO> esConfigVOS = JSON.parseArray(json, EsConfigVO.class);
+                EsConfigVO esConfigVO = esConfigVOS.stream().filter(item -> item.getField().equals(field)).findFirst().orElse(null);
+                if (esConfigVO != null) {
+                    iQueryBuilder = esBuilderFactory.getClass(esConfigVO.getEsClass());
+                    iQueryBuilder.setField(esConfigVO.getEsField());
+                    if (iQueryBuilder.getField().contains(".")) {
+                        String path = iQueryBuilder.getField().substring(0, iQueryBuilder.getField().indexOf("."));
+                        iQueryBuilder.setPath(path);
+                    }
+                    iQueryBuilder.setOperator(operate);
+                    iQueryBuilder.setValue(((valueNode) valeNode).getvalue());
+                    iQueryBuilder.setProjectId(projectId);
+                    return iQueryBuilder.creteQuery();
+                } else {
+                    return null;
+                }
+            }
 
+        }
+    }
 
 }

+ 72 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/ChildQueryBuilder.java

@@ -0,0 +1,72 @@
+package com.example.xiaoshiweixinback.service.importPatent.factorys.EsBuilderFactory;
+
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+
+@Component
+public class ChildQueryBuilder implements IQueryBuilder {
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+    public Integer projectId = null;
+
+    @Override
+    public Query creteQuery() throws ParseException {
+        return QueryBuilders.hasChild(child -> child.type("project")
+                .query(org.springframework.data.elasticsearch.client.elc.QueryBuilders.matchQueryAsQuery(field, value, null, null)));
+    }
+
+    @Override
+    public String getField() {
+        return field;
+    }
+
+    @Override
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    @Override
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String getOperator() {
+        return operator;
+    }
+
+    @Override
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    @Override
+    public String getPath() {
+        return path;
+    }
+
+    @Override
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    @Override
+    public Integer getProjectId() {
+        return projectId;
+    }
+
+    @Override
+    public void setProjectId(Integer projectId) {
+        this.projectId = projectId;
+    }
+}

+ 124 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/CustomChildQueryBuilder.java

@@ -0,0 +1,124 @@
+package com.example.xiaoshiweixinback.service.importPatent.factorys.EsBuilderFactory;
+
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import co.elastic.clients.json.JsonData;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+
+@Component
+public class CustomChildQueryBuilder implements IQueryBuilder {
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+    public String fieldType = "";
+    public Integer projectId = null;
+
+    @Override
+    public Query creteQuery() throws ParseException {
+        Query q = null;
+        //自定义栏位日期和数字类型
+        if (field.equals("custom_field.field_type")) {
+            fieldType = value;
+        }
+        if ((fieldType.equals("0") || fieldType.equals("1")) && field.equals("custom_field.field_value.raw")) {
+            if (fieldType.equals("0")) {
+                if (value.contains("-")) {
+                    String frontPart = value.substring(0, value.indexOf("-"));
+                    String afterPart = value.substring(value.indexOf("-") + 1);
+                    q = QueryBuilders.range(n -> n.field(field).gte(JsonData.of(frontPart)).lte(JsonData.of(afterPart)));
+                } else {
+                    q = QueryBuilders.term(n -> n.field(field).value(value));
+                }
+            } else {
+                if (value.contains("-")) {
+
+                } else {
+
+                }
+            }
+        } else if ((fieldType.equals("0") || fieldType.equals("1")) && field.equals("custom_field.stats_value.raw")) {
+            if (fieldType.equals("0")) {
+                if (value.contains("-")) {
+                    String frontPart = value.substring(0, value.indexOf("-"));
+                    String afterPart = value.substring(value.indexOf("-") + 1);
+                    q = QueryBuilders.range(n -> n.field(field).gte(JsonData.of(frontPart)).lte(JsonData.of(afterPart)));
+                } else {
+                    q = QueryBuilders.term(n -> n.field(field).value(value));
+                }
+            } else {
+                if (value.contains("-")) {
+
+                } else {
+
+                }
+            }
+        } else {
+            q = QueryBuilders.term(n -> n.field(field).value(value));
+        }
+        Query finalQ = q;
+        Query query = QueryBuilders.hasChild(i -> i.type("project_customfield")
+                .query(finalQ));
+        return query;
+    }
+
+    @Override
+    public String getField() {
+        return field;
+    }
+
+    @Override
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    @Override
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String getOperator() {
+        return operator;
+    }
+
+    @Override
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    @Override
+    public String getPath() {
+        return path;
+    }
+
+    @Override
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    public String getFieldType() {
+        return fieldType;
+    }
+
+    public void setFieldType(String fieldType) {
+        this.fieldType = fieldType;
+    }
+
+    @Override
+    public Integer getProjectId() {
+        return projectId;
+    }
+
+    @Override
+    public void setProjectId(Integer projectId) {
+        this.projectId = projectId;
+    }
+}

+ 195 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/DateQueryBuilder.java

@@ -0,0 +1,195 @@
+package com.example.xiaoshiweixinback.service.importPatent.factorys.EsBuilderFactory;
+
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import co.elastic.clients.json.JsonData;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+
+@Component
+public class DateQueryBuilder implements IQueryBuilder {
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+    public Integer projectId = null;
+    public static final int YEAR = 4;
+    public static final int MONTHONE = 6;
+    public static final int MONTH = 7;
+    public static final int DAYONE = 8;
+    public static final int DAY = 10;
+    public static final String EQ = "=";
+
+
+    @Override
+    public Query creteQuery() throws ParseException {
+        Query query = null;
+        if (value != null && !"".equals(value)) {
+            Calendar calendar = Calendar.getInstance();
+            if (value.length() == YEAR) {
+                SimpleDateFormat format = new SimpleDateFormat("yyyy");
+                Date year = format.parse(value);
+                calendar.setTime(year);
+                String yearTime = String.valueOf(calendar.getTime().getTime());
+                calendar.add(Calendar.YEAR, 1);
+                String yearNextTime = String.valueOf(calendar.getTime().getTime());
+                switch (operator) {
+                    case NumberQueryBuilder.LT:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).lt(JsonData.of(yearTime)));
+                        break;
+                    case NumberQueryBuilder.LTE:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).lte(JsonData.of(yearTime)));
+                        break;
+                    case NumberQueryBuilder.GT:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).gt(JsonData.of(yearTime)));
+                        break;
+                    case NumberQueryBuilder.GTE:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).gte(JsonData.of(yearTime)));
+                        break;
+                    default:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).gte(JsonData.of(yearTime)).lt(JsonData.of(yearNextTime)));
+                        break;
+                }
+            } else if (value.length() == MONTH || value.length() == MONTHONE) {
+                Date month = new Date();
+                if (value.contains("-")) {
+                    SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM");
+                    month = format2.parse(value);
+                } else if (value.contains("/")) {
+                    SimpleDateFormat format3 = new SimpleDateFormat("yyyy/MM");
+                    month = format3.parse(value);
+                } else {
+                    SimpleDateFormat format1 = new SimpleDateFormat("yyyyMM");
+                    month = format1.parse(value);
+                }
+                calendar.setTime(month);
+                String monthTime = String.valueOf(calendar.getTime().getTime());
+                calendar.add(Calendar.MONTH, 1);
+                String monthNextTime = String.valueOf(calendar.getTime().getTime());
+                switch (operator) {
+                    case NumberQueryBuilder.LT:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).lt(JsonData.of(monthTime)));
+                        break;
+                    case NumberQueryBuilder.LTE:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).lte(JsonData.of(monthTime)));
+                        break;
+                    case NumberQueryBuilder.GT:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).gt(JsonData.of(monthTime)));
+                        break;
+                    case NumberQueryBuilder.GTE:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).gte(JsonData.of(monthTime)));
+                        break;
+                    default:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).gte(JsonData.of(monthTime)).lt(JsonData.of(monthNextTime)));
+                        break;
+                }
+            } else if (value.length() == DAY || value.length() == DAYONE) {
+                Date day = new Date();
+                if (value.contains("-")) {
+                    SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd");
+                    day = format2.parse(value);
+                } else if (value.contains("/")) {
+                    SimpleDateFormat format3 = new SimpleDateFormat("yyyy/MM/dd");
+                    day = format3.parse(value);
+                } else {
+                    SimpleDateFormat format1 = new SimpleDateFormat("yyyyMMdd");
+                    day = format1.parse(value);
+                }
+                calendar.setTime(day);
+                String dayTime = String.valueOf(day.getTime());
+                calendar.add(Calendar.DAY_OF_MONTH, 1);
+                String nextDayTime = String.valueOf(calendar.getTime().getTime());
+                switch (operator) {
+                    case NumberQueryBuilder.LT:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).lt(JsonData.of(dayTime)));
+                        break;
+                    case NumberQueryBuilder.LTE:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).lte(JsonData.of(dayTime)));
+                        break;
+                    case NumberQueryBuilder.GT:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).gt(JsonData.of(dayTime)));
+                        break;
+                    case NumberQueryBuilder.GTE:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).gte(JsonData.of(dayTime)));
+                        break;
+                    default:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).gte(JsonData.of(dayTime)).lt(JsonData.of(nextDayTime)));
+                        break;
+                }
+            } else {
+                query = QueryBuilders
+                        .range(range -> range.field(field).gte(JsonData.of(1)).lte(JsonData.of(2)));
+            }
+        }
+        return query;
+    }
+
+    @Override
+    public String getField() {
+        return field;
+    }
+
+    @Override
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    @Override
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String getOperator() {
+        return operator;
+    }
+
+    @Override
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    @Override
+    public String getPath() {
+        return path;
+    }
+
+    @Override
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    @Override
+    public Integer getProjectId() {
+        return projectId;
+    }
+
+    @Override
+    public void setProjectId(Integer projectId) {
+        this.projectId = projectId;
+    }
+}

+ 19 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/EsBuilderFactory.java

@@ -0,0 +1,19 @@
+package com.example.xiaoshiweixinback.service.importPatent.factorys.EsBuilderFactory;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@Component
+public class EsBuilderFactory {
+    @Autowired
+    private Map<String, IQueryBuilder> iQueryBuilderMap;
+
+
+    public IQueryBuilder getClass(String builderName) {
+        IQueryBuilder bean1 = iQueryBuilderMap.get(builderName);
+
+        return bean1;
+    }
+}

+ 35 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/IQueryBuilder.java

@@ -0,0 +1,35 @@
+package com.example.xiaoshiweixinback.service.importPatent.factorys.EsBuilderFactory;
+
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+
+import java.text.ParseException;
+
+public interface IQueryBuilder {
+    public String field = "";
+    public String value = "";
+    public String operator = "";
+    public String path = "";
+    public Integer projectId = null;
+
+    Query creteQuery() throws ParseException;
+
+    public String getField();
+
+    public void setField(String field);
+
+    public String getValue();
+
+    public void setValue(String value);
+
+    public String getOperator();
+
+    public void setOperator(String operator);
+
+    public String getPath();
+
+    public void setPath(String path);
+
+    public Integer getProjectId();
+
+    public void setProjectId(Integer projectId);
+}

+ 63 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/KeyWordQueryBuilder.java

@@ -0,0 +1,63 @@
+package com.example.xiaoshiweixinback.service.importPatent.factorys.EsBuilderFactory;
+
+
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import org.springframework.stereotype.Component;
+
+@Component
+public class KeyWordQueryBuilder implements IQueryBuilder {
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+    public Integer projectId = null;
+
+    @Override
+    public Query creteQuery() {
+//        QueryBuilders.matchQueryAsQuery(field, value, null, null);
+        return QueryBuilders.term(i -> i.field(field).value(value));
+    }
+
+    public String getField() {
+        return field;
+    }
+
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public String getOperator() {
+        return operator;
+    }
+
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    @Override
+    public Integer getProjectId() {
+        return projectId;
+    }
+
+    @Override
+    public void setProjectId(Integer projectId) {
+        this.projectId = projectId;
+    }
+}

+ 69 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/MatchPhaseQueryBuilder.java

@@ -0,0 +1,69 @@
+package com.example.xiaoshiweixinback.service.importPatent.factorys.EsBuilderFactory;
+
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+
+@Component
+public class MatchPhaseQueryBuilder implements IQueryBuilder{
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+    public Integer projectId = null;
+
+    @Override
+    public Query creteQuery() throws ParseException {
+        Query query = null;
+        if (value.contains(" ")) {
+            query = QueryBuilders.matchPhrase(i -> i.field(field).query(value));
+        } else {
+            query = QueryBuilders.matchPhrase(i -> i.field(field).query(value).slop(2));
+        }
+        return query;
+    }
+
+    public String getField() {
+        return field;
+    }
+
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public String getOperator() {
+        return operator;
+    }
+
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    @Override
+    public Integer getProjectId() {
+        return projectId;
+    }
+
+    @Override
+    public void setProjectId(Integer projectId) {
+        this.projectId = projectId;
+    }
+}

+ 71 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/MatchQueryBuilder.java

@@ -0,0 +1,71 @@
+package com.example.xiaoshiweixinback.service.importPatent.factorys.EsBuilderFactory;
+
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+
+@Component
+public class MatchQueryBuilder implements IQueryBuilder {
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+    public Integer projectId = null;
+
+    @Override
+    public Query creteQuery() throws ParseException {
+        return QueryBuilders.match(i -> i.field(field).query(value));
+    }
+
+    @Override
+    public String getField() {
+        return field;
+    }
+
+    @Override
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    @Override
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String getOperator() {
+        return operator;
+    }
+
+    @Override
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    @Override
+    public String getPath() {
+        return path;
+    }
+
+    @Override
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    @Override
+    public Integer getProjectId() {
+        return projectId;
+    }
+
+    @Override
+    public void setProjectId(Integer projectId) {
+        this.projectId = projectId;
+    }
+}

+ 66 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/NestedMergePersonQueryBuilder.java

@@ -0,0 +1,66 @@
+package com.example.xiaoshiweixinback.service.importPatent.factorys.EsBuilderFactory;
+
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+
+@Component
+public class NestedMergePersonQueryBuilder implements IQueryBuilder {
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+    public Integer projectId = null;
+
+    @Override
+    public Query creteQuery() throws ParseException {
+        String str = "*";
+        String s = str.concat(value).concat("*");
+        Query query = QueryBuilders.wildcard(i -> i.field(field).value(s));
+        Query q1 = QueryBuilders.term(i -> i.field(path + ".project_id").value(projectId));
+        Query bool = QueryBuilders.bool(i -> i.must(query, q1));
+        return QueryBuilders.nested(z -> z.path(path).query(bool));
+    }
+
+    public String getField() {
+        return field;
+    }
+
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public String getOperator() {
+        return operator;
+    }
+
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    public Integer getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(Integer projectId) {
+        this.projectId = projectId;
+    }
+}

+ 74 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/NestedPersonQueryBuilder.java

@@ -0,0 +1,74 @@
+package com.example.xiaoshiweixinback.service.importPatent.factorys.EsBuilderFactory;
+
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+
+@Component
+public class NestedPersonQueryBuilder implements IQueryBuilder {
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+    public Integer projectId = null;
+
+
+    @Override
+    public Query creteQuery() throws ParseException {
+        Query query = null;
+        if (operator.equals("=")) {
+            String str = "*";
+            String s = str.concat(value).concat("*");
+            query = QueryBuilders.wildcard(i -> i.field(field).value(s));
+        } else {
+            query = QueryBuilders.term(i -> i.field(field).value(value));
+        }
+        Query finalQuery = query;
+        Query nestedQuery = QueryBuilders.nested(z -> z.path(path).query(finalQuery));
+        return nestedQuery;
+    }
+
+    public String getField() {
+        return field;
+    }
+
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public String getOperator() {
+        return operator;
+    }
+
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    @Override
+    public Integer getProjectId() {
+        return projectId;
+    }
+
+    @Override
+    public void setProjectId(Integer projectId) {
+        this.projectId = projectId;
+    }
+}

+ 87 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/NestedQueryBuilder.java

@@ -0,0 +1,87 @@
+package com.example.xiaoshiweixinback.service.importPatent.factorys.EsBuilderFactory;
+
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import org.springframework.stereotype.Component;
+
+@Component
+public class NestedQueryBuilder implements IQueryBuilder {
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+    public Integer projectId = null;
+
+    @Override
+    public Query creteQuery() {
+        Query nestedQuery = null;
+        if (operator.equals("=")) {
+            String str = "*";
+            String s = str.concat(value).concat("*");
+            Query query = QueryBuilders.wildcard(i -> i.field(field).value(s));
+            Query q1 = QueryBuilders.term(i -> i.field(path + ".project_id").value(projectId));
+            Query bool = QueryBuilders.bool(i -> i.must(query, q1));
+            nestedQuery = QueryBuilders.nested(z -> z.path(path).query(bool));
+        } else {
+            Query query = QueryBuilders.term(i -> i.field(field).value(value));
+            Query q1 = QueryBuilders.term(i -> i.field(path + ".project_id").value(projectId));
+            Query bool = QueryBuilders.bool(i -> i.must(query, q1));
+            nestedQuery = QueryBuilders.nested(z -> z.path(path).query(bool));
+        }
+        Query childQuery = null;
+        if (path.equals("merge_applicant")) {
+            Query finalNestedQuery = nestedQuery;
+            childQuery = QueryBuilders.hasChild(i -> i.type("merge_applicat").query(finalNestedQuery));
+        } else {
+            Query finalNestedQuery1 = nestedQuery;
+            childQuery = QueryBuilders.hasChild(i -> i.type(path).query(finalNestedQuery1));
+        }
+        return childQuery;
+    }
+
+    @Override
+    public String getField() {
+        return field;
+    }
+
+    @Override
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    @Override
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String getOperator() {
+        return operator;
+    }
+
+    @Override
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    public Integer getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(Integer projectId) {
+        this.projectId = projectId;
+    }
+}

+ 88 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/NumberQueryBuilder.java

@@ -0,0 +1,88 @@
+package com.example.xiaoshiweixinback.service.importPatent.factorys.EsBuilderFactory;
+
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import co.elastic.clients.json.JsonData;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+
+@Component
+public class NumberQueryBuilder implements IQueryBuilder {
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+    public Integer projectId = null;
+    public static final String GT = ">";
+    public static final String GTE = ">=";
+    public static final String LT = "<";
+    public static final String LTE = "<=";
+
+    @Override
+    public Query creteQuery() throws ParseException {
+        Query query = null;
+        if (operator.equals(GT)) {
+            query = QueryBuilders.range(range -> range.field(field).gt(JsonData.of(value)));
+        } else if (operator.equals(GTE)) {
+            query = QueryBuilders.range(range -> range.field(field).gte(JsonData.of(value)));
+        } else if (operator.equals(LT)) {
+            query = QueryBuilders.range(range -> range.field(field).lt(JsonData.of(value)));
+        } else if (operator.equals(LTE)) {
+            query = QueryBuilders.range(range -> range.field(field).lte(JsonData.of(value)));
+        } else {
+            query = QueryBuilders.match(q -> q.field(field).query(value));
+        }
+        return query;
+    }
+
+    @Override
+    public String getField() {
+        return field;
+    }
+
+    @Override
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    @Override
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String getOperator() {
+        return operator;
+    }
+
+    @Override
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    @Override
+    public String getPath() {
+        return path;
+    }
+
+    @Override
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    @Override
+    public Integer getProjectId() {
+        return projectId;
+    }
+
+    @Override
+    public void setProjectId(Integer projectId) {
+        this.projectId = projectId;
+    }
+}

+ 71 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/ParentQueryBuilder.java

@@ -0,0 +1,71 @@
+package com.example.xiaoshiweixinback.service.importPatent.factorys.EsBuilderFactory;
+
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+
+@Component
+public class ParentQueryBuilder implements IQueryBuilder {
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+    public Integer projectId = null;
+
+    @Override
+    public Query creteQuery() throws ParseException {
+        return QueryBuilders.parentId(parent -> parent.type("project").id(value));
+    }
+
+    @Override
+    public String getField() {
+        return field;
+    }
+
+    @Override
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    @Override
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String getOperator() {
+        return operator;
+    }
+
+    @Override
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    @Override
+    public String getPath() {
+        return path;
+    }
+
+    @Override
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    @Override
+    public Integer getProjectId() {
+        return projectId;
+    }
+
+    @Override
+    public void setProjectId(Integer projectId) {
+        this.projectId = projectId;
+    }
+}

+ 106 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/PersonNameQueryBuilder.java

@@ -0,0 +1,106 @@
+package com.example.xiaoshiweixinback.service.importPatent.factorys.EsBuilderFactory;
+
+import co.elastic.clients.elasticsearch._types.FieldValue;
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import co.elastic.clients.elasticsearch._types.query_dsl.TermsQueryField;
+import com.alibaba.fastjson.JSON;
+import com.example.xiaoshiweixinback.service.importPatent.factorys.permissions.PermissionService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+
+@Component
+public class PersonNameQueryBuilder implements IQueryBuilder {
+    @Autowired
+    private PermissionService permissionService;
+
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+    public Integer projectId = null;
+
+    @Override
+    public Query creteQuery() throws ParseException {
+        List<String> ids = new ArrayList<>();
+        try {
+            String json = permissionService.getPersonIdByNamePCS(value, true);
+            ids = JSON.parseArray(json, String.class);
+        } catch (Exception e) {
+        }
+        if (ids == null || ids.size() == 0) {
+            ids = new ArrayList<>();
+            ids.add("0");
+        }
+        List<FieldValue> fieldValues = new ArrayList<>();
+
+        ids.forEach(item -> {
+            fieldValues.add(FieldValue.of(item));
+        });
+
+        Query query = QueryBuilders.terms(t -> t.field(field).terms(new TermsQueryField.Builder().value(fieldValues).build()));
+        return query;
+    }
+
+    @Override
+    public String getField() {
+        return this.field;
+    }
+
+    @Override
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    @Override
+    public String getValue() {
+        return null;
+    }
+
+    @Override
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public PermissionService getPermissionService() {
+        return permissionService;
+    }
+
+    public void setPermissionService(PermissionService permissionService) {
+        this.permissionService = permissionService;
+    }
+
+    @Override
+    public String getOperator() {
+        return operator;
+    }
+
+    @Override
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    @Override
+    public String getPath() {
+        return path;
+    }
+
+    @Override
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    @Override
+    public Integer getProjectId() {
+        return projectId;
+    }
+
+    @Override
+    public void setProjectId(Integer projectId) {
+        this.projectId = projectId;
+    }
+}

+ 63 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/PrefixQueryBuilder.java

@@ -0,0 +1,63 @@
+package com.example.xiaoshiweixinback.service.importPatent.factorys.EsBuilderFactory;
+
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+
+@Component
+public class PrefixQueryBuilder implements IQueryBuilder {
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+    public Integer projectId = null;
+
+    @Override
+    public Query creteQuery() throws ParseException {
+        return QueryBuilders.prefix(i -> i.field(field).value(value));
+    }
+
+    public String getField() {
+        return field;
+    }
+
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public String getOperator() {
+        return operator;
+    }
+
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    @Override
+    public Integer getProjectId() {
+        return projectId;
+    }
+
+    @Override
+    public void setProjectId(Integer projectId) {
+        this.projectId = projectId;
+    }
+}

+ 196 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/PrioritiesNestedQueryBuilder.java

@@ -0,0 +1,196 @@
+package com.example.xiaoshiweixinback.service.importPatent.factorys.EsBuilderFactory;
+
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import co.elastic.clients.json.JsonData;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+
+@Component
+public class PrioritiesNestedQueryBuilder implements IQueryBuilder {
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+    public Integer projectId = null;
+    public static final int YEAR = 4;
+    public static final int MONTHONE = 6;
+    public static final int MONTH = 7;
+    public static final int DAYONE = 8;
+    public static final int DAY = 10;
+    public static final String EQ = "=";
+
+    @Override
+    public Query creteQuery() throws ParseException {
+        Query query = null;
+        if (value != null && !"".equals(value)) {
+            Calendar calendar = Calendar.getInstance();
+            if (value.length() == YEAR) {
+                SimpleDateFormat format = new SimpleDateFormat("yyyy");
+                Date year = format.parse(value);
+                calendar.setTime(year);
+                String yearTime = String.valueOf(calendar.getTime().getTime());
+                calendar.add(Calendar.YEAR, 1);
+                String yearNextTime = String.valueOf(calendar.getTime().getTime());
+                switch (operator) {
+                    case NumberQueryBuilder.LT:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).lt(JsonData.of(yearTime)));
+                        break;
+                    case NumberQueryBuilder.LTE:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).lte(JsonData.of(yearTime)));
+                        break;
+                    case NumberQueryBuilder.GT:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).gt(JsonData.of(yearTime)));
+                        break;
+                    case NumberQueryBuilder.GTE:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).gte(JsonData.of(yearTime)));
+                        break;
+                    default:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).gte(JsonData.of(yearTime)).lte(JsonData.of(yearNextTime)));
+                        break;
+                }
+            } else if (value.length() == MONTH || value.length() == MONTHONE) {
+                Date month = new Date();
+                if (value.contains("-")) {
+                    SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM");
+                    month = format2.parse(value);
+                } else if (value.contains("/")) {
+                    SimpleDateFormat format3 = new SimpleDateFormat("yyyy/MM");
+                    month = format3.parse(value);
+                } else {
+                    SimpleDateFormat format1 = new SimpleDateFormat("yyyyMM");
+                    month = format1.parse(value);
+                }
+                calendar.setTime(month);
+                String monthTime = String.valueOf(calendar.getTime().getTime());
+                calendar.add(Calendar.MONTH, 1);
+                String monthNextTime = String.valueOf(calendar.getTime().getTime());
+                switch (operator) {
+                    case NumberQueryBuilder.LT:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).lt(JsonData.of(monthTime)));
+                        break;
+                    case NumberQueryBuilder.LTE:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).lte(JsonData.of(monthTime)));
+                        break;
+                    case NumberQueryBuilder.GT:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).gt(JsonData.of(monthTime)));
+                        break;
+                    case NumberQueryBuilder.GTE:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).gte(JsonData.of(monthTime)));
+                        break;
+                    default:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).gte(JsonData.of(monthTime)).lte(JsonData.of(monthNextTime)));
+                        break;
+                }
+            } else if (value.length() == DAY || value.length() == DAYONE) {
+                Date day = new Date();
+                if (value.contains("-")) {
+                    SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd");
+                    day = format2.parse(value);
+                } else if (value.contains("/")) {
+                    SimpleDateFormat format3 = new SimpleDateFormat("yyyy/MM/dd");
+                    day = format3.parse(value);
+                } else {
+                    SimpleDateFormat format1 = new SimpleDateFormat("yyyyMMdd");
+                    day = format1.parse(value);
+                }
+                calendar.setTime(day);
+                String dayTime = String.valueOf(day.getTime());
+                calendar.add(Calendar.DAY_OF_MONTH, 1);
+                String nextDayTime = String.valueOf(calendar.getTime().getTime());
+                switch (operator) {
+                    case NumberQueryBuilder.LT:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).lt(JsonData.of(dayTime)));
+                        break;
+                    case NumberQueryBuilder.LTE:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).lte(JsonData.of(dayTime)));
+                        break;
+                    case NumberQueryBuilder.GT:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).gt(JsonData.of(dayTime)));
+                        break;
+                    case NumberQueryBuilder.GTE:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).gte(JsonData.of(dayTime)));
+                        break;
+                    default:
+                        query = QueryBuilders
+                                .range(range -> range.field(field).gte(JsonData.of(dayTime)).lte(JsonData.of(nextDayTime)));
+                        break;
+                }
+            } else {
+                query = QueryBuilders
+                        .range(range -> range.field(field).gte(JsonData.of(1)).lte(JsonData.of(2)));
+            }
+        }
+        Query finalQuery = query;
+        Query nestedQuery = QueryBuilders.nested(z -> z.path(path).query(finalQuery));
+        return nestedQuery;
+    }
+
+    @Override
+    public String getField() {
+        return field;
+    }
+
+    @Override
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    @Override
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String getOperator() {
+        return operator;
+    }
+
+    @Override
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    @Override
+    public String getPath() {
+        return path;
+    }
+
+    @Override
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    @Override
+    public Integer getProjectId() {
+        return projectId;
+    }
+
+    @Override
+    public void setProjectId(Integer projectId) {
+        this.projectId = projectId;
+    }
+}

+ 71 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/ProductQueryBuilder.java

@@ -0,0 +1,71 @@
+package com.example.xiaoshiweixinback.service.importPatent.factorys.EsBuilderFactory;
+
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+
+@Component
+public class ProductQueryBuilder implements IQueryBuilder {
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+    public Integer projectId = null;
+
+    @Override
+    public Query creteQuery() throws ParseException {
+        return QueryBuilders.hasChild(child -> child.type("product").query(i -> i.term(j -> j.field(field).value(value))));
+    }
+
+    @Override
+    public String getField() {
+        return field;
+    }
+
+    @Override
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    @Override
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String getOperator() {
+        return operator;
+    }
+
+    @Override
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    @Override
+    public String getPath() {
+        return path;
+    }
+
+    @Override
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    @Override
+    public Integer getProjectId() {
+        return projectId;
+    }
+
+    @Override
+    public void setProjectId(Integer projectId) {
+        this.projectId = projectId;
+    }
+}

+ 71 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/ProjectQueryBuilder.java

@@ -0,0 +1,71 @@
+package com.example.xiaoshiweixinback.service.importPatent.factorys.EsBuilderFactory;
+
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+
+@Component
+public class ProjectQueryBuilder implements IQueryBuilder {
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+    public Integer projectId = null;
+
+    @Override
+    public Query creteQuery() throws ParseException {
+        return QueryBuilders.term(t -> t.field(field).value(value));
+    }
+
+    @Override
+    public String getField() {
+        return field;
+    }
+
+    @Override
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    @Override
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String getOperator() {
+        return operator;
+    }
+
+    @Override
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    @Override
+    public String getPath() {
+        return path;
+    }
+
+    @Override
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    @Override
+    public Integer getProjectId() {
+        return projectId;
+    }
+
+    @Override
+    public void setProjectId(Integer projectId) {
+        this.projectId = projectId;
+    }
+}

+ 72 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/ProjectTaskQueryBuilder.java

@@ -0,0 +1,72 @@
+package com.example.xiaoshiweixinback.service.importPatent.factorys.EsBuilderFactory;
+
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+
+@Component
+public class ProjectTaskQueryBuilder implements IQueryBuilder {
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+    public Integer projectId = null;
+
+    @Override
+    public Query creteQuery() throws ParseException {
+        return QueryBuilders.hasChild(child -> child.type("task")
+                .query(org.springframework.data.elasticsearch.client.elc.QueryBuilders.matchQueryAsQuery(field, value, null, null)));
+    }
+
+    @Override
+    public String getField() {
+        return field;
+    }
+
+    @Override
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    @Override
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String getOperator() {
+        return operator;
+    }
+
+    @Override
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    @Override
+    public String getPath() {
+        return path;
+    }
+
+    @Override
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    @Override
+    public Integer getProjectId() {
+        return projectId;
+    }
+
+    @Override
+    public void setProjectId(Integer projectId) {
+        this.projectId = projectId;
+    }
+}

+ 71 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/TermOrWildcardQueryBuilder.java

@@ -0,0 +1,71 @@
+package com.example.xiaoshiweixinback.service.importPatent.factorys.EsBuilderFactory;
+
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+
+@Component
+public class TermOrWildcardQueryBuilder implements IQueryBuilder{
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+    public Integer projectId = null;
+
+    @Override
+    public Query creteQuery() throws ParseException {
+        Query query = null;
+        if (operator.equals("=")) {
+            String str = "*";
+            String s = str.concat(value).concat("*");
+            query =  QueryBuilders.wildcard(i -> i.field(field).value(s));
+        } else {
+            query = QueryBuilders.term(i -> i.field(field).value(value));
+        }
+        return query;
+    }
+
+    public String getField() {
+        return field;
+    }
+
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public String getOperator() {
+        return operator;
+    }
+
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    @Override
+    public Integer getProjectId() {
+        return projectId;
+    }
+
+    @Override
+    public void setProjectId(Integer projectId) {
+        this.projectId = projectId;
+    }
+}

+ 82 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/EsBuilderFactory/WildcardQueryBuilder.java

@@ -0,0 +1,82 @@
+package com.example.xiaoshiweixinback.service.importPatent.factorys.EsBuilderFactory;
+
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+
+@Component
+public class WildcardQueryBuilder implements IQueryBuilder{
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+    public Integer projectId = null;
+
+    @Override
+    public Query creteQuery() throws ParseException {
+        List<String> list = Arrays.asList("patent_no.keyword", "app_no.keyword", "public_no.keyword", "grant_no.keyword");
+        String str = "*";
+        String s = "";
+        if (list.contains(field)) {
+            if (value.length() == 13 || value.length() == 15) {
+                String frontPart = value.substring(0, value.length() - 1);
+                String afterPart = value.substring(value.length() - 1);
+                String s1 = frontPart + "." + afterPart;
+                s = str.concat(s1.toUpperCase(Locale.ROOT)).concat("*");
+            } else {
+                s = str.concat(value.toUpperCase(Locale.ROOT)).concat("*");
+            }
+        } else {
+            s = str.concat(value).concat("*");
+        }
+        String result = s;
+        return QueryBuilders.wildcard(i -> i.field(field).value(result));
+    }
+
+    public String getField() {
+        return field;
+    }
+
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public String getOperator() {
+        return operator;
+    }
+
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    @Override
+    public Integer getProjectId() {
+        return projectId;
+    }
+
+    @Override
+    public void setProjectId(Integer projectId) {
+        this.projectId = projectId;
+    }
+}

+ 2 - 1
src/main/java/com/example/xiaoshiweixinback/service/importPatent/getSqlFactorys/GetSqlFactory.java

@@ -1,4 +1,4 @@
-package com.example.xiaoshiweixinback.service.importPatent.getSqlFactorys;
+package com.example.xiaoshiweixinback.service.importPatent.factorys.GetSqlFactorys;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -7,6 +7,7 @@ import java.util.Map;
 
 @Component
 public class GetSqlFactory {
+
     @Autowired
     private Map<String, GetSqlObject> getSqlObjectMap;
 

+ 1 - 1
src/main/java/com/example/xiaoshiweixinback/service/importPatent/getSqlFactorys/GetSqlObject.java

@@ -1,4 +1,4 @@
-package com.example.xiaoshiweixinback.service.importPatent.getSqlFactorys;
+package com.example.xiaoshiweixinback.service.importPatent.factorys.GetSqlFactorys;
 
 
 import com.example.xiaoshiweixinback.entity.dto.common.SqlObject;

+ 1 - 2
src/main/java/com/example/xiaoshiweixinback/service/importPatent/getSqlFactorys/GetWebQuerySql.java

@@ -1,5 +1,4 @@
-package com.example.xiaoshiweixinback.service.importPatent.getSqlFactorys;
-
+package com.example.xiaoshiweixinback.service.importPatent.factorys.GetSqlFactorys;
 
 import com.example.xiaoshiweixinback.entity.dto.common.SqlObject;
 import lombok.extern.slf4j.Slf4j;

+ 272 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/factorys/permissions/PermissionService.java

@@ -0,0 +1,272 @@
+package com.example.xiaoshiweixinback.service.importPatent.factorys.permissions;
+
+import com.alibaba.fastjson.JSON;
+import com.example.xiaoshiweixinback.business.utils.LoginUtils;
+import com.example.xiaoshiweixinback.entity.dto.common.ClientDTO;
+import com.google.gson.Gson;
+import okhttp3.MediaType;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.RequestBody;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 获取权限系统数据接口
+ */
+@Service
+public class PermissionService {
+    @Value("${authorUrl}")
+    private String PCSUrl;
+
+    /**
+     * 根据名称模糊查询人员接口
+     * @param personName
+     * @return
+     * @throws IOException
+     */
+    public String getPersonIdByNamePCS(String personName, Boolean ifEqual) throws IOException {
+        OkHttpClient okHttpClient = new OkHttpClient();
+        Request request = new Request.Builder()
+                .url(PCSUrl + "/permission/api/system/getPersonIdByName?personName=" + personName+"&ifEqual="+ifEqual)
+                .get()
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
+
+    /**
+     * 获得所有人员排序接口
+     * @param orderType
+     * @return
+     * @throws IOException
+     */
+    public String getPersonIdOrders(Integer orderType) throws IOException {
+        OkHttpClient okHttpClient = new OkHttpClient();
+        Request request = new Request.Builder()
+                .url(PCSUrl + "/permission/api/system/getPersonIdOrders?orderType=" + orderType)
+                .get()
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
+
+    /**
+     * 根据人员ids查询人员列表
+     *
+     * @param ids 人员ids
+     * @return 返回装载着人员列表数据的data的String
+     */
+    public String getPersonnelByIdsFromPCS(List<String> ids) throws IOException {
+        String param = new Gson().toJson(ids);
+        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
+        OkHttpClient okHttpClient = new OkHttpClient.Builder()
+                .connectTimeout(60, TimeUnit.SECONDS)
+                .writeTimeout(60, TimeUnit.SECONDS)
+                .readTimeout(60, TimeUnit.SECONDS)
+                .build();
+        Request request = new Request.Builder()
+                .url(PCSUrl + "/permission/api/system/getPersonnelByIds")
+                .post(requestBody)
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
+
+
+    /**
+     * 根据客户ids查询客户列表
+     *
+     * @param ids 客户ids
+     * @return 返回装载着客户列表数据的data的String
+     */
+    public String getClientByIdsFromPCS(List<Integer> ids) throws IOException {
+        String param = new Gson().toJson(ids);
+        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
+        OkHttpClient okHttpClient = new OkHttpClient.Builder()
+                .connectTimeout(60, TimeUnit.SECONDS)
+                .writeTimeout(60, TimeUnit.SECONDS)
+                .readTimeout(60, TimeUnit.SECONDS)
+                .build();
+        Request request = new Request.Builder()
+                .url(PCSUrl + "/permission/api/system/getClintByIds")
+                .post(requestBody)
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
+
+    /**
+     * 根据名称模糊查询客户接口
+     * @param clientName
+     * @return
+     * @throws IOException
+     */
+    public String getClientIdByNamePCS(String clientName,Boolean ifEqual) throws IOException {
+        OkHttpClient okHttpClient = new OkHttpClient();
+        Request request = new Request.Builder()
+                .url(PCSUrl + "/permission/api/system/getClientIdByName?clientName=" + clientName+"&ifEqual="+ifEqual)
+                .get()
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
+
+
+    /**
+     * 获得所有客户排序接口
+     * @param orderType
+     * @return
+     * @throws IOException
+     */
+    public String getClientIdOrders(Integer orderType) throws IOException {
+        OkHttpClient okHttpClient = new OkHttpClient();
+        Request request = new Request.Builder()
+                .url(PCSUrl + "/permission/api/system/getClientIdOrders?orderType=" + orderType)
+                .get()
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
+
+
+    /**
+     * @title 添加客户
+     * @description 添加客户
+     * @autor lrj
+     */
+
+    public String addClient(ClientDTO client) throws IOException {
+        OkHttpClient okHttpClient = new OkHttpClient();
+        String param = new Gson().toJson(client);
+        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
+        Request request = new Request.Builder()
+                .url(PCSUrl + "/permission/api/client/add")
+                .addHeader("Cookie", LoginUtils.getToken())
+                .post(requestBody)
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
+
+    /**
+     * 根据部门ids查询部门列表
+     *
+     * @param ids 部门id
+     * @return 返回装载着客户列表数据的data的String
+     */
+    public String getDepartmentByIdsFromPCS(List<String> ids) throws IOException {
+        String param = new Gson().toJson(ids);
+        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
+        OkHttpClient okHttpClient = new OkHttpClient.Builder()
+                .connectTimeout(60, TimeUnit.SECONDS)
+                .writeTimeout(60, TimeUnit.SECONDS)
+                .readTimeout(60, TimeUnit.SECONDS)
+                .build();
+        Request request = new Request.Builder()
+                .url(PCSUrl + "/permission/api/system/getDeparts")
+                .post(requestBody)
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
+
+    /**
+     * 获得所有部门排序接口
+     * @param orderType
+     * @return
+     * @throws IOException
+     */
+    public String getDepartmentOrders(Integer orderType) throws IOException {
+        OkHttpClient okHttpClient = new OkHttpClient();
+        Request request = new Request.Builder()
+                .url(PCSUrl + "/permission/api/system/getDepartmentOrders?orderType=" + orderType)
+                .get()
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
+
+    /**
+     * 获得所有委托方排序接口
+     * @param orderType
+     * @return
+     * @throws IOException
+     */
+    public String getEntrustsOrder(Integer orderType) throws IOException {
+        OkHttpClient okHttpClient = new OkHttpClient();
+        Request request = new Request.Builder()
+                .url(PCSUrl + "/permission/api/system/getEntrustsOrder?orderType=" + orderType)
+                .get()
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
+
+    /**
+     * 根据名称获得委托方id和类型接口
+     * @param
+     * @return
+     * @throws IOException
+     */
+    public String getEntrustsByName(String name,Integer type) throws IOException {
+        OkHttpClient okHttpClient = new OkHttpClient();
+        Request request = new Request.Builder()
+                .url(PCSUrl + "/permission/api/system/getEntrustsByName?name=" + name+"&type="+type)
+                .get()
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
+
+
+    /**
+     * 根据部门ids查询部门列表
+     *
+     * @param ids 部门id
+     * @return 返回装载着客户列表数据的data的String
+     */
+    public String getEntrustsByIdAndType(List<String> ids) throws IOException {
+        String param = new Gson().toJson(ids);
+        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
+        OkHttpClient okHttpClient = new OkHttpClient.Builder()
+                .connectTimeout(60, TimeUnit.SECONDS)
+                .writeTimeout(60, TimeUnit.SECONDS)
+                .readTimeout(60, TimeUnit.SECONDS)
+                .build();
+        Request request = new Request.Builder()
+                .url(PCSUrl + "/permission/api/system/getEntrustsByIdAndType")
+                .post(requestBody)
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
+
+
+
+
+    /**
+     * 根据名称模糊查询部门接口
+     * @param
+     * @return
+     * @throws IOException
+     */
+    public String getDepartmentIdByName(String departmentName, Boolean ifEqual) throws IOException {
+        OkHttpClient okHttpClient = new OkHttpClient();
+        Request request = new Request.Builder()
+                .url(PCSUrl + "/permission/api/system/getDepartmentIdByName?departmentName=" + departmentName+"&ifEqual="+ifEqual)
+                .get()
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
+
+    public List<String> getPersonIdsByName(String name){
+
+        List<String> ids = new ArrayList<>();
+        try {
+            String json = this.getPersonIdByNamePCS(name, false);
+            ids = JSON.parseArray(json, String.class);
+        } catch (Exception e) {
+        }
+        if (ids == null || ids.size() == 0) {
+            ids = new ArrayList<>();
+            ids.add("0");
+        }
+        return ids;
+
+    }
+}

+ 150 - 0
src/main/resources/jsons/patentVector.json

@@ -0,0 +1,150 @@
+[
+  {
+    "name": "申请号",
+    "type": "String",
+    "value": "appNo",
+    "field": "AN",
+    "esField": "app_no.keyword",
+    "esClass": "wildcardQueryBuilder",
+    "ifSearch": "true",
+    "ifGroup": "true",
+    "ifShow": "true",
+    "ifAsCondition": "true",
+    "ifStats": "false",
+    "groupBy": "number",
+    "ifSort": "true",
+    "exportClass": "getCommonValue"
+  },
+  {
+    "name": "申请日",
+    "type": "DateTime",
+    "value": "appDate",
+    "field": "AD",
+    "esField": "app_date",
+    "esClass": "dateQueryBuilder",
+    "ifSearch": "true",
+    "ifGroup": "true",
+    "ifShow": "true",
+    "ifAsCondition": "true",
+    "ifStats": "true",
+    "groupBy": "dateType",
+    "ifSort": "true",
+    "exportClass": "getDateValue"
+  },
+  {
+    "name": "项目id",
+    "type": "String",
+    "value": "projectId",
+    "field": "projectId",
+    "esField": "project_id",
+    "esClass": "childQueryBuilder",
+    "ifSearch": "false",
+    "ifGroup": "false",
+    "ifShow": "false",
+    "ifAsCondition": "true",
+    "ifStats": "false"
+  },
+  {
+    "name": "摘要",
+    "type": "Object",
+    "value": "abstractStr",
+    "field": "AB",
+    "esField": "abstract_str.text_content",
+    "esClass": "matchPhaseQueryBuilder",
+    "ifSearch": "true",
+    "ifGroup": "true",
+    "ifShow": "true",
+    "ifAsCondition": "true",
+    "defaultHidden": "true",
+    "ifStats": "false",
+    "groupBy": "text",
+    "ifSort": "true",
+    "exportClass": "getTextContentValue"
+  },
+  {
+    "name": "标题",
+    "type": "Object",
+    "value": "title",
+    "field": "TI",
+    "esField": "title.text_content",
+    "esClass": "matchPhaseQueryBuilder",
+    "ifSearch": "true",
+    "ifGroup": "true",
+    "ifShow": "true",
+    "ifAsCondition": "true",
+    "ifStats": "false",
+    "groupBy": "text",
+    "ifSort": "false",
+    "exportClass": "getTextContentValue"
+  },
+  {
+    "name": "申请国家",
+    "type": "String",
+    "value": "appCountry",
+    "field": "CO",
+    "esField": "app_country",
+    "esClass": "keyWordQueryBuilder",
+    "ifSearch": "true",
+    "ifGroup": "true",
+    "ifShow": "true",
+    "ifStats": "true",
+    "ifAsCondition": "true",
+    "groupBy": "nation",
+    "ifSort": "true"
+  },
+  {
+    "name": "LOC分类号",
+    "type": "Object",
+    "value": "mloc",
+    "field": "MLOC",
+    "esField": "mloc",
+    "esClass": "prefixQueryBuilder",
+    "ifSearch": "true",
+    "ifGroup": "true",
+    "ifShow": "true",
+    "ifStats": "true",
+    "ifAsCondition": "true",
+    "groupBy": "classify",
+    "ifSort": "false",
+    "children": [
+      {
+        "label": "LOC大类",
+        "type": "1",
+        "group": "nos",
+        "value": "LOC1"
+      },
+      {
+        "label": "LOC",
+        "type": "1",
+        "group": "nos",
+        "value": "LOC"
+      }
+    ]
+  },
+  {
+    "name": "LOC大类",
+    "type": "String",
+    "value": "locLevel1",
+    "field": "LOC1",
+    "esField": "mloc.level1",
+    "esClass": "keyWordQueryBuilder",
+    "ifSearch": "false",
+    "ifGroup": "false",
+    "ifShow": "false",
+    "ifStats": "false",
+    "ifAsCondition": "true"
+  },
+  {
+    "name": "LOC",
+    "type": "String",
+    "value": "locLevel2",
+    "field": "LOC",
+    "esField": "mloc.level2",
+    "esClass": "keyWordQueryBuilder",
+    "ifSearch": "false",
+    "ifGroup": "false",
+    "ifShow": "false",
+    "ifStats": "false",
+    "ifAsCondition": "true"
+  }
+]

+ 28 - 10
src/test/java/com/example/xiaoshiweixinback/XiaoshiWeixinbackApplicationTests.java

@@ -1,21 +1,17 @@
 package com.example.xiaoshiweixinback;
 
-import com.alibaba.fastjson.JSON;
-import com.example.xiaoshiweixinback.domain.es.PatentVector;
-import com.example.xiaoshiweixinback.entity.dto.person.PersonPhoneDTO;
-import com.example.xiaoshiweixinback.entity.dto.person.SendCodeDTO;
+import cn.dev33.satoken.stp.StpUtil;
+import com.example.xiaoshiweixinback.business.utils.RegexUtil;
+import com.example.xiaoshiweixinback.entity.dto.esPicture.EsPatentSearchDTO;
 import com.example.xiaoshiweixinback.entity.vo.esPicture.EsPictureVectorVo;
-import com.example.xiaoshiweixinback.service.LoginService;
 import com.example.xiaoshiweixinback.service.common.EsDenseVectorService;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.context.annotation.Lazy;
 
-import java.io.IOException;
-import java.util.Arrays;
 import java.util.List;
-import java.util.Map;
+
 
 @SpringBootTest
 class XiaoshiWeixinbackApplicationTests {
@@ -29,8 +25,30 @@ class XiaoshiWeixinbackApplicationTests {
     }
 
     @Test
-    public void test() throws IOException {
-        List<EsPictureVectorVo> list = denseVectorService.getPatentVectorSort(null, "大大的原型");
+    public void test() throws Exception {
+//        List<EsPictureVectorVo> list = denseVectorService.getPatentVectorSort(null, "大大的原型");
+        EsPatentSearchDTO dto = new EsPatentSearchDTO();
+        dto.setKey("手机 OR 产品");
+        List<EsPictureVectorVo> list = denseVectorService.getPatentList(dto);
         System.out.println(list);
+
+//        String s = "a , b , c , d";
+//        boolean regExpReplace = RegexUtil.isRegExpReplace(s);
+//        System.out.println(regExpReplace);
+//        String all = s.replaceAll("[,。、;,./;]", " OR ");
+//        System.out.println(all);
+
+//        String s = "a OR b OR c OR d";
+//        boolean regExpReplace = RegexUtil.isRegExpReplace(s);
+//        System.out.println(regExpReplace);
+//        String sa = s.replaceAll("[,。、;,./;\\s]", " OR ");
+//        System.out.println(sa);
+
+//        StpUtil.login("2");
+//        Object id = StpUtil.getLoginId();
+//        String tokenValue = StpUtil.getTokenValue();
+//        String value = StpUtil.getTokenValueByLoginId(2);
+//        System.out.println(tokenValue);
+//        System.out.println(value);
     }
 }