zero 1 vuosi sitten
vanhempi
commit
5d16c1ec4f

+ 2 - 0
src/main/java/cn/cslg/pas/common/utils/parseQueryToTree/Symbol.java

@@ -1,7 +1,9 @@
 package cn.cslg.pas.common.utils.parseQueryToTree;
 
 public class Symbol {
+    //符号
     String Code;
+    //名称
     String ShowName;
 
 

+ 83 - 40
src/main/java/cn/cslg/pas/service/query/FormatQueryService.java

@@ -20,6 +20,7 @@ import cn.cslg.pas.factorys.getSqlFactorys.GetSqlObject;
 import cn.cslg.pas.service.business.CommonService;
 import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
 import com.alibaba.fastjson.JSON;
+import com.fasterxml.jackson.databind.node.ValueNode;
 import com.google.gson.Gson;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -178,7 +179,7 @@ public class FormatQueryService {
                     //判断 参数类型
                     String json = CommonService.readJsonFile(tableName + ".json");
                     List<SqlObject> sqlObjects = JSON.parseArray(json, SqlObject.class);
-                    SqlObject sqlObject = sqlObjects.stream().filter(item -> item.getValue().equals(field) &&item.getIfAsCondition()!=null&& item.getIfAsCondition().equals(true)).findFirst().orElse(null);
+                    SqlObject sqlObject = sqlObjects.stream().filter(item -> item.getValue().equals(field) && item.getIfAsCondition() != null && item.getIfAsCondition().equals(true)).findFirst().orElse(null);
                     if (sqlObject != null) {
                         getSqlObjectLocal = getSqlFactory.getClass(sqlObject.getSqlClass());
                         sqlObject.setOption(optionName);
@@ -279,6 +280,7 @@ public class FormatQueryService {
 
     /**
      * 网站检索式格式化
+     *
      * @param node
      * @param getSqlObject
      * @param tableName
@@ -377,58 +379,99 @@ public class FormatQueryService {
         }
         //格式化检索式
         String reQuery = this.webQueryToString((operateNode) tree, null, configName);
-         reQuery="F XX ("+reQuery+")";
+        reQuery = "F XX (" + reQuery + ")";
         return reQuery;
     }
 
     /**
      * Es检索
+     *
      * @param node
      * @param configName
      * @return
      * @throws ParseException
      */
-    public Query EsQueryToQuery(operateNode node, String configName) throws ParseException {
-        Query query = null;
-        operate operate1 = 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);
-            Query q2 = this.EsQueryToQuery((operateNode) Right, configName);
-            switch (operate1.getShowName()) {
-                case "AND":
-                    query = QueryBuilders.bool(i -> i.must(q1, q2));
-                    break;
-                case "OR":
-                    query = QueryBuilders.bool(i -> i.should(q1, q2));
-                    break;
-                case "NOT":
-                    query = QueryBuilders.bool(i -> i.must(q1).mustNot(q2));
-                    break;
-            }
-        } else if (operate1.gettype().equals(enuType.Assignment)) {
-            //比较运算符
-            IQueryBuilder iQueryBuilder = null;
-            String field = Left.ToString();
-            String value = Right.ToString();
-            String json = CommonService.readJsonFile(configName + ".json");
-            List<EsConfigVO> esConfigVOS = JSON.parseArray(json, EsConfigVO.class);
-            EsConfigVO esConfigVO = esConfigVOS.stream().filter(item -> item.getValue().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);
+    public Query EsQueryToQuery(treeNode node, String configName) 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);
+                    Query q2 = this.EsQueryToQuery((operateNode) Right, configName);
+                    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));
+                        default:
+                            return null;
+                    }
+
+                } else {
+                    if (operate1.gettype().equals(enuType.Assignment)) {
+                        return HandleValueNode(((valueNode) Left).getvalue(), operate1.getCode(), Right, configName);
+                    } else {
+                        return null;
+                    }
                 }
-                iQueryBuilder.setOperator(operate1.getShowName());
-                iQueryBuilder.setValue(value);
-                query = iQueryBuilder.creteQuery();
+            } else {
+                return null;
             }
         }
+    }
+
+    public Query HandleValueNode(String field, String operate, treeNode valeNode, String configName) throws ParseException {
+        if (valeNode == null) {
+            return null;
+        } else {
+            if (valeNode instanceof operateNode) {
+                operate operate1 = ((operateNode) valeNode).getoperate();
+                if (operate1.gettype().equals(enuType.Logic)) {
+                    Query q1 = this.HandleValueNode(field, operate, ((treeNode) valeNode).getLeft(), configName);
+                    Query q2 = this.HandleValueNode(field, operate, (treeNode) valeNode.getRight(), configName);
+                    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));
+                        default:
+                            return null;
+                    }
+                } else {
+                    return null;
+                }
+            } else {
+                //比较运算符
+                IQueryBuilder iQueryBuilder = null;
+                String json = CommonService.readJsonFile(configName + ".json");
+                List<EsConfigVO> esConfigVOS = JSON.parseArray(json, EsConfigVO.class);
+                EsConfigVO esConfigVO = esConfigVOS.stream().filter(item -> item.getValue().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());
+                    return iQueryBuilder.creteQuery();
+                } else {
+                    return null;
+                }
+            }
 
-        return query;
+        }
     }
 }

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

@@ -122,11 +122,11 @@ public class EventServiceTests {
 //        mapRequest.setSize(50L);
 //        mapRequest.setProjectId(1);
         StringRequest stringRequest = new StringRequest();
-//        stringRequest.setSearchQuery("titleTextContent=电子");
-        stringRequest.setSearchQuery("patentNo=CN201199922Y and (simpleFamilyNum>1 or simpleFamilyNum=0)");
+        stringRequest.setSearchQuery("titleTextContent=电子");
+//        stringRequest.setSearchQuery("patentNo=CN201199922Y and (simpleFamilyNum>1 or simpleFamilyNum=0)");
         stringRequest.setCurrent(0L);
         stringRequest.setSize(50L);
-//        stringRequest.setProjectId(1);
+        stringRequest.setProjectId(1);
 //
         PatentDTO patentDTO = esService.esSearch(stringRequest);
         System.out.println(patentDTO);