lwhhszx hai 1 ano
pai
achega
d6eb6e265f
Modificáronse 32 ficheiros con 869 adicións e 75 borrados
  1. 25 0
      src/main/java/cn/cslg/pas/common/model/importTaskModel/ImportTaskText.java
  2. 49 0
      src/main/java/cn/cslg/pas/common/model/importTaskModel/PatentAffair.java
  3. 22 0
      src/main/java/cn/cslg/pas/common/model/importTaskModel/PatentAgent.java
  4. 60 0
      src/main/java/cn/cslg/pas/common/model/importTaskModel/PatentApplicant.java
  5. 25 0
      src/main/java/cn/cslg/pas/common/model/importTaskModel/PatentInstructionText.java
  6. 44 0
      src/main/java/cn/cslg/pas/common/model/importTaskModel/PatentInventor.java
  7. 25 0
      src/main/java/cn/cslg/pas/common/model/importTaskModel/PatentLabel.java
  8. 30 0
      src/main/java/cn/cslg/pas/common/model/importTaskModel/PatentLicensor.java
  9. 30 0
      src/main/java/cn/cslg/pas/common/model/importTaskModel/PatentPledge.java
  10. 26 0
      src/main/java/cn/cslg/pas/common/model/importTaskModel/PatentRight.java
  11. 23 0
      src/main/java/cn/cslg/pas/common/utils/FormatUtil.java
  12. 1 1
      src/main/java/cn/cslg/pas/common/utils/ReadExcelUtils.java
  13. 51 0
      src/main/java/cn/cslg/pas/common/utils/UploadPatentBatchUtil.java
  14. 2 2
      src/main/java/cn/cslg/pas/entity/PatentData.java
  15. 22 0
      src/main/java/cn/cslg/pas/common/vo/PatentWithIdVO.java
  16. 143 0
      src/main/java/cn/cslg/pas/common/vo/UploadParamsVO.java
  17. 0 1
      src/main/java/cn/cslg/pas/controller/CommonController.java
  18. 1 1
      src/main/java/cn/cslg/pas/domain/business/ImportTask.java
  19. 1 1
      src/main/java/cn/cslg/pas/domain/business/ImportTaskCondition.java
  20. 8 8
      src/main/java/cn/cslg/pas/domain/es/Patent.java
  21. 1 1
      src/main/java/cn/cslg/pas/factorys/businessFactory/BusinessFactory.java
  22. 28 7
      src/main/java/cn/cslg/pas/service/business/es/EsService.java
  23. 42 0
      src/main/java/cn/cslg/pas/service/common/ExcuteDataToVOService.java
  24. 1 1
      src/main/java/cn/cslg/pas/service/common/FileManagerService.java
  25. 51 38
      src/main/java/cn/cslg/pas/service/importPatent/GetPatentFromExcelThread.java
  26. 2 2
      src/main/java/cn/cslg/pas/service/importPatent/ImportFromExcelToEsService.java
  27. 11 4
      src/main/java/cn/cslg/pas/service/importPatent/SavePatentToEsThread.java
  28. 41 5
      src/main/java/cn/cslg/pas/service/importPatent/SchedulingTaskService.java
  29. 83 0
      src/main/java/cn/cslg/pas/service/importPatent/TaskThread.java
  30. 0 0
      src/main/resources/jsons/importTaskConfig.json
  31. 8 1
      src/test/java/cn/cslg/pas/service/CommonServiceTests.java
  32. 13 2
      src/test/java/cn/cslg/pas/service/EsServiceTests.java

+ 25 - 0
src/main/java/cn/cslg/pas/common/model/importTaskModel/ImportTaskText.java

@@ -0,0 +1,25 @@
+package cn.cslg.pas.common.model.importTaskModel;
+
+
+import lombok.Data;
+
+/**
+ * <p>
+ * 专利信息标签表
+ * </p>
+ *
+ * @author 王岩
+ * @since 2022-03-07
+ */
+@Data
+
+public class ImportTaskText {
+
+    /**
+     * 标签名称
+     */
+
+    private String name;
+    private String nameOut;
+
+}

+ 49 - 0
src/main/java/cn/cslg/pas/common/model/importTaskModel/PatentAffair.java

@@ -0,0 +1,49 @@
+package cn.cslg.pas.common.model.importTaskModel;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+
+
+/**
+ * <p>
+ * 专利信息事务信息表
+ * </p>
+ *
+ * @author 王岩
+ * @since 2022-02-24
+ */
+@Data
+
+public class PatentAffair {
+
+    /**
+     * 发生日期
+     */
+    @TableField("datetime")
+    private Integer dateTime;
+
+    /**
+     * 法律状态
+     */
+    private String status;
+
+    /**
+     * 简单法律状态
+     */
+    @TableField("simplestatus")
+    private Integer simpleStatus;
+
+    /**
+     * 事务内容(INPADOC法律状态)
+     */
+    private String content;
+
+
+    @Data
+    public static class INPADOC {
+        private String year;
+        private String content;
+        private String country;
+    }
+}

+ 22 - 0
src/main/java/cn/cslg/pas/common/model/importTaskModel/PatentAgent.java

@@ -0,0 +1,22 @@
+package cn.cslg.pas.common.model.importTaskModel;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * <p>
+ * 专利信息代理人表
+ * </p>
+ *
+ * @author 王岩
+ * @since 2022-02-24
+ */
+@Data
+public class PatentAgent {
+    /**
+     * 代理人
+     */
+    private String name;
+
+}

