浏览代码

专利之星任务导入专利代码

chendayu 2 年之前
父节点
当前提交
e4a8eb59b7

+ 3 - 3
PAS/src/main/java/cn/cslg/pas/service/PatentSimpleFamilyLinkService.java

@@ -41,11 +41,11 @@ public class PatentSimpleFamilyLinkService extends ServiceImpl<PatentSimpleFamil
         }
         queryWrapper.eq(PatentSimpleFamilyLink::getFamilyId, params.getFamilyId());
         IPage<PatentSimpleFamilyLink> pageList = this.page(new Page<>(params.getCurrent(), params.getSize()), queryWrapper);
-        //根据从关联信息里获得的专利号获得专利
+        //根据从关联信息里获得的专利号获得专利列表
         List<Patent> patentList = patentService.getPatentListByPatentNo(pageList.getRecords().stream().map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()));
-        //根据专利获得申请人信息
+        //根据专利ids获得申请人信息
         List<PatentApplicant> patentApplicantList = patentApplicantService.getPatentApplicantByPatentIds(patentList.stream().map(Patent::getId).collect(Collectors.toList()));
-         //遍历关联信息
+        //遍历关联信息
         pageList.getRecords().forEach(patentSimpleFamily -> {
             //根据专利号从专利列表中获得专利
             Patent patent = patentList.stream().filter(item -> item.getPatentNo().equals(patentSimpleFamily.getPatentNo())).findFirst().orElse(null);

+ 13 - 2
PAS/src/main/java/cn/cslg/pas/service/TaskService.java

@@ -13,7 +13,9 @@ import cn.cslg.pas.common.model.vo.TaskVO;
 import cn.cslg.pas.domain.asso.AssoOsTaskQrtzTask;
 import cn.cslg.pas.mapper.TaskMapper;
 import cn.cslg.pas.common.model.dto.UploadFileDTO;
+import cn.cslg.pas.service.upLoadPatent.ExcutePatentDataEpo;
 import cn.cslg.pas.service.upLoadPatent.ExcutePatentDataExcel;
+import cn.cslg.pas.service.upLoadPatent.ExcutePatentDataStar;
 import cn.cslg.pas.service.upLoadPatent.PantentQueueService;
 
 import cn.hutool.core.io.FileUtil;
@@ -54,6 +56,8 @@ public class TaskService extends ServiceImpl<TaskMapper, Task> implements ITaskS
     private final OutInterfaceService outInterfaceService;
     private final PantentQueueService pantentQueueService;
     private final ExcutePatentDataExcel excutePatentDataExcel;
+    private final ExcutePatentDataEpo excutePatentDataEpo;
+    private final ExcutePatentDataStar excutePatentDataStar;
 
     public String getFileUrl(Integer id) {
         Task task = this.getById(id);
@@ -325,8 +329,15 @@ public class TaskService extends ServiceImpl<TaskMapper, Task> implements ITaskS
             ThrowException.throwXiaoShiException("暂停失败,服务器忙请稍后再试");
         }
 
-        //5.将生产者生产专利类中的公共任务状态改为暂停
-        excutePatentDataExcel.setTaskStatus(taskId, 4);
+        //5.将生产者生产专利中的公共任务状态改为暂停
+        if (task.getType() == 1) {
+            excutePatentDataExcel.setTaskStatus(taskId, 4);
+        } else if (task.getType() == 3) {
+            excutePatentDataEpo.setTaskStatus(taskId, 4);
+        } else if (task.getType() == 4) {
+            excutePatentDataStar.setTaskStatus(taskId, 4);
+        }
+
         try {
             Thread.sleep(2000);
         } catch (InterruptedException e) {

+ 188 - 10
PAS/src/main/java/cn/cslg/pas/service/getPatentStarPart/GetPatentStarPartService.java

@@ -2,18 +2,23 @@ package cn.cslg.pas.service.getPatentStarPart;
 
 import cn.cslg.pas.common.model.dto.GetPatentStarPartDTO;
 import cn.cslg.pas.common.model.dto.PatentDTO;
+import cn.cslg.pas.common.model.outApi.PatentStarListDto;
+import cn.cslg.pas.common.model.vo.KeyValueVO;
+import cn.cslg.pas.common.model.vo.PageVO;
 import cn.cslg.pas.common.model.vo.UploadParamsVO;
 import cn.cslg.pas.common.model.vo.outApi.StarPatentVO;
-import cn.cslg.pas.domain.PatentImage;
-import cn.cslg.pas.domain.PatentInstruction;
-import cn.cslg.pas.domain.PatentRight;
+import cn.cslg.pas.common.utils.ThrowException;
+import cn.cslg.pas.domain.*;
 import cn.cslg.pas.service.outApi.PatentStarApiService;
 import cn.cslg.pas.service.upLoadPatent.ExcutePatentDataStar;
+import com.alibaba.fastjson.JSON;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
+import java.io.IOException;
+import java.util.*;
 
 /**
  * 获取专利之星专利某部分(如权要、说明书等一项)业务层
@@ -34,7 +39,7 @@ public class GetPatentStarPartService {
      * @param getPatentStarPartDTO 前端传输DTO对象
      * @return 返回装载着指定专利项的对象
      */
-    public PatentDTO getPatentPart(GetPatentStarPartDTO getPatentStarPartDTO) {
+    public PatentDTO getPatentPart(GetPatentStarPartDTO getPatentStarPartDTO) throws IOException {
         log.info("开始处理【根据专利号或申请号获取专利指定部分项】的业务,参数为:{}", getPatentStarPartDTO);
 
         Integer patentCell = getPatentStarPartDTO.getPatentCell();
@@ -42,13 +47,17 @@ public class GetPatentStarPartService {
         String patentNo = getPatentStarPartDTO.getPatentNo();
         PatentDTO patentDTO;
         if (patentCell == 1) {
-            patentDTO = getParentRight(appNo);
+            patentDTO = getParentRight(appNo);  //拿权要
         } else if (patentCell == 2) {
-            patentDTO = getInstructionText(appNo);
+            patentDTO = getInstructionText(appNo);  //拿说明书文本
         } else if (patentCell == 3) {
-            patentDTO = getInstructionPDF(patentNo);
+            patentDTO = getInstructionPDF(patentNo);  //拿说明书pdf
         } else if (patentCell == 4) {
-            patentDTO = getPatentImage(appNo);
+            patentDTO = getPatentImage(appNo);  //拿摘要附图
+        } else if (patentCell == 5) {
+            patentDTO = getSimpleFamily(getPatentStarPartDTO);  //拿同族专利信息
+        } else if (patentCell == 6) {
+            patentDTO = getAffair(appNo);  //拿法律事务信息
         } else {
             patentDTO = new PatentDTO();
         }
@@ -99,7 +108,7 @@ public class GetPatentStarPartService {
     /**
      * 获取专利之星专利的说明书pdf
      *
-     * @param patentNo 专利号
+     * @param patentNo 专利号(公开号)
      * @return 返回装载着说明书pdf的对象
      */
     public PatentDTO getInstructionPDF(String patentNo) {
@@ -124,6 +133,9 @@ public class GetPatentStarPartService {
      */
     public PatentDTO getPatentImage(String appNo) {
         //以下 ↓调用的是"获得中国专利摘要附图"接口,获得摘要附图的url地址
+        if (appNo.contains(".")) {
+            appNo = appNo.substring(0, appNo.lastIndexOf("."));
+        }
         String pictureUrl = patentStarApiService.getPictureApi(appNo);
 
         PatentDTO patentDTO = new PatentDTO();
@@ -136,5 +148,171 @@ public class GetPatentStarPartService {
         return patentDTO;
     }
 
+    /**
+     * 获取专利之星专利的同族专利
+     *
+     * @param getPatentStarPartDTO 获取专利之星专利指定项DTO类
+     * @return 返回装载着同族专利的对象集合
+     */
+    public PatentDTO getSimpleFamily(GetPatentStarPartDTO getPatentStarPartDTO) throws IOException {
+        //从DTO中取出公开号、当前页、每页条数
+        String patentNo = getPatentStarPartDTO.getPatentNo();
+        Integer current = getPatentStarPartDTO.getCurrent();
+        Integer size = getPatentStarPartDTO.getSize();
+
+        PatentDTO patentDTO = new PatentDTO();
+        PageVO pageVO = new PageVO()
+                .setCurrent(current)
+                .setSize(size);
+
+        //以下 ↓装载的是调用"获得同族专利"接口返回的专利相关数据
+        String familyPatentNoStr = patentStarApiService.getFamilyByPubNoApi(patentNo);
+        //若没有同族号,则返回空集合(表示该公开号暂无同族)
+        if (familyPatentNoStr.equals("no data")) {
+            pageVO.setRecords(new ArrayList<>())
+                    .setTotal(0);
+            patentDTO.setFamilyPatentResult(pageVO);
+            return patentDTO;
+        }
+
+        FamilyPatentNo familyPatentNo = JSON.parseObject(familyPatentNoStr, FamilyPatentNo.class);
+        //familyPNStr:以分号;拼接的多个同族公开号字符串
+        String familyPNStr = familyPatentNo.getFamilyinfo();
+        List<String> familyPatentNos = Arrays.asList(familyPNStr.split(";"));
+
+        //防止下标越界的判断(即判断所需当前页是否有数据)
+        if ((current - 1) * size >= familyPatentNos.size()) {
+            pageVO.setRecords(new ArrayList<>())
+                    .setTotal(familyPatentNos.size());
+            patentDTO.setFamilyPatentResult(pageVO);
+            return patentDTO;
+        }
+
+        //根据分页信息,取分页区间内的同族号
+        familyPatentNos = pageBySubList(familyPatentNos, current, size);
+        //集合转成字符串
+        String conditions = "(PN=(" + StringUtils.join(familyPatentNos, " OR ") + "))";
+
+        //调用一般接口返回这些同族号专利的著录相关数据(标题、申请人、权利人、摘要附图)
+        PatentStarListDto patentStarListDto = new PatentStarListDto()
+                .setCurrentQuery(conditions)
+                .setOrderBy("ID")
+                .setOrderByType("DESC")
+                .setPageNum(current)
+                .setRowCount(size)
+                .setDBType("WD");
+        Map<String, Object> resultMap = patentStarApiService.patentStarSearchApi(patentStarListDto);
+        if (resultMap == null || (Integer) resultMap.get("total") == 0) {
+            ThrowException.throwXiaoShiException("发生未知错误,一般接口未检索出专利");
+        }
+
+        List<StarPatentVO> patents = (List<StarPatentVO>) resultMap.get("records");
+        List<PatentSimpleFamilyLink> records = new ArrayList<>();
+        for (StarPatentVO starPatent : patents) {
+            PatentSimpleFamilyLink patentSimpleFamilyLink = new PatentSimpleFamilyLink();
+            patentSimpleFamilyLink.setAbstractPath(starPatent.getAbstractPath());  //装载摘要附图
+            patentSimpleFamilyLink.setPatentNo(starPatent.getPatentNo());  //装载公开号
+            patentSimpleFamilyLink.setName(starPatent.getName());  //装载标题
+            //装载申请人和权利人
+            ArrayList<PatentApplicant> patentApplicants = new ArrayList<>();
+            List<String> applicantNames = Arrays.asList(starPatent.getApplicantStr().split(";"));
+            for (String applicantName : applicantNames) {
+                PatentApplicant patentApplicant = new PatentApplicant();
+                patentApplicant.setName(applicantName);
+                patentApplicant.setDataType(1);
+                patentApplicants.add(patentApplicant);  //装载申请人
+                patentApplicant.setDataType(2);
+                patentApplicants.add(patentApplicant);  //装载权利人
+            }
+            patentSimpleFamilyLink.setApplicant(patentApplicants);
+            records.add(patentSimpleFamilyLink);
+        }
+        pageVO.setRecords(records)
+                .setTotal(familyPatentNos.size());
+        patentDTO.setFamilyPatentResult(pageVO);
+        return patentDTO;
+    }
+
+    public PatentDTO getAffair(String appNo) throws IOException {
+        if (appNo.contains(".")) {
+            appNo = appNo.substring(0, appNo.lastIndexOf("."));
+        }
+        //以下 ↓装载的是调用"获得中国专利法律状态"接口返回的专利相关数据
+        String cnLegalApiStr = patentStarApiService.getCnLegalApi(appNo);
+        List<ChinaLeagalStatus> chinaLeagalStatuses = JSON.parseArray(cnLegalApiStr, ChinaLeagalStatus.class);
+        ArrayList<KeyValueVO> lst = new ArrayList<>();
+        HashMap<Integer, String> nameMap = new HashMap<>();
+        HashMap<Integer, String> contentMap = new HashMap<>();
+        nameMap.put(0, "发生日期");
+        nameMap.put(1, "法律状态");
+        nameMap.put(2, "详细法律状态");
+//        nameMap.put(3, "IPC分类");
+//        nameMap.put(4, "申请号");
+//        nameMap.put(5, "申请日");
+//        nameMap.put(6, "变更编号");
+        nameMap.put(3, "详细信息");
+        for (ChinaLeagalStatus chinaLeagalStatus : chinaLeagalStatuses) {
+            contentMap.put(0, chinaLeagalStatus.getLegalDate());
+            contentMap.put(1, chinaLeagalStatus.getLegalStatus());
+            contentMap.put(2, chinaLeagalStatus.getLegalStatusInfo());
+//            contentMap.put(3, chinaLeagalStatus.getIPC());
+//            contentMap.put(4, chinaLeagalStatus.getSHENQINGH());
+//            contentMap.put(5, chinaLeagalStatus.getSHENQINGR());
+//            contentMap.put(6, chinaLeagalStatus.getBIANGENGSXCODE());
+            contentMap.put(3, chinaLeagalStatus.getDETAIL());
+            ArrayList<KeyValueVO.InpadocData> inpadocDatas = new ArrayList<>();
+            for (int i = 0; i < 4; i++) {
+                KeyValueVO.InpadocData inpadocData = new KeyValueVO.InpadocData();
+                inpadocData.setName(nameMap.get(i));
+                inpadocData.setContent(contentMap.get(i));
+                inpadocDatas.add(inpadocData);
+            }
+            KeyValueVO keyValueVO = new KeyValueVO();
+            keyValueVO.setInpadocData(inpadocDatas);
+            lst.add(keyValueVO);
+        }
+        PatentDTO patentDTO = new PatentDTO();
+        ArrayList<PatentAffair> patentAffairs = new ArrayList<>();
+        PatentAffair patentAffair = new PatentAffair();
+        patentAffair.setInpadoc(lst);
+        patentAffairs.add(patentAffair);
+        patentDTO.setAffair(patentAffairs);
+        return patentDTO;
+    }
+
+
+    /**
+     * 根据分页信息,取同族号集合中分页区间内的同族号
+     *
+     * @param list    同族号集合
+     * @param current 当前页
+     * @param size    每页条数
+     * @return 返回需要的同族号集合
+     */
+    public static List<String> pageBySubList(List<String> list, int current, int size) {
+        int totalcount = list.size();
+        int pagecount = 0;
+        List<String> subList;
+
+        int m = totalcount % size;
+        if (m > 0) {
+            pagecount = totalcount / size + 1;
+        } else {
+            pagecount = totalcount / size;
+        }
+
+        if (m == 0) {
+            subList = list.subList((current - 1) * size, size * (current));
+        } else {
+            if (current == pagecount) {
+                subList = list.subList((current - 1) * size, totalcount);
+            } else {
+                subList = list.subList((current - 1) * size, size * (current));
+            }
+        }
+
+        return subList;
+
+    }
 
 }

+ 1 - 0
PAS/src/main/java/cn/cslg/pas/service/outApi/PatentStarApiService.java

@@ -169,6 +169,7 @@ public class PatentStarApiService {
             }
             //发明人
             if(item.getInventorStr()!=null&&item.getInventorStr()!=""){
+                item.setInventor(new ArrayList<>());
                 List<String> inventors =   Arrays.asList(item.getInventorStr().split(";"));
                 inventors.forEach(
                         tem->{

+ 11 - 0
PAS/src/main/java/cn/cslg/pas/service/upLoadPatent/ExcutePatentDataEpo.java

@@ -52,6 +52,8 @@ public class ExcutePatentDataEpo implements IExcutePatentData {
     private final ProjectPatentLinkService projectPatentLinkService;
     private final PatentService patentService;
     private final PatentImageService patentImageService;
+    private Integer pTaskId = 0;
+    private Integer pTaskStatus = 0;
 
     /**
      * 解析获取专利数据
@@ -86,6 +88,10 @@ public class ExcutePatentDataEpo implements IExcutePatentData {
             List<PatentZhuLu> patents = serachBiblioData.getPatents();
             //2.遍历专利
             for (PatentZhuLu patent : patents) {
+                //判断若任务状态为已暂停,则结束生产
+                if (pTaskId.equals(task.getId()) && pTaskStatus == 4) {
+                    return;
+                }
                 PatentCell patentCell = new PatentCell();
                 patentCell.setProjectId(task.getProjectId());
                 PubNo pubNO = new PubNo();
@@ -570,4 +576,9 @@ public class ExcutePatentDataEpo implements IExcutePatentData {
         }
     }
 
+    public void setTaskStatus(Integer taskId, Integer taskStatus) {
+        this.pTaskId = taskId;
+        this.pTaskStatus = taskStatus;
+    }
+
 }

+ 20 - 9
PAS/src/main/java/cn/cslg/pas/service/upLoadPatent/ExcutePatentDataStar.java

@@ -47,7 +47,8 @@ public class ExcutePatentDataStar implements IExcutePatentData {
     private final FileUtils fileUtils;
     private final PantentQueueService pantentQueueService;
     private final UploadPatentBatchService uploadPatentBatchService;
-
+    private Integer pTaskId = 0;
+    private Integer pTaskStatus = 0;
 
     /**
      * 解析获取专利数据
@@ -57,22 +58,23 @@ public class ExcutePatentDataStar implements IExcutePatentData {
     @Override
     public void startExcute(Task task) throws IOException {
         //从任务关联网站导入任务表中取出当前任务
-        //List<AssoOsTaskQrtzTask> assoOsTaskQrtzTasks = assoOsTaskQrtzTaskService.list(new LambdaQueryWrapper<AssoOsTaskQrtzTask>().eq(AssoOsTaskQrtzTask::getTaskId, task.getId()));
-        ///AssoOsTaskQrtzTask assoOsTaskQrtzTask = assoOsTaskQrtzTasks.get(0);
         AssoOsTaskQrtzTask assoOsTaskQrtzTask = assoOsTaskQrtzTaskService.getById(task.getQrtzTaskId());
 
-        //从任务数据中获取专利总数量、检索式、下载字段
+        //从任务数据中获取专利总数量、检索式、下载字段、成功条数(即上一次位置)
         Integer total = assoOsTaskQrtzTask.getTotal();
         String conditions = assoOsTaskQrtzTask.getConditions();
         List<String> cells = Arrays.asList(assoOsTaskQrtzTask.getConfigCells().split(","));
+        Integer successNum = task.getSuccessNum();
 
         //定义每次检索的页码
         int pageNum = 0;
         //定义每次检索的专利数量(当前定义每次检索50件)
         int size = 50;
+        //int pageNum = successNum / size + 1;
+
 
         //1.根据专利总数量count遍历检索专利
-        for (int i = 1; i <= total; i += size) {
+        for (int i = successNum; i < total; i += size) {
             pageNum++;
             PatentStarListDto patentStarListDto = new PatentStarListDto()
                     .setCurrentQuery(conditions)
@@ -87,18 +89,22 @@ public class ExcutePatentDataStar implements IExcutePatentData {
                 ThrowException.throwXiaoShiException("发生未知错误,一般接口未检索出专利");
             }
 
-            List<StarPatentVO> patents = (List<StarPatentVO>) resultMap.get("records");
+            List<StarPatentVO> starPatents = (List<StarPatentVO>) resultMap.get("records");
             //遍历这一批专利(50个)
-            for (StarPatentVO starPatent : patents) {
+            for (int j = 0; j < starPatents.size(); j++) {
+                //判断若任务状态为已暂停,则结束生产
+                if (pTaskId.equals(task.getId()) && pTaskStatus == 4) {
+                    return;
+                }
                 try {
                     UploadParamsVO uploadParamsVO = new UploadParamsVO();
-                    setPatentZhuLu(starPatent, uploadParamsVO);
+                    setPatentZhuLu(starPatents.get(j), uploadParamsVO);
                     //保存专利基础数据(专利表"os_patent"),因为需要先拿到专利id供其他消费者部分使用
                     uploadPatentBatchService.getOneOrInsertOne(uploadParamsVO);
 
                     PQueueData pQueueData = new PQueueData()
                             .setTask(task)
-                            .setStarPatent(starPatent)
+                            .setStarPatent(starPatents.get(j))
                             .setUploadParamsVO(uploadParamsVO);
                     //装载专利著录
                     if (cells.contains("1")) {
@@ -486,5 +492,10 @@ public class ExcutePatentDataStar implements IExcutePatentData {
 
     }
 
+    public void setTaskStatus(Integer taskId, Integer taskStatus) {
+        this.pTaskId = taskId;
+        this.pTaskStatus = taskStatus;
+    }
+
 
 }

+ 1 - 0
PAS/src/main/java/cn/cslg/pas/service/upLoadPatent/PantentQueueService.java

@@ -629,6 +629,7 @@ public class PantentQueueService {
         this.patentZhuluQueueList.removeIf(queueData -> queueData.getTask().getId().equals(taskId));
         this.patentRightQueueList.removeIf(queueData -> queueData.getTask().getId().equals(taskId));
         this.patentInstructionTextQueueList.removeIf(queueData -> queueData.getTask().getId().equals(taskId));
+        this.patentInstructionPDFQueueList.removeIf(queueData -> queueData.getTask().getId().equals(taskId));
         //任务暂停时清除 patentIdMap(任务id + "|" + 专利id,拼接而成的专利的数量标识(作为当前某一个消费者消费完的这个专利的数量标识))中该任务的专利的数量标识
         Iterator<String> iterator = this.patentIdMap.keySet().iterator();
         while (iterator.hasNext()) {