Kaynağa Gözat

Merge remote-tracking branch 'origin/master'

xiexiang 1 yıl önce
ebeveyn
işleme
6254ed9d9c
34 değiştirilmiş dosya ile 1298 ekleme ve 215 silme
  1. 10 0
      pom.xml
  2. 21 0
      src/main/java/cn/cslg/pas/common/core/IgnoreDTDEntityResolver.java
  3. 14 0
      src/main/java/cn/cslg/pas/common/dto/UploadPatentWebDTO.java
  4. 2 2
      src/main/java/cn/cslg/pas/common/model/importTaskModel/PatentRight.java
  5. 99 0
      src/main/java/cn/cslg/pas/common/vo/ChinaPatentZhuLu.java
  6. 13 0
      src/main/java/cn/cslg/pas/common/vo/EsConfigVO.java
  7. 2 0
      src/main/java/cn/cslg/pas/common/vo/ImportTaskAMVO.java
  8. 21 0
      src/main/java/cn/cslg/pas/common/vo/ProgressVO.java
  9. 2 0
      src/main/java/cn/cslg/pas/common/vo/StarPatentVO.java
  10. 62 0
      src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/ChildQueryBuilder.java
  11. 95 0
      src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/DateQueryBuilder.java
  12. 20 0
      src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/EsBuilderFactory.java
  13. 32 0
      src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/IQueryBuilder.java
  14. 51 0
      src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/KeyWordQueryBuilder.java
  15. 58 0
      src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/NestedQueryBuilder.java
  16. 77 0
      src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/NumberQueryBuilder.java
  17. 0 1
      src/main/java/cn/cslg/pas/factorys/businessFactory/BusinessFactory.java
  18. 0 1
      src/main/java/cn/cslg/pas/factorys/getSqlFactorys/GetLikeSql.java
  19. 57 11
      src/main/java/cn/cslg/pas/service/business/es/EsService.java
  20. 84 0
      src/main/java/cn/cslg/pas/service/importPatent/GetCataloguingFromWebThread.java
  21. 63 0
      src/main/java/cn/cslg/pas/service/importPatent/GetPDFfromWebThread.java
  22. 29 5
      src/main/java/cn/cslg/pas/service/importPatent/GetPatentFromExcelThread.java
  23. 61 0
      src/main/java/cn/cslg/pas/service/importPatent/GetPictureFromWebThread.java
  24. 97 0
      src/main/java/cn/cslg/pas/service/importPatent/GetRightAndFullTextFromWebThread.java
  25. 57 143
      src/main/java/cn/cslg/pas/service/importPatent/ImportFromWebToEsService.java
  26. 3 1
      src/main/java/cn/cslg/pas/service/importPatent/SavePatentToEsThread.java
  27. 15 2
      src/main/java/cn/cslg/pas/service/importPatent/SchedulingTaskService.java
  28. 1 1
      src/main/java/cn/cslg/pas/service/importPatent/TaskThread.java
  29. 54 6
      src/main/java/cn/cslg/pas/service/query/FormatQueryService.java
  30. 58 0
      src/main/resources/jsons/esConfig.json
  31. 23 25
      src/main/resources/mapper/Event.xml
  32. 2 0
      src/test/java/cn/cslg/pas/service/CommonServiceTests.java
  33. 22 3
      src/test/java/cn/cslg/pas/service/EsServiceTests.java
  34. 93 14
      src/test/java/cn/cslg/pas/service/PatentStarServiceTests.java

+ 10 - 0
pom.xml

@@ -219,6 +219,16 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
         </dependency>
+        <dependency>
+            <groupId>dom4j</groupId>
+            <artifactId>dom4j</artifactId>
+            <version>1.6.1</version>
+        </dependency>
+        <dependency>
+            <groupId>jaxen</groupId>
+            <artifactId>jaxen</artifactId>
+            <version>1.2.0</version> <!-- 使用你需要的版本 -->
+        </dependency>
     </dependencies>
 
 

+ 21 - 0
src/main/java/cn/cslg/pas/common/core/IgnoreDTDEntityResolver.java

@@ -0,0 +1,21 @@
+package cn.cslg.pas.common.core;
+
+
+
+
+import org.xml.sax.EntityResolver;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+
+public class IgnoreDTDEntityResolver implements EntityResolver {
+
+ @Override
+ public InputSource resolveEntity(String publicId, String systemId)
+   throws SAXException, IOException {
+        return new InputSource(new ByteArrayInputStream("<?xml version='1.0' encoding='UTF-8'?>".getBytes()));
+ }
+
+}

+ 14 - 0
src/main/java/cn/cslg/pas/common/dto/UploadPatentWebDTO.java

@@ -0,0 +1,14 @@
+package cn.cslg.pas.common.dto;
+
+import cn.cslg.pas.common.vo.StarPatentVO;
+import cn.cslg.pas.common.vo.UploadParamsVO;
+import cn.cslg.pas.domain.es.Patent;
+import lombok.Data;
+
+@Data
+public class UploadPatentWebDTO {
+    private StarPatentVO starPatentVO;
+    private Patent patent;
+    private Integer counter;
+    private Integer totalCounter;
+}

+ 2 - 2
src/main/java/cn/cslg/pas/common/model/importTaskModel/PatentRight.java

@@ -17,10 +17,10 @@ public class PatentRight  {
     /**
      * 权利要求原文
      */
-    private String content;
+    private String name;
     /**
      * 权利要求译文
      */
-    private String contentOut;
+    private String nameOut;
 
 }

+ 99 - 0
src/main/java/cn/cslg/pas/common/vo/ChinaPatentZhuLu.java

@@ -0,0 +1,99 @@
+package cn.cslg.pas.common.vo;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 专利之星中国专利著录实体类
+ *
+ * @Author chenyu
+ * @Date 2023/6/25
+ */
+@Accessors(chain = true)
+@Data
+public class ChinaPatentZhuLu implements Serializable {
+    /**
+     * 申请号
+     */
+    private String AN;
+    /**
+     * 申请日
+     */
+    private String AD;
+    private String CPT;
+    /**
+     * 公开日
+     */
+    private String PD;
+    private String CGT;
+    /**
+     * 公告日
+     */
+    private String GD;
+    private String ZLTP;
+    /**
+     * 标题
+     */
+    private String TI;
+    /**
+     * 国省代码
+     */
+    private String CO;
+    private String MingCheng;
+    /**
+     * 代理人
+     */
+    private String AT;
+    /**
+     * 代理机构代码
+     */
+    private String AG;
+    /**
+     * 代理机构名称
+     */
+    private String AGN;
+    /**
+     * 主分类号
+     */
+    private String MC;
+    /**
+     * 分类号
+     */
+    private String IC;
+    /**
+     * 范畴分类
+     */
+    private String CT;
+    /**
+     * 申请人
+     */
+    private String PA;
+    /**
+     * 发明人
+     */
+    private String IV;
+    /**
+     * 申请人地址
+     */
+    private String DZ;
+    private String ZipCode;
+    /**
+     * 优先权号
+     */
+    private String PR;
+    private String PRD;
+    private String Examiner;
+    private String CiteInfo;
+    private String NoCiteInfo;
+    /**
+     * 摘要
+     */
+    private String AB;
+    /**
+     * 主权要
+     */
+    private String CL1;
+
+}

+ 13 - 0
src/main/java/cn/cslg/pas/common/vo/EsConfigVO.java

@@ -0,0 +1,13 @@
+package cn.cslg.pas.common.vo;
+
+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;
+}

+ 2 - 0
src/main/java/cn/cslg/pas/common/vo/ImportTaskAMVO.java

@@ -74,4 +74,6 @@ public class ImportTaskAMVO {
     private  String orderByType;
     private String dBType;
     private Integer doneNum;
+
+    private ProgressVO progressVO;
 }

+ 21 - 0
src/main/java/cn/cslg/pas/common/vo/ProgressVO.java

@@ -0,0 +1,21 @@
+package cn.cslg.pas.common.vo;
+
+import cn.cslg.pas.common.model.importTaskModel.PatentAgent;
+import cn.cslg.pas.common.model.importTaskModel.PatentApplicant;
+import cn.cslg.pas.common.model.importTaskModel.PatentInventor;
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Accessors(chain = true)
+@Data
+public class ProgressVO implements Serializable {
+    /**
+     * 专利类型(0)
+     */
+    @JSONField(name = "PT")
+    private Integer state;
+}

+ 2 - 0
src/main/java/cn/cslg/pas/common/vo/StarPatentVO.java

@@ -142,4 +142,6 @@ public class StarPatentVO implements Serializable {
      * 摘要附图路径
      */
     private String abstractPath;
+
+    private Integer counter;
 }

+ 62 - 0
src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/ChildQueryBuilder.java

@@ -0,0 +1,62 @@
+package cn.cslg.pas.factorys.EsBuilderFactory;
+
+import co.elastic.clients.elasticsearch._types.query_dsl.MatchQuery;
+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 = "";
+
+    @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;
+    }
+}

+ 95 - 0
src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/DateQueryBuilder.java

@@ -0,0 +1,95 @@
+package cn.cslg.pas.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.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 static final int YEAR = 4;
+    public static final int MONTH = 7;
+    public static final int DAY = 10;
+
+
+    @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());
+                query = co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders
+                        .range(range -> range.field(field).from(yearTime.substring(0,10)).to(yearNextTime.substring(0,10)));
+            } else if (value.length() == MONTH) {
+                SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM");
+                Date 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());
+                query = co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders
+                        .range(range -> range.field(field).from(monthTime.substring(0,10)).to(monthNextTime.substring(0,10)));
+            } else if (value.length() == DAY) {
+                SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd");
+                Date day = format2.parse(value);
+                String dayTime = String.valueOf(day.getTime());
+                query = QueryBuilders.match(dayQuery -> dayQuery.field(field).query(dayTime.substring(0,10)));
+            }
+        }
+        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;
+    }
+}

+ 20 - 0
src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/EsBuilderFactory.java

@@ -0,0 +1,20 @@
+package cn.cslg.pas.factorys.EsBuilderFactory;
+
+import cn.cslg.pas.factorys.businessFactory.Business;
+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;
+    }
+}

+ 32 - 0
src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/IQueryBuilder.java

@@ -0,0 +1,32 @@
+package cn.cslg.pas.factorys.EsBuilderFactory;
+
+import cn.cslg.pas.common.model.cronModel.SqlObject;
+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 = "";
+
+    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);
+
+}

+ 51 - 0
src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/KeyWordQueryBuilder.java

@@ -0,0 +1,51 @@
+package cn.cslg.pas.factorys.EsBuilderFactory;
+
+
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import org.springframework.data.elasticsearch.client.elc.QueryBuilders;
+import org.springframework.stereotype.Component;
+
+@Component
+public class KeyWordQueryBuilder implements IQueryBuilder {
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+
+    @Override
+    public Query creteQuery() {
+        return QueryBuilders.matchQueryAsQuery(field, value, null, null);
+    }
+
+    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;
+    }
+}

+ 58 - 0
src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/NestedQueryBuilder.java

@@ -0,0 +1,58 @@
+package cn.cslg.pas.factorys.EsBuilderFactory;
+
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import org.springframework.data.elasticsearch.client.elc.QueryBuilders;
+import org.springframework.stereotype.Component;
+
+@Component
+public class NestedQueryBuilder implements IQueryBuilder {
+    private String field = "";
+    private String value = "";
+    private String operator = "";
+    public String path = "";
+
+    @Override
+    public Query creteQuery() {
+        Query query = QueryBuilders.matchQueryAsQuery(field, value, null, null);
+        Query nestedQuery = co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders.nested(z -> z.path(path).query(query));
+        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;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+}

+ 77 - 0
src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/NumberQueryBuilder.java

@@ -0,0 +1,77 @@
+package cn.cslg.pas.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 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;
+    }
+}

+ 0 - 1
src/main/java/cn/cslg/pas/factorys/businessFactory/BusinessFactory.java

@@ -13,7 +13,6 @@ public class BusinessFactory {
 
     public Business getClass(String shapeType) {
         Business bean1 = businessMap.get(shapeType);
-
         return bean1;
     }
 }

+ 0 - 1
src/main/java/cn/cslg/pas/factorys/getSqlFactorys/GetLikeSql.java

@@ -19,7 +19,6 @@ public class GetLikeSql implements GetSqlObject{
       if(option.equals("=")){
           re= filed+" like '%"+value+"%'";
       }
-
        return re;
     }
 

+ 57 - 11
src/main/java/cn/cslg/pas/service/business/es/EsService.java

@@ -1,14 +1,18 @@
 package cn.cslg.pas.service.business.es;
 
+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.PatentWithIdVO;
 import cn.cslg.pas.domain.es.Patent;
+import cn.cslg.pas.service.query.FormatQueryService;
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
 import co.elastic.clients.elasticsearch._types.SortOrder;
-import co.elastic.clients.elasticsearch._types.query_dsl.BoolQuery;
-import co.elastic.clients.elasticsearch._types.query_dsl.HasChildQuery;
+import co.elastic.clients.elasticsearch._types.query_dsl.*;
 import co.elastic.clients.elasticsearch.core.*;
 import co.elastic.clients.elasticsearch.core.search.Hit;
 import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
@@ -20,8 +24,12 @@ import java.util.List;
 @Service
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class EsService {
+
     private final ElasticsearchClient client;
 
+    @Autowired
+    private FormatQueryService formatQueryService;
+
     /**
      * @param patent
      * @throws Exception
@@ -84,6 +92,46 @@ public class EsService {
     }
 
     /**
+     * @param searchCondition 检索条件
+     * @param page            检索页码
+     * @param size            页大小
+     * @param orderFields     排序字段
+     * @return
+     */
+    public List<Patent> Search(String searchCondition, Integer page, Integer size, List<String> orderFields) throws Exception {
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent");
+
+
+        //1. 解析检索条件
+        treeNode tree = expressManager.getInstance().Parse(searchCondition, false);
+        //格式化检索式
+        //3. 从es中检索数据
+        Query q = formatQueryService.EsQueryToQuery((operateNode) tree, "esConfig");
+        //4. 返回数据
+        //分页
+        if (page != null && size != null) {
+            builder.from(page).size(size);
+        }
+        builder.query(q);
+        //排序
+        builder.sort(sortOptionsBuilder -> sortOptionsBuilder
+                .field(fieldSortBuilder -> fieldSortBuilder
+                        .field("public_date").order(SortOrder.Desc)));
+
+        SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+        List<Patent> list = new ArrayList<>();
+        List<Hit<Patent>> hits = response.hits().hits();
+        for (Hit<Patent> hit : hits) {
+            Patent esMess = hit.source();
+            list.add(esMess);
+        }
+
+        return list;
+    }
+
+    /**
      * @param key
      * @param page
      * @param limit
@@ -91,21 +139,19 @@ public class EsService {
      * @throws IOException
      */
     public List<Patent> search(String key, Integer page, Integer limit) throws IOException {
-
         SearchRequest.Builder builder = new SearchRequest.Builder();
         //设置查询索引
         builder.index("patent");
         //组装查询条件
         BoolQuery.Builder boolQuery = new BoolQuery.Builder();
-
-        boolQuery.should(q -> q.matchPhrasePrefix(m -> m
-                .query(key)
+        boolQuery.should(q -> q.match(v -> v
+               .query(key)
                 //字段名
-                .field("title")
+                .field("patent_no")
         ));
 
         //多字段匹配
-        boolQuery.should(q -> q.matchPhrasePrefix(m -> m.query(key).field("content")));
+//        boolQuery.should(q -> q.matchPhrasePrefix(m -> m.query(key).field("content")));
 
         builder.query(q -> q.bool(boolQuery.build()));
         //分页
@@ -114,9 +160,9 @@ public class EsService {
         }
 
         //排序
-        builder.sort(sortOptionsBuilder -> sortOptionsBuilder
-                .field(fieldSortBuilder -> fieldSortBuilder
-                        .field("createTime").order(SortOrder.Desc)));
+//        builder.sort(sortOptionsBuilder -> sortOptionsBuilder
+//                .field(fieldSortBuilder -> fieldSortBuilder
+//                        .field("createTime").order(SortOrder.Desc)));
         SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
         List<Patent> list = new ArrayList<>();
         List<Hit<Patent>> hits = response.hits().hits();

+ 84 - 0
src/main/java/cn/cslg/pas/service/importPatent/GetCataloguingFromWebThread.java

@@ -0,0 +1,84 @@
+package cn.cslg.pas.service.importPatent;
+
+import cn.cslg.pas.common.dto.UploadPatentWebDTO;
+import cn.cslg.pas.common.model.cronModel.SystemFile;
+import cn.cslg.pas.common.utils.ReadExcelUtils;
+import cn.cslg.pas.common.vo.*;
+import cn.cslg.pas.domain.es.Patent;
+import cn.cslg.pas.domain.es.Text;
+import cn.cslg.pas.service.common.ExcuteDataToVOService;
+import cn.cslg.pas.service.common.ExcuteUploadSettingService;
+import cn.cslg.pas.service.common.FileManagerService;
+import cn.cslg.pas.service.common.PatentStarApiService;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import org.apache.commons.compress.utils.IOUtils;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.springframework.beans.factory.annotation.Configurable;
+import org.springframework.context.ApplicationContext;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+@Configurable
+public class GetCataloguingFromWebThread extends Thread {
+
+    private ImportTaskAMVO importTaskAMVO;
+    private ApplicationContext applicationContext;
+    private ImportFromWebToEsService importFromWebToEsService;
+    private PatentStarApiService patentStarApiService;
+    private List<UploadPatentWebDTO> uploadPatentWebDTOs;
+    private final Lock taskLock = new ReentrantLock();
+    private final Condition taskCondition = taskLock.newCondition();
+    @Override
+    public void run() {
+        try {
+            while ( uploadPatentWebDTOs.size() > 0||importTaskAMVO.getProgressVO().equals(1)) {
+
+                //判断任务队列是否有任务,若没有则线程等待唤醒
+                if (uploadPatentWebDTOs.size() == 0) {
+                    taskLock.lock();
+                    taskCondition.await();
+                }
+                //根据专利申请号查询著录并装载信息
+                UploadPatentWebDTO uploadPatentWebDTO = uploadPatentWebDTOs.remove(0);
+                String chinaPatentZhuLuStr = patentStarApiService.getCnBibApi(uploadPatentWebDTO.getPatent().getAppNo());
+                if (chinaPatentZhuLuStr != null && !chinaPatentZhuLuStr.trim().equals("") && !chinaPatentZhuLuStr.equals("{}") && !chinaPatentZhuLuStr.contains("请求不合法")) {
+                    List<ChinaPatentZhuLu> chinaPatentZhuLus = JSON.parseArray(chinaPatentZhuLuStr, ChinaPatentZhuLu.class);
+                    ChinaPatentZhuLu chinaPatentZhuLu = chinaPatentZhuLus.get(0);
+                    importFromWebToEsService.savePatentToEs(uploadPatentWebDTO);
+                }
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    public GetCataloguingFromWebThread(TaskThread taskThread, ImportFromWebToEsService importFromWebToEsService) {
+        this.importTaskAMVO = taskThread.getImportTaskAMVO();
+        this.importFromWebToEsService = importFromWebToEsService;
+        this.applicationContext = taskThread.getApplicationContext();
+    }
+    public void awakeTask(UploadPatentWebDTO uploadPatentWebDTO) {
+        uploadPatentWebDTOs.add(uploadPatentWebDTO);
+        if (taskLock.tryLock()) {
+            taskCondition.signalAll();
+            taskLock.unlock();
+        }
+    }
+
+
+    //装载权利要求
+
+
+}

+ 63 - 0
src/main/java/cn/cslg/pas/service/importPatent/GetPDFfromWebThread.java

@@ -0,0 +1,63 @@
+package cn.cslg.pas.service.importPatent;
+
+import cn.cslg.pas.common.dto.UploadPatentWebDTO;
+import cn.cslg.pas.common.vo.ChinaPatentZhuLu;
+import cn.cslg.pas.common.vo.ImportTaskAMVO;
+import cn.cslg.pas.service.common.PatentStarApiService;
+import com.alibaba.fastjson.JSON;
+import org.springframework.beans.factory.annotation.Configurable;
+import org.springframework.context.ApplicationContext;
+
+import java.util.List;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+@Configurable
+public class GetPDFfromWebThread extends Thread {
+
+    private ImportTaskAMVO importTaskAMVO;
+    private ApplicationContext applicationContext;
+    private ImportFromWebToEsService importFromWebToEsService;
+    private PatentStarApiService patentStarApiService;
+    private List<UploadPatentWebDTO> uploadPatentWebDTOs;
+    private final Lock taskLock = new ReentrantLock();
+    private final Condition taskCondition = taskLock.newCondition();
+    @Override
+    public void run() {
+        try {
+            while ( uploadPatentWebDTOs.size() > 0||importTaskAMVO.getProgressVO().equals(1)) {
+
+                //判断任务队列是否有任务,若没有则线程等待唤醒
+                if (uploadPatentWebDTOs.size() == 0) {
+                    taskLock.lock();
+                    taskCondition.await();
+                }
+                //根据专利申请号查询著录并装载信息
+
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    public GetPDFfromWebThread(TaskThread taskThread, ImportFromWebToEsService importFromWebToEsService) {
+        this.importTaskAMVO = taskThread.getImportTaskAMVO();
+        this.importFromWebToEsService = importFromWebToEsService;
+        this.applicationContext = taskThread.getApplicationContext();
+    }
+    public void awakeTask(UploadPatentWebDTO uploadPatentWebDTO) {
+        uploadPatentWebDTOs.add(uploadPatentWebDTO);
+        if (taskLock.tryLock()) {
+            taskCondition.signalAll();
+            taskLock.unlock();
+        }
+    }
+
+
+    //装载权利要求
+
+
+}

+ 29 - 5
src/main/java/cn/cslg/pas/service/importPatent/GetPatentFromExcelThread.java

@@ -61,6 +61,11 @@ public class GetPatentFromExcelThread extends Thread {
             Sheet sheet = ReadExcelUtils.readExcel(tempFile);
             //遍历专利总数量,在循环中将专利一个一个存入消费者专利队列
             for (int i = lastIndex; i < total; i++) {
+                if(importTaskAMVO.getProgressVO().getState().equals(1)){
+                    System.out.println(importTaskAMVO.getId());
+                    break;
+                }
+                Thread.sleep(10000);
                 PatentData patentData = ReadExcelUtils.readExcelOneRow(tempFile, sheet, i + 1);
                 //调用装载数据类(根据数据源配置文件对象和专利源数据生成专利数据)
                 UploadParamsVO uploadParamsVO = excuteDataToVOService.fileToPatentVO(patentData, jsonData);
@@ -111,7 +116,7 @@ public class GetPatentFromExcelThread extends Thread {
 
         }
 
-        //装载
+        //装载摘要
         if (uploadParamsVO.getAbstractStr() != null) {
             List<Text> texts = new ArrayList<>();
             if (uploadParamsVO.getAbstractStr().getName() != null) {
@@ -132,11 +137,30 @@ public class GetPatentFromExcelThread extends Thread {
                 patent.setAbstractStr(texts);
             }
         }
+
+        //装载权利要求
+        if (uploadParamsVO.getPatentRight() != null) {
+            List<Text> texts = new ArrayList<>();
+            if (uploadParamsVO.getPatentRight().getName() != null) {
+                Text text = new Text();
+                text.setTextContent(uploadParamsVO.getPatentRight().getName());
+                text.setIfOrigin(true);
+                text.setLanguage(contry);
+                texts.add(text);
+            }
+            if (uploadParamsVO.getPatentRight().getNameOut() != null) {
+                Text text = new Text();
+                text.setTextContent(uploadParamsVO.getPatentRight().getNameOut());
+                text.setIfOrigin(false);
+                text.setLanguage("CN");
+                texts.add(text);
+            }
+            if (texts.size() != 0) {
+                patent.setClaim(texts);
+            }
         }
-        //如果是中国专利,就将申请号作为专利号
-//        if (patent.getPatentNo().contains("CN")) {
-//            patent.setPatentNo(patent.getAppNo());  //将申请号设为专利号patentNo
-//        }
+        }
+
 
 
         //装载权利要求

+ 61 - 0
src/main/java/cn/cslg/pas/service/importPatent/GetPictureFromWebThread.java

@@ -0,0 +1,61 @@
+package cn.cslg.pas.service.importPatent;
+
+import cn.cslg.pas.common.dto.UploadPatentWebDTO;
+import cn.cslg.pas.common.vo.ImportTaskAMVO;
+import cn.cslg.pas.service.common.PatentStarApiService;
+import org.springframework.beans.factory.annotation.Configurable;
+import org.springframework.context.ApplicationContext;
+
+import java.util.List;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+@Configurable
+public class GetPictureFromWebThread extends Thread {
+
+    private ImportTaskAMVO importTaskAMVO;
+    private ApplicationContext applicationContext;
+    private ImportFromWebToEsService importFromWebToEsService;
+    private PatentStarApiService patentStarApiService;
+    private List<UploadPatentWebDTO> uploadPatentWebDTOs;
+    private final Lock taskLock = new ReentrantLock();
+    private final Condition taskCondition = taskLock.newCondition();
+    @Override
+    public void run() {
+        try {
+            while ( uploadPatentWebDTOs.size() > 0||importTaskAMVO.getProgressVO().equals(1)) {
+
+                //判断任务队列是否有任务,若没有则线程等待唤醒
+                if (uploadPatentWebDTOs.size() == 0) {
+                    taskLock.lock();
+                    taskCondition.await();
+                }
+                //根据专利申请号查询著录并装载信息
+
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    public GetPictureFromWebThread(TaskThread taskThread, ImportFromWebToEsService importFromWebToEsService) {
+        this.importTaskAMVO = taskThread.getImportTaskAMVO();
+        this.importFromWebToEsService = importFromWebToEsService;
+        this.applicationContext = taskThread.getApplicationContext();
+    }
+    public void awakeTask(UploadPatentWebDTO uploadPatentWebDTO) {
+        uploadPatentWebDTOs.add(uploadPatentWebDTO);
+        if (taskLock.tryLock()) {
+            taskCondition.signalAll();
+            taskLock.unlock();
+        }
+    }
+
+
+    //装载权利要求
+
+
+}

+ 97 - 0
src/main/java/cn/cslg/pas/service/importPatent/GetRightAndFullTextFromWebThread.java

@@ -0,0 +1,97 @@
+package cn.cslg.pas.service.importPatent;
+
+import cn.cslg.pas.common.core.IgnoreDTDEntityResolver;
+import cn.cslg.pas.common.dto.UploadPatentWebDTO;
+import cn.cslg.pas.common.model.importTaskModel.PatentRight;
+import cn.cslg.pas.common.vo.ChinaPatentZhuLu;
+import cn.cslg.pas.common.vo.ImportTaskAMVO;
+import cn.cslg.pas.domain.es.Patent;
+import cn.cslg.pas.service.common.PatentStarApiService;
+import com.alibaba.fastjson.JSON;
+import org.dom4j.Document;
+import org.dom4j.Element;
+import org.dom4j.XPath;
+import org.dom4j.io.SAXReader;
+import org.springframework.beans.factory.annotation.Configurable;
+import org.springframework.context.ApplicationContext;
+
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+@Configurable
+public class GetRightAndFullTextFromWebThread extends Thread{
+    private ImportTaskAMVO importTaskAMVO;
+    private ApplicationContext applicationContext;
+    private ImportFromWebToEsService importFromWebToEsService;
+    private PatentStarApiService patentStarApiService;
+    private List<UploadPatentWebDTO> uploadPatentWebDTOs;
+    private final Lock taskLock = new ReentrantLock();
+    private final Condition taskCondition = taskLock.newCondition();
+
+    @Override
+    public void run() {
+        try {
+            while ( uploadPatentWebDTOs.size() > 0||importTaskAMVO.getProgressVO().equals(1)) {
+                UploadPatentWebDTO uploadPatentWebDTO = uploadPatentWebDTOs.remove(0);
+                Patent patent  =uploadPatentWebDTO.getPatent();
+                if (uploadPatentWebDTOs.size() == 0) {
+                    taskLock.lock();
+                    taskCondition.await();
+                }
+                if ((patent.getPublicNo() != null && patent.getPublicNo().contains("CN")) || (patent.getPublicNo() == null && patent.getPatentNo().contains("CN"))) {
+                    //根据申请号调用"获得中国专利全文文本"接口,获得包含各种xml标签的专利全文内容的长字符串 cnFullXmlStr
+                    String cnFullXmlStr = patentStarApiService.getCnFullXmlApi(patent.getAppNo());
+
+
+                    SAXReader reader = new SAXReader();
+                    reader.setEntityResolver(new IgnoreDTDEntityResolver());
+                    Reader stringReader = new StringReader(cnFullXmlStr);
+                    Document document = reader.read(stringReader);
+                    XPath xpath = document.createXPath("//claim-text");
+                    List<Element> element = (List<Element>) xpath.selectNodes(document);
+                    if (element.size() == 0) {
+                        xpath = document.createXPath("//business:ClaimText");
+                        element = (List<Element>) xpath.selectNodes(document);
+                    }
+                    List<String> reStrs = new ArrayList<>();
+                    element.forEach(item -> {
+                        String claim = item.getText();
+                        reStrs.add(claim);
+                    });
+                    String reStr = "";
+                    if (reStrs.size() != 0) {
+                        reStr = cn.cslg.pas.common.utils.StringUtils.join(reStrs, "\r\n");
+                    }
+                    //装载权利要求原文
+                    PatentRight patentRight = new PatentRight();
+
+                }
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    public GetRightAndFullTextFromWebThread(TaskThread taskThread, ImportFromWebToEsService importFromWebToEsService) {
+        this.importTaskAMVO = taskThread.getImportTaskAMVO();
+        this.importFromWebToEsService = importFromWebToEsService;
+        this.applicationContext = taskThread.getApplicationContext();
+    }
+    public void awakeTask(UploadPatentWebDTO uploadPatentWebDTO) {
+        uploadPatentWebDTOs.add(uploadPatentWebDTO);
+        if (taskLock.tryLock()) {
+            taskCondition.signalAll();
+            taskLock.unlock();
+        }
+    }
+
+
+    //装载权利要求
+}

+ 57 - 143
src/main/java/cn/cslg/pas/service/importPatent/ImportFromWebToEsService.java

@@ -1,6 +1,7 @@
 package cn.cslg.pas.service.importPatent;
 
 import cn.cslg.pas.common.dto.PatentStarListDTO;
+import cn.cslg.pas.common.dto.UploadPatentWebDTO;
 import cn.cslg.pas.common.model.cronModel.Calculate;
 import cn.cslg.pas.common.utils.DateUtils;
 import cn.cslg.pas.common.utils.MathUtils;
@@ -24,139 +25,44 @@ import java.util.Map;
 @Scope("prototype")
 @Service
 public class ImportFromWebToEsService implements PatentImportImp {
+
     private TaskThread taskThread;
+    @Autowired
     private PatentStarApiService patentStarApiService;
+    private ImportTaskAMVO importTaskAMVO;
+
+    private SavePatentToEsThread savePatentToEsThread;
 
+    private GetCataloguingFromWebThread getCataloguingFromWebThread;
     @Override
     public void startPatentThread() {
-        ImportTaskAMVO importTaskAMVO = new ImportTaskAMVO();
+        //十进制转二进制
+        String imContents = MathUtils.fun(2, importTaskAMVO.getImportContent());
+        //下载字段
+        char[] importCells = imContents.toCharArray();
+        char ifCataloguing = importCells[0];
+        char ifAddPicture = importCells[1];
+        char ifClaim = importCells[2];
+        char ifFullText = importCells[3];
+        char ifPdf = importCells[4];
         //若本次下载任务是超过一万条专利的全部下载任务
         int patentNum = 10000;
         if (importTaskAMVO.getEndNum() <= patentNum) {
-//            excuteLessThan10000(task);
+            excuteLessThan10000(importTaskAMVO);
         } else {
-            //                Integer total = importTaskAMVO.getAllNum();  //任务专利总数量
-//                Integer successNum = importTaskAMVO.getSuccessNum();
-//                String orderBy = importTaskAMVO.getOrderBy();  //排序字段
-//                String orderByType = importTaskAMVO.getOrderByType();  //排序类型
-//                String dbType = importTaskAMVO.getDBType();  //检索数据库类型
-//                List<String> cells = importTaskAMVO.getConfigCells();  //下载字段
-//                Integer startNumber = importTaskAMVO.getStartNumber();  //下载起始条数位置
-//                List<String> isDeletePatentNos = task.getIsDeletePatentNos();  //起止条数中不需要下载的专利号
-//
-//                //如果完成数量大于0,则当前下载任务为暂停后的继续下载,则开始位置更新
-//                if (successNum > 0) {
-//                    startNumber += successNum;
-//                }
-//
-//                //获得返回的的多个检索式 patentStarListDtos
-//                List<PatentStarListDto> patentStarListDtos = patentStarApiService.getSplitedConditions(new PatentStarListDto()
-//                        .setCurrentQuery(task.getConditions())
-//                        .setOrderBy(orderBy)
-//                        .setOrderByType(orderByType)
-//                        .setDBType(dbType), patentNum);
-//
-//                int produceSuccessNum = 0;
-//                int countForStart = 0;  //定义变量countForStart,记录检索式的专利总数量(目的是找出下载开始位置专利所属的那个检索式)
-//                //第1层:遍历多个检索式
-//                for (PatentStarListDto patentStarListDto : patentStarListDtos) {
-//                    //还没有到开始位置,则跳过,继续判断下一个检索式
-//                    countForStart += patentStarListDto.getTotal();
-//                    if (countForStart < startNumber) {
-//                        continue;
-//                    }
-//
-//
-//                    //至此,即找到了当前检索式即为要下载的专利开始位置所属的检索式,重新计算开始位置startNumber(即要下载的专利的开始位置,对应了当前检索式中该专利位置)
-//                    startNumber = startNumber - (countForStart - patentStarListDto.getTotal());
-//                    //第一个检索式下载完成后,从第二个检索式开始 startNumber都是从1开始下载
-//                    if (startNumber < 0) {
-//                        startNumber = 1;
-//                    }
-//                    //调用方法,入参为开始位置和结束位置(即当前检索式最后一个专利的位置,即当前检索式的专利总数量total),获得开始页数、结束页数、开始页数的开始位置、结束页数的结束位置
-//                    Calculate calculate = calculateFromStartAndEndNumber(startNumber, patentStarListDto.getTotal());
-//                    Integer startPage = calculate.getStartPage();
-//                    Integer startNum = calculate.getStartNum();
-//                    Integer endPage = calculate.getEndPage();
-//
-//                    //第2层:遍历检索页数
-//                    for (Integer i = startPage; i <= endPage; i++) {
-//                        //调用一般检索接口,返回一批专利著录相关数据
-//                        patentStarListDto
-//                                .setPageNum(i)
-//                                .setRowCount(50)
-//                                .setFormed(true);
-//                        Map<String, Object> resultMap = patentStarApiService.patentStarSearchApi(patentStarListDto);
-//                        if (resultMap == null || (Integer) resultMap.get("total") == 0) {
-//                            ThrowException.throwXiaoShiException("未检索到相关专利");
-//                        }
-//
-//                        List<StarPatentVO> starPatents = (List<StarPatentVO>) resultMap.get("records");
-//                        //第3层:遍历专利
-//                        for (int j = 0; j < starPatents.size(); j++) {
-//                            //若任务状态为已暂停,则结束本次任务的下载
-//                            if (pTaskId.equals(task.getId()) && pTaskStatus == 4) {
-//                                return;
-//                            }
-//                            //若生产的数量达到了总数,则结束本次任务的下载
-//                            if (produceSuccessNum == total) {
-//                                return;
-//                            }
-//                            //如果还没到要下载的专利的开始位置,则跳过,继续判断下一个专利
-//                            if (i.equals(startPage) && j < startNum - 1) {
-//                                continue;
-//                            }
-//                            //如果当前遍历到的专利号是需要删除的专利,则跳过,不下载它
-//                            if (isDeletePatentNos != null && isDeletePatentNos.size() > 0 && isDeletePatentNos.contains(starPatents.get(j).getApplicationNo())) {
-//                                continue;
-//                            }
-//
-//                            //将专利丢入各生产线程,进行生产和消费
-//                            UploadParamsVO uploadParamsVO = new UploadParamsVO();
-//                            uploadParamsVO.setPatent(new Patent());
-//                            uploadParamsVO.getPatent().setPatentNo(starPatents.get(j).getPatentNo());
-//                            uploadPatentBatchService.getOneOrInsertOne(uploadParamsVO);
-//
-//                            PQueueData pQueueData = new PQueueData()
-//                                    .setTask(task)
-//                                    .setStarPatent(starPatents.get(j))
-//                                    .setUploadParamsVO(uploadParamsVO);
-//
-//                            //专利丢入著录生产者队列,并唤醒著录生产者线程
-//                            if (cells.contains("1")) {
-//                                pantentQueueService.zhuluToPQueue(pQueueData);
-//                            }
-//                            //专利丢入权要生产者队列,并唤醒权要生产者线程
-//                            if (cells.contains("2")) {
-//                                pantentQueueService.rightToPQueue(pQueueData);
-//                            }
-//                            //专利丢入说明书文本生产者队列,并唤醒说明书文本生产者线程
-//                            if (cells.contains("3")) {
-//                                pantentQueueService.instructionTextToPQueue(pQueueData);
-//                            }
-//                            //专利丢入说明书pdf生产者队列,并唤醒说明书pdf生产者线程
-//                            if (cells.contains("4")) {
-//                                pantentQueueService.instructionPDFToPQueue(pQueueData);
-//                            }
-//                            //专利丢入摘要附图生产者队列,并唤醒摘要附图生产者线程
-//                            if (cells.contains("6")) {
-//                                pantentQueueService.imageToPQueue(pQueueData);
-//                            }
-//
-//                            produceSuccessNum++;  //计数,每生产完一个,生产完成数量++
-//
-//                        }
-//                    }
-//
-//                }
-
         }
-        SavePatentToEsThread savePatentToEsThread = new SavePatentToEsThread(taskThread, taskThread.getApplicationContext());
+         savePatentToEsThread = new SavePatentToEsThread(taskThread, taskThread.getApplicationContext());
+        if (ifCataloguing == 1) {
+           getCataloguingFromWebThread = new GetCataloguingFromWebThread(taskThread, this);
+            getCataloguingFromWebThread.start();
+        }
+
         GetPatentFromExcelThread getPatentFromExcelThread = new GetPatentFromExcelThread(taskThread.getImportTaskAMVO(), savePatentToEsThread, taskThread.getApplicationContext());
         savePatentToEsThread.start();
         getPatentFromExcelThread.start();
     }
 
+
     private void excuteLessThan10000(ImportTaskAMVO importTaskAMVO) {
         try {
             Integer successNum = importTaskAMVO.getSuccessNum();  //成功条数(即上一次下载到的位置)
@@ -165,42 +71,42 @@ public class ImportFromWebToEsService implements PatentImportImp {
             String orderByType = importTaskAMVO.getOrderByType();  //排序类型
             String dbType = importTaskAMVO.getDBType();  //检索数据库类型
             Integer importContent = importTaskAMVO.getImportContent();  //下载字段
-            Integer doneNum =importTaskAMVO.getDoneNum();
+            Integer doneNum = importTaskAMVO.getDoneNum();
             //十进制转二进制
             String imContents = MathUtils.fun(2, importContent);
             //下载字段
             char[] importCells = imContents.toCharArray();
-            Calculate calculate = DateUtils.calculateFromStartAndEndNumber(doneNum, importTaskAMVO.getAllNum(),50);
+            Calculate calculate = DateUtils.calculateFromStartAndEndNumber(doneNum, importTaskAMVO.getAllNum(), 50);
             Integer startPage = calculate.getStartPage();
             Integer startNum = calculate.getStartNum();
             Integer endPage = calculate.getEndPage();
 
-
-                //根据计算出的起止页数,一页一页检索
-                for (int i = startPage; i <= endPage; i++) {
-                    PatentStarListDTO patentStarListDto = new PatentStarListDTO()
-                            .setCurrentQuery(conditions)
-                            .setOrderBy(orderBy)
-                            .setOrderByType(orderByType)
-                            .setPageNum(i)
-                            .setRowCount(50)
-                            .setDBType(dbType);
-                    //调用一般接口返回一批专利著录相关数据
-                    Map<String, Object> resultMap = patentStarApiService.patentStarSearchApi(patentStarListDto);
-                    if (resultMap == null || (Integer) resultMap.get("total") == 0) {
-                        ThrowException.throwXiaoShiException("未检索到相关专利");
-                    }
-
-                    List<StarPatentVO> starPatents = (List<StarPatentVO>) resultMap.get("records");
-                    //遍历这一页的专利
-                    for (int j = 0; j < starPatents.size(); j++) {
-
-
-                    }
-
+            //根据计算出的起止页数,一页一页检索
+            for (int i = startPage; i <= endPage; i++) {
+                PatentStarListDTO patentStarListDto = new PatentStarListDTO()
+                        .setCurrentQuery(conditions)
+                        .setOrderBy(orderBy)
+                        .setOrderByType(orderByType)
+                        .setPageNum(i)
+                        .setRowCount(50)
+                        .setDBType(dbType);
+                //调用一般接口返回一批专利著录相关数据
+                Map<String, Object> resultMap = patentStarApiService.patentStarSearchApi(patentStarListDto);
+                if (resultMap == null || (Integer) resultMap.get("total") == 0) {
+                    ThrowException.throwXiaoShiException("未检索到相关专利");
                 }
 
+                List<StarPatentVO> starPatents = (List<StarPatentVO>) resultMap.get("records");
+                //遍历这一页的专利
+                for (int j = 0; j < starPatents.size(); j++) {
+                    UploadPatentWebDTO uploadPatentWebDTO = new UploadPatentWebDTO();
+                    //装载start
+                    uploadPatentWebDTO.setStarPatentVO(starPatents.get(i));
+                    uploadPatentWebDTO.setCounter(0);
+                    getCataloguingFromWebThread.awakeTask(uploadPatentWebDTO);
+                }
 
+            }
 
         } catch (Exception e) {
             e.printStackTrace();
@@ -217,4 +123,12 @@ public class ImportFromWebToEsService implements PatentImportImp {
         ApplicationContext applicationContext = taskThread.getApplicationContext();
         this.patentStarApiService = applicationContext.getBean(PatentStarApiService.class);
     }
+
+    public void savePatentToEs(UploadPatentWebDTO uploadPatentWebDTO) {
+        if (uploadPatentWebDTO.getTotalCounter().equals(uploadPatentWebDTO.getCounter())) {
+            uploadPatentWebDTO.getPatent();
+        }
+
+
+    }
 }

+ 3 - 1
src/main/java/cn/cslg/pas/service/importPatent/SavePatentToEsThread.java

@@ -26,11 +26,12 @@ public class SavePatentToEsThread extends Thread {
     private final Lock taskLock = new ReentrantLock();
     private final Condition taskCondition = taskLock.newCondition();
     private TaskThread taskThread;
+    private ImportTaskAMVO importTaskAMVO;
     private Boolean ifProductAll = false;
 
     @Override
     public void run() {
-        while (!ifProductAll || patents.size() > 0) {
+        while (!ifProductAll || patents.size() > 0||importTaskAMVO.getProgressVO().equals(1)) {
             try {
 
                 //判断任务队列是否有任务,若没有则线程等待唤醒
@@ -89,6 +90,7 @@ public class SavePatentToEsThread extends Thread {
     public SavePatentToEsThread(TaskThread taskThread, ApplicationContext applicationContext) {
         this.taskThread = taskThread;
         this.applicationContext = applicationContext;
+        this.importTaskAMVO =taskThread.getImportTaskAMVO();
     }
 
 

+ 15 - 2
src/main/java/cn/cslg/pas/service/importPatent/SchedulingTaskService.java

@@ -2,6 +2,7 @@ package cn.cslg.pas.service.importPatent;
 
 import cn.cslg.pas.common.core.base.Constants;
 import cn.cslg.pas.common.vo.ImportTaskAMVO;
+import cn.cslg.pas.common.vo.ProgressVO;
 import cn.cslg.pas.domain.business.ImportTask;
 import cn.cslg.pas.domain.business.ImportTaskCondition;
 import cn.cslg.pas.service.business.ImportTaskConditionService;
@@ -29,6 +30,7 @@ public class SchedulingTaskService {
     @Autowired
     private ImportTaskConditionService importTaskConditionService;
 
+    private    List<ImportTaskAMVO> importTaskAMVOS;
     public void startTask() {
         Integer freeCount = Constants.MAX_IMPORT_TASK_COUNT - executor.getActiveCount();
 
@@ -41,7 +43,7 @@ public class SchedulingTaskService {
             List<ImportTask> importTaskList = importTaskService.list(queryWrapper);
             if (importTaskList.size() > 0) {
                 // 装载任务信息
-                List<ImportTaskAMVO> importTaskAMVOS = this.loadTaskAMVOS(importTaskList);
+              importTaskAMVOS = this.loadTaskAMVOS(importTaskList);
                 importTaskAMVOS.forEach(item -> {
                     TaskThread taskThread = new TaskThread(item,applicationContext);
                     executor.execute(taskThread);
@@ -49,11 +51,13 @@ public class SchedulingTaskService {
             }
 
         }
-
     }
 
 
     public List<ImportTaskAMVO> loadTaskAMVOS(List<ImportTask> importTaskList) {
+
+
+
         List<ImportTaskAMVO> importTaskAMVOS = new ArrayList<>();
         List<Integer> taskConditionIds = new ArrayList<>();
         List<ImportTaskCondition> importTaskConditions = new ArrayList<>();
@@ -76,11 +80,20 @@ public class SchedulingTaskService {
                 importTaskAMVO.setProductId(importTaskCondition.getProductId());
                 importTaskAMVO.setImportContent(1);
             }
+            ProgressVO progressVO =new ProgressVO();
+            progressVO.setState(0);
+            importTaskAMVO.setProgressVO(progressVO);
             importTaskAMVOS.add(importTaskAMVO);
 
+
         }
         return importTaskAMVOS;
 
+    }
 
+    public void pauseTask(Integer taskId){
+//根据id获得
+        ImportTaskAMVO  importTaskAMVO  =  importTaskAMVOS.stream().filter(item->item.getId().equals(taskId)).findFirst().orElse(null);
+        importTaskAMVO.getProgressVO().setState(1);
     }
 }

+ 1 - 1
src/main/java/cn/cslg/pas/service/importPatent/TaskThread.java

@@ -40,7 +40,7 @@ public class TaskThread extends Thread {
 
     @Override
     public void run() {
-        //TODO 判断任务的类型 调用不同线程(可做工厂类)
+        //TODO 判断任务的类型
         String json = CommonService.readJsonFile(Constants.IMPORT_TASK_CONFIG + ".json");
         List<ImportTaskConfig> configs = JSON.parseArray(json, ImportTaskConfig.class);
         PatentImportFactory patentImportFactory =applicationContext.getBean(PatentImportFactory.class);

+ 54 - 6
src/main/java/cn/cslg/pas/service/query/FormatQueryService.java

@@ -9,12 +9,16 @@ import cn.cslg.pas.common.model.request.QueryRequest;
 import cn.cslg.pas.common.model.request.StringRequest;
 import cn.cslg.pas.common.utils.StringUtils;
 import cn.cslg.pas.common.utils.parseQueryToTree.*;
+import cn.cslg.pas.common.vo.EsConfigVO;
 import cn.cslg.pas.exception.ConditionException;
+import cn.cslg.pas.factorys.EsBuilderFactory.EsBuilderFactory;
+import cn.cslg.pas.factorys.EsBuilderFactory.IQueryBuilder;
 import cn.cslg.pas.factorys.getOrderFactory.GetOrderFactory;
 import cn.cslg.pas.factorys.getOrderFactory.GetOrderObject;
 import cn.cslg.pas.factorys.getSqlFactorys.GetSqlFactory;
 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.google.gson.Gson;
 import lombok.RequiredArgsConstructor;
@@ -22,8 +26,10 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
 
 import java.io.*;
+import java.text.ParseException;
 import java.util.*;
 
 /**
@@ -39,6 +45,10 @@ public class FormatQueryService {
     @Autowired
     private GetOrderFactory getOrderFactory;
 
+    @Autowired
+    private EsBuilderFactory esBuilderFactory;
+
+
     public String getText(String text) throws Exception {
         treeNode tree = expressManager.getInstance().Parse(text, false);
         System.out.print(this.ToString((operateNode) tree));
@@ -104,6 +114,7 @@ public class FormatQueryService {
         return strCode;
     }
 
+
     /**
      * 排序转sql排序语句
      *
@@ -127,7 +138,6 @@ public class FormatQueryService {
         if (orders.size() == 0) {
             return "";
         }
-
         String orderStr = StringUtils.join(orders, ",");
         re += orderStr;
         return re;
@@ -153,8 +163,8 @@ public class FormatQueryService {
             strCode = operate1.getCode();
             optionName = operate1.getCode();
         }
-
         GetSqlObject getSqlObjectLocal = null;
+
         if (Left != null) {
             if ((operate1.gettype() == enuType.Logic || operate1.gettype() == enuType.Assignment) && (Left instanceof operateNode)) {
                 strCode = "(" + this.ToString2((operateNode) Left, getSqlObject, tableName) + ") " + strCode + " ";
@@ -168,7 +178,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.getIfSearch().equals(true)).findFirst().orElse(null);
+                    SqlObject sqlObject = sqlObjects.stream().filter(item -> item.getValue().equals(field) && item.getIfSearch().equals(true)).findFirst().orElse(null);
                     if (sqlObject != null) {
                         getSqlObjectLocal = getSqlFactory.getClass(sqlObject.getSqlClass());
                         sqlObject.setOption(optionName);
@@ -177,8 +187,8 @@ public class FormatQueryService {
                     }
                 }
             }
-
         }
+
         if (Right != null) {
             String rightValue = "";
             if ((operate1.gettype() == enuType.Logic || operate1.gettype() == enuType.Assignment) && (Right instanceof operateNode)) {
@@ -267,7 +277,13 @@ public class FormatQueryService {
         return sqls;
     }
 
-
+    /**
+     * 网站检索式格式化
+     * @param node
+     * @param getSqlObject
+     * @param tableName
+     * @return
+     */
     public String webQueryToString(operateNode node, GetSqlObject getSqlObject, String tableName) {
         operate operate1 = node.getoperate();
         treeNode Left = node.getLeft();
@@ -343,7 +359,7 @@ public class FormatQueryService {
                     strCode = strCode + getSqlObject.getSql(rightValue);
                 } else if (!(Left instanceof operateNode)) {
                     rightValue = Right.ToString();
-                    strCode +=rightValue;
+                    strCode += rightValue;
                 }
             }
         }
@@ -364,4 +380,36 @@ public class FormatQueryService {
 
         return reQuery;
     }
+
+    public Query EsQueryToQuery(operateNode node, String configName) throws ParseException {
+        Query query = null;
+        operate operate1 = node.getoperate();
+        treeNode Left = node.getLeft();
+        treeNode Right = node.getRight();
+        if (operate1.getShowName().equals(enuType.Logic)) {
+            Query q1 = this.EsQueryToQuery((operateNode) Left, configName);
+            Query q2 = this.EsQueryToQuery((operateNode) Right, configName);
+            query = QueryBuilders.bool(i -> i.must(q1, q2));
+        } else if (operate1.getShowName().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);
+                }
+                iQueryBuilder.setOperator(operate1.getShowName());
+                iQueryBuilder.setValue(value);
+                query = iQueryBuilder.creteQuery();
+            }
+        }
+
+        return query;
+    }
 }

+ 58 - 0
src/main/resources/jsons/esConfig.json

@@ -0,0 +1,58 @@
+[
+  {
+    "name": "专利号",
+    "type": "String",
+    "value": "patentNo",
+    "field": "patentNo",
+    "esField": "patent_no",
+    "esClass": "keyWordQueryBuilder"
+  },
+  {
+    "name": "标题",
+    "type": "String",
+    "value": "titleTextContent",
+    "field": "titleTextContent",
+    "esField": "title.text_content",
+    "esClass": "nestedQueryBuilder"
+  },
+  {
+    "name": "公开日期",
+    "type": "String",
+    "value": "publicDate",
+    "field": "publicDate",
+    "esField": "public_date",
+    "esClass": "dateQueryBuilder"
+  },
+  {
+    "name": "申请日期",
+    "type": "String",
+    "value": "appDate",
+    "field": "appDate",
+    "esField": "app_date",
+    "esClass": "dateQueryBuilder"
+  },
+  {
+    "name": "授权日期",
+    "type": "String",
+    "value": "grantDate",
+    "field": "grantDate",
+    "esField": "grant_date",
+    "esClass": "dateQueryBuilder"
+  },
+  {
+    "name": "家族号",
+    "type": "String",
+    "value": "simpleFamilyNum",
+    "field": "simpleFamilyNum",
+    "esField": "simple_family_num",
+    "esClass": "numberQueryBuilder"
+  },
+  {
+    "name": "子文档号",
+    "type": "String",
+    "value": "projectId",
+    "field": "projectId",
+    "esField": "project_id",
+    "esClass": "childQueryBuilder"
+  }
+]

+ 23 - 25
src/main/resources/mapper/Event.xml

@@ -1,52 +1,50 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="cn.cslg.pas.mapper.EventMapper">
-  <select id="getEvent"  resultType="cn.cslg.pas.common.vo.business.EventVO">
-   select id,name,description,client_id as clientId,scenario_id as scenarioId,event_date as eventDate,create_id as createId,create_time as createTime from event
-
-
+    <select id="getEvent" resultType="cn.cslg.pas.common.vo.business.EventVO">
+        select id,name,description,client_id as clientId,scenario_id as scenarioId,event_date as eventDate,create_id as
+        createId,create_time as createTime from event
         <if test="sql1!=''">
 
-        where    ${sql1}
+            where ${sql1}
         </if>
 
 
-      ${sql2} ${sql3}
-  </select>
+        ${sql2} ${sql3}
+    </select>
 
     <select id="getEventCount" resultType="java.lang.Long">
         select count(*) from event
         <if test="sql!=''">
 
-            where    ${sql}
+            where ${sql}
         </if>
     </select>
-    <select id="getGroups"  resultType="cn.cslg.pas.common.vo.GroupReVO">
-        select ${selectField} as value ,count(*) as num from  ${tableName}
+    <select id="getGroups" resultType="cn.cslg.pas.common.vo.GroupReVO">
+        select ${selectField} as value ,count(*) as num from ${tableName}
         <if test="sqls.get(0)!=''">
-            where    ${sqls.get(0)}
+            where ${sqls.get(0)}
         </if>
-          group by ${groupField} ${sqls.get(1)}  ${sqls.get(2)}
+        group by ${groupField} ${sqls.get(1)} ${sqls.get(2)}
     </select>
 
-    <select id="getGroupsCount"  resultType="java.lang.Long">
+    <select id="getGroupsCount" resultType="java.lang.Long">
         select count(*) from (select ${selectField} from ${tableName}
         <if test="sqls.get(0)!=''">
             where ${sqls.get(0)}
-        and ${selectField} is not null
+            and ${selectField} is not null
         </if>
         <if test="sqls.get(0)==''">
-            where  ${selectField} is not null
+            where ${selectField} is not null
         </if>
-         group by ${groupField}
+        group by ${groupField}
         ) as c
     </select>
 
 
-
-    <select id="getEventOrder"  resultType="java.lang.Integer">
+    <select id="getEventOrder" resultType="java.lang.Integer">
         select id from event
-            order  by name
+        order by name
         <if test="orderType==0">
             asc
         </if>
@@ -56,23 +54,23 @@
     </select>
 
 
-    <select id="getEntrustGroup"  resultType="cn.cslg.pas.common.vo.EntrustVO">
-        select distinct ${selectField} ,p.id,count(*) as num from  ${tableName}
+    <select id="getEntrustGroup" resultType="cn.cslg.pas.common.vo.EntrustVO">
+        select distinct ${selectField} ,p.id,count(*) as num from ${tableName}
         <if test="sqls.get(0)!=''">
-            where    ${sqls.get(0)}
+            where ${sqls.get(0)}
         </if>
-        group by ${groupField} ${sqls.get(1)}  ${sqls.get(2)}
+        group by ${groupField} ${sqls.get(1)} ${sqls.get(2)}
     </select>
 
 
-    <select id="getEntrustGroupCount"  resultType="java.lang.Long">
+    <select id="getEntrustGroupCount" resultType="java.lang.Long">
         select count(*) from (select ${selectField} from ${tableName}
         <if test="sqls.get(0)!=''">
             where ${sqls.get(0)}
             and p.entrust_type is not null
         </if>
         <if test="sqls.get(0)==''">
-            where  p.entrust_type  is not null
+            where p.entrust_type is not null
         </if>
         group by ${groupField}
         ) as c

+ 2 - 0
src/test/java/cn/cslg/pas/service/CommonServiceTests.java

@@ -81,6 +81,8 @@ public class CommonServiceTests {
     @Test
     void testImportTask() throws IOException, InterruptedException {
         schedulingTaskService.startTask();
+//        Thread.sleep(10000);
+//        schedulingTaskService.pauseTask(1);
          Thread.sleep(1000000);
     }
     @Test

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

@@ -7,11 +7,14 @@ import cn.cslg.pas.domain.es.Patent;
 import cn.cslg.pas.service.business.es.EsService;
 
 import cn.cslg.pas.service.importPatent.SchedulingTaskService;
-import org.junit.jupiter.api.Test;
+import cn.hutool.core.util.XmlUtil;
+import org.junit.Test;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 
+import javax.swing.text.Document;
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -20,6 +23,7 @@ import java.util.List;
  */
 @SpringBootTest
 public class EsServiceTests {
+
     @Autowired
     private EsService esService;
 
@@ -49,12 +53,27 @@ public class EsServiceTests {
     }
 
     @Test
-    void updatePatent() throws Exception{}
+    void updatePatent() throws Exception{
+
+    }
 
     @Test
     void addImportTask() throws  Exception {
-        List<Patent> patentList = esService.searchChild("1",1,10);
+        List<Patent> patentList = esService.search("1",1,10);
         System.out.println(patentList);
         Thread.sleep(1000000);
     }
+
+    @Test
+    void search() throws Exception {
+        List<Patent> list = esService.Search("patentNo=CN201199922Y and simpleFamilyNum>1 or simpleFamilyNum=0", 0, 50,null);
+//        List<Patent> list = esService.Search("titleTextContent=电子 or projectId=1", 0, 50,null);
+//        List<Patent> list = esService.Search("patentNo=CN201199922Y and simpleFamilyNum>1", 0, 50,null);
+//        List<Patent> list = esService.Search("publicDate=2009-03", 0, 50,null);
+//        List<Patent> list = esService.Search("simpleFamilyNum>1", 0, 50,null);
+//        List<Patent> list = esService.Search("titleTextContent=电子", 0, 50,null);
+//        List<Patent> list = esService.Search("projectId=1", 0, 50,null);
+//        List<Patent> list = esService.search("patentNo=CN201199922Y", 0, 50);
+        System.out.println(list);
+    }
 }

+ 93 - 14
src/test/java/cn/cslg/pas/service/PatentStarServiceTests.java

@@ -1,19 +1,28 @@
 package cn.cslg.pas.service;
 
+import cn.cslg.pas.common.core.IgnoreDTDEntityResolver;
 import cn.cslg.pas.common.dto.PatentStarListDTO;
 import cn.cslg.pas.common.utils.FormatUtil;
 import cn.cslg.pas.common.utils.RedisUtil;
+import cn.cslg.pas.common.utils.StringUtils;
 import cn.cslg.pas.common.vo.PatentWithIdVO;
-import cn.cslg.pas.controller.outApi.PatentStarController;
 import cn.cslg.pas.domain.es.Patent;
 import cn.cslg.pas.service.business.es.EsService;
 import cn.cslg.pas.service.common.PatentStarApiService;
 import cn.cslg.pas.service.importPatent.SchedulingTaskService;
+import org.dom4j.Document;
+import org.dom4j.Element;
+import org.dom4j.XPath;
+import org.dom4j.io.SAXReader;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 
+
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -33,36 +42,106 @@ public class PatentStarServiceTests {
     private SchedulingTaskService importTaskAdd;
     @Autowired
     private PatentStarApiService patentStarApiService;
+
     @Test
     void addPatent() throws Exception {
-        PatentStarListDTO patentStarListDTO =new PatentStarListDTO();
-        patentStarListDTO.setCurrentQuery(" GD=(A OR B OR C)");
+        PatentStarListDTO patentStarListDTO = new PatentStarListDTO();
+        patentStarListDTO.setCurrentQuery(" TI=计算机");
         patentStarListDTO.setDBType("CN");
         patentStarListDTO.setOrderBy("AD");
         patentStarListDTO.setPageNum(1);
         patentStarListDTO.setRowCount(10);
         patentStarListDTO.setOrderByType("DESC");
-     Map<String,Object> map = patentStarApiService.patentStarSearchLocal(patentStarListDTO);
-     System.out.println(map);
+        Map<String, Object> map = patentStarApiService.patentStarSearchLocal(patentStarListDTO);
+        System.out.println(map);
     }
 
     @Test
-    void getPatentByPatentNo() throws  Exception {
+    void getPatentByPatentNo() throws Exception {
         //根据专利号获得id
-        PatentWithIdVO patentWithIdVO  = esService.getIdByPatentNo("CN201114765Y");
-        Patent patent =new Patent();
+        PatentWithIdVO patentWithIdVO = esService.getIdByPatentNo("CN201114765Y");
+        Patent patent = new Patent();
         patent.setAgency("张三");
-        Patent orgPatent =patentWithIdVO.getPatent();
-        BeanUtils.copyProperties(patent,orgPatent, FormatUtil.getNullPropertyNames(patent));
-          esService.updateDocument(orgPatent,patentWithIdVO.getId());
+        Patent orgPatent = patentWithIdVO.getPatent();
+        BeanUtils.copyProperties(patent, orgPatent, FormatUtil.getNullPropertyNames(patent));
+        esService.updateDocument(orgPatent, patentWithIdVO.getId());
+    }
+
+    @Test
+    void updatePatent() throws Exception {
+        String a = patentStarApiService.getCnFullXmlApi("201410391729");
+        SAXReader reader = new SAXReader();
+        reader.setEntityResolver(new IgnoreDTDEntityResolver());
+        Reader stringReader = new StringReader(a);
+        Document document = reader.read(stringReader);
+        XPath xpath = document.createXPath("//claim-text");
+        List<Element> element = (List<Element>) xpath.selectNodes(document);
+        if (element.size() == 0) {
+            xpath = document.createXPath("//business:ClaimText");
+            element = (List<Element>) xpath.selectNodes(document);
+        }
+        List<String> reStrs = new ArrayList<>();
+        element.forEach(item -> {
+            String claim = item.getText();
+            reStrs.add(claim);
+        });
+        String reStr = "";
+        if (reStrs.size() != 0) {
+            reStr = StringUtils.join(reStrs, "\r\n");
+        }
+
+
+        System.out.println(reStr);
+        Element root = document.getRootElement();
+        //获取根元素的名称
+        String rootName = root.getName();
+        System.out.println(rootName);
     }
 
     @Test
-    void updatePatent() throws Exception{}
+    void updatePatent1() throws Exception {
+        String a = patentStarApiService.getCnFullXmlApi("201210398357");
+        SAXReader reader = new SAXReader();
+        reader.setEntityResolver(new IgnoreDTDEntityResolver());
+        Reader stringReader = new StringReader(a);
+        Document document = reader.read(stringReader);
+        XPath xpath = document.createXPath("//description//p");
+        List<Element> elements = (List<Element>) xpath.selectNodes(document);
+        if (elements.size() == 0) {
+            xpath = document.createXPath("//business:Description//base:Paragraphs");
+            elements = (List<Element>) xpath.selectNodes(document);
+        }
+        List<String> reStrs = new ArrayList<>();
+        Integer count=1;
+        for (Element item:elements){
+            String claim = item.getText().replaceAll("<br/>", "");
+            if (!claim.trim().equals("技术领域")
+                    && !claim.trim().equals("发明内容")
+                    && !claim.trim().equals("附图说明")
+                    && !claim.trim().equals("具体实施方式")
+                     &&!claim.trim().equals("背景技术"))
+            {String formattedNum = String.format("%04d", count);
+                claim ="["+formattedNum+"]"+claim;
+                count++;
+            }
+                reStrs.add(claim);
+        }
+        String reStr = "";
+        if (reStrs.size() != 0) {
+            reStr = StringUtils.join(reStrs, "\r\n");
+        }
+
+        System.out.println(reStr);
+        Element root = document.getRootElement();
+        //获取根元素的名称
+        String rootName = root.getName();
+        System.out.println(rootName);
+    }
+
 
     @Test
-    void addImportTask() throws  Exception {
-        List<Patent> patentList = esService.searchChild("1",1,10);
+    void addImportTask() throws Exception {
+        List<Patent> patentList = esService.searchChild("1", 1, 10);
         System.out.println(patentList);
         Thread.sleep(1000000);
     }