Просмотр исходного кода

Merge remote-tracking branch 'origin/master'

lwhhszx 1 год назад
Родитель
Сommit
e81e6270f1

+ 61 - 4
src/main/java/cn/cslg/pas/common/utils/parseQueryToTree/expressManager.java

@@ -1,9 +1,8 @@
 package cn.cslg.pas.common.utils.parseQueryToTree;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Stack;
+import org.springframework.util.CollectionUtils;
+
+import java.util.*;
 
 public class expressManager {
     HashMap<String, Symbol> hSymbols = new HashMap<String, Symbol>();
@@ -163,6 +162,13 @@ public class expressManager {
     /// <returns>表达式树节点</returns>
     public treeNode Parse(String strExpress, boolean isAnd) throws Exception {
         ArrayList<String> Tokens = GetTokens(strExpress);
+//        ArrayList<String> Tokens = new ArrayList<>();
+//        if (!CollectionUtils.isEmpty(tokens)) {
+//            for (String token : tokens) {
+//                String s = token.replaceAll("^\"*|\"*$", "");
+//                Tokens.add(s);
+//            }
+//        }
         Stack<Symbol> symbolStack = new Stack<Symbol>();
         Stack<treeNode> valueStack = new Stack<treeNode>();
         for (String strTem : Tokens) {
@@ -417,4 +423,55 @@ public class expressManager {
             return null;
         }
     }
+
+    public ArrayList<String> getTokens(String strExpression) {
+        if (strExpression != null && !strExpression.isEmpty()) {
+            ArrayList<String> tokens = new ArrayList<>();
+            String trimmedExpression = strExpression.trim();
+            StringBuilder currentToken = new StringBuilder();
+            boolean isInsideQuotes = false;
+
+            for (int i = 0; i < trimmedExpression.length(); i++) {
+                char currentChar = trimmedExpression.charAt(i);
+
+                if (currentChar == '"') {
+                    if (!isInsideQuotes) {
+                        isInsideQuotes = true;
+                        currentToken.append(currentChar); // 添加双引号到当前单词
+                    } else {
+                        isInsideQuotes = false;
+                        currentToken.append(currentChar); // 添加双引号到当前单词
+                        tokens.add(currentToken.toString());
+                        currentToken.setLength(0); // 清空 StringBuilder
+                    }
+                } else if (currentChar == ' ' && !isInsideQuotes) {
+                    if (currentToken.length() > 0) {
+                        tokens.add(currentToken.toString());
+                        currentToken.setLength(0); // Clear StringBuilder
+                    }
+                } else if (currentChar == '(' || currentChar == '[' || currentChar == ')' || currentChar == ']') {
+                    if (!isInsideQuotes) {
+                        if (currentToken.length() > 0) {
+                            tokens.add(currentToken.toString());
+                            currentToken.setLength(0); // Clear StringBuilder
+                        }
+                        tokens.add(String.valueOf(currentChar));
+                    } else {
+                        currentToken.append(currentChar);
+                    }
+                } else {
+                    currentToken.append(currentChar);
+                }
+            }
+
+            if (currentToken.length() > 0) {
+                tokens.add(currentToken.toString());
+            }
+
+            return tokens;
+        } else {
+            return null;
+        }
+    }
+
 }

+ 19 - 2
src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/NestedPersonQueryBuilder.java

@@ -1,10 +1,12 @@
 package cn.cslg.pas.factorys.EsBuilderFactory;
 
+import cn.cslg.pas.common.utils.StringUtils;
 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.Locale;
 
 @Component
 public class NestedPersonQueryBuilder implements IQueryBuilder{
@@ -20,8 +22,23 @@ public class NestedPersonQueryBuilder implements IQueryBuilder{
         Query query = null;
         if (operator.equals("=")) {
             String str = "*";
-            String s = str.concat(value).concat("*");
-            query = QueryBuilders.wildcard(i -> i.field(field).value(s));
+            if (field.equals("priorities.priorityno")) {
+                String s = "";
+                String sub = value.substring(0, 2);
+                if ((StringUtils.isPositiveInteger(sub) || sub.equalsIgnoreCase("CN")) && (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("*");
+                }
+                String finalS = s;
+                query = QueryBuilders.wildcard(i -> i.field(field).value(finalS));
+            } else {
+                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));
         }

+ 15 - 0
src/test/java/cn/cslg/pas/service/EventServiceTests.java

@@ -10,6 +10,9 @@ import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.model.request.*;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.common.utils.StringUtils;
+import cn.cslg.pas.common.utils.parseQueryToTree.expressManager;
+import cn.cslg.pas.common.utils.parseQueryToTree.operateNode;
+import cn.cslg.pas.common.utils.parseQueryToTree.treeNode;
 import cn.cslg.pas.common.vo.business.*;
 import cn.cslg.pas.controller.EventController;
 import cn.cslg.pas.controller.PatentController;
@@ -25,6 +28,7 @@ import cn.cslg.pas.service.business.es.EsCustomFieldService;
 import cn.cslg.pas.service.business.es.EsService;
 import cn.cslg.pas.service.business.es.EsPatentService;
 import cn.cslg.pas.service.common.FileManagerService;
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
 import com.alibaba.fastjson.JSONObject;
 import org.apache.http.entity.ContentType;
 import org.junit.jupiter.api.Test;
@@ -553,4 +557,15 @@ public class EventServiceTests {
             System.out.println("B");
         }
     }
+
+    @Test
+    public void test106() throws Exception {
+//        String condition = "AGN = (\"深圳市瑞方达知识产权事务所(普通合伙) 44314\")";
+//        ArrayList<String> list = expressManager.getInstance().get(condition);
+//        System.out.println(list);
+        //3. 从es中检索数据
+//        Query q = formatQueryService.EsQueryToQuery((operateNode) tree, "patent", projectId);
+    }
+
+
 }