ソースを参照

Merge remote-tracking branch 'origin/master'

xiexiang 1 年間 前
コミット
f150c57d9a

+ 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;
 
 

+ 8 - 8
src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/ParentQueryBuilder.java

@@ -20,41 +20,41 @@ public class ParentQueryBuilder implements IQueryBuilder{
 
     @Override
     public String getField() {
-        return null;
+        return field;
     }
 
     @Override
     public void setField(String field) {
-
+        this.field = field;
     }
 
     @Override
     public String getValue() {
-        return null;
+        return value;
     }
 
     @Override
     public void setValue(String value) {
-
+        this.value = value;
     }
 
     @Override
     public String getOperator() {
-        return null;
+        return operator;
     }
 
     @Override
     public void setOperator(String operator) {
-
+        this.operator = operator;
     }
 
     @Override
     public String getPath() {
-        return null;
+        return path;
     }
 
     @Override
     public void setPath(String path) {
-
+        this.path = path;
     }
 }

+ 8 - 8
src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/ProjectQueryBuilder.java

@@ -20,41 +20,41 @@ public class ProjectQueryBuilder implements IQueryBuilder{
 
     @Override
     public String getField() {
-        return null;
+        return field;
     }
 
     @Override
     public void setField(String field) {
-
+        this.field = field;
     }
 
     @Override
     public String getValue() {
-        return null;
+        return value;
     }
 
     @Override
     public void setValue(String value) {
-
+        this.value = value;
     }
 
     @Override
     public String getOperator() {
-        return null;
+        return operator;
     }
 
     @Override
     public void setOperator(String operator) {
-
+        this.operator = operator;
     }
 
     @Override
     public String getPath() {
-        return null;
+        return path;
     }
 
     @Override
     public void setPath(String path) {
-
+        this.path = path;
     }
 }

+ 17 - 1
src/main/java/cn/cslg/pas/service/business/es/EsService.java

@@ -176,7 +176,6 @@ public class EsService {
      * @param page
      * @param limit
      * @return
-     * @throws IOException
      */
     public List<Patent> search(String key, Integer page, Integer limit) throws IOException {
         SearchRequest.Builder builder = new SearchRequest.Builder();
@@ -263,6 +262,23 @@ public class EsService {
 
         return list;
     }
+
+    /**
+     * 查询是否存在专利
+     * @param parentId
+     * @param projectId
+     * @return
+     */
+    public Boolean search(String parentId, Integer projectId){
+        boolean flag = false;
+        Query q1 = QueryBuilders.term(t -> t.field("project_id").value(projectId));
+        Query q2 = QueryBuilders.parentId(parent -> parent.type("project").id(parentId));
+        Query bool = QueryBuilders.bool(i -> i.must(q1, q2));
+        if (bool != null) {
+            flag = true;
+        }
+        return flag;
+    }
 }
 
 

+ 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;
+        }
     }
 }

+ 0 - 7
src/test/java/cn/cslg/pas/service/EsServiceTests.java

@@ -65,13 +65,6 @@ public class EsServiceTests {
     }
 
     @Test
-    public  void addImportTask() throws  Exception {
-        List<Patent> patentList = esService.search("1",1,10);
-        System.out.println(patentList);
-        Thread.sleep(1000000);
-    }
-
-    @Test
     void search() throws Exception {
         StringRequest stringRequest = new StringRequest();
         stringRequest.setSearchQuery("patentNo=CN201199922Y and (simpleFamilyNum>1 or simpleFamilyNum=0)");

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

@@ -1,11 +1,13 @@
 package cn.cslg.pas.service;
 
+import cn.cslg.pas.common.dto.PatentDTO;
 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.controller.EventController;
 import cn.cslg.pas.controller.PatentController;
 import cn.cslg.pas.service.business.ProductMarketDataService;
+import cn.cslg.pas.service.business.es.EsService;
 import com.alibaba.fastjson.JSONObject;
 import org.apache.http.entity.ContentType;
 import org.junit.Before;
@@ -33,6 +35,8 @@ public class EventServiceTests {
     private EventController eventController;
     @Autowired
     PatentController patentController;
+    @Autowired
+    private EsService esService;
 
 
 
@@ -123,7 +127,14 @@ public class EventServiceTests {
         stringRequest.setCurrent(0L);
         stringRequest.setSize(50L);
         stringRequest.setProjectId(1);
-        Response response = patentController.queryPatent(stringRequest);
-        System.out.println(response);
+//
+        PatentDTO patentDTO = esService.esSearch(stringRequest);
+        System.out.println(patentDTO);
+    }
+
+    @Test
+    void test12(){
+        Boolean bool = esService.search("YST6D4wBmB3pRkTj49Jn", 5);
+        System.out.println(bool);
     }
 }