Browse Source

拆分特征优化

lwhhszx 1 year ago
parent
commit
1d65f7dc6a
21 changed files with 414 additions and 273 deletions
  1. 6 4
      src/main/java/cn/cslg/pas/common/dto/PatentColumnDTO.java
  2. 1 0
      src/main/java/cn/cslg/pas/common/dto/UploadPatentWebDTO.java
  3. 30 16
      src/main/java/cn/cslg/pas/common/utils/MathUtils.java
  4. 3 0
      src/main/java/cn/cslg/pas/common/vo/ImportTaskAMVO.java
  5. 83 135
      src/main/java/cn/cslg/pas/service/business/FeatureService.java
  6. 3 0
      src/main/java/cn/cslg/pas/service/business/ImportTaskService.java
  7. 1 1
      src/main/java/cn/cslg/pas/service/business/es/EsService.java
  8. 5 4
      src/main/java/cn/cslg/pas/service/common/MessageService.java
  9. 46 2
      src/main/java/cn/cslg/pas/service/common/PatentStarApiService.java
  10. 6 3
      src/main/java/cn/cslg/pas/service/importPatent/GetCataloguingFromWebThread.java
  11. 1 1
      src/main/java/cn/cslg/pas/service/importPatent/GetPatentFromExcelThread.java
  12. 6 5
      src/main/java/cn/cslg/pas/service/importPatent/GetPatentPDFFromWebThread.java
  13. 2 4
      src/main/java/cn/cslg/pas/service/importPatent/GetPatentPictureFromExcelThread.java
  14. 6 5
      src/main/java/cn/cslg/pas/service/importPatent/GetPatentPictureFromWebThread.java
  15. 6 2
      src/main/java/cn/cslg/pas/service/importPatent/GetRightAndFullTextFromWebThread.java
  16. 50 48
      src/main/java/cn/cslg/pas/service/importPatent/ImportFromWebToEsService.java
  17. 32 0
      src/main/java/cn/cslg/pas/service/importPatent/PatentProcess.java
  18. 11 17
      src/main/java/cn/cslg/pas/service/importPatent/SavePatentToEsThread.java
  19. 100 19
      src/main/java/cn/cslg/pas/service/importPatent/TaskThread.java
  20. 2 2
      src/main/resources/jsons/patent.json
  21. 14 5
      src/test/java/cn/cslg/pas/service/CommonServiceTests.java

+ 6 - 4
src/main/java/cn/cslg/pas/common/dto/PatentColumnDTO.java

@@ -5,6 +5,7 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.util.Date;
 import java.util.List;
 
 @Data
@@ -19,7 +20,8 @@ public class PatentColumnDTO {
     /**
      * 标题
      */
-    private List<Text> title;
+    private String title;
+    private String titleOut;
 
     /**
      * 公开说明书文本
@@ -69,7 +71,7 @@ public class PatentColumnDTO {
     /**
      * 公开日
      */
-    private Integer publicDate;
+    private Date publicDate;
 
     /**
      * 申请号
@@ -79,7 +81,7 @@ public class PatentColumnDTO {
     /**
      * 申请日
      */
-    private Integer appDate;
+    private Date appDate;
 
     /**
      * 授权号
@@ -89,7 +91,7 @@ public class PatentColumnDTO {
     /**
      * 授权日
      */
-    private String grantDate;
+    private Date grantDate;
 
     /**
      * 优先权

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

@@ -17,4 +17,5 @@ public class UploadPatentWebDTO {
     private Integer totalCounter;
     private PictureData pictureData;
     private Integer haveSaveCounter;
+    private Integer index;
 }

+ 30 - 16
src/main/java/cn/cslg/pas/common/utils/MathUtils.java

@@ -1,6 +1,7 @@
 package cn.cslg.pas.common.utils;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * @Author chenyu
@@ -13,40 +14,53 @@ public class MathUtils {
         value = bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
         return value;
     }
-    public static String fun(int n,int num) {
+
+    public static String fun(int n, int num) {
         // n 表示目标进制, num 要转换的值
-        String str= "";
-        int yushu ;      // 保存余数
+        String str = "";
+        int yushu;      // 保存余数
         int shang = num;      // 保存商
-        while (shang>0) {
-            yushu = shang %n;
-            shang = shang/n;
+        while (shang > 0) {
+            yushu = shang % n;
+            shang = shang / n;
 
             // 10-15 -> a-f
-            if(yushu>9) {
-                str =(char)('a'+(yushu-10)) + str;
-            }else {
-                str = yushu+str;
+            if (yushu > 9) {
+                str = (char) ('a' + (yushu - 10)) + str;
+            } else {
+                str = yushu + str;
             }
         }
 
         return str;
     }
-    public static  int BinaryToDecimal(int binaryNumber){
+
+    public static int BinaryToDecimal(int binaryNumber) {
 
         int decimal = 0;
         int p = 0;
-        while(true){
-            if(binaryNumber == 0){
+        while (true) {
+            if (binaryNumber == 0) {
                 break;
             } else {
-                int temp = binaryNumber%10;
-                decimal += temp*Math.pow(2, p);
-                binaryNumber = binaryNumber/10;
+                int temp = binaryNumber % 10;
+                decimal += temp * Math.pow(2, p);
+                binaryNumber = binaryNumber / 10;
                 p++;
             }
         }
         return decimal;
     }
 
+    public static Integer getNotNullMinNum(List<Integer> nums) {
+        Integer min = 100000;
+        for (Integer i : nums) {
+            if (i != null) {
+                if (i < min) {
+                    min = i;
+                }
+            }
+        }
+        return min;
+    }
 }

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

@@ -96,4 +96,7 @@ public class ImportTaskAMVO {
 
     private Integer shouldSaveMessageCounter;
     private Integer haveSaveMessageCounter;
+
+
+    private Integer patentMessageShouldSaveCounter;
 }

+ 83 - 135
src/main/java/cn/cslg/pas/service/business/FeatureService.java

@@ -49,14 +49,6 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Feature> {
         Integer taskId = splitVO.getTaskId();
         Boolean ifReSplit = splitVO.getIfReSplit();
 
-        //当未传入拆分信息时,设置默认值
-        if (splitBy == null) {
-            splitBy = 0;
-        }
-
-        if (splitType == null) {
-            splitType = 0;
-        }
 //        PersonnelVO personnelVO = cacheUtils.getLoginUser(StpUtil.getLoginIdAsInt());
         PersonnelVO personnelVO = new PersonnelVO();
         personnelVO.setId("1");
@@ -72,29 +64,7 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Feature> {
 
         //查询拆分下的权要
         List<RePatentClaim> patentRights = this.getRightListByNo(patentNo);
-        List<String> flags = new ArrayList<>();
 
-        List<Integer> partRightSorts = new ArrayList<>();  //权要sorts
-        if (splitBy == 0) {  //当splitBy=0时仅仅根据“,”拆解
-            flags.add(",");
-            flags.add(",");
-        } else if (splitBy == 1) {  //当splitBy=1时仅仅根据“;“拆解
-            flags.add(";");
-            flags.add(";");
-        } else if (splitBy == 2) {  //当splitBy=2时根据“;“和”,”拆解
-            flags.add(";");
-            flags.add(";");
-            flags.add(",");
-            flags.add(",");
-
-            if (splitType.equals(0)) {  //当splitType=0仅拆解主权要
-                partRightSorts = patentRights.stream().filter(item -> item.getType().equals(1)).map(RePatentClaim::getSort).collect(Collectors.toList());
-            } else if (splitType.equals(1)) {  //当splitType=1拆解全部权要
-                partRightSorts = patentRights.stream().map(RePatentClaim::getSort).collect(Collectors.toList());
-            }
-        }
-
-        //
         LambdaQueryWrapper<PatentSplitMessage> splitWrapper = new LambdaQueryWrapper<>();
         splitWrapper.eq(PatentSplitMessage::getPatentNo, patentNo);
         splitWrapper.eq(PatentSplitMessage::getProjectId, projectId);
@@ -104,7 +74,6 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Feature> {
         wrapper.eq(Feature::getProjectId, projectId)
                 .eq(Feature::getPatentNo, patentNo);
         List<Feature> allFeatures = new ArrayList<>();
-
         //如果是不重拆
         if (!ifReSplit) {
             //如果拆分过
@@ -113,129 +82,29 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Feature> {
             }
             //如果没有拆分过
             else {
-                LambdaQueryWrapper<PatentSplitMessage> haveSplitWrapper = new LambdaQueryWrapper<>();
-                haveSplitWrapper.eq(PatentSplitMessage::getPatentNo, patentNo)
-                        .eq(PatentSplitMessage::getTenantId, personnelVO.getTenantId());
-                haveSplitWrapper.orderByDesc(PatentSplitMessage::getCreateTime);
-                List<PatentSplitMessage> patentSplitMessages = patentSplitMessageService.list(haveSplitWrapper);
-                //如果查询到原本拆分信息则复制
-                if (patentSplitMessages.size() > 0) {
-                    PatentSplitMessage doneMessage = patentSplitMessages.get(0);
-                    //根据报告id和专利号查询特征
-                    LambdaQueryWrapper<Feature> featureLambdaQueryWrapper = new LambdaQueryWrapper<>();
-                    featureLambdaQueryWrapper.eq(Feature::getPatentNo, doneMessage.getPatentNo())
-                            .eq(Feature::getProjectId, doneMessage.getProjectId());
-                    List<Feature> features = this.list(featureLambdaQueryWrapper);
-                    features.forEach(item -> {
-                                item.setCreateId(personnelVO.getId());
-                                item.setId(null);
-                                item.setProjectId(projectId);
-                            }
-                    );
-                    allFeatures = new ArrayList<>(features);
-
-                }
-                //查询不到则新建
-                else {
-                    allFeatures = new ArrayList<>();
-                    //遍历权要保存特征
-                    for (int i = 0; i < patentRights.size(); i++) {
-                        List<Feature> featureList = new ArrayList<>();
-                        //根据拆分方式返回特征
-                        List<String> contents = Arrays.asList(patentRights.get(i).getContent());
-
-                        //如果是需要拆解的权要
-                        if (partRightSorts.contains(patentRights.get(i).getSort())) {
-                            //获得权要的原文并且拆解
-                            contents = this.splitStringByFlags(patentRights.get(i).getContent(), flags);
-                        }
-                        for (int t = 0; t < contents.size(); t++) {
-                            Feature feature = new Feature();
-                            feature.setRightSort(patentRights.get(i).getSort());
-                            feature.setPatentNo(patentNo);
-                            feature.setProjectId(projectId);
-                            feature.setContent(contents.get(t));
-                            feature.setCreateId(personnelVO.getId());
-                            feature.setRightType(patentRights.get(i).getType());
-                            feature.setTenantId(personnelVO.getTenantId());
-                            featureList.add(feature);
-                        }
-                        if (featureList.size() > 0) {
-                            this.saveBatch(featureList);
-                            allFeatures.addAll(featureList);
-                        }
-                    }
-                }
-                //保存拆分记录
+                allFeatures = this.splitFeature(splitBy,splitType,patentNo,projectId,patentRights);
                 patentSplitMessage = new PatentSplitMessage();
                 patentSplitMessage.setPatentNo(patentNo);
                 patentSplitMessage.setProjectId(projectId);
                 patentSplitMessage.setTenantId(personnelVO.getTenantId());
                 patentSplitMessage.setCreateId(personnelVO.getId());
                 patentSplitMessage.insert();
-            }
+                }
         }
         //当重拆时新建
         else {
             //清除原本的
             this.remove(wrapper);
-            allFeatures = new ArrayList<>();
-            //遍历权要保存特征
-            for (int i = 0; i < patentRights.size(); i++) {
-                List<Feature> featureList = new ArrayList<>();
-                //根据拆分方式返回特征
-                List<String> contents = Arrays.asList(patentRights.get(i).getContent());
-
-                //如果是需要拆解的权要
-                if (partRightSorts.contains(patentRights.get(i).getSort())) {
-                    //获得权要的原文并且拆解
-                    contents = this.splitStringByFlags(patentRights.get(i).getContent(), flags);
-                }
-                for (int t = 0; t < contents.size(); t++) {
-                    Feature feature = new Feature();
-                    feature.setRightSort(patentRights.get(i).getSort());
-                    feature.setPatentNo(patentNo);
-                    feature.setProjectId(projectId);
-                    feature.setContent(contents.get(t));
-                    feature.setCreateId(personnelVO.getId());
-                    feature.setRightType(patentRights.get(i).getType());
-                    feature.setTenantId(personnelVO.getTenantId());
-                    featureList.add(feature);
-                }
-                if (featureList.size() > 0) {
-                    this.saveBatch(featureList);
-                    allFeatures.addAll(featureList);
-                }
-            }
+            allFeatures = this.splitFeature(splitBy,splitType,patentNo,projectId,patentRights);
             //更新拆分信息
             patentSplitMessage.setCreateTime(new Date());
             patentSplitMessage.setCreateId(personnelVO.getId());
             patentSplitMessage.updateById();
 
         }
-
-
         //装载信息并返回
         List<PatentRightVo> patentRightVos = new ArrayList<>();
-        //将拆解的权要和特征装载到对象PatentRightVo
-        for (int i = 0; i < patentRights.size(); i++) {
-            List<Feature> featureList = new ArrayList<>();
-            Integer sort = patentRights.get(i).getSort();
-
-            featureList = allFeatures.stream().filter(item -> item.getRightSort().equals(sort)).collect(Collectors.toList());
-
-            PatentRightVo patentRightVo = new PatentRightVo();
-            patentRightVo.setPatentNo(patentRights.get(i).getPatentNo());
-            patentRightVo.setFeatures(featureList);
-            patentRightVo.setContent(patentRights.get(i).getContent());
-            patentRightVo.setSort(patentRights.get(i).getSort());
-            patentRightVo.setType(patentRights.get(i).getType());
-            patentRightVo.setContentOut(patentRights.get(i).getContentOut());
-            patentRightVo.setProjectId(projectId);
-            patentRightVo.setRightName("权要" + sort);
-            patentRightVo.setSignPatentNo(patentNo);
-            patentRightVos.add(patentRightVo);
-        }
+        patentRightVos=this.loadPatentRightVO(patentRights,allFeatures,projectId,patentNo);
         return patentRightVos;
     }
 
@@ -381,4 +250,83 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Feature> {
 
         return patentRightContents;
     }
+
+
+    public List<Feature> splitFeature(Integer splitBy,Integer splitType,String patentNo,Integer projectId,List<RePatentClaim> patentRights) throws IOException {
+       List<Feature> allFeatures =new ArrayList<>();
+        PersonnelVO personnelVO = new PersonnelVO();
+        personnelVO.setId("1");
+        personnelVO.setTenantId(1);
+        List<String> flags = new ArrayList<>();
+        List<Integer> partRightSorts = new ArrayList<>();  //权要sorts
+        if (splitBy == 0) {  //当splitBy=0时仅仅根据“,”拆解
+            flags.add(",");
+            flags.add(",");
+        } else if (splitBy == 1) {  //当splitBy=1时仅仅根据“;“拆解
+            flags.add(";");
+            flags.add(";");
+        } else if (splitBy == 2) {  //当splitBy=2时根据“;“和”,”拆解
+            flags.add(";");
+            flags.add(";");
+            flags.add(",");
+            flags.add(",");
+            if (splitType.equals(0)) {  //当splitType=0仅拆解主权要
+                partRightSorts = patentRights.stream().filter(item -> item.getType().equals(1)).map(RePatentClaim::getSort).collect(Collectors.toList());
+            } else if (splitType.equals(1)) {  //当splitType=1拆解全部权要
+                partRightSorts = patentRights.stream().map(RePatentClaim::getSort).collect(Collectors.toList());
+            }
+            //遍历权要保存特征
+            for (int i = 0; i < patentRights.size(); i++) {
+                List<Feature> featureList = new ArrayList<>();
+                //根据拆分方式返回特征
+                List<String> contents = Arrays.asList(patentRights.get(i).getContent());
+
+                //如果是需要拆解的权要
+                if (partRightSorts.contains(patentRights.get(i).getSort())) {
+                    //获得权要的原文并且拆解
+                    contents = this.splitStringByFlags(patentRights.get(i).getContent(), flags);
+                }
+                for (int t = 0; t < contents.size(); t++) {
+                    Feature feature = new Feature();
+                    feature.setRightSort(patentRights.get(i).getSort());
+                    feature.setPatentNo(patentNo);
+                    feature.setProjectId(projectId);
+                    feature.setContent(contents.get(t));
+                    feature.setCreateId(personnelVO.getId());
+                    feature.setRightType(patentRights.get(i).getType());
+                    feature.setTenantId(personnelVO.getTenantId());
+                    featureList.add(feature);
+                }
+                if (featureList.size() > 0) {
+                    this.saveBatch(featureList);
+                    allFeatures.addAll(featureList);
+                }
+            }
+        }
+        return allFeatures;
+    }
+
+   public List<PatentRightVo> loadPatentRightVO(List<RePatentClaim> patentRights,List<Feature>allFeatures,Integer projectId,String patentNo){
+      List<PatentRightVo> patentRightVos =new ArrayList<>();
+       //将拆解的权要和特征装载到对象PatentRightVo
+       for (int i = 0; i < patentRights.size(); i++) {
+           List<Feature> featureList = new ArrayList<>();
+           Integer sort = patentRights.get(i).getSort();
+
+           featureList = allFeatures.stream().filter(item -> item.getRightSort().equals(sort)).collect(Collectors.toList());
+
+           PatentRightVo patentRightVo = new PatentRightVo();
+           patentRightVo.setPatentNo(patentRights.get(i).getPatentNo());
+           patentRightVo.setFeatures(featureList);
+           patentRightVo.setContent(patentRights.get(i).getContent());
+           patentRightVo.setSort(patentRights.get(i).getSort());
+           patentRightVo.setType(patentRights.get(i).getType());
+           patentRightVo.setContentOut(patentRights.get(i).getContentOut());
+           patentRightVo.setProjectId(projectId);
+           patentRightVo.setRightName("权要" + sort);
+           patentRightVo.setSignPatentNo(patentNo);
+           patentRightVos.add(patentRightVo);
+       }
+       return patentRightVos;
+   }
 }

+ 3 - 0
src/main/java/cn/cslg/pas/service/business/ImportTaskService.java

@@ -130,6 +130,9 @@ public class ImportTaskService extends ServiceImpl<ImportTaskMapper, ImportTask>
         } catch (Exception e) {
             throw new UnLoginException("未登录");
         }
+        if(importTaskDTO.getType()==null){
+            importTaskDTO.setType(4);
+        }
         ImportTaskCondition importTaskCondition = new ImportTaskCondition();
         if (importTaskDTO.getImportToType().equals(0)) {
             importTaskCondition.setProjectType(0);

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

@@ -186,7 +186,7 @@ public class EsService {
         } else {
             builder.sort(sortOptionsBuilder -> sortOptionsBuilder
                     .field(fieldSortBuilder -> fieldSortBuilder
-                            .field("patent_no").order(SortOrder.Desc)));
+                            .field("patent_no.keyword").order(SortOrder.Desc)));
         }
 
         //分页

+ 5 - 4
src/main/java/cn/cslg/pas/service/common/MessageService.java

@@ -10,6 +10,7 @@ import cn.cslg.pas.common.vo.ImportTaskAMVO;
 
 import cn.cslg.pas.common.vo.TaskWebSocketDTO;
 import cn.cslg.pas.domain.business.ImportTask;
+import cn.cslg.pas.service.importPatent.PatentProcess;
 import org.springframework.stereotype.Service;
 
 import java.util.Locale;
@@ -27,17 +28,17 @@ public class MessageService {
      *
 
      */
-    public void sendWebsocketMessage(ImportTaskAMVO importTaskAMVO,Integer type) {
+    public void sendWebsocketMessage(ImportTaskAMVO importTaskAMVO, Integer type, PatentProcess patentProcess) {
         Integer doneNum=0;
  if(type.equals(0)){
-            doneNum = importTaskAMVO.getDoneNum();
+            doneNum = patentProcess.getPdfDoneNum();
         }
         else if(type.equals(1)){
-                doneNum = importTaskAMVO.getMessageDoneNum();
+                doneNum = patentProcess.getPatentMessageDoneNum();
             }
             else if(type.equals(2)){
 
-                doneNum= importTaskAMVO.getPictureDoneNum();
+                doneNum= patentProcess.getPictureDoneNum();
         }
         long percentage = (long) Math.floor((doneNum + 0D) / importTaskAMVO.getAllNum() * 100D);
         //通过WebSocket 在每一次循环结束后 向前端发送完成进度

+ 46 - 2
src/main/java/cn/cslg/pas/service/common/PatentStarApiService.java

@@ -2,6 +2,7 @@ package cn.cslg.pas.service.common;
 
 import cn.cslg.pas.common.config.XDns;
 
+import cn.cslg.pas.common.dto.PatentColumnDTO;
 import cn.cslg.pas.common.dto.PatentStarDTO;
 import cn.cslg.pas.common.dto.PatentStarListDTO;
 import cn.cslg.pas.common.model.cronModel.PersonnelVO;
@@ -224,11 +225,14 @@ public class PatentStarApiService {
 //        else {
 //            retrieveRecord.updateById();
 //        }
+        List<StarPatentVO> starPatentVOS = (List<StarPatentVO>) map.get("records");
+
+        //装载starPatentVOS到 PatentColumnDTO
         Records records = new Records();
         records.setRetrieveRecordId(retrieveRecord.getId());
         records.setCurrent(Long.parseLong(map.get("current").toString()));
         records.setSize(Long.parseLong(map.get("size").toString()));
-        records.setData(map.get("records"));
+        records.setData(this.loadPatent(starPatentVOS));
         records.setTotal(Long.parseLong(map.get("total").toString()));
         return records;
     }
@@ -434,7 +438,7 @@ public class PatentStarApiService {
         try {
             Response response = okHttpClient.newCall(request).execute();
             // 判断请求是否成功
-            if (response.isSuccessful()&&response.code()==200) {
+            if (response.isSuccessful() && response.code() == 200) {
                 // 打印服务端返回结果
                 return Objects.requireNonNull(response.body()).string();
             }
@@ -878,4 +882,44 @@ public class PatentStarApiService {
         }
         return starPatentVO;
     }
+
+
+    private List<PatentColumnDTO> loadPatent(List<StarPatentVO> starPatentVOS) {
+        List<PatentColumnDTO> patentColumnDTOS = new ArrayList<>();
+
+        starPatentVOS.forEach(item -> {
+            PatentColumnDTO patentColumnDTO = new PatentColumnDTO();
+            //申请号
+            patentColumnDTO.setAppNo(item.getApplicationNo());
+            patentColumnDTOS.add(patentColumnDTO);
+            //装载专利号
+            if (patentColumnDTO.getAppNo() != null) {
+                if (patentColumnDTO.getAppNo().trim().startsWith("CN")) {
+                    patentColumnDTO.setPatentNo(patentColumnDTO.getAppNo());
+                } else {
+                    if (patentColumnDTO.getPublicNo() != null) {
+                        patentColumnDTO.setPatentNo(patentColumnDTO.getPublicNo());
+                    }
+                    else if(patentColumnDTO.getAgencyNo()!=null){
+                        patentColumnDTO.setPatentNo(patentColumnDTO.getAgencyNo());
+                    }
+                    else {
+                        patentColumnDTO.setPatentNo(patentColumnDTO.getAppNo());
+                    }
+                }
+
+            }
+            //装载申请日
+            if(item.getApplicationDate()!=null&&item.getApplicationDate().trim().equals("")) {
+                patentColumnDTO.setAppDate(DateUtils.strToDate(item.getApplicationDate()));
+            }
+            //装载公开日
+            if(item.getPublicDate()!=null&&item.getPublicDate().trim().equals("")){
+                patentColumnDTO.setPublicDate(DateUtils.strToDate(item.getPublicDate()));
+            }
+        });
+
+        return patentColumnDTOS;
+
+    }
 }

+ 6 - 3
src/main/java/cn/cslg/pas/service/importPatent/GetCataloguingFromWebThread.java

@@ -19,6 +19,7 @@ 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.BeanUtils;
 import org.springframework.beans.factory.annotation.Configurable;
 import org.springframework.context.ApplicationContext;
 
@@ -105,9 +106,9 @@ public class GetCataloguingFromWebThread extends Thread {
                     esService.addEsQuotePatent(uploadPatentWebDTO.getPatent().getPublicNo(), quotedNos);
                 }
                 //加入es保存队列
-                importFromWebToEsService.savePatentToEs(uploadPatentWebDTO);
+                importFromWebToEsService.loadPatentMessageDone(uploadPatentWebDTO);
             } catch (Exception e) {
-                importFromWebToEsService.savePatentToEs(uploadPatentWebDTO);
+                importFromWebToEsService.loadPatentMessageDone(uploadPatentWebDTO);
                 e.printStackTrace();
             }
         }
@@ -123,7 +124,9 @@ public class GetCataloguingFromWebThread extends Thread {
     }
 
     public void awakeTask(UploadPatentWebDTO uploadPatentWebDTO) {
-        uploadPatentWebDTOs.add(uploadPatentWebDTO);
+        UploadPatentWebDTO uploadPatentWebDTO1=new UploadPatentWebDTO();
+        BeanUtils.copyProperties(uploadPatentWebDTO,uploadPatentWebDTO1);
+        uploadPatentWebDTOs.add(uploadPatentWebDTO1);
         if (taskLock.tryLock()) {
             taskCondition.signalAll();
             taskLock.unlock();

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

@@ -75,7 +75,7 @@ public class GetPatentFromExcelThread extends Thread {
                 uploadPatentWebDTO.setPictureData(uploadParamsVO.getPictureData());
                 uploadPatentWebDTO.setPatent(uploadParamsVO.getPatent());
                 //专利丢入消费者队列,并唤醒消费者线程
-                savePatentToEsThread.awakeTask(uploadPatentWebDTO);
+                savePatentToEsThread.awakeTask(uploadPatentWebDTO.getPatent());
                 getPatentPictureFromExcelThread.awakeTask(uploadPatentWebDTO);
             }
             //专利取完通知消费者线程

+ 6 - 5
src/main/java/cn/cslg/pas/service/importPatent/GetPatentPDFFromWebThread.java

@@ -14,6 +14,7 @@ import org.dom4j.Document;
 import org.dom4j.Element;
 import org.dom4j.XPath;
 import org.dom4j.io.SAXReader;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Configurable;
 import org.springframework.context.ApplicationContext;
 
@@ -122,11 +123,9 @@ public class GetPatentPDFFromWebThread extends Thread {
 
                 }
                 }
-                taskThread.ifPatentDone(uploadPatentWebDTO);
-                importTaskAMVO.setPdfDoneNum(importTaskAMVO.getPdfDoneNum()+1);
+                taskThread.updateProcess(false,4,"");
             } catch (Exception e) {
-                importTaskAMVO.setPdfDoneNum(importTaskAMVO.getPdfDoneNum()+1);
-                taskThread.ifPatentDone(uploadPatentWebDTO);
+                taskThread.updateProcess(false,4,"");
                 e.printStackTrace();
             }
         }
@@ -144,7 +143,9 @@ public class GetPatentPDFFromWebThread extends Thread {
     }
 
     public void awakeTask(UploadPatentWebDTO uploadPatentWebDTO) {
-        uploadPatentWebDTOs.add(uploadPatentWebDTO);
+        UploadPatentWebDTO uploadPatentWebDTO1=new UploadPatentWebDTO();
+        BeanUtils.copyProperties(uploadPatentWebDTO,uploadPatentWebDTO1);
+        uploadPatentWebDTOs.add(uploadPatentWebDTO1);
         if (taskLock.tryLock()) {
             taskCondition.signalAll();
             taskLock.unlock();

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

@@ -70,12 +70,10 @@ public class GetPatentPictureFromExcelThread extends Thread {
                     FileManagerService fileManagerService = applicationContext.getBean(FileManagerService.class);
                     fileManagerService.uploadFileWithGuid(file, guid);
                 }
-                taskThread.ifPatentDone(uploadPatentWebDTO);
-                MessageService messageService = applicationContext.getBean(MessageService.class);
-                messageService.sendWebsocketMessage(importTaskAMVO,2);
+                taskThread.updateProcess(false,2,"");
             }
                 catch (Exception e) {
-                    taskThread.ifPatentDone(uploadPatentWebDTO);
+                    taskThread.updateProcess(true,2,"");
                     e.printStackTrace();
                 }
             taskThread.awakeTaskThread();

+ 6 - 5
src/main/java/cn/cslg/pas/service/importPatent/GetPatentPictureFromWebThread.java

@@ -17,6 +17,7 @@ import org.dom4j.Document;
 import org.dom4j.Element;
 import org.dom4j.XPath;
 import org.dom4j.io.SAXReader;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Configurable;
 import org.springframework.context.ApplicationContext;
 import org.springframework.mock.web.MockMultipartFile;
@@ -65,11 +66,9 @@ public class GetPatentPictureFromWebThread extends Thread {
                     String guid = FormatUtil.getPictureFormat(uploadPatentWebDTO.getStarPatentVO().getApplicationNo());
                     fileManagerService.uploadFileWithGuid(file, guid);
                 }
-                taskThread.ifPatentDone(uploadPatentWebDTO);
-                importTaskAMVO.setPictureDoneNum(importTaskAMVO.getPictureDoneNum()+1);
+                taskThread.updateProcess(false,2,"");
             } catch (Exception e) {
-                taskThread.ifPatentDone(uploadPatentWebDTO);
-                importTaskAMVO.setPictureDoneNum(importTaskAMVO.getPictureDoneNum()+1);
+                taskThread.updateProcess(true,2,"");
                 e.printStackTrace();
             }
 
@@ -86,7 +85,9 @@ public class GetPatentPictureFromWebThread extends Thread {
     }
 
     public void awakeTask(UploadPatentWebDTO uploadPatentWebDTO) {
-        uploadPatentWebDTOs.add(uploadPatentWebDTO);
+        UploadPatentWebDTO uploadPatentWebDTO1=new UploadPatentWebDTO();
+        BeanUtils.copyProperties(uploadPatentWebDTO,uploadPatentWebDTO1);
+        uploadPatentWebDTOs.add(uploadPatentWebDTO1);
         if (taskLock.tryLock()) {
             taskCondition.signalAll();
             taskLock.unlock();

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

@@ -15,6 +15,7 @@ import org.dom4j.Document;
 import org.dom4j.Element;
 import org.dom4j.XPath;
 import org.dom4j.io.SAXReader;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Configurable;
 import org.springframework.context.ApplicationContext;
 
@@ -63,10 +64,10 @@ public class GetRightAndFullTextFromWebThread extends Thread {
                        this.loadFullText(uploadPatentWebDTO,cnFullXmlStr);
                 }
                 //加入es保存队列
-                importFromWebToEsService.savePatentToEs(uploadPatentWebDTO);
+                    importFromWebToEsService.loadPatentMessageDone(uploadPatentWebDTO);
             }
                 catch (Exception e) {
-                    importFromWebToEsService.savePatentToEs(uploadPatentWebDTO);
+                    importFromWebToEsService.loadPatentMessageDone(uploadPatentWebDTO);
                     e.printStackTrace();
                 }
         }
@@ -82,6 +83,9 @@ public class GetRightAndFullTextFromWebThread extends Thread {
     }
 
     public void awakeTask(UploadPatentWebDTO uploadPatentWebDTO) {
+        UploadPatentWebDTO uploadPatentWebDTO1=new UploadPatentWebDTO();
+        BeanUtils.copyProperties(uploadPatentWebDTO,uploadPatentWebDTO1);
+        uploadPatentWebDTOs.add(uploadPatentWebDTO1);
         uploadPatentWebDTOs.add(uploadPatentWebDTO);
         if (taskLock.tryLock()) {
             taskCondition.signalAll();

+ 50 - 48
src/main/java/cn/cslg/pas/service/importPatent/ImportFromWebToEsService.java

@@ -29,6 +29,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 
 @Scope("prototype")
@@ -48,60 +49,36 @@ public class ImportFromWebToEsService implements PatentImportImp {
     private GetPatentPictureFromWebThread getPatentPictureFromWebThread;
     private GetRightAndFullTextFromWebThread getRightAndFullTextFromWebThread;
     private ApplicationContext applicationContext;
+    private List<UploadPatentWebDTO> uploadPatentWebDTOS = new ArrayList<>();
 
     @Override
     public void startPatentThread() {
         //装载专利信息的计数器
         Integer addPatentCounter = 0;
         //十进制转二进制
-        String imContents = "0000";
-        if (!importTaskAMVO.getImportContent().equals(0)) {
-            imContents = MathUtils.fun(2, importTaskAMVO.getImportContent());
-        }
-
-        //下载字段
-        char[] importCells = imContents.toCharArray();
-        char ifCataloguing = importCells[0];
-        char ifAddPicture = importCells[1];
-        char ifFullText = importCells[2];
-        char ifPdf = importCells[3];
+        char ifCataloguing = importTaskAMVO.getIfAddCatalogue();
+        char ifAddPicture = importTaskAMVO.getIfAddPicture();
+        char ifFullText = importTaskAMVO.getIfAddFullText();
+        char ifPdf = importTaskAMVO.getIfAddPDF();
         //若本次下载任务是超过一万条专利的全部下载任务
-        importTaskAMVO.setIfAddCatalogue(ifCataloguing);
-        importTaskAMVO.setIfAddPicture(ifAddPicture);
-        importTaskAMVO.setIfAddFullText(ifFullText);
-        importTaskAMVO.setIfAddPDF(ifPdf);
-        importTaskAMVO.setShouldSaveCounter(0);
-        importTaskAMVO.setHaveSaveCounter(0);
-        importTaskAMVO.setShouldSaveMessageCounter(0);
-        importTaskAMVO.setHaveSaveMessageCounter(0);
         savePatentToEsThread = new SavePatentToEsThread(taskThread, taskThread.getApplicationContext());
         savePatentToEsThread.start();
         if (ifAddPicture == '1') {
             getPatentPictureFromWebThread = new GetPatentPictureFromWebThread(taskThread, this);
             getPatentPictureFromWebThread.start();
-            importTaskAMVO.setShouldSaveCounter(importTaskAMVO.getShouldSaveCounter() + 1);
         }
         if (ifFullText == '1') {
             getRightAndFullTextFromWebThread = new GetRightAndFullTextFromWebThread(taskThread, this);
             getRightAndFullTextFromWebThread.start();
-            addPatentCounter += 1;
-            importTaskAMVO.setShouldSaveMessageCounter(importTaskAMVO.getShouldSaveMessageCounter()+1);
         }
         if (ifPdf == '1') {
             getPatentPDFFromWebThread = new GetPatentPDFFromWebThread(taskThread, this);
             getPatentPDFFromWebThread.start();
-            importTaskAMVO.setShouldSaveCounter(importTaskAMVO.getShouldSaveCounter() + 1);
         }
 
         if (ifCataloguing == '1') {
             getCataloguingFromWebThread = new GetCataloguingFromWebThread(taskThread, this);
             getCataloguingFromWebThread.start();
-            addPatentCounter += 1;
-            importTaskAMVO.setShouldSaveMessageCounter(importTaskAMVO.getShouldSaveMessageCounter()+1);
-        }
-
-        if (ifCataloguing == '1' || ifFullText == '1') {
-            importTaskAMVO.setShouldSaveCounter(importTaskAMVO.getShouldSaveCounter() + 1);
         }
         excuteLessThan10000(importTaskAMVO, addPatentCounter);
 
@@ -174,26 +151,26 @@ public class ImportFromWebToEsService implements PatentImportImp {
             char ifAddFullText = importTaskAMVO.getIfAddFullText();
             char ifPdf = importTaskAMVO.getIfAddPDF();
             //下载字段
-
+             int index=doneNum;
             //已经跳过的数量
             Integer overNum = 0;
             while (patentStarListDtos.size() > 0) {
                 PatentStarListDTO patentStarListDto = patentStarListDtos.remove(0);
                 Integer total = patentStarListDto.getTotal();
-                Integer lastTotalNum =overNum;
+                Integer lastTotalNum = overNum;
                 overNum += total;
                 if (overNum < doneNum) {
                     continue;
                 }
-                Integer startNum = doneNum-lastTotalNum;
+                Integer startNum = doneNum - lastTotalNum;
                 Calculate calculate = DateUtils.calculateFromStartAndEndNumber(startNum, total, 50);
                 Integer startPage = calculate.getStartPage();
                 Integer endPage = calculate.getEndPage();
 
                 for (int i = startPage; i <= endPage; i++) {
-                    PatentStarListDTO patentStarListDTOTemp =new PatentStarListDTO();
-                    BeanUtils.copyProperties(patentStarListDto,patentStarListDTOTemp);
-                    patentStarListDTOTemp.setPageNum(i+1);
+                    PatentStarListDTO patentStarListDTOTemp = new PatentStarListDTO();
+                    BeanUtils.copyProperties(patentStarListDto, patentStarListDTOTemp);
+                    patentStarListDTOTemp.setPageNum(i + 1);
                     patentStarListDTOTemp.setRowCount(50);
                     //调用一般接口返回一批专利著录相关数据
                     Map<String, Object> resultMap = patentStarApiService.patentStarSearchApi(patentStarListDTOTemp);
@@ -213,28 +190,26 @@ public class ImportFromWebToEsService implements PatentImportImp {
                         uploadPatentWebDTO.setStarPatentVO(starPatents.get(j));
                         uploadPatentWebDTO.setPatent(patent);
                         uploadPatentWebDTO.setCounter(0);
+                        uploadPatentWebDTO.setIndex(index);
                         uploadPatentWebDTO.setTotalCounter(addPatentCounter);
                         uploadPatentWebDTO.setHaveSaveCounter(0);
                         if (ifCataloguing == '1') {
-                            Thread.sleep(100);
                             getCataloguingFromWebThread.awakeTask(uploadPatentWebDTO);
                         }
                         if (ifAddPicture == '1') {
-                            Thread.sleep(100);
                             getPatentPictureFromWebThread.awakeTask(uploadPatentWebDTO);
                         }
                         if (ifAddFullText == '1') {
-                            Thread.sleep(100);
                             getRightAndFullTextFromWebThread.awakeTask(uploadPatentWebDTO);
                         }
                         if (ifPdf == '1') {
-                            Thread.sleep(100);
                             getPatentPDFFromWebThread.awakeTask(uploadPatentWebDTO);
                         }
+                        index+=1;
                     }
 
                 }
-                doneNum =overNum;
+                doneNum = overNum;
             }
             if (ifCataloguing == '1') {
                 getCataloguingFromWebThread.setIfProductAll(true);
@@ -266,18 +241,45 @@ public class ImportFromWebToEsService implements PatentImportImp {
     }
 
     //加入es保存队列
-    public void savePatentToEs(UploadPatentWebDTO uploadPatentWebDTO) {
-        uploadPatentWebDTO.setCounter(uploadPatentWebDTO.getCounter() + 1);
-        if (uploadPatentWebDTO.getTotalCounter().equals(uploadPatentWebDTO.getCounter())) {
-            savePatentToEsThread.awakeTask(uploadPatentWebDTO);
+//    public void savePatentToEs(UploadPatentWebDTO uploadPatentWebDTO) {
+//        uploadPatentWebDTO.setCounter(uploadPatentWebDTO.getCounter() + 1);
+//        if (uploadPatentWebDTO.getTotalCounter().equals(uploadPatentWebDTO.getCounter())) {
+//            savePatentToEsThread.awakeTask(uploadPatentWebDTO);
+//        }
+//    }
+
+    public void loadPatentMessageDone(UploadPatentWebDTO uploadPatentWebDTO) {
+        synchronized ("装载专利信息") {
+            if (importTaskAMVO.getPatentMessageShouldSaveCounter() > 1) {
+                // 根据index查询是否有相同的
+                List<UploadPatentWebDTO> dtos = uploadPatentWebDTOS.stream()
+                        .filter(item -> item.getIndex().equals(uploadPatentWebDTO.getIndex())).collect(Collectors.toList());
+                if (dtos.size() > 0) {
+                    Patent orgPatent = uploadPatentWebDTO.getPatent();
+                    Patent patent = dtos.get(0).getPatent();
+                    BeanUtils.copyProperties(patent, orgPatent, FormatUtil.getNullPropertyNames(patent));
+                    Patent patent1 = new Patent();
+                    BeanUtils.copyProperties(orgPatent, patent1);
+                    dtos.removeIf(i->i.getIndex().equals(uploadPatentWebDTO.getIndex()));
+                    savePatentToEsThread.awakeTask(patent1);
+                }
+                else {
+                    uploadPatentWebDTOS.add(uploadPatentWebDTO);
+                }
+            } else {
+                Patent patent = uploadPatentWebDTO.getPatent();
+                Patent patent1 = new Patent();
+                BeanUtils.copyProperties(patent, patent1);
+                savePatentToEsThread.awakeTask(patent1);
+            }
         }
     }
+
+
     public void setPatentToEsProductAll() {
-        importTaskAMVO.setHaveSaveMessageCounter(importTaskAMVO.getHaveSaveMessageCounter()+1);
-        if(importTaskAMVO.getShouldSaveMessageCounter().equals(importTaskAMVO.getHaveSaveMessageCounter()))
-        {
+        importTaskAMVO.setHaveSaveMessageCounter(importTaskAMVO.getHaveSaveMessageCounter() + 1);
+        if (importTaskAMVO.getPatentMessageShouldSaveCounter().equals(importTaskAMVO.getHaveSaveMessageCounter())) {
             savePatentToEsThread.setIfProductAll(true);
-
         }
 
     }

+ 32 - 0
src/main/java/cn/cslg/pas/service/importPatent/PatentProcess.java

@@ -0,0 +1,32 @@
+package cn.cslg.pas.service.importPatent;
+
+import cn.cslg.pas.common.vo.business.AvoidDesignVO;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 回避设计方案总体方向VO
+ * @Author xiexiang
+ * @Date 2023/12/5
+ */
+@Data
+public class PatentProcess {
+    /**
+     * 所属报告
+     */
+    private Integer pdfDoneNum;
+
+    private Integer pdfDefaultNum;
+
+    private Integer pictureDoneNum;
+
+    private Integer pictureDefaultNum;
+
+    private Integer patentMessageDoneNum;
+    private Integer patentMessageDefaultNum;
+    private Integer patentDoneNum;
+    private Integer patentDefaultNum;
+}

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

@@ -27,7 +27,7 @@ import java.util.concurrent.locks.ReentrantLock;
 
 public class SavePatentToEsThread extends Thread {
     private ApplicationContext applicationContext;
-    private List<UploadPatentWebDTO> uploadPatentWebDTOS = new ArrayList<>();
+    private List<Patent> patents = new ArrayList<>();
     private final Lock taskLock = new ReentrantLock();
     private final Condition taskCondition = taskLock.newCondition();
     private TaskThread taskThread;
@@ -36,18 +36,17 @@ public class SavePatentToEsThread extends Thread {
 
     @Override
     public void run() {
-        while ((!ifProductAll || uploadPatentWebDTOS.size() > 0) && importTaskAMVO.getState().equals(1)) {
+        while ((!ifProductAll || patents.size() > 0) && importTaskAMVO.getState().equals(1)) {
             try {
                 //判断任务队列是否有任务,若没有则线程等待唤醒
-                if (uploadPatentWebDTOS.size() == 0) {
+                if (patents.size() == 0) {
                     taskLock.lock();
                     taskCondition.await();
                 }
             } catch (Exception e) {
             }
-            UploadPatentWebDTO uploadPatentWebDTO = uploadPatentWebDTOS.remove(0);
+            Patent patent = patents.remove(0);
             try {
-                Patent patent = uploadPatentWebDTO.getPatent();
                 //根据专利号查询专利
                 EsService esService = applicationContext.getBean(EsService.class);
                 PatentWithIdVO patentWithIdVO = esService.getIdByPatentNo(patent.getPatentNo());
@@ -83,17 +82,17 @@ public class SavePatentToEsThread extends Thread {
                         }
                     }
                     //和任务关联
-                    if(importTaskAMVO.getId()!=null){
+                    if (importTaskAMVO.getId() != null) {
 
                         if (patentId != null) {
-                            Boolean ifInTask = esService.ifInTask(patentId, importTaskAMVO.getProjectId(),importTaskAMVO.getId());
+                            Boolean ifInTask = esService.ifInTask(patentId, importTaskAMVO.getProjectId(), importTaskAMVO.getId());
                             if (!ifInTask) {
                                 Patent patentChild = new Patent();
                                 PatentJoin patentJoin = new PatentJoin();
                                 patentJoin.setParent(patentId);
                                 patentJoin.setName("import_task");
                                 patentChild.setPatentJoin(patentJoin);
-                                ESImportTask esImportTask =new ESImportTask();
+                                ESImportTask esImportTask = new ESImportTask();
                                 esImportTask.setProjectId(importTaskAMVO.getProjectId());
                                 esImportTask.setTaskId(importTaskAMVO.getId());
                                 patentChild.setImportTask(esImportTask);
@@ -103,15 +102,10 @@ public class SavePatentToEsThread extends Thread {
 
                     }
                 }
-
                 //导入完成,通知前台
-                MessageService messageService = applicationContext.getBean(MessageService.class);
-                messageService.sendWebsocketMessage(importTaskAMVO, 1);
-                importTaskAMVO.setMessageDoneNum(importTaskAMVO.getMessageDoneNum() + 1);
-                taskThread.ifPatentDone(uploadPatentWebDTO);
+                taskThread.updateProcess(false,1,"");
             } catch (Exception e) {
-                importTaskAMVO.setMessageDoneNum(importTaskAMVO.getMessageDoneNum() + 1);
-                taskThread.ifPatentDone(uploadPatentWebDTO);
+                taskThread.updateProcess(true,1,"");
             }
         }
         taskThread.awakeTaskThread();
@@ -124,8 +118,8 @@ public class SavePatentToEsThread extends Thread {
         this.importTaskAMVO = taskThread.getImportTaskAMVO();
     }
 
-    public void awakeTask(UploadPatentWebDTO uploadPatentWebDTO) {
-        uploadPatentWebDTOS.add(uploadPatentWebDTO);
+    public void awakeTask(Patent patent) {
+        patents.add(patent);
         if (taskLock.tryLock()) {
             taskCondition.signalAll();
             taskLock.unlock();

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

@@ -4,14 +4,19 @@ import cn.cslg.pas.common.core.base.Constants;
 import cn.cslg.pas.common.dto.UploadPatentWebDTO;
 import cn.cslg.pas.common.model.cronModel.ImportTaskConfig;
 import cn.cslg.pas.common.model.cronModel.OrderConfig;
+import cn.cslg.pas.common.utils.FormatUtil;
+import cn.cslg.pas.common.utils.MathUtils;
 import cn.cslg.pas.common.vo.ImportTaskAMVO;
 import cn.cslg.pas.domain.business.ImportTask;
+import cn.cslg.pas.domain.es.Patent;
 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 cn.cslg.pas.service.common.MessageService;
 import com.alibaba.fastjson.JSON;
+import io.swagger.v3.oas.models.security.SecurityScheme;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Configurable;
 import org.springframework.context.ApplicationContext;
@@ -19,9 +24,11 @@ import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.locks.Condition;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
+import java.util.stream.Collectors;
 
 @Configurable
 public class TaskThread extends Thread {
@@ -33,15 +40,65 @@ public class TaskThread extends Thread {
     private final Condition taskThreadCondition = taskThreadLock.newCondition();
     private final List<Integer> importTaskQueue = new ArrayList<>();
     private ImportTaskAMVO importTaskAMVO;
+    private PatentProcess patentProcess = new PatentProcess();
+    private List<UploadPatentWebDTO> uploadPatentWebDTOS = new ArrayList<>();
 
     /**
      * 从任务队列取出并执行任务
      */
     public TaskThread(ImportTaskAMVO importTaskAMVO, ApplicationContext applicationContext) {
         this.importTaskAMVO = importTaskAMVO;
+        //十进制转二进制
+        String imContents = "0000";
+        if (!importTaskAMVO.getImportContent().equals(0)) {
+            imContents = MathUtils.fun(2, importTaskAMVO.getImportContent());
+        }
+        //下载字段
+        char[] importCells = imContents.toCharArray();
+        char ifCataloguing = importCells[0];
+        char ifAddPicture = importCells[1];
+        char ifFullText = importCells[2];
+        char ifPdf = importCells[3];
+        importTaskAMVO.setIfAddCatalogue(ifCataloguing);
+        importTaskAMVO.setIfAddPicture(ifAddPicture);
+        importTaskAMVO.setIfAddFullText(ifFullText);
+        importTaskAMVO.setIfAddPDF(ifPdf);
+        importTaskAMVO.setPatentMessageShouldSaveCounter(2);
+        importTaskAMVO.setHaveSaveCounter(0);
+        importTaskAMVO.setShouldSaveCounter(0);
+        importTaskAMVO.setHaveSaveMessageCounter(0);
+        Integer shouldSaveCount = 0;
+        Integer messageShouldSaveCount = 0;
+        if (ifAddPicture == '1') {
+            shouldSaveCount += 1;
+            this.patentProcess.setPictureDoneNum(0);
+            this.patentProcess.setPictureDefaultNum(0);
+        }
+        if (ifCataloguing == '1' || ifFullText == '1') {
+            shouldSaveCount += 1;
+            this.patentProcess.setPatentMessageDefaultNum(0);
+            this.patentProcess.setPatentMessageDoneNum(0);
+            if (ifCataloguing == '1') {
+                messageShouldSaveCount += 1;
+            }
+            if (ifFullText == '1') {
+                messageShouldSaveCount += 1;
+            }
+        }
+        if (ifPdf == '1') {
+            this.patentProcess.setPdfDefaultNum(0);
+            this.patentProcess.setPdfDoneNum(0);
+            shouldSaveCount += 1;
+        }
+        importTaskAMVO.setPatentMessageShouldSaveCounter(messageShouldSaveCount);
+        importTaskAMVO.setShouldSaveCounter(shouldSaveCount);
         this.applicationContext = applicationContext;
+        this.patentProcess.setPatentDoneNum(importTaskAMVO.getDoneNum());
+        this.patentProcess.setPatentDefaultNum(0);
+
     }
 
+
     @Override
     public void run() {
         //TODO 判断任务的类型
@@ -69,9 +126,9 @@ public class TaskThread extends Thread {
         } else {
             task.setState(importTaskAMVO.getState());
         }
-        task.setDoneNum(importTaskAMVO.getDoneNum());
+        task.setDoneNum(this.patentProcess.getPatentDoneNum());
+        importTaskAMVO.setDoneNum(this.patentProcess.getPatentDoneNum());
         task.updateById();
-
         MessageService messageService = applicationContext.getBean(MessageService.class);
         messageService.sendAllDoneMessage(importTaskAMVO);
     }
@@ -81,7 +138,7 @@ public class TaskThread extends Thread {
      * 任务是否完成代码块
      */
     public void awakeTaskThread() {
-        synchronized("导入任务是否完成") {
+        synchronized ("导入任务是否完成") {
             importTaskAMVO.setHaveSaveCounter(importTaskAMVO.getHaveSaveCounter() + 1);
             if (importTaskAMVO.getShouldSaveCounter().equals(importTaskAMVO.getHaveSaveCounter())) {
                 if (taskThreadLock.tryLock()) {
@@ -90,22 +147,7 @@ public class TaskThread extends Thread {
                     taskThreadLock.unlock();
                 }
                 MessageService messageService = applicationContext.getBean(MessageService.class);
-                messageService.sendWebsocketMessage(importTaskAMVO,0);
-            }
-        }
-    }
-
-    /**
-     * 专利是否导入完成代码块
-     * @param uploadPatentWebDTO
-     */
-    public void ifPatentDone(UploadPatentWebDTO uploadPatentWebDTO) {
-        synchronized("专利完成") {
-            uploadPatentWebDTO.setHaveSaveCounter(uploadPatentWebDTO.getHaveSaveCounter() + 1);
-            if (importTaskAMVO.getShouldSaveCounter().equals(uploadPatentWebDTO.getHaveSaveCounter())) {
-                importTaskAMVO.setDoneNum(importTaskAMVO.getDoneNum() + 1);
-                MessageService messageService = applicationContext.getBean(MessageService.class);
-                messageService.sendWebsocketMessage(importTaskAMVO,0);
+                messageService.sendWebsocketMessage(importTaskAMVO, 0, patentProcess);
             }
         }
     }
@@ -119,4 +161,43 @@ public class TaskThread extends Thread {
         return this.applicationContext;
     }
 
+
+    public void updateProcess(Boolean ifDefault, Integer type, String appNo) {
+        synchronized ("更新进度") {
+            switch (type) {
+                case 1:
+                    patentProcess.setPatentMessageDoneNum(patentProcess.getPatentMessageDoneNum() + 1);
+                    if (ifDefault) {
+                        patentProcess.setPatentMessageDefaultNum(patentProcess.getPatentMessageDefaultNum() + 1);
+                    }
+
+                    break;
+                case 2:
+                    patentProcess.setPictureDoneNum(patentProcess.getPictureDoneNum() + 1);
+                    if (ifDefault) {
+                        patentProcess.setPictureDefaultNum(patentProcess.getPictureDefaultNum() + 1);
+                    }
+                    break;
+                case 4:
+                    patentProcess.setPdfDoneNum(patentProcess.getPdfDoneNum() + 1);
+                    if (ifDefault) {
+                        patentProcess.setPdfDefaultNum(patentProcess.getPdfDefaultNum() + 1);
+                    }
+                    break;
+            }
+            List<Integer> nums = new ArrayList<>();
+            nums.add(patentProcess.getPictureDoneNum());
+            nums.add(patentProcess.getPdfDoneNum());
+            nums.add(patentProcess.getPatentMessageDoneNum());
+            Integer min = MathUtils.getNotNullMinNum(nums);
+            if (patentProcess.getPatentDoneNum() < min) {
+                patentProcess.setPatentDoneNum(min);
+                importTaskAMVO.setDoneNum(min);
+                MessageService messageService = applicationContext.getBean(MessageService.class);
+                messageService.sendWebsocketMessage(importTaskAMVO, 1, this.patentProcess);
+            }
+        }
+    }
+
+
 }

+ 2 - 2
src/main/resources/jsons/patent.json

@@ -14,7 +14,7 @@
   {
     "name": "申请号",
     "type": "String",
-    "value": "AN",
+    "value": "appNo",
     "field": "AN",
     "esField": "app_no",
     "esClass": "wildcardQueryBuilder",
@@ -26,7 +26,7 @@
   {
     "name": "公开号",
     "type": "String",
-    "value": "PN",
+    "value": "publicNo",
     "field": "PN",
     "esField": "public_no",
     "esClass": "wildcardQueryBuilder",

+ 14 - 5
src/test/java/cn/cslg/pas/service/CommonServiceTests.java

@@ -110,15 +110,24 @@ public class CommonServiceTests {
     }
 
     @Test
-   public void upLoadFileByFileGuid() throws IOException {
+    public void upLoadFileByFileGuid() throws IOException {
         String guid = "111111";
         File file = new File("src/main/resources/jsons/" + "patent.json");
         fileManagerService.uploadFileWithGuid(file, "1111");
     }
+
     @Test
     public void testAddress() throws IOException {
-        String te="201100 上海市闵行区园美路58号1幢2层203、204室";
-      PersonAddress personAddress = AddressSplitter.splitAddress(te,"91(上海)");
-       System.out.println(personAddress);
+        String te = "201100 上海市闵行区园美路58号1幢2层203、204室";
+        PersonAddress personAddress = AddressSplitter.splitAddress(te, "91(上海)");
+        System.out.println(personAddress);
+    }
+
+    @Test
+    public void testGetMinNum() throws IOException {
+        String te = "201100 上海市闵行区园美路58号1幢2层203、204室";
+        PersonAddress personAddress = AddressSplitter.splitAddress(te, "91(上海)");
+        System.out.println(personAddress);
+    }
+
     }
-}