|
@@ -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;
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
}
|