|
@@ -1,7 +1,9 @@
|
|
|
package cn.cslg.pas.service.upLoadPatent;
|
|
|
|
|
|
+import cn.cslg.pas.common.model.dto.PatentDTO;
|
|
|
import cn.cslg.pas.common.model.dto.UploadFileDTO;
|
|
|
import cn.cslg.pas.common.model.outApi.PatentStarListDto;
|
|
|
+import cn.cslg.pas.common.model.vo.KeyValueVO;
|
|
|
import cn.cslg.pas.common.model.vo.UploadParamsVO;
|
|
|
import cn.cslg.pas.common.model.vo.outApi.StarPatentVO;
|
|
|
import cn.cslg.pas.common.utils.FileUtils;
|
|
@@ -14,21 +16,20 @@ import cn.cslg.pas.service.UploadPatentBatchService;
|
|
|
import cn.cslg.pas.service.asso.AssoOsTaskQrtzTaskService;
|
|
|
import cn.cslg.pas.service.outApi.PatentStarApiService;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.fileupload.FileItem;
|
|
|
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
import org.springframework.web.multipart.commons.CommonsMultipartFile;
|
|
|
|
|
|
import java.io.*;
|
|
|
import java.net.URL;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Arrays;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
import java.util.regex.Matcher;
|
|
|
import java.util.regex.Pattern;
|
|
|
|
|
@@ -42,7 +43,6 @@ import java.util.regex.Pattern;
|
|
|
@RequiredArgsConstructor
|
|
|
@Service
|
|
|
public class ExcutePatentDataStar implements IExcutePatentData {
|
|
|
- private final AssoOsTaskQrtzTaskService assoOsTaskQrtzTaskService;
|
|
|
private final PatentStarApiService patentStarApiService;
|
|
|
private final FileUtils fileUtils;
|
|
|
private final PantentQueueService pantentQueueService;
|
|
@@ -69,79 +69,106 @@ public class ExcutePatentDataStar implements IExcutePatentData {
|
|
|
List<String> isAddPatentNos = task.getIsAddPatentNos(); //需要额外下载的专利号
|
|
|
List<String> isDeletePatentNos = task.getIsDeletePatentNos(); //起止条数中不需要下载的专利号
|
|
|
|
|
|
+ //下载isAdd中的专利 ↓
|
|
|
+ if (isAddPatentNos != null && isAddPatentNos.size() > 0) {
|
|
|
+ downLoadIsAddPatentNos(isAddPatentNos, task, orderBy, orderByType, dbType, cells);
|
|
|
+ }
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- //定义每次检索的页码
|
|
|
- int pageNum = 0;
|
|
|
- //定义每次检索的专利数量(当前定义每次检索50件)
|
|
|
- int size = 50;
|
|
|
- //1.根据专利总数量count遍历检索专利
|
|
|
- for (int i = successNum; i < total; i += size) {
|
|
|
- pageNum++;
|
|
|
- PatentStarListDto patentStarListDto = new PatentStarListDto()
|
|
|
- .setCurrentQuery(conditions)
|
|
|
- .setOrderBy(orderBy)
|
|
|
- .setOrderByType(orderByType)
|
|
|
- .setPageNum(pageNum)
|
|
|
- .setRowCount(size)
|
|
|
- .setDBType(dbType);
|
|
|
- //调用一般接口返回一批专利著录相关数据
|
|
|
- Map<String, Object> resultMap = patentStarApiService.patentStarSearchApi(patentStarListDto);
|
|
|
- if (resultMap == null || (Integer) resultMap.get("total") == 0) {
|
|
|
- ThrowException.throwXiaoShiException("发生未知错误");
|
|
|
+ //下载起止条数中的专利 ↓
|
|
|
+ if (endNumber != 0) {
|
|
|
+ int startPage; //检索开始页数
|
|
|
+ int startNum; //检索开始页数的开始专利位置
|
|
|
+ int endPage; //检索结束页数
|
|
|
+ int endNum; //检索结束页数的结束专利位置
|
|
|
+ if (startNumber % 50 != 0) {
|
|
|
+ startPage = startNumber / 50 + 1;
|
|
|
+ startNum = startNumber % 50;
|
|
|
+ } else {
|
|
|
+ startPage = startNumber / 50;
|
|
|
+ startNum = 50;
|
|
|
+ }
|
|
|
+ if (endNumber % 50 != 0) {
|
|
|
+ endPage = endNumber / 50 + 1;
|
|
|
+ endNum = endNumber % 50;
|
|
|
+ } else {
|
|
|
+ endPage = endNumber / 50;
|
|
|
+ endNum = 50;
|
|
|
}
|
|
|
|
|
|
- List<StarPatentVO> starPatents = (List<StarPatentVO>) resultMap.get("records");
|
|
|
- //遍历这一批专利(50个)
|
|
|
- for (int j = 0; j < starPatents.size(); j++) {
|
|
|
- //判断若任务状态为已暂停,则结束生产
|
|
|
- if (pTaskId.equals(task.getId()) && pTaskStatus == 4) {
|
|
|
- return;
|
|
|
+ //根据计算出的起止页数,一页一页检索
|
|
|
+ int pageNum = startPage;
|
|
|
+ for (int i = startPage; i <= endPage; i++) {
|
|
|
+ PatentStarListDto patentStarListDto = new PatentStarListDto()
|
|
|
+ .setCurrentQuery(conditions)
|
|
|
+ .setOrderBy(orderBy)
|
|
|
+ .setOrderByType(orderByType)
|
|
|
+ .setPageNum(pageNum++)
|
|
|
+ .setRowCount(50)
|
|
|
+ .setDBType(dbType);
|
|
|
+ //调用一般接口返回一批专利著录相关数据
|
|
|
+ Map<String, Object> resultMap = patentStarApiService.patentStarSearchApi(patentStarListDto);
|
|
|
+ if (resultMap == null || (Integer) resultMap.get("total") == 0) {
|
|
|
+ ThrowException.throwXiaoShiException("未检索到相关专利");
|
|
|
}
|
|
|
- try {
|
|
|
- UploadParamsVO uploadParamsVO = new UploadParamsVO();
|
|
|
- setPatentZhuLu(starPatents.get(j), uploadParamsVO);
|
|
|
- //保存专利基础数据(专利表"os_patent"),因为需要先拿到专利id供其他消费者部分使用
|
|
|
- uploadPatentBatchService.getOneOrInsertOne(uploadParamsVO);
|
|
|
|
|
|
- PQueueData pQueueData = new PQueueData()
|
|
|
- .setTask(task)
|
|
|
- .setStarPatent(starPatents.get(j))
|
|
|
- .setUploadParamsVO(uploadParamsVO);
|
|
|
- //装载专利著录
|
|
|
- if (cells.contains("1")) {
|
|
|
- pantentQueueService.zhuluToPQueue(pQueueData);
|
|
|
+ List<StarPatentVO> starPatents = (List<StarPatentVO>) resultMap.get("records");
|
|
|
+ //遍历这一页的专利
|
|
|
+ for (int j = 0; j < starPatents.size(); j++) {
|
|
|
+ //判断若任务状态为已暂停,则结束生产
|
|
|
+ if (pTaskId.equals(task.getId()) && pTaskStatus == 4) {
|
|
|
+ return;
|
|
|
}
|
|
|
- //装载权要
|
|
|
- if (cells.contains("2")) {
|
|
|
- pantentQueueService.rightToPQueue(pQueueData);
|
|
|
+ //若是第一页,并且还没遍历到所需起始专利位置,则跳过,继续遍历下一个,直到遍历到起所需起始专利,才开始下载
|
|
|
+ if (i == startPage && j < startNum - 1) {
|
|
|
+ continue;
|
|
|
}
|
|
|
- //装载说明书文本
|
|
|
- if (cells.contains("3")) {
|
|
|
- pantentQueueService.instructionTextToPQueue(pQueueData);
|
|
|
+ //若是最后一页,并且遍历到了所需终止专利位置,则下载结束
|
|
|
+ if (i == endPage && j == endNum) {
|
|
|
+ return;
|
|
|
}
|
|
|
- //装载说明书pdf
|
|
|
- if (cells.contains("4")) {
|
|
|
- pantentQueueService.instructionPDFToPQueue(pQueueData);
|
|
|
+ //若当前遍历到的专利号是需要删除的专利,则跳过,不下载它
|
|
|
+ if (isDeletePatentNos != null && isDeletePatentNos.size() > 0 && isDeletePatentNos.contains(starPatents.get(j).getApplicationNo())) {
|
|
|
+ continue;
|
|
|
}
|
|
|
- //装载摘要附图
|
|
|
- if (cells.contains("6")) {
|
|
|
- pantentQueueService.imageToPQueue(pQueueData);
|
|
|
+ try {
|
|
|
+ UploadParamsVO uploadParamsVO = new UploadParamsVO();
|
|
|
+ setPatentZhuLu(starPatents.get(j), uploadParamsVO);
|
|
|
+ //保存专利基础数据(专利表"os_patent"),因为需要先拿到专利id供其他消费者部分使用
|
|
|
+ uploadPatentBatchService.getOneOrInsertOne(uploadParamsVO);
|
|
|
+
|
|
|
+ PQueueData pQueueData = new PQueueData()
|
|
|
+ .setTask(task)
|
|
|
+ .setStarPatent(starPatents.get(j))
|
|
|
+ .setUploadParamsVO(uploadParamsVO);
|
|
|
+ //装载专利著录
|
|
|
+ if (cells.contains("1")) {
|
|
|
+ pantentQueueService.zhuluToPQueue(pQueueData);
|
|
|
+ }
|
|
|
+ //装载权要
|
|
|
+ if (cells.contains("2")) {
|
|
|
+ pantentQueueService.rightToPQueue(pQueueData);
|
|
|
+ }
|
|
|
+ //装载说明书文本
|
|
|
+ if (cells.contains("3")) {
|
|
|
+ pantentQueueService.instructionTextToPQueue(pQueueData);
|
|
|
+ }
|
|
|
+ //装载说明书pdf
|
|
|
+ if (cells.contains("4")) {
|
|
|
+ pantentQueueService.instructionPDFToPQueue(pQueueData);
|
|
|
+ }
|
|
|
+ //装载摘要附图
|
|
|
+ if (cells.contains("6")) {
|
|
|
+ pantentQueueService.imageToPQueue(pQueueData);
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ //继续下一个专利
|
|
|
}
|
|
|
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- //继续下一个专利
|
|
|
}
|
|
|
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
|
|
@@ -280,19 +307,41 @@ public class ExcutePatentDataStar implements IExcutePatentData {
|
|
|
}
|
|
|
|
|
|
//以下 ↓装载的是调用"获得中国专利法律状态"接口返回的专利相关数据
|
|
|
+ PatentAffair patentAffair = new PatentAffair();
|
|
|
String cnLegalApiStr = patentStarApiService.getCnLegalApi(appNo);
|
|
|
List<ChinaLeagalStatus> chinaLeagalStatuses = JSON.parseArray(cnLegalApiStr, ChinaLeagalStatus.class);
|
|
|
- ChinaLeagalStatus chinaLeagalStatus = chinaLeagalStatuses.get(0);
|
|
|
- //装载事务表的status(公开|授权|驳回|权力转移。。。)
|
|
|
- PatentAffair patentAffair = new PatentAffair();
|
|
|
- patentAffair.setStatus(chinaLeagalStatus.getLegalStatus());
|
|
|
- if (chinaLeagalStatus.getLegalDate() != null && !chinaLeagalStatus.getLegalDate().equals("")) {
|
|
|
- patentAffair.setDateTime(Integer.parseInt(chinaLeagalStatus.getLegalDate()));
|
|
|
+ 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, "详细信息");
|
|
|
+ for (int i = 0; i < chinaLeagalStatuses.size(); i++) {
|
|
|
+ if (i == 0) {
|
|
|
+ patentAffair.setStatus(chinaLeagalStatuses.get(i).getLegalStatus());
|
|
|
+ }
|
|
|
+ contentMap.put(0, chinaLeagalStatuses.get(i).getLegalDate());
|
|
|
+ contentMap.put(1, chinaLeagalStatuses.get(i).getLegalStatus());
|
|
|
+ contentMap.put(2, chinaLeagalStatuses.get(i).getLegalStatusInfo());
|
|
|
+ contentMap.put(3, chinaLeagalStatuses.get(i).getDETAIL());
|
|
|
+ ArrayList<KeyValueVO.InpadocData> inpadocDatas = new ArrayList<>();
|
|
|
+ for (int j = 0; j < 4; j++) {
|
|
|
+ KeyValueVO.InpadocData inpadocData = new KeyValueVO.InpadocData();
|
|
|
+ inpadocData.setName(nameMap.get(j));
|
|
|
+ inpadocData.setContent(contentMap.get(j));
|
|
|
+ inpadocDatas.add(inpadocData);
|
|
|
+ }
|
|
|
+ KeyValueVO keyValueVO = new KeyValueVO();
|
|
|
+ keyValueVO.setInpadocData(inpadocDatas);
|
|
|
+ lst.add(keyValueVO);
|
|
|
}
|
|
|
- uploadParamsVO.setPatentAffair(patentAffair);
|
|
|
-
|
|
|
+ //装载事务表的status(公开|授权|驳回|权力转移。。。)
|
|
|
//最后将 patent装载到 uploadParamsVO
|
|
|
uploadParamsVO.setPatent(patent);
|
|
|
+ String content = JSONObject.toJSONString(lst);
|
|
|
+ patentAffair.setContent(content);
|
|
|
+ uploadParamsVO.setPatentAffair(patentAffair);
|
|
|
|
|
|
}
|
|
|
|
|
@@ -314,12 +363,13 @@ public class ExcutePatentDataStar implements IExcutePatentData {
|
|
|
String cnFullXmlStr = patentStarApiService.getCnFullXmlApi(appNo);
|
|
|
|
|
|
//使用正则表达式拼接出权要原文
|
|
|
- String regex = "(?<=<claim-text>)[\\w\\W]+?(?=</claim-text>)";
|
|
|
+ String regex = "(?<=<claim id=.{1,110}>)[\\w\\W]+?(?=</claim>)";
|
|
|
Pattern compile = Pattern.compile(regex);
|
|
|
Matcher matcher = compile.matcher(cnFullXmlStr);
|
|
|
StringBuilder builder = new StringBuilder();
|
|
|
while (matcher.find()) {
|
|
|
- builder.append(matcher.group()).append("\r\n");
|
|
|
+ String right = matcher.group().replaceAll("<.*?>", "");
|
|
|
+ builder.append(right).append("\r\n");
|
|
|
}
|
|
|
|
|
|
String patentRightText = builder + "";
|
|
@@ -500,6 +550,77 @@ public class ExcutePatentDataStar implements IExcutePatentData {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 下载指定多个专利号专利
|
|
|
+ *
|
|
|
+ * @param isAddPatentNos 多个专利号
|
|
|
+ */
|
|
|
+ public void downLoadIsAddPatentNos(List<String> isAddPatentNos, Task task, String orderBy, String orderByType, String dbType, List<String> cells) throws IOException {
|
|
|
+ String conditions = "(AN=(" + StringUtils.join(isAddPatentNos, " OR ") + "))";
|
|
|
+
|
|
|
+ int pageNum = 1;
|
|
|
+ for (int i = 0; i < isAddPatentNos.size(); i += 50) {
|
|
|
+ PatentStarListDto patentStarListDto = new PatentStarListDto()
|
|
|
+ .setCurrentQuery(conditions)
|
|
|
+ .setOrderBy(orderBy)
|
|
|
+ .setOrderByType(orderByType)
|
|
|
+ .setPageNum(pageNum++)
|
|
|
+ .setRowCount(50)
|
|
|
+ .setDBType(dbType);
|
|
|
+ Map<String, Object> resultMap = patentStarApiService.patentStarSearchApi(patentStarListDto);
|
|
|
+ if (resultMap == null || (Integer) resultMap.get("total") == 0) {
|
|
|
+ ThrowException.throwXiaoShiException("发生未知错误,一般接口未检索出专利");
|
|
|
+ }
|
|
|
+
|
|
|
+ List<StarPatentVO> starPatents = (List<StarPatentVO>) resultMap.get("records");
|
|
|
+ //遍历这一页的专利
|
|
|
+ for (StarPatentVO starPatent : starPatents) {
|
|
|
+ //判断若任务状态为已暂停,则结束生产
|
|
|
+ if (pTaskId.equals(task.getId()) && pTaskStatus == 4) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ UploadParamsVO uploadParamsVO = new UploadParamsVO();
|
|
|
+ setPatentZhuLu(starPatent, uploadParamsVO);
|
|
|
+ //保存专利基础数据(专利表"os_patent"),因为需要先拿到专利id供其他消费者部分使用
|
|
|
+ uploadPatentBatchService.getOneOrInsertOne(uploadParamsVO);
|
|
|
+
|
|
|
+ PQueueData pQueueData = new PQueueData()
|
|
|
+ .setTask(task)
|
|
|
+ .setStarPatent(starPatent)
|
|
|
+ .setUploadParamsVO(uploadParamsVO);
|
|
|
+ //装载专利著录
|
|
|
+ if (cells.contains("1")) {
|
|
|
+ pantentQueueService.zhuluToPQueue(pQueueData);
|
|
|
+ }
|
|
|
+ //装载权要
|
|
|
+ if (cells.contains("2")) {
|
|
|
+ pantentQueueService.rightToPQueue(pQueueData);
|
|
|
+ }
|
|
|
+ //装载说明书文本
|
|
|
+ if (cells.contains("3")) {
|
|
|
+ pantentQueueService.instructionTextToPQueue(pQueueData);
|
|
|
+ }
|
|
|
+ //装载说明书pdf
|
|
|
+ if (cells.contains("4")) {
|
|
|
+ pantentQueueService.instructionPDFToPQueue(pQueueData);
|
|
|
+ }
|
|
|
+ //装载摘要附图
|
|
|
+ if (cells.contains("6")) {
|
|
|
+ pantentQueueService.imageToPQueue(pQueueData);
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ //继续下一个专利
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
public void setTaskStatus(Integer taskId, Integer taskStatus) {
|
|
|
this.pTaskId = taskId;
|
|
|
this.pTaskStatus = taskStatus;
|