+ 60 - 0
src/main/java/cn/cslg/pas/common/model/importTaskModel/PatentApplicant.java

@@ -0,0 +1,60 @@
+package cn.cslg.pas.common.model.importTaskModel;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 专利信息申请人表
+ * </p>
+ *
+ * @author 王岩
+ * @since 2022-02-24
+ */
+@Data
+
+public class PatentApplicant  {
+    /**
+     * 申请人名称
+     */
+    private String name;
+
+
+
+
+
+    /**
+     * 1.个人 2.企业 3.院校 4.科研机构
+     */
+    private Integer type;
+
+    /**
+     * 国家
+     */
+    private String country;
+
+    /**
+     * 地址
+     */
+    @TableField("address")
+    private String addressStr;
+
+    /**
+     * 省ID
+     */
+    private Integer provinceId;
+
+    /**
+     * 市级ID
+     */
+    private Integer cityId;
+
+    /**
+     * 地区关联表
+     */
+    private Integer areaId;
+
+}

+ 25 - 0
src/main/java/cn/cslg/pas/common/model/importTaskModel/PatentInstructionText.java

@@ -0,0 +1,25 @@
+package cn.cslg.pas.common.model.importTaskModel;
+
+
+
+import lombok.Data;
+
+/**
+ * 专利说明书(文本)
+ * @TableName os_patent_instruction_text
+ */
+@Data
+
+public class PatentInstructionText  {
+
+    /**
+     * 说明书
+     */
+    private String manual;
+
+    /**
+     * 说明书(译)
+     */
+    private String manualOut;
+
+}

+ 44 - 0
src/main/java/cn/cslg/pas/common/model/importTaskModel/PatentInventor.java

@@ -0,0 +1,44 @@
+package cn.cslg.pas.common.model.importTaskModel;
+
+
+import lombok.Data;
+
+
+
+/**
+ * <p>
+ * 专利信息发明人表
+ * </p>
+ *
+ * @author 王岩
+ * @since 2022-02-24
+ */
+@Data
+
+public class PatentInventor  {
+
+    /**
+     * 合并前发明人名称
+     */
+    private String name;
+
+    /**
+     * 地址
+     */
+    private String address;
+
+    /**
+     * 国家
+     */
+    private String country;
+
+
+    /**
+     * 类型【个人、企业、研究机构、院校】
+     */
+    private Integer type;
+
+
+
+
+}

+ 25 - 0
src/main/java/cn/cslg/pas/common/model/importTaskModel/PatentLabel.java

@@ -0,0 +1,25 @@
+package cn.cslg.pas.common.model.importTaskModel;
+
+
+import lombok.Data;
+
+/**
+ * <p>
+ * 专利信息标签表
+ * </p>
+ *
+ * @author 王岩
+ * @since 2022-03-07
+ */
+@Data
+
+public class PatentLabel  {
+
+    /**
+     * 标签名称
+     */
+
+    private String name;
+
+
+}

+ 30 - 0
src/main/java/cn/cslg/pas/common/model/importTaskModel/PatentLicensor.java

@@ -0,0 +1,30 @@
+package cn.cslg.pas.common.model.importTaskModel;
+
+
+import lombok.Data;
+
+/**
+ * <p>
+ * 专利信息许可人表
+ * </p>
+ *
+ * @author 王岩
+ * @since 2022-02-24
+ */
+@Data
+
+public class PatentLicensor  {
+    /**
+     * 被许可人
+     */
+    private String licensee;
+    /**
+     * 许可人
+     */
+    private String licensor;
+    /**
+     * 许可类型
+     */
+    private String type;
+
+}

+ 30 - 0
src/main/java/cn/cslg/pas/common/model/importTaskModel/PatentPledge.java

@@ -0,0 +1,30 @@
+package cn.cslg.pas.common.model.importTaskModel;
+
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * <p>
+ * 专利信息质押质权人表
+ * </p>
+ *
+ * @author 王岩
+ * @since 2022-02-24
+ */
+@Data
+@TableName("os_patent_pledge")
+public class PatentPledge  {
+
+    /**
+     * 质押人
+     */
+    private String pledgor;
+
+    /**
+     * 质权人
+     */
+    private String pledgee;
+
+
+}

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

@@ -0,0 +1,26 @@
+package cn.cslg.pas.common.model.importTaskModel;
+
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * 专利权利要求
+ *
+ * @TableName os_patent_right
+ */
+@Data
+@Accessors(chain = true)
+
+public class PatentRight  {
+
+    /**
+     * 权利要求原文
+     */
+    private String content;
+    /**
+     * 权利要求译文
+     */
+    private String contentOut;
+
+}

+ 23 - 0
src/main/java/cn/cslg/pas/common/utils/FormatUtil.java

@@ -1,7 +1,14 @@
 package cn.cslg.pas.common.utils;
 
+
+
+import org.springframework.beans.BeanWrapper;
+import org.springframework.beans.BeanWrapperImpl;
+
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
+import java.util.HashSet;
+import java.util.Set;
 
 public class FormatUtil {
     public static String toString(Object o) {
@@ -33,4 +40,20 @@ public class FormatUtil {
         return "";
     }
 
+    public static String[] getNullPropertyNames(Object source) {
+        final BeanWrapper src = new BeanWrapperImpl(source);
+        java.beans.PropertyDescriptor[] pds = src.getPropertyDescriptors();
+        Set emptyNames = new HashSet();
+        for (java.beans.PropertyDescriptor pd : pds) {
+            //check if value of this property is null then add it to the collection
+            Object srcValue = src.getPropertyValue(pd.getName());
+            if (srcValue == null) {//特定字符写在此处过滤,收集不需要copy的字段列表。此处过滤null为例
+                emptyNames.add(pd.getName());
+            }
+        }
+        String[] result = new String[emptyNames.size()];
+        return (String[]) emptyNames.toArray(result);
+
+
+    }
 }

+ 1 - 1
src/main/java/cn/cslg/pas/common/utils/ReadExcelUtils.java

@@ -1,6 +1,6 @@
 package cn.cslg.pas.common.utils;
 
-import cn.cslg.pas.entity.PatentData;
+import cn.cslg.pas.common.vo.PatentData;
 import org.apache.poi.hssf.usermodel.*;
 import org.apache.poi.ooxml.POIXMLDocumentPart;
 import org.apache.poi.ss.usermodel.*;

+ 51 - 0
src/main/java/cn/cslg/pas/common/utils/UploadPatentBatchUtil.java

@@ -3,6 +3,7 @@ package cn.cslg.pas.common.utils;
 
 import cn.cslg.pas.common.utils.handler.DataProcessHandler;
 import cn.cslg.pas.common.utils.handler.StringSpecialHandler;
+import cn.cslg.pas.common.vo.UploadParamsVO;
 import cn.cslg.pas.common.vo.UploadSettingVO;
 import org.springframework.stereotype.Component;
 
@@ -184,5 +185,55 @@ public class UploadPatentBatchUtil {
         lst.add(cObj);
         return lst;
     }
+    /**
+     * @param row      任务参数
+     * @param jsonData 处理好后转换为Pojo类的配置文件数据
+     * @return uploadParamsVO 返回一个填充完数据的Pojo类
+     * @date 2022/7/7
+     * @name 处理数据
+     * @description 通过配置项目中的栏位名称和通过解析Excel得到的栏位名称进行比对 并对所属栏位的数据进行分割或其他处理 最后将处理完的数据填充进类中 用于向数据库存入数据
+     */
+    public static UploadParamsVO processData(Map<Object, Object> row, List<UploadSettingVO.Column> jsonData) {
+        UploadParamsVO uploadParamsVO = new UploadParamsVO();
+        List<UploadParamsVO.Field> list = new ArrayList<>();
+        try {
+            for (Object object : row.keySet()) {
+                String key = object.toString();
+                Object value = row.get(key);
+                if (key.contains(":")) {
+                    // TODO: 2022/10/15 添加判空校验
+                    if (value != null && !value.equals("")) {
+                        UploadParamsVO.Field field = new UploadParamsVO.Field();
+                        StringSpecialHandler stringSpecialHandler = new StringSpecialHandler();
+                        field.setKey(key);
+                        field.setFieldList((List<String>) stringSpecialHandler.processData(value.toString(), "\\\n"));
+                        list.add(field);
+                    }
+                }
+                if (StringUtils.isNotNull(value) && !value.equals("") && !value.equals("-") && !value.equals("\\")) {
+                    //将配置项与Excel栏位进行比对
+                    List<UploadSettingVO.Column> temVOColumn = getColumn(jsonData, key);
+                    for (UploadSettingVO.Column column : temVOColumn) {
+                        //创建处理对象
+                        Object processData = DataProcessHandler.getData(column.getHandler(), column.getJarOrClassPath());
+                        //调用处理对象中的对应处理方法对Excel中的数据进行处理
+                        Object getProcessData = null;
+                        if (processData != null) {
+                            Method method = processData.getClass().getMethod("processData", Object.class, Object.class);
+                            getProcessData = method.invoke(processData, value.toString(), column.getSplitSymbol());
+                        }
+                        //将格式化后的数据装配到VO类
+                        assemblyObject(uploadParamsVO, column.getColumn(), getProcessData);
 
+                    }
+                }
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        //数据装配完毕 准备返回Service层 进行数据库操作
+        uploadParamsVO.setCustomerFieldList(list);
+        return uploadParamsVO;
+    }
 }

+ 2 - 2
src/main/java/cn/cslg/pas/entity/PatentData.java

@@ -1,4 +1,4 @@
-package cn.cslg.pas.entity;
+package cn.cslg.pas.common.vo;
 
 import lombok.Data;
 import lombok.experimental.Accessors;
@@ -22,4 +22,4 @@ public class PatentData {
      */
     private PictureData pictureData;
 
-}
+}

+ 22 - 0
src/main/java/cn/cslg/pas/common/vo/PatentWithIdVO.java

@@ -0,0 +1,22 @@
+package cn.cslg.pas.common.vo;
+
+import cn.cslg.pas.domain.es.Patent;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.apache.poi.ss.usermodel.PictureData;
+
+import java.util.Map;
+
+/**
+ * @Author chenyu
+ * @Date 2023/5/31
+ */
+@Accessors(chain = true)
+@Data
+public class PatentWithIdVO {
+private String id;
+    /**
+     * 专利摘要附图
+     */
+    private Patent patent;
+}

+ 143 - 0
src/main/java/cn/cslg/pas/common/vo/UploadParamsVO.java

@@ -0,0 +1,143 @@
+package cn.cslg.pas.common.vo;
+
+
+import cn.cslg.pas.common.model.importTaskModel.*;
+
+import cn.cslg.pas.domain.es.Patent;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.apache.poi.ss.usermodel.PictureData;
+
+import java.util.List;
+
+/**
+ * @author 沈永艺
+ * @date 2022/7/1
+ * @description 用于批量导入数据的工具类
+ */
+@Accessors(chain = true)
+@Data
+public class UploadParamsVO {
+    /**
+     * 专利
+     */
+    private Patent patent;
+
+    /**
+     * 标题
+     */
+    private ImportTaskText title;
+
+    /**
+     * 摘要
+     */
+    private ImportTaskText abstractStr;
+    /**
+     * 法律状态
+     */
+    private String patentSimpleStatus;
+
+    /**
+     * 权利要求
+     */
+    private PatentRight patentRight;
+    /**
+     * 独立权要
+     */
+    private String selfContent;
+    /**
+     * 说明书(文本)
+     */
+    private PatentInstructionText patentInstructionText;
+
+    /**
+     * 代理人
+     */
+    private List<PatentAgent> patentAgentList;
+
+    /**
+     * 质押质权人
+     */
+    private List<PatentPledge> patentPledgeList;
+
+    /**
+     * 许可人
+     */
+    private List<PatentLicensor> patentLicensorList;
+
+    /**
+     * 简单同族
+     */
+    private List<String> simpleFamily;
+    private List<String> patSnapFamily;
+    private List<String> inpadocFamily;
+
+    /**
+     * 发明人
+     */
+    private List<PatentInventor> patentInventorList;
+    private String firstName;
+    private String firstAddress;
+
+    /**
+     * 申请人
+     */
+    private List<PatentApplicant> patentApplicantList;
+    //权利人
+    private List<String> patentApplicantCurrentName;
+    private List<String> patentApplicantStandardCurrentName;
+    //申请人
+    private List<String> patentApplicantOriginalName;
+    private List<String> patentApplicantStandardOriginalName;
+    //权利人地址
+    private List<String> patentApplicantCurrentAddress;
+    private List<String> patentApplicantCurrentCountry;
+    private String patentApplicantCurrentFirstAddress;
+    //申请人地址
+    private List<String> patentApplicantOriginalAddress;
+    private List<String> patentApplicantOriginalCountry;
+
+    /**
+     * 标签
+     */
+    private List<PatentLabel> patentLabelList;
+
+    /**
+     * 分类号关联
+     */
+    private String mainUpc;
+    /**
+     * 主分类号
+     */
+    private String mainIpc;
+    private List<String> cpcList;
+    private List<String> locList;
+    private List<String> upcList;
+    private List<String> ipcList;
+
+    /**
+     * 事务信息
+     */
+    private PatentAffair patentAffair;
+    private String simpleStatus;
+
+    /**
+     * 自定义字段
+     */
+    private List<Field> customerFieldList;
+
+    @Data
+    @Accessors(chain = true)
+    public static class Field {
+        private String key;
+        private List<String> fieldList;
+    }
+
+    /**
+     * 专利摘要附图(用于Excel导入存放附图)
+     */
+    private PictureData pictureData;
+
+
+
+}

+ 0 - 1
src/main/java/cn/cslg/pas/controller/CommonController.java

@@ -12,7 +12,6 @@ import cn.cslg.pas.common.vo.business.ScenarioVO;
 import cn.cslg.pas.domain.business.AssoScenarioMatter;
 import cn.cslg.pas.domain.business.Matter;
 import cn.cslg.pas.domain.business.SystemDict;
-import cn.cslg.pas.factorys.businessFactory.BusinessFactory;
 import cn.cslg.pas.service.business.AssoScenarioMatterService;
 import cn.cslg.pas.service.business.CommonService;
 import cn.cslg.pas.service.business.ScenarioService;

+ 1 - 1
src/main/java/cn/cslg/pas/domain/business/ImportTask.java

@@ -17,7 +17,7 @@ public class ImportTask extends BaseEntity<ImportTask> {
     /**
      * 条件
      */
-    @TableField(value = "condition")
+    @TableField(value = "'condition'")
     private String condition;
 
     /**

+ 1 - 1
src/main/java/cn/cslg/pas/domain/business/ImportTaskCondition.java

@@ -63,7 +63,7 @@ public class ImportTaskCondition extends BaseEntity<ImportTaskCondition> {
     /**
      * 条件
      */
-    @TableField(value = "condition")
+    @TableField(value = "'condition'")
     private String condition;
 
     /**

+ 8 - 8
src/main/java/cn/cslg/pas/domain/es/Patent.java

@@ -75,7 +75,7 @@ public class Patent {
      * 实审日
      */
     @JsonProperty("examination_date")
-    private Date examinationDate;
+    private Integer examinationDate;
 
     /**
      * 公开号
@@ -87,7 +87,7 @@ public class Patent {
      * 公开日
      */
     @JsonProperty("public_date")
-    private Date publicDate;
+    private Integer publicDate;
 
     /**
      * 申请号
@@ -99,19 +99,19 @@ public class Patent {
      * 申请日
      */
     @JsonProperty("app_date")
-    private Date appDate;
+    private Integer appDate;
 
     /**
      * 授权号
      */
     @JsonProperty("grant_no")
-    private Date grantNo;
+    private String grantNo;
 
     /**
      * 授权日
      */
     @JsonProperty("grant_date")
-    private Date grantDate;
+    private Integer grantDate;
 
     /**
      * 优先权
@@ -200,7 +200,7 @@ public class Patent {
      * pct申请号
      */
     @JsonProperty("pctappdate")
-    private String pctAppDate ;
+    private Integer pctAppDate ;
 
     /**
      * pct申请日
@@ -212,13 +212,13 @@ public class Patent {
      * pct进入日期
      */
     @JsonProperty("pctenterdate")
-    private Date pctEnterDate ;
+    private Integer pctEnterDate ;
 
     /**
      * pct公开日
      */
     @JsonProperty("pctpubdate")
-    private Date pctPubDate ;
+    private Integer pctPubDate ;
 
     /**
      * pct公开号

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

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

+ 28 - 7
src/main/java/cn/cslg/pas/service/business/es/EsService.java

@@ -1,13 +1,12 @@
 package cn.cslg.pas.service.business.es;
 
+import cn.cslg.pas.common.vo.PatentWithIdVO;
 import cn.cslg.pas.domain.School;
 import cn.cslg.pas.domain.es.Patent;
 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.core.IndexResponse;
-import co.elastic.clients.elasticsearch.core.SearchRequest;
-import co.elastic.clients.elasticsearch.core.SearchResponse;
+import co.elastic.clients.elasticsearch.core.*;
 import co.elastic.clients.elasticsearch.core.search.Hit;
 import co.elastic.clients.elasticsearch.core.search.TotalHits;
 import com.github.pagehelper.util.StringUtil;
@@ -17,14 +16,15 @@ import org.springframework.stereotype.Service;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 
 @Service
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class EsService {
     private final ElasticsearchClient client;
-
     /**
      * @param patent
      * @throws Exception
@@ -47,9 +47,9 @@ public class EsService {
      * @return
      * @throws Exception
      */
-    public String getIdByPatentNo(String patentNo) throws Exception {
+    public PatentWithIdVO getIdByPatentNo(String patentNo) throws Exception {
+        PatentWithIdVO patentWithIdVO =null;
         String id = null;
-
         SearchResponse<Patent> response = client.search(
                 s -> s.index("patent")
                         .query(
@@ -64,8 +64,12 @@ public class EsService {
         List<Hit<Patent>> hits = response.hits().hits();
         if (hits != null && hits.size() > 0) {
             id = hits.get(0).id();
+            Patent patent =hits.get(0).source();
+            patentWithIdVO =new PatentWithIdVO();
+            patentWithIdVO.setPatent(patent);
+            patentWithIdVO.setId(id);
         }
-        return id;
+        return patentWithIdVO;
     }
 
 
@@ -105,4 +109,21 @@ public class EsService {
         return list;
     }
 
+
+    public Integer updateDocument(Patent patent,String id){
+        UpdateRequest<Patent,Patent> req;
+        req = UpdateRequest.of(
+                b-> b.index("patent").id(id)
+                        .doc(patent)
+        );
+        try {
+            client.update(req,Patent.class);
+            return  1;
+        } catch (IOException e) {
+            return -1;
+        }
+    }
 }
+
+
+

+ 42 - 0
src/main/java/cn/cslg/pas/service/common/ExcuteDataToVOService.java

@@ -0,0 +1,42 @@
+package cn.cslg.pas.service.common;
+
+
+import cn.cslg.pas.common.utils.UploadPatentBatchUtil;
+
+import cn.cslg.pas.common.vo.PatentData;
+import cn.cslg.pas.common.vo.UploadParamsVO;
+import cn.cslg.pas.common.vo.UploadSettingVO;
+import org.apache.poi.ss.usermodel.PictureData;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 将专利源数据转换为专利VO实体类业务层
+ *
+ * @Author chenyu
+ * @Date 2023/5/31
+ */
+@Service
+public class ExcuteDataToVOService {
+
+    /**
+     * 将Eccel文件指定行专利数据装配转换为专利实体类
+     *
+     * @param patentData 专利数据
+     * @param jsonData   数据源配置
+     * @return 返回专利实体类
+     */
+    public UploadParamsVO fileToPatentVO(PatentData patentData, List<UploadSettingVO.Column> jsonData) {
+        //取出专利内容数据(除了摘要附图),(key:表头如 "公开(公告)号"  value:表头对应内容如 "CN1307082B")
+        Map<Object, Object> patentMap = patentData.getMap();
+        //取出专利摘要附图
+        PictureData pictureData = patentData.getPictureData();
+        //专利基础数据装配(与数据源配置文件对象进行匹配装载)
+        UploadParamsVO uploadParamsVO = UploadPatentBatchUtil.processData(patentMap,jsonData);
+        uploadParamsVO.setPictureData(pictureData);
+        return uploadParamsVO;
+    }
+
+}

+ 1 - 1
src/main/java/cn/cslg/pas/service/common/FileManagerService.java

@@ -35,7 +35,7 @@ public class FileManagerService {
     @Value("${FMSUrl}")
     private String FMSUrl;
     @Value("${FileSource}")
-    private Integer FileSource;
+    private String FileSource;
 
     /**
      * 调用文件系统上传文件接口

+ 51 - 38
src/main/java/cn/cslg/pas/service/importPatent/GetPatentFromExcelThread.java

@@ -3,30 +3,37 @@ package cn.cslg.pas.service.importPatent;
 import cn.cslg.pas.common.model.cronModel.SystemFile;
 import cn.cslg.pas.common.utils.ReadExcelUtils;
 import cn.cslg.pas.common.vo.ImportTaskAMVO;
+import cn.cslg.pas.common.vo.PatentData;
+import cn.cslg.pas.common.vo.UploadParamsVO;
 import cn.cslg.pas.common.vo.UploadSettingVO;
 import cn.cslg.pas.domain.es.Patent;
+import cn.cslg.pas.service.common.ExcuteDataToVOService;
 import cn.cslg.pas.service.common.ExcuteUploadSettingService;
 import cn.cslg.pas.service.common.FileManagerService;
 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.Autowired;
+import org.springframework.beans.factory.annotation.Configurable;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
-import java.io.File;
-import java.io.IOException;
+import java.io.*;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
-public class GetPatentFromExcelThread extends Thread{
- private ImportTaskAMVO importTaskAMVO;
- @Autowired
- private FileManagerService fileManagerService;
+@Configurable
+public class GetPatentFromExcelThread extends Thread {
+    private ImportTaskAMVO importTaskAMVO;
+    private ApplicationContext applicationContext;
+    private SavePatentToEsThread savePatentToEsThread;
+
 
- @Autowired
- private ExcuteUploadSettingService excuteUploadSettingService;
- private SavePatentToEsThread savePatentToEsThread;
     @Override
     public void run() {
         try {
+            FileManagerService fileManagerService = applicationContext.getBean(FileManagerService.class);
 
             String res = fileManagerService.getSystemFileFromFMS(Arrays.asList(importTaskAMVO.getFileGuid()));
             List<SystemFile> systemFiles = JSONArray.parseArray(res, SystemFile.class);
@@ -35,49 +42,55 @@ public class GetPatentFromExcelThread extends Thread{
             //调用文件系统取出文件接口,获得文件流
             byte[] bytes = fileManagerService.downloadSystemFileFromFMS(importTaskAMVO.getFileGuid());
             //创建临时文件tempFile,并将文件读取到tempFile
-            File tempFile = File.createTempFile(systemFile.getFileName()+"temp", suffix);
+            File tempFile = File.createTempFile(systemFile.getFileName() + "temp", suffix);
+            try (
+                    InputStream inputStream = new ByteArrayInputStream(bytes);
+                    FileOutputStream outputStream = new FileOutputStream(tempFile)
+            ) {
+                IOUtils.copy(inputStream, outputStream); // 将输入流复制到临时文件
+            }
             Integer total = importTaskAMVO.getAllNum();
             Integer lastIndex = importTaskAMVO.getSuccessNum();
             Integer sourceId = importTaskAMVO.getSourceId();
             //解析数据源类,通过数据来源id(如1:智慧芽)解析数据源配置文件,获得数据源配置文件对象jsonData
+            ExcuteDataToVOService excuteDataToVOService =applicationContext.getBean(ExcuteDataToVOService.class);
+            ExcuteUploadSettingService excuteUploadSettingService =applicationContext.getBean(ExcuteUploadSettingService.class);
             List<UploadSettingVO.Column> jsonData = excuteUploadSettingService.ExcuteUploadSetting(sourceId.toString());
             //解析Excel文件获得工作簿
             Sheet sheet = ReadExcelUtils.readExcel(tempFile);
             //遍历专利总数量,在循环中将专利一个一个存入消费者专利队列
-//            for (int i = lastIndex; i < total; i++) {
-//                //判断若任务状态为已暂停,则结束生产
-//                if (pTaskId.equals(task.getId()) && pTaskStatus == 4) {
-//                    return;
-//                }
-//                PatentData patentData = ReadExcelUtils.readExcelOneRow(tempFile, sheet, i + 1);
-//                //调用装载数据类(根据数据源配置文件对象和专利源数据生成专利数据)
-//                UploadParamsVO uploadParamsVO = excuteDataToVOService.fileToPatentVO(patentData, jsonData);
-//                //如果是中国专利,就将申请号作为专利号
-//                if (uploadParamsVO.getPatent().getPatentNo().contains("CN")) {
-//                    uploadParamsVO.getPatent().setPatentNo(uploadParamsVO.getPatent().getApplicationNo());  //将申请号设为专利号patentNo
-//                }
-//
-//                //专利丢入消费者队列,并唤醒消费者线程
-//                pantentQueueService.patentToQueue(task, uploadParamsVO);
-//            }
+            for (int i = lastIndex; i < total; i++) {
+
+                PatentData patentData = ReadExcelUtils.readExcelOneRow(tempFile, sheet, i + 1);
+                //调用装载数据类(根据数据源配置文件对象和专利源数据生成专利数据)
+                UploadParamsVO uploadParamsVO = excuteDataToVOService.fileToPatentVO(patentData, jsonData);
+
 
+                //专利丢入消费者队列,并唤醒消费者线程
+                savePatentToEsThread.awakeTask(uploadParamsVO.getPatent());
+            }
+            savePatentToEsThread.setIfProductAll(true);
             //删除临时文件tempFile
             new File(tempFile.getPath()).delete();
-            for(int i =0;i<10;i++)
-            {
-                Thread.sleep(5000);
-                Patent patent =new Patent();
-                patent.setPatentNo("CN"+i+"task"+importTaskAMVO.getId());
-                System.out.println("task"+importTaskAMVO.getId()+"getPatent"+i);
-                savePatentToEsThread.awakeTask(patent);
-            }
-savePatentToEsThread.setIfProductAll(true);
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
-    public GetPatentFromExcelThread(ImportTaskAMVO importTaskAMVO,SavePatentToEsThread savePatentToEsThread){
-        this.importTaskAMVO =importTaskAMVO;
-        this.savePatentToEsThread =savePatentToEsThread;
+
+    public GetPatentFromExcelThread(ImportTaskAMVO importTaskAMVO, SavePatentToEsThread savePatentToEsThread,ApplicationContext applicationContext) {
+        this.importTaskAMVO = importTaskAMVO;
+        this.savePatentToEsThread = savePatentToEsThread;
+        this.applicationContext= applicationContext;
+    }
+
+
+    public void loadPatent(Patent patent) {
+        //如果是中国专利,就将申请号作为专利号
+        if (patent.getPatentNo().contains("CN")) {
+            patent.setPatentNo(patent.getAppNo());  //将申请号设为专利号patentNo
+        }
+
+        //装载权利要求
+
     }
 }

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

@@ -11,8 +11,8 @@ public class ImportFromExcelToEsService implements PatentImportImp {
 private TaskThread taskThread;
     @Override
     public void startPatentThread() {
-        SavePatentToEsThread savePatentToEsThread = new SavePatentToEsThread(taskThread);
-        GetPatentFromExcelThread getPatentFromExcelThread = new GetPatentFromExcelThread(taskThread.getImportTaskAMVO(), savePatentToEsThread);
+        SavePatentToEsThread savePatentToEsThread = new SavePatentToEsThread(taskThread,taskThread.getApplicationContext());
+        GetPatentFromExcelThread getPatentFromExcelThread = new GetPatentFromExcelThread(taskThread.getImportTaskAMVO(), savePatentToEsThread,taskThread.getApplicationContext());
         savePatentToEsThread.start();
         getPatentFromExcelThread.start();
     }

+ 11 - 4
src/main/java/cn/cslg/pas/service/importPatent/SavePatentToEsThread.java

@@ -2,8 +2,10 @@ package cn.cslg.pas.service.importPatent;
 
 import cn.cslg.pas.common.vo.ImportTaskAMVO;
 import cn.cslg.pas.domain.es.Patent;
+import cn.cslg.pas.service.business.es.EsService;
 import cn.cslg.pas.service.common.FileManagerService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -14,6 +16,7 @@ import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
 public class SavePatentToEsThread extends Thread {
+    private ApplicationContext applicationContext;
     private List<Patent> patents = new ArrayList<>();
     private final Lock taskLock = new ReentrantLock();
     private final Condition taskCondition = taskLock.newCondition();
@@ -28,25 +31,29 @@ public class SavePatentToEsThread extends Thread {
                     taskLock.lock();
                     taskCondition.await();
                 }
-         Thread.sleep(7000);
              Patent patent=   patents.remove(0);
+                //根据专利号查询专利
+
+                EsService esService =applicationContext.getBean(EsService.class);
+                esService.addPatent(patent);
                 System.out.println("patent"+patent.getPatentNo()+"done");
             } catch (Exception e) {
+                System.out.println(e);
             }
         }
       taskThread.awakeTaskThread();
     }
 
-    public SavePatentToEsThread(TaskThread taskThread) {
+    public SavePatentToEsThread(TaskThread taskThread, ApplicationContext applicationContext) {
         this.taskThread=taskThread;
-
+        this.applicationContext =applicationContext;
     }
 
 
     public void awakeTask(Patent patent) {
         patents.add(patent);
         if (taskLock.tryLock()) {
-            //taskLock.lock();
+
             taskCondition.signalAll();
             taskLock.unlock();
         }

+ 41 - 5
src/main/java/cn/cslg/pas/service/importPatent/SchedulingTaskService.java

@@ -3,9 +3,13 @@ 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.domain.business.ImportTask;
+import cn.cslg.pas.domain.business.ImportTaskCondition;
+import cn.cslg.pas.service.business.ImportTaskConditionService;
 import cn.cslg.pas.service.business.ImportTaskService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -13,14 +17,17 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ThreadPoolExecutor;
+import java.util.stream.Collectors;
 
 @Service
 public class SchedulingTaskService {
     @Autowired
     private ImportTaskService importTaskService;
-
+    @Autowired
+    private ApplicationContext applicationContext;
     private ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(Constants.MAX_IMPORT_TASK_COUNT);
-
+    @Autowired
+    private ImportTaskConditionService importTaskConditionService;
 
     public void startTask() {
         Integer freeCount = Constants.MAX_IMPORT_TASK_COUNT - executor.getActiveCount();
@@ -33,10 +40,10 @@ public class SchedulingTaskService {
                     .orderByDesc(ImportTask::getState);
             List<ImportTask> importTaskList = importTaskService.list(queryWrapper);
             if (importTaskList.size() > 0) {
-                //TODO 装载任务信息
-                List<ImportTaskAMVO> importTaskAMVOS =new ArrayList<>();
+                // 装载任务信息
+                List<ImportTaskAMVO> importTaskAMVOS = this.loadTaskAMVOS(importTaskList);
                 importTaskAMVOS.forEach(item -> {
-                    TaskThread taskThread = new TaskThread(item);
+                    TaskThread taskThread = new TaskThread(item,applicationContext);
                     executor.execute(taskThread);
                 });
             }
@@ -44,4 +51,33 @@ 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<>();
+        taskConditionIds =importTaskList.stream().map(ImportTask::getId).collect(Collectors.toList());
+        //根据taskid查询taskCondition
+        if (taskConditionIds.size() != 0) {
+            LambdaQueryWrapper<ImportTaskCondition> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.in(ImportTaskCondition::getId, taskConditionIds);
+            importTaskConditions = importTaskConditionService.list(queryWrapper);
+
+        }
+        for (ImportTask importTask : importTaskList) {
+            ImportTaskCondition importTaskCondition = importTaskConditions.stream().filter(item -> item.getId().equals(importTask.getImportTaskConditionId())).findFirst().orElse(null);
+            ImportTaskAMVO importTaskAMVO = new ImportTaskAMVO();
+            BeanUtils.copyProperties(importTask, importTaskAMVO);
+            if(importTaskCondition!=null) {
+                importTaskAMVO.setFileGuid(importTaskCondition.getFileGuid());
+                importTaskAMVO.setSourceId(importTaskCondition.getSourceId());
+            }
+            importTaskAMVOS.add(importTaskAMVO);
+
+        }
+        return importTaskAMVOS;
+
+
+    }
 }

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

@@ -0,0 +1,83 @@
+package cn.cslg.pas.service.importPatent;
+
+import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.model.cronModel.ImportTaskConfig;
+import cn.cslg.pas.common.model.cronModel.OrderConfig;
+import cn.cslg.pas.common.vo.ImportTaskAMVO;
+import cn.cslg.pas.factorys.PatentImportFactory.PatentImportFactory;
+import cn.cslg.pas.factorys.PatentImportFactory.PatentImportImp;
+import cn.cslg.pas.service.business.CommonService;
+import cn.cslg.pas.service.business.ImportTaskService;
+import com.alibaba.fastjson.JSON;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Configurable;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Component;
+
+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 TaskThread extends Thread {
+    @Autowired
+    SchedulingTaskService importTaskAdd;
+
+    private ApplicationContext applicationContext;
+    private final Lock taskThreadLock = new ReentrantLock();
+    private final Condition taskThreadCondition = taskThreadLock.newCondition();
+    private final List<Integer> importTaskQueue = new ArrayList<>();
+    private ImportTaskAMVO importTaskAMVO;
+
+
+
+    /**
+     * 从任务队列取出并执行任务
+     */
+    public TaskThread(ImportTaskAMVO importTaskAMVO,ApplicationContext applicationContext) {
+        this.importTaskAMVO = importTaskAMVO;
+        this.applicationContext =applicationContext;
+    }
+
+    @Override
+    public void run() {
+        //TODO 判断任务的类型 调用不同线程(可做工厂类)
+        String json = CommonService.readJsonFile(Constants.IMPORT_TASK_CONFIG + ".json");
+        List<ImportTaskConfig> configs = JSON.parseArray(json, ImportTaskConfig.class);
+        PatentImportFactory patentImportFactory =applicationContext.getBean(PatentImportFactory.class);
+        //根据任务类型使用不同的导入类
+    ImportTaskConfig config =    configs.stream().filter(item -> item.getTaskType().equals(importTaskAMVO.getType()) && item.getImportTo().equals(Constants.IMPORT_PATENT_TO)).findFirst().orElse(null);
+        PatentImportImp patentImportImp= patentImportFactory.getClass(config.getImportClass());
+        patentImportImp.setTaskThread(this);
+        patentImportImp.startPatentThread();
+        taskThreadLock.lock();
+        try {
+            taskThreadCondition.await();
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+//        importTaskAdd.startTask();
+        System.out.println("任务结束");
+    }
+
+
+    public void awakeTaskThread() {
+
+        if (taskThreadLock.tryLock()) {
+            //taskLock.lock();
+            taskThreadCondition.signalAll();
+            taskThreadLock.unlock();
+        }
+    }
+
+    public ImportTaskAMVO getImportTaskAMVO() {
+        return this.importTaskAMVO;
+    }
+
+    public ApplicationContext getApplicationContext() {
+        return this.applicationContext;
+    }
+    ;
+
+}

src/main/resources/jsons/cronJsons/importTaskConfig.json → src/main/resources/jsons/importTaskConfig.json


+ 8 - 1
src/test/java/cn/cslg/pas/service/CommonServiceTests.java

@@ -10,6 +10,7 @@ import cn.cslg.pas.controller.CommonController;
 import cn.cslg.pas.controller.EventController;
 import cn.cslg.pas.domain.business.Matter;
 import cn.cslg.pas.service.business.CommonService;
+import cn.cslg.pas.service.importPatent.SchedulingTaskService;
 import cn.cslg.pas.service.permissions.PermissionService;
 import com.alibaba.fastjson.JSON;
 import org.assertj.core.internal.Arrays;
@@ -34,6 +35,8 @@ public class CommonServiceTests {
     private PermissionService permissionService;
     @Autowired
     private CommonController commonController;
+    @Autowired
+    private SchedulingTaskService schedulingTaskService;
     @Test
     void test() throws Exception {
      String aa=   permissionService.getPersonIdByNamePCS("朱",false);
@@ -76,7 +79,11 @@ public class CommonServiceTests {
 //        List<Matter> matterIds = commonController.queryMatter(scenarioIds);
 //        System.out.println(matterIds);
     }
-
+    @Test
+    void testImportTask() throws IOException, InterruptedException {
+        schedulingTaskService.startTask();
+         Thread.sleep(1000000);
+    }
 
 
 }

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

@@ -1,11 +1,14 @@
 package cn.cslg.pas.service;
 
+import cn.cslg.pas.common.utils.FormatUtil;
 import cn.cslg.pas.common.utils.RedisUtil;
+import cn.cslg.pas.common.vo.PatentWithIdVO;
 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 org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 
@@ -33,10 +36,18 @@ public class EsServiceTests {
 
     @Test
     void getPatentByPatentNo() throws  Exception {
-        String a  = esService.getIdByPatentNo("CN202023204739.4");
-    System.out.println(a);
+        //根据专利号获得id
+        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());
+    System.out.println();
     }
 
+    @Test
+    void updatePatent() throws Exception{}
 
     @Test
     void addImportTask() throws  Exception {