PatentStarApiService.java 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729
  1. package cn.cslg.pas.service.outApi;
  2. import cn.cslg.pas.common.model.PersonnelVO;
  3. import cn.cslg.pas.common.model.outApi.PatentStarDto;
  4. import cn.cslg.pas.common.model.outApi.PatentStarListDto;
  5. import cn.cslg.pas.common.model.vo.outApi.StarPatentVO;
  6. import cn.cslg.pas.common.utils.CacheUtils;
  7. import cn.cslg.pas.common.utils.FormatUtil;
  8. import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
  9. import cn.cslg.pas.common.utils.ThrowException;
  10. import cn.cslg.pas.domain.*;
  11. import cn.cslg.pas.service.upLoadPatent.RetrieveRecordService;
  12. import com.alibaba.fastjson.JSONArray;
  13. import com.alibaba.fastjson.JSONObject;
  14. import io.swagger.v3.oas.models.security.SecurityScheme;
  15. import lombok.RequiredArgsConstructor;
  16. import lombok.extern.slf4j.Slf4j;
  17. import okhttp3.FormBody;
  18. import okhttp3.OkHttpClient;
  19. import okhttp3.Request;
  20. import okhttp3.Response;
  21. import org.springframework.beans.BeanUtils;
  22. import org.springframework.stereotype.Service;
  23. import java.io.IOException;
  24. import java.util.*;
  25. import java.util.concurrent.TimeUnit;
  26. import java.util.regex.Matcher;
  27. import java.util.regex.Pattern;
  28. /**
  29. * 调用外部接口的Service类 PCS:权限系统
  30. *
  31. * @Author chenyu
  32. * @Date 2023/4/25
  33. */
  34. @RequiredArgsConstructor
  35. @Slf4j
  36. @Service
  37. public class PatentStarApiService {
  38. private final RetrieveRecordService retrieveRecordService;
  39. private final CacheUtils cacheUtils;
  40. private final LoginUtils loginUtils;
  41. public static String formatValue(String value) {
  42. return value.replace("~", ">");
  43. }
  44. public static String formQuery(String query) {
  45. query = query.toUpperCase();
  46. query = "(" + query + ")";
  47. query = query
  48. .replace(" AND ", "*")
  49. .replace(" OR ", "+")
  50. .replace(" NOT ", "-");
  51. //记录偏移量
  52. int t = 0;
  53. StringBuilder query2 = new StringBuilder(query);
  54. //匹配形如ab=(cd OR ef);
  55. String regexOrg = "([^=^\\+^\\(^\\)]+=\\([^=^\\)]+\\))+?";
  56. Pattern patternOrg = Pattern.compile(regexOrg);
  57. Matcher matcherOrg = patternOrg.matcher(query);
  58. while (matcherOrg.find()) {
  59. String a = matcherOrg.group();
  60. String[] bc = a.split("=");
  61. String b = bc[0];
  62. b.length();
  63. query2.delete(matcherOrg.start() + t, matcherOrg.start() + b.length() + 1 + t);
  64. t = t - b.length() - 1;
  65. String c = bc[1];
  66. String regexOrg1 = "([^\\+^\\*^\\-^\\(^\\)])+";
  67. Pattern patternOrg1 = Pattern.compile(regexOrg1);
  68. Matcher matcherOrg1 = patternOrg1.matcher(c);
  69. while (matcherOrg1.find()) {
  70. String r = matcherOrg1.group();
  71. System.out.println(r);
  72. query2.insert(matcherOrg.start() + b.length() + 1 + matcherOrg1.start() + t, b + "=");
  73. t = t + b.length() + 1;
  74. }
  75. }
  76. System.out.println(query2);
  77. return query2.toString();
  78. }
  79. public static String formatQuery(String query) {
  80. query = PatentStarApiService.formQuery(query);
  81. StringBuilder sb = new StringBuilder(query);
  82. String regex = "(?<=[\\(\\)\\+\\-=\\*])[^\\*^\\-^\\+^\\(^\\)]+?(?=[\\(\\+\\-=\\)\\*])";
  83. Pattern pattern = Pattern.compile(regex);
  84. Matcher matcher = pattern.matcher(query);
  85. Map<Integer, Integer> map = new LinkedHashMap<>();
  86. while (matcher.find()) {
  87. String a = matcher.group();
  88. String regex2 = "[^\\(^\\)^\\+^-^=^*]";
  89. Pattern pattern2 = Pattern.compile(regex2);
  90. Matcher matcher2 = pattern2.matcher(a);
  91. Integer start = matcher.start();
  92. if (matcher2.find()) {
  93. start += matcher2.start();
  94. }
  95. map.put(start, matcher.end());
  96. }
  97. if (map.size() == 0) {
  98. return "";
  99. }
  100. List<Integer> list = new ArrayList<Integer>(map.keySet());
  101. for (int i = 0; i < list.size(); i += 2) {
  102. int start1 = list.get(i);
  103. int end1 = map.get(list.get(i));
  104. int len1 = end1 - start1;
  105. int start2 = list.get(i + 1);
  106. int end2 = map.get(list.get(i + 1));
  107. int len2 = end2 - start2;
  108. int diff = len2 - len1;
  109. if (diff > 0) {
  110. sb.replace(start1, end1, formatValue(query.substring(start2, end2)));
  111. sb.replace(start2 + diff, end2 + diff, query.substring(start1, end1));
  112. } else {
  113. sb.replace(start2, end2, query.substring(start1, end1));
  114. sb.replace(start1, end1, formatValue(query.substring(start2, end2)));
  115. }
  116. }
  117. String reStr = sb.toString();
  118. reStr = "FXX" + reStr.replace("=", "/");
  119. return reStr;
  120. }
  121. //装载专利信息
  122. public void loadStarPatentVOS(List<StarPatentVO> starPatentVOS, JSONObject Data) {
  123. String aa = Data.toString();
  124. starPatentVOS.forEach(item -> {
  125. //如果有公开号,则将公开号作为专利号
  126. if (item.getPublicNo() != null && !item.getPublicNo().equals("")) {
  127. item.setPatentNo(item.getPublicNo());
  128. //如果没有公开号,但是有公告号,则将公告号作为公开号和专利号
  129. } else if (item.getAnnounceNo() != null && !item.getAnnounceNo().equals("")) {
  130. item.setPublicNo(item.getAnnounceNo());
  131. item.setPatentNo(item.getAnnounceNo());
  132. } else {
  133. System.out.println("");
  134. }
  135. //陈宇 ↓ 如果没有公开日就将公告日作为公开日
  136. if (item.getPublicDate() == null || item.getPublicDate().equals("")) {
  137. item.setPublicDate(item.getPublicAccreditDate());
  138. }
  139. item.setApplicant(new ArrayList<>());
  140. item.setAgent(new ArrayList<>());
  141. item.setIpcList(Arrays.asList(item.getIpcListStr().split(";")));
  142. List<String> applicants = Arrays.asList(item.getApplicantStr().split(";"));
  143. //装载申请人
  144. applicants.forEach(
  145. tem -> {
  146. PatentApplicant patentApplicant = new PatentApplicant();
  147. patentApplicant.setType(2);
  148. patentApplicant.setDataType(2);
  149. patentApplicant.setName(tem);
  150. item.getApplicant().add(patentApplicant);
  151. }
  152. );
  153. if (item.getCurrentApplicantStr() != null && !item.getCurrentApplicantStr().equals("")) {
  154. List<String> cApplicants = Arrays.asList(item.getCurrentApplicantStr().split(";"));
  155. cApplicants.forEach(
  156. tem -> {
  157. PatentApplicant patentApplicant = new PatentApplicant();
  158. patentApplicant.setType(2);
  159. patentApplicant.setDataType(1);
  160. patentApplicant.setName(tem);
  161. item.getApplicant().add(patentApplicant);
  162. }
  163. );
  164. }
  165. //代理机构
  166. if (item.getAgencyStr() != null && !item.getAgencyStr().equals("")) {
  167. PatentAgency patentAgency = new PatentAgency();
  168. patentAgency.setName(item.getAgencyStr().split(" ")[0]);
  169. item.setAgency(patentAgency);
  170. }
  171. //发明人
  172. if (item.getInventorStr() != null && !item.getInventorStr().equals("")) {
  173. item.setInventor(new ArrayList<>());
  174. List<String> inventors = Arrays.asList(item.getInventorStr().split(";"));
  175. inventors.forEach(
  176. tem -> {
  177. PatentInventor patentInventor = new PatentInventor();
  178. patentInventor.setName(tem);
  179. item.getInventor().add(patentInventor);
  180. ;
  181. }
  182. );
  183. }
  184. //代理人
  185. if (item.getAgentStr() != null && !item.getAgentStr().equals("")) {
  186. List<String> agent = Arrays.asList(item.getAgentStr().split(";"));
  187. agent.forEach(
  188. tem -> {
  189. PatentAgent patentAgent = new PatentAgent();
  190. patentAgent.setName(tem);
  191. item.getAgent().add(patentAgent);
  192. }
  193. );
  194. }
  195. //附图
  196. String apN = item.getApplicationNo().replace(".", "");
  197. item.setAbstractPath(this.getPictureApi(apN.substring(2)));
  198. if (item.getLG() != null) {
  199. switch (item.getLG()) {
  200. case 1:
  201. item.setSimpleStatus("有效");
  202. break;
  203. case 2:
  204. item.setSimpleStatus("失效");
  205. break;
  206. case 3:
  207. item.setSimpleStatus("审中");
  208. break;
  209. }
  210. }
  211. //法律状态
  212. });
  213. }
  214. public Map<String, Object> patentStarSearchLocal(PatentStarListDto patentStarListDto) throws IOException {
  215. RetrieveRecord retrieveRecord = new RetrieveRecord();
  216. retrieveRecord.setConditions(patentStarListDto.getCurrentQuery());
  217. if (patentStarListDto.getRetrieveRecordId() != null) {
  218. //retrieveRecord = retrieveRecordService.getById(patentStarListDto.getRetrieveRecordId());
  219. //patentStarListDto.setCurrentQuery(retrieveRecord.getConditions());
  220. //patentStarListDto.setDBType(retrieveRecord.getDbType());
  221. }
  222. Map<String, Object> map = this.patentStarSearchApi(patentStarListDto);
  223. if (map == null) {
  224. ThrowException.throwXiaoShiException("检索失败,请检查检索式");
  225. }
  226. //记录检索历史
  227. retrieveRecord.setRetrieveTime(new Date());
  228. retrieveRecord.setTotalNum(Integer.parseInt(map.get("total").toString()));
  229. retrieveRecord.setDbType(patentStarListDto.getDBType());
  230. if (patentStarListDto.getRetrieveRecordId() == null) {
  231. //获取创建人信息
  232. PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  233. retrieveRecord.setCreateTime(new Date());
  234. retrieveRecord.setCreateId(personnelVO.getId());
  235. retrieveRecord.setTenantId(personnelVO.getTenantId());
  236. retrieveRecord.insert();
  237. }
  238. // else {
  239. // retrieveRecord.updateById();
  240. // }
  241. map.put("retrieveRecordId", retrieveRecord.getId());
  242. return map;
  243. }
  244. public Map<String, Object> patentStarSearchApi(PatentStarListDto patentStarListDto) throws IOException {
  245. try {
  246. String formQuery = patentStarListDto.getCurrentQuery();
  247. patentStarListDto.setCurrentQuery(PatentStarApiService.formatQuery(formQuery));
  248. } catch (Exception e) {
  249. return null;
  250. }
  251. PatentStarDto patentStarDto = new PatentStarDto();
  252. BeanUtils.copyProperties(patentStarListDto, patentStarDto);
  253. String json = JSONObject.toJSONString(patentStarDto);
  254. String url = "http://s.patentstar.com.cn/SearchAPI/PatentSearch/ResultGet";
  255. Long currentTimeMillis = System.currentTimeMillis() / 1000;
  256. String Sign = "FNYJD7902206FFB741E163BE6536C3689D55" + currentTimeMillis.toString();
  257. String signMd5 = FormatUtil.MD5(Sign);
  258. // 创建一个OkHttpClient对象
  259. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  260. .connectTimeout(60, TimeUnit.SECONDS)
  261. .writeTimeout(60, TimeUnit.SECONDS)
  262. .readTimeout(60, TimeUnit.SECONDS)
  263. .build();
  264. // 创建一个RequestBody(参数1:数据类型 参数2传递的json串)
  265. FormBody.Builder builder = new FormBody.Builder();
  266. builder.add("AppID", "K8FFB741E163BE6536");
  267. builder.add("Stamp", currentTimeMillis.toString());
  268. builder.add("Sign", signMd5);
  269. builder.add("QueryJson", json);
  270. FormBody requestBody = builder.build();
  271. // 创建一个请求对象
  272. Request request = new Request.Builder().url(url).post(requestBody).build();
  273. // 发送请求获取响应
  274. try {
  275. Response response = okHttpClient.newCall(request).execute();
  276. // 判断请求是否成功
  277. if (response.isSuccessful()) {
  278. JSONObject jsonObject = JSONObject.parseObject(Objects.requireNonNull(response.body()).string());
  279. if (jsonObject.get("Ret").equals(500) || jsonObject.get("Data") == null) {
  280. return null;
  281. }
  282. JSONObject Data = (JSONObject) jsonObject.get("Data");
  283. List<StarPatentVO> starPatentVOS = JSONArray.parseArray(Data.get("List").toString(), StarPatentVO.class);
  284. this.loadStarPatentVOS(starPatentVOS, Data);
  285. // 打印服务端返回结果
  286. // return Objects.requireNonNull(response.body()).string();
  287. Map<String, Object> reMap = new HashMap<>();
  288. reMap.put("size", patentStarListDto.getRowCount());
  289. reMap.put("current", patentStarListDto.getPageNum());
  290. reMap.put("records", starPatentVOS);
  291. reMap.put("total", Data.get("HitCount"));
  292. return reMap;
  293. }
  294. } catch (IOException e) {
  295. e.printStackTrace();
  296. return null;
  297. }
  298. return null;
  299. }
  300. /**
  301. * @param appNo
  302. * @return
  303. * @throws IOException
  304. * @author 李仁杰
  305. * 从专利之星获取中国专利著录
  306. */
  307. public String getCnBibApi(String appNo) {
  308. String url = "https://api.patentstar.com.cn/api/Patent/CnBibo/" + appNo;
  309. String appId = "2000041";
  310. String appkey = "F0E183D5F02C48E391F5FADF1B646F54";
  311. Long currentTimeMillis = System.currentTimeMillis() / 1000;
  312. String Sign = appId + appkey + currentTimeMillis.toString();
  313. String signMd5 = FormatUtil.MD5(Sign);
  314. // 创建一个OkHttpClient对象
  315. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  316. .connectTimeout(60, TimeUnit.SECONDS)
  317. .writeTimeout(60, TimeUnit.SECONDS)
  318. .readTimeout(60, TimeUnit.SECONDS)
  319. .build();
  320. // 创建一个请求对象
  321. Request request = new Request.Builder().url(url)
  322. .addHeader("_appid", "2000041")
  323. .addHeader("_timestamp", currentTimeMillis.toString())
  324. .addHeader("_sign", signMd5)
  325. .get().build();
  326. // 发送请求获取响应
  327. try {
  328. Response response = okHttpClient.newCall(request).execute();
  329. // 判断请求是否成功
  330. if (response.isSuccessful()) {
  331. response.body().toString();
  332. // 打印服务端返回结果
  333. return Objects.requireNonNull(response.body()).string();
  334. }
  335. } catch (IOException e) {
  336. e.printStackTrace();
  337. }
  338. return "{}";
  339. }
  340. /**
  341. * @param
  342. * @return
  343. * @throws IOException
  344. * @author 李仁杰
  345. * 从专利之星获取中国专利摘要附图
  346. */
  347. public String getPictureApi(String appNo) {
  348. String url = "https://api.patentstar.com.cn/api/Patent/CnMainImage/" + appNo;
  349. String appId = "2000041";
  350. String appkey = "F0E183D5F02C48E391F5FADF1B646F54";
  351. Long currentTimeMillis = System.currentTimeMillis() / 1000;
  352. String Sign = appId + appkey + currentTimeMillis.toString();
  353. String signMd5 = FormatUtil.MD5(Sign);
  354. // 创建一个OkHttpClient对象
  355. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  356. .connectTimeout(60, TimeUnit.SECONDS)
  357. .writeTimeout(60, TimeUnit.SECONDS)
  358. .readTimeout(60, TimeUnit.SECONDS)
  359. .build();
  360. // 创建一个请求对象
  361. Request request = new Request.Builder().url(url)
  362. .addHeader("_appid", "2000041")
  363. .addHeader("_timestamp", currentTimeMillis.toString())
  364. .addHeader("_sign", signMd5)
  365. .get().build();
  366. // 发送请求获取响应
  367. try {
  368. Response response = okHttpClient.newCall(request).execute();
  369. // 判断请求是否成功
  370. if (response.isSuccessful()) {
  371. response.body().toString();
  372. // 打印服务端返回结果
  373. return Objects.requireNonNull(response.body()).string();
  374. }
  375. } catch (IOException e) {
  376. e.printStackTrace();
  377. }
  378. return "{}";
  379. }
  380. /**
  381. * @param appNo
  382. * @return
  383. * @throws IOException
  384. * @author 李仁杰
  385. * 从专利之星获取中国专利外观图
  386. */
  387. public String getWGPictureApi(String appNo) throws IOException {
  388. String url = "https://api.patentstar.com.cn/api/Patent/CnWGImage/" + appNo;
  389. String appId = "2000041";
  390. String appkey = "F0E183D5F02C48E391F5FADF1B646F54";
  391. Long currentTimeMillis = System.currentTimeMillis() / 1000;
  392. String Sign = appId + appkey + currentTimeMillis.toString();
  393. String signMd5 = FormatUtil.MD5(Sign);
  394. // 创建一个OkHttpClient对象
  395. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  396. .connectTimeout(60, TimeUnit.SECONDS)
  397. .writeTimeout(60, TimeUnit.SECONDS)
  398. .readTimeout(60, TimeUnit.SECONDS)
  399. .build();
  400. // 创建一个请求对象
  401. Request request = new Request.Builder().url(url)
  402. .addHeader("_appid", "2000041")
  403. .addHeader("_timestamp", currentTimeMillis.toString())
  404. .addHeader("_sign", signMd5)
  405. .get().build();
  406. // 发送请求获取响应
  407. try {
  408. Response response = okHttpClient.newCall(request).execute();
  409. // 判断请求是否成功
  410. if (response.isSuccessful()) {
  411. response.body().toString();
  412. // 打印服务端返回结果
  413. return Objects.requireNonNull(response.body()).string();
  414. }
  415. } catch (IOException e) {
  416. e.printStackTrace();
  417. }
  418. return "{}";
  419. }
  420. /**
  421. * @param appNo
  422. * @return
  423. * @throws IOException
  424. * @author 李仁杰
  425. * 从专利之星获取中国专利法律状态
  426. */
  427. public String getCnLegalApi(String appNo) {
  428. String url = "https://api.patentstar.com.cn/api/Patent/CnLegal/" + appNo;
  429. String appId = "2000041";
  430. String appkey = "F0E183D5F02C48E391F5FADF1B646F54";
  431. Long currentTimeMillis = System.currentTimeMillis() / 1000;
  432. String Sign = appId + appkey + currentTimeMillis.toString();
  433. String signMd5 = FormatUtil.MD5(Sign);
  434. // 创建一个OkHttpClient对象
  435. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  436. .connectTimeout(60, TimeUnit.SECONDS)
  437. .writeTimeout(60, TimeUnit.SECONDS)
  438. .readTimeout(60, TimeUnit.SECONDS)
  439. .build();
  440. // 创建一个请求对象
  441. Request request = new Request.Builder().url(url)
  442. .addHeader("_appid", "2000041")
  443. .addHeader("_timestamp", currentTimeMillis.toString())
  444. .addHeader("_sign", signMd5)
  445. .get().build();
  446. // 发送请求获取响应
  447. try {
  448. Response response = okHttpClient.newCall(request).execute();
  449. // 判断请求是否成功
  450. if (response.isSuccessful()) {
  451. response.body().toString();
  452. // 打印服务端返回结果
  453. return Objects.requireNonNull(response.body()).string();
  454. }
  455. } catch (IOException e) {
  456. e.printStackTrace();
  457. }
  458. return "{}";
  459. }
  460. /**
  461. * @param appNo
  462. * @return
  463. * @throws IOException
  464. * @author 李仁杰
  465. * 从专利之星获取中国专利全文图片
  466. */
  467. public String getCnPdfApi(String appNo) throws IOException {
  468. String url = "https://api.patentstar.com.cn/api/Patent/CnPdf/" + appNo;
  469. String appId = "2000041";
  470. String appkey = "F0E183D5F02C48E391F5FADF1B646F54";
  471. Long currentTimeMillis = System.currentTimeMillis() / 1000;
  472. String Sign = appId + appkey + currentTimeMillis.toString();
  473. String signMd5 = FormatUtil.MD5(Sign);
  474. // 创建一个OkHttpClient对象
  475. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  476. .connectTimeout(60, TimeUnit.SECONDS)
  477. .writeTimeout(60, TimeUnit.SECONDS)
  478. .readTimeout(60, TimeUnit.SECONDS)
  479. .build();
  480. // 创建一个请求对象
  481. Request request = new Request.Builder().url(url)
  482. .addHeader("_appid", "2000041")
  483. .addHeader("_timestamp", currentTimeMillis.toString())
  484. .addHeader("_sign", signMd5)
  485. .get().build();
  486. // 发送请求获取响应
  487. try {
  488. Response response = okHttpClient.newCall(request).execute();
  489. // 判断请求是否成功
  490. if (response.isSuccessful()) {
  491. response.body().toString();
  492. // 打印服务端返回结果
  493. return Objects.requireNonNull(response.body()).string();
  494. }
  495. } catch (IOException e) {
  496. e.printStackTrace();
  497. }
  498. return "{}";
  499. }
  500. /**
  501. * @param appNo
  502. * @return
  503. * @throws IOException
  504. * @author 李仁杰
  505. * 从专利之星获取中国专利全文文本
  506. */
  507. public String getCnFullXmlApi(String appNo) throws IOException {
  508. String url = "https://api.patentstar.com.cn/api/Patent/CnFullXml/" + appNo;
  509. String appId = "2000041";
  510. String appkey = "F0E183D5F02C48E391F5FADF1B646F54";
  511. Long currentTimeMillis = System.currentTimeMillis() / 1000;
  512. String Sign = appId + appkey + currentTimeMillis.toString();
  513. String signMd5 = FormatUtil.MD5(Sign);
  514. // 创建一个OkHttpClient对象
  515. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  516. .connectTimeout(60, TimeUnit.SECONDS)
  517. .writeTimeout(60, TimeUnit.SECONDS)
  518. .readTimeout(60, TimeUnit.SECONDS)
  519. .build();
  520. // 创建一个请求对象
  521. Request request = new Request.Builder().url(url)
  522. .addHeader("_appid", "2000041")
  523. .addHeader("_timestamp", currentTimeMillis.toString())
  524. .addHeader("_sign", signMd5)
  525. .get().build();
  526. // 发送请求获取响应
  527. try {
  528. Response response = okHttpClient.newCall(request).execute();
  529. // 判断请求是否成功
  530. if (response.isSuccessful()) {
  531. response.body().toString();
  532. // 打印服务端返回结果
  533. return Objects.requireNonNull(response.body()).string();
  534. }
  535. } catch (IOException e) {
  536. e.printStackTrace();
  537. }
  538. return "{}";
  539. }
  540. /**
  541. * @param patentNo
  542. * @return
  543. * @throws IOException
  544. * @author 李仁杰
  545. * 从专利之星获取世界专利pdf
  546. */
  547. public String getEnPdfApi(String patentNo) {
  548. String url = " https://api.patentstar.com.cn/api/Patent/EnPdf/" + patentNo;
  549. String appId = "2000041";
  550. String appkey = "F0E183D5F02C48E391F5FADF1B646F54";
  551. Long currentTimeMillis = System.currentTimeMillis() / 1000;
  552. String Sign = appId + appkey + currentTimeMillis.toString();
  553. String signMd5 = FormatUtil.MD5(Sign);
  554. // 创建一个OkHttpClient对象
  555. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  556. .connectTimeout(60, TimeUnit.SECONDS)
  557. .writeTimeout(60, TimeUnit.SECONDS)
  558. .readTimeout(60, TimeUnit.SECONDS)
  559. .build();
  560. // 创建一个请求对象
  561. Request request = new Request.Builder().url(url)
  562. .addHeader("_appid", "2000041")
  563. .addHeader("_timestamp", currentTimeMillis.toString())
  564. .addHeader("_sign", signMd5)
  565. .get().build();
  566. // 发送请求获取响应
  567. try {
  568. Response response = okHttpClient.newCall(request).execute();
  569. // 判断请求是否成功
  570. if (response.isSuccessful()) {
  571. response.body().toString();
  572. // 打印服务端返回结果
  573. return Objects.requireNonNull(response.body()).string();
  574. }
  575. } catch (IOException e) {
  576. e.printStackTrace();
  577. }
  578. return "{}";
  579. }
  580. /**
  581. * @param patentNo
  582. * @return
  583. * @throws IOException
  584. * @author 李仁杰
  585. * 从专利之星获取世界专利著录信息
  586. */
  587. public String getENBibApi(String patentNo) {
  588. String url = "https://api.patentstar.com.cn/api/Patent/ENBib/" + patentNo;
  589. String appId = "2000041";
  590. String appkey = "F0E183D5F02C48E391F5FADF1B646F54";
  591. Long currentTimeMillis = System.currentTimeMillis() / 1000;
  592. String Sign = appId + appkey + currentTimeMillis.toString();
  593. String signMd5 = FormatUtil.MD5(Sign);
  594. // 创建一个OkHttpClient对象
  595. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  596. .connectTimeout(60, TimeUnit.SECONDS)
  597. .writeTimeout(60, TimeUnit.SECONDS)
  598. .readTimeout(60, TimeUnit.SECONDS)
  599. .build();
  600. // 创建一个请求对象
  601. Request request = new Request.Builder().url(url)
  602. .addHeader("_appid", "2000041")
  603. .addHeader("_timestamp", currentTimeMillis.toString())
  604. .addHeader("_sign", signMd5)
  605. .get().build();
  606. // 发送请求获取响应
  607. try {
  608. Response response = okHttpClient.newCall(request).execute();
  609. // 判断请求是否成功
  610. if (response.isSuccessful()) {
  611. response.body().toString();
  612. // 打印服务端返回结果
  613. return Objects.requireNonNull(response.body()).string();
  614. }
  615. } catch (IOException e) {
  616. e.printStackTrace();
  617. }
  618. return "{}";
  619. }
  620. /**
  621. * @param patentNo
  622. * @return
  623. * @throws IOException
  624. * @author 李仁杰
  625. * 从专利之星获取同族专利
  626. */
  627. public String getFamilyByPubNoApi(String patentNo) {
  628. String url = "https://api.patentstar.com.cn/api/Patent/FamilyByPubNo/" + patentNo;
  629. String appId = "2000041";
  630. String appkey = "F0E183D5F02C48E391F5FADF1B646F54";
  631. Long currentTimeMillis = System.currentTimeMillis() / 1000;
  632. String Sign = appId + appkey + currentTimeMillis.toString();
  633. String signMd5 = FormatUtil.MD5(Sign);
  634. // 创建一个OkHttpClient对象
  635. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  636. .connectTimeout(60, TimeUnit.SECONDS)
  637. .writeTimeout(60, TimeUnit.SECONDS)
  638. .readTimeout(60, TimeUnit.SECONDS)
  639. .build();
  640. // 创建一个请求对象
  641. Request request = new Request.Builder().url(url)
  642. .addHeader("_appid", "2000041")
  643. .addHeader("_timestamp", currentTimeMillis.toString())
  644. .addHeader("_sign", signMd5)
  645. .get().build();
  646. // 发送请求获取响应
  647. try {
  648. Response response = okHttpClient.newCall(request).execute();
  649. // 判断请求是否成功
  650. if (response.isSuccessful()) {
  651. response.body().toString();
  652. // 打印服务端返回结果
  653. return Objects.requireNonNull(response.body()).string();
  654. }
  655. } catch (IOException e) {
  656. e.printStackTrace();
  657. }
  658. return "{}";
  659. }
  660. /**
  661. * @param patentNo
  662. * @return
  663. * @throws IOException
  664. * @author 李仁杰
  665. * 获得专利被引用次数api
  666. */
  667. public String getCitedNumByPubNoApi(String patentNo) throws IOException {
  668. String url = "https://api.patentstar.com.cn/api/Patent/CitedNumByPubNo/" + patentNo;
  669. String appId = "2000041";
  670. String appkey = "F0E183D5F02C48E391F5FADF1B646F54";
  671. Long currentTimeMillis = System.currentTimeMillis() / 1000;
  672. String Sign = appId + appkey + currentTimeMillis.toString();
  673. String signMd5 = FormatUtil.MD5(Sign);
  674. // 创建一个OkHttpClient对象
  675. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  676. .connectTimeout(60, TimeUnit.SECONDS)
  677. .writeTimeout(60, TimeUnit.SECONDS)
  678. .readTimeout(60, TimeUnit.SECONDS)
  679. .build();
  680. // 创建一个请求对象
  681. Request request = new Request.Builder().url(url)
  682. .addHeader("_appid", "2000041")
  683. .addHeader("_timestamp", currentTimeMillis.toString())
  684. .addHeader("_sign", signMd5)
  685. .get().build();
  686. // 发送请求获取响应
  687. try {
  688. Response response = okHttpClient.newCall(request).execute();
  689. // 判断请求是否成功
  690. if (response.isSuccessful()) {
  691. response.body().toString();
  692. // 打印服务端返回结果
  693. return Objects.requireNonNull(response.body()).string();
  694. }
  695. } catch (IOException e) {
  696. e.printStackTrace();
  697. }
  698. return "{}";
  699. }
  700. }