PatentStarApiService.java 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534
  1. package cn.cslg.pas.service.outApi;
  2. import cn.cslg.pas.common.model.PatentCell;
  3. import cn.cslg.pas.common.model.dto.GetClaimsInfoParamsDTO;
  4. import cn.cslg.pas.common.model.dto.GetDescriptionInfoParamsDTO;
  5. import cn.cslg.pas.common.model.dto.GetFuTuParamsDTO;
  6. import cn.cslg.pas.common.model.dto.GetSearchBiblioParamsDTO;
  7. import cn.cslg.pas.common.model.outApi.PatentStarListDto;
  8. import cn.cslg.pas.common.model.vo.outApi.StarPatentVO;
  9. import cn.cslg.pas.common.utils.FormatUtil;
  10. import cn.cslg.pas.common.utils.JsonUtils;
  11. import cn.cslg.pas.common.utils.SecurityUtils.SecurityUtils;
  12. import cn.cslg.pas.domain.PatentApplicant;
  13. import cn.cslg.pas.domain.PubNo;
  14. import cn.hutool.crypto.SecureUtil;
  15. import com.alibaba.fastjson.JSON;
  16. import com.alibaba.fastjson.JSONArray;
  17. import com.alibaba.fastjson.JSONObject;
  18. import com.google.gson.Gson;
  19. import com.google.gson.JsonObject;
  20. import lombok.RequiredArgsConstructor;
  21. import lombok.extern.slf4j.Slf4j;
  22. import okhttp3.*;
  23. import org.apache.commons.lang3.StringEscapeUtils;
  24. import org.junit.Test;
  25. import org.springframework.beans.factory.annotation.Value;
  26. import org.springframework.stereotype.Service;
  27. import java.io.IOException;
  28. import java.util.*;
  29. import java.util.concurrent.TimeUnit;
  30. import java.util.regex.Matcher;
  31. import java.util.regex.Pattern;
  32. /**
  33. * 调用外部接口的Service类 PCS:权限系统
  34. *
  35. * @Author chenyu
  36. * @Date 2023/4/25
  37. */
  38. @RequiredArgsConstructor
  39. @Slf4j
  40. @Service
  41. public class PatentStarApiService {
  42. @Value("${authorUrl}")
  43. private String PCSUrl;
  44. @Value("${OPSUrl}")
  45. private String OPSUrl;
  46. @Value("${PASUrl}")
  47. private String PASUrl;
  48. public static String formatQuery(String query) {
  49. query = query
  50. .replace(" AND ", "*")
  51. .replace(" OR ", "+")
  52. .replace(" NOT ", "-");
  53. StringBuilder sb = new StringBuilder(query);
  54. String regex = "(?<=[\\(\\)\\+\\-=\\*])[\\w\\W]+?(?=[\\(\\+\\-=\\)\\*])";
  55. Pattern pattern = Pattern.compile(regex);
  56. Matcher matcher = pattern.matcher(query);
  57. Map<Integer, Integer> map = new LinkedHashMap<>();
  58. while (matcher.find()) {
  59. String a = matcher.group();
  60. String regex2 = "[^\\(^\\)^\\+^-^=^*]";
  61. Pattern pattern2 = Pattern.compile(regex2);
  62. Matcher matcher2 = pattern2.matcher(a);
  63. Integer start = matcher.start();
  64. if (matcher2.find()) {
  65. start += matcher2.start();
  66. }
  67. map.put(start, matcher.end());
  68. }
  69. if (map.size() == 0) {
  70. return "";
  71. }
  72. List<Integer> list = new ArrayList<Integer>(map.keySet());
  73. for (int i = 0; i < list.size(); i += 2) {
  74. int start1 = list.get(i);
  75. int end1 = map.get(list.get(i));
  76. int len1 = end1 - start1;
  77. int start2 = list.get(i + 1);
  78. int end2 = map.get(list.get(i + 1));
  79. int len2 = end2 - start2;
  80. int diff = len2 - len1;
  81. if (diff > 0) {
  82. sb.replace(start1, end1, query.substring(start2, end2));
  83. sb.replace(start2 + diff, end2 + diff, query.substring(start1, end1));
  84. } else {
  85. sb.replace(start2, end2, query.substring(start1, end1));
  86. sb.replace(start1, end1, query.substring(start2, end2));
  87. }
  88. }
  89. String reStr = sb.toString();
  90. reStr = "FXX" + reStr.replace("=", "/");
  91. return reStr;
  92. }
  93. public Map<String, Object> patentStarSearchApi(PatentStarListDto patentStarListDto) throws IOException {
  94. String formQuery = patentStarListDto.getCurrentQuery();
  95. patentStarListDto.setCurrentQuery(PatentStarApiService.formatQuery(formQuery));
  96. String json = JSONObject.toJSONString(patentStarListDto);
  97. String url = "http://s.patentstar.com.cn/SearchAPI/PatentSearch/ResultGet";
  98. Long currentTimeMillis = System.currentTimeMillis() / 1000;
  99. String Sign = "FNYJD7902206FFB741E163BE6536C3689D55" + currentTimeMillis.toString();
  100. String signMd5 = FormatUtil.MD5(Sign);
  101. // 创建一个OkHttpClient对象
  102. OkHttpClient okHttpClient = new OkHttpClient();
  103. // 创建一个RequestBody(参数1:数据类型 参数2传递的json串)
  104. FormBody.Builder builder = new FormBody.Builder();
  105. builder.add("AppID", "K8FFB741E163BE6536");
  106. builder.add("Stamp", currentTimeMillis.toString());
  107. builder.add("Sign", signMd5);
  108. builder.add("QueryJson", json);
  109. FormBody requestBody = builder.build();
  110. // 创建一个请求对象
  111. Request request = new Request.Builder().url(url).post(requestBody).build();
  112. // 发送请求获取响应
  113. try {
  114. Response response = okHttpClient.newCall(request).execute();
  115. // 判断请求是否成功
  116. if (response.isSuccessful()) {
  117. JSONObject jsonObject = JSONObject.parseObject(Objects.requireNonNull(response.body()).string());
  118. JSONObject Data = (JSONObject) jsonObject.get("Data");
  119. List<StarPatentVO> starPatentVOS = JSONArray.parseArray(Data.get("List").toString(), StarPatentVO.class);
  120. starPatentVOS.forEach(item->{
  121. item.setApplicant(new ArrayList<>());
  122. item.setInventor(Arrays.asList(item.getInventorStr().split(";")));
  123. item.setIpcList(Arrays.asList(item.getIpcListStr().split(";")));
  124. List<String> applicants = Arrays.asList( item.getApplicantStr().split(";"));
  125. applicants.forEach(
  126. tem->{
  127. PatentApplicant patentApplicant =new PatentApplicant();
  128. patentApplicant.setType(2);
  129. patentApplicant.setDataType(2);
  130. patentApplicant.setName(tem);
  131. item.getApplicant().add(patentApplicant);
  132. }
  133. );
  134. });
  135. // 打印服务端返回结果
  136. // return Objects.requireNonNull(response.body()).string();
  137. Map<String, Object> reMap = new HashMap<>();
  138. reMap.put("size", patentStarListDto.getRowCount());
  139. reMap.put("current", patentStarListDto.getPageNum());
  140. reMap.put("records",starPatentVOS);
  141. reMap.put("total", Data.get("HitCount"));
  142. return reMap;
  143. }
  144. } catch (IOException e) {
  145. e.printStackTrace();
  146. }
  147. return null;
  148. }
  149. /**
  150. * @param appNo
  151. * @return
  152. * @throws IOException
  153. * @author 李仁杰
  154. * 从专利之星获取中国专利著录
  155. */
  156. public String getCnBibApi(String appNo) {
  157. String url = "https://api.patentstar.com.cn/api/Patent/CnBibo/" + appNo;
  158. String appId = "2000041";
  159. String appkey = "F0E183D5F02C48E391F5FADF1B646F54";
  160. Long currentTimeMillis = System.currentTimeMillis() / 1000;
  161. String Sign = appId + appkey + currentTimeMillis.toString();
  162. String signMd5 = FormatUtil.MD5(Sign);
  163. // 创建一个OkHttpClient对象
  164. OkHttpClient okHttpClient = new OkHttpClient();
  165. // 创建一个请求对象
  166. Request request = new Request.Builder().url(url)
  167. .addHeader("_appid", "2000041")
  168. .addHeader("_timestamp", currentTimeMillis.toString())
  169. .addHeader("_sign", signMd5)
  170. .get().build();
  171. // 发送请求获取响应
  172. try {
  173. Response response = okHttpClient.newCall(request).execute();
  174. // 判断请求是否成功
  175. if (response.isSuccessful()) {
  176. response.body().toString();
  177. // 打印服务端返回结果
  178. return Objects.requireNonNull(response.body()).string();
  179. }
  180. } catch (IOException e) {
  181. e.printStackTrace();
  182. }
  183. return "{}";
  184. }
  185. /**
  186. * @param patentNo
  187. * @return
  188. * @throws IOException
  189. * @author 李仁杰
  190. * 从专利之星获取中国专利摘要附图
  191. */
  192. public String getPictureApi(String patentNo) throws IOException {
  193. String url = "https://api.patentstar.com.cn/api/Patent/CnMainImage/" + patentNo;
  194. String appId = "2000041";
  195. String appkey = "F0E183D5F02C48E391F5FADF1B646F54";
  196. Long currentTimeMillis = System.currentTimeMillis() / 1000;
  197. String Sign = appId + appkey + currentTimeMillis.toString();
  198. String signMd5 = FormatUtil.MD5(Sign);
  199. // 创建一个OkHttpClient对象
  200. OkHttpClient okHttpClient = new OkHttpClient();
  201. // 创建一个请求对象
  202. Request request = new Request.Builder().url(url)
  203. .addHeader("_appid", "2000041")
  204. .addHeader("_timestamp", currentTimeMillis.toString())
  205. .addHeader("_sign", signMd5)
  206. .get().build();
  207. // 发送请求获取响应
  208. try {
  209. Response response = okHttpClient.newCall(request).execute();
  210. // 判断请求是否成功
  211. if (response.isSuccessful()) {
  212. response.body().toString();
  213. // 打印服务端返回结果
  214. return Objects.requireNonNull(response.body()).string();
  215. }
  216. } catch (IOException e) {
  217. e.printStackTrace();
  218. }
  219. return "{}";
  220. }
  221. /**
  222. * @param appNo
  223. * @return
  224. * @throws IOException
  225. * @author 李仁杰
  226. * 从专利之星获取中国专利外观图
  227. */
  228. public String getWGPictureApi(String appNo) throws IOException {
  229. String url = "https://api.patentstar.com.cn/api/Patent/CnWGImage/" + appNo;
  230. String appId = "2000041";
  231. String appkey = "F0E183D5F02C48E391F5FADF1B646F54";
  232. Long currentTimeMillis = System.currentTimeMillis() / 1000;
  233. String Sign = appId + appkey + currentTimeMillis.toString();
  234. String signMd5 = FormatUtil.MD5(Sign);
  235. // 创建一个OkHttpClient对象
  236. OkHttpClient okHttpClient = new OkHttpClient();
  237. // 创建一个请求对象
  238. Request request = new Request.Builder().url(url)
  239. .addHeader("_appid", "2000041")
  240. .addHeader("_timestamp", currentTimeMillis.toString())
  241. .addHeader("_sign", signMd5)
  242. .get().build();
  243. // 发送请求获取响应
  244. try {
  245. Response response = okHttpClient.newCall(request).execute();
  246. // 判断请求是否成功
  247. if (response.isSuccessful()) {
  248. response.body().toString();
  249. // 打印服务端返回结果
  250. return Objects.requireNonNull(response.body()).string();
  251. }
  252. } catch (IOException e) {
  253. e.printStackTrace();
  254. }
  255. return "{}";
  256. }
  257. /**
  258. * @param appNo
  259. * @return
  260. * @throws IOException
  261. * @author 李仁杰
  262. * 从专利之星获取中国专利法律状态
  263. */
  264. public String getCnLegalApi(String appNo) throws IOException {
  265. String url = "https://api.patentstar.com.cn/api/Patent/CnLegal/" + appNo;
  266. String appId = "2000041";
  267. String appkey = "F0E183D5F02C48E391F5FADF1B646F54";
  268. Long currentTimeMillis = System.currentTimeMillis() / 1000;
  269. String Sign = appId + appkey + currentTimeMillis.toString();
  270. String signMd5 = FormatUtil.MD5(Sign);
  271. // 创建一个OkHttpClient对象
  272. OkHttpClient okHttpClient = new OkHttpClient();
  273. // 创建一个请求对象
  274. Request request = new Request.Builder().url(url)
  275. .addHeader("_appid", "2000041")
  276. .addHeader("_timestamp", currentTimeMillis.toString())
  277. .addHeader("_sign", signMd5)
  278. .get().build();
  279. // 发送请求获取响应
  280. try {
  281. Response response = okHttpClient.newCall(request).execute();
  282. // 判断请求是否成功
  283. if (response.isSuccessful()) {
  284. response.body().toString();
  285. // 打印服务端返回结果
  286. return Objects.requireNonNull(response.body()).string();
  287. }
  288. } catch (IOException e) {
  289. e.printStackTrace();
  290. }
  291. return "{}";
  292. }
  293. /**
  294. * @param appNo
  295. * @return
  296. * @throws IOException
  297. * @author 李仁杰
  298. * 从专利之星获取中国专利全文图片
  299. */
  300. public String getCnPdfApi(String appNo) throws IOException {
  301. String url = "https://api.patentstar.com.cn/api/Patent/CnPdf/" + appNo;
  302. String appId = "2000041";
  303. String appkey = "F0E183D5F02C48E391F5FADF1B646F54";
  304. Long currentTimeMillis = System.currentTimeMillis() / 1000;
  305. String Sign = appId + appkey + currentTimeMillis.toString();
  306. String signMd5 = FormatUtil.MD5(Sign);
  307. // 创建一个OkHttpClient对象
  308. OkHttpClient okHttpClient = new OkHttpClient();
  309. // 创建一个请求对象
  310. Request request = new Request.Builder().url(url)
  311. .addHeader("_appid", "2000041")
  312. .addHeader("_timestamp", currentTimeMillis.toString())
  313. .addHeader("_sign", signMd5)
  314. .get().build();
  315. // 发送请求获取响应
  316. try {
  317. Response response = okHttpClient.newCall(request).execute();
  318. // 判断请求是否成功
  319. if (response.isSuccessful()) {
  320. response.body().toString();
  321. // 打印服务端返回结果
  322. return Objects.requireNonNull(response.body()).string();
  323. }
  324. } catch (IOException e) {
  325. e.printStackTrace();
  326. }
  327. return "{}";
  328. }
  329. /**
  330. * @param appNo
  331. * @return
  332. * @throws IOException
  333. * @author 李仁杰
  334. * 从专利之星获取中国专利全文文本
  335. */
  336. public String getCnFullXmlApi(String appNo) throws IOException {
  337. String url = "https://api.patentstar.com.cn/api/Patent/CnFullXml/" + appNo;
  338. String appId = "2000041";
  339. String appkey = "F0E183D5F02C48E391F5FADF1B646F54";
  340. Long currentTimeMillis = System.currentTimeMillis() / 1000;
  341. String Sign = appId + appkey + currentTimeMillis.toString();
  342. String signMd5 = FormatUtil.MD5(Sign);
  343. // 创建一个OkHttpClient对象
  344. OkHttpClient okHttpClient = new OkHttpClient();
  345. // 创建一个请求对象
  346. Request request = new Request.Builder().url(url)
  347. .addHeader("_appid", "2000041")
  348. .addHeader("_timestamp", currentTimeMillis.toString())
  349. .addHeader("_sign", signMd5)
  350. .get().build();
  351. // 发送请求获取响应
  352. try {
  353. Response response = okHttpClient.newCall(request).execute();
  354. // 判断请求是否成功
  355. if (response.isSuccessful()) {
  356. response.body().toString();
  357. // 打印服务端返回结果
  358. return Objects.requireNonNull(response.body()).string();
  359. }
  360. } catch (IOException e) {
  361. e.printStackTrace();
  362. }
  363. return "{}";
  364. }
  365. /**
  366. * @param patentNo
  367. * @return
  368. * @throws IOException
  369. * @author 李仁杰
  370. * 从专利之星获取世界专利pdf
  371. */
  372. public String getEnPdfApi(String patentNo) throws IOException {
  373. String url = " https://api.patentstar.com.cn/api/Patent/EnPdf/" + patentNo;
  374. String appId = "2000041";
  375. String appkey = "F0E183D5F02C48E391F5FADF1B646F54";
  376. Long currentTimeMillis = System.currentTimeMillis() / 1000;
  377. String Sign = appId + appkey + currentTimeMillis.toString();
  378. String signMd5 = FormatUtil.MD5(Sign);
  379. // 创建一个OkHttpClient对象
  380. OkHttpClient okHttpClient = new OkHttpClient();
  381. // 创建一个请求对象
  382. Request request = new Request.Builder().url(url)
  383. .addHeader("_appid", "2000041")
  384. .addHeader("_timestamp", currentTimeMillis.toString())
  385. .addHeader("_sign", signMd5)
  386. .get().build();
  387. // 发送请求获取响应
  388. try {
  389. Response response = okHttpClient.newCall(request).execute();
  390. // 判断请求是否成功
  391. if (response.isSuccessful()) {
  392. response.body().toString();
  393. // 打印服务端返回结果
  394. return Objects.requireNonNull(response.body()).string();
  395. }
  396. } catch (IOException e) {
  397. e.printStackTrace();
  398. }
  399. return "{}";
  400. }
  401. /**
  402. * @param patentNo
  403. * @return
  404. * @throws IOException
  405. * @author 李仁杰
  406. * 从专利之星获取世界专利著录信息
  407. */
  408. public String getENBibApi(String patentNo) throws IOException {
  409. String url = "https://api.patentstar.com.cn/api/Patent/ENBib/" + patentNo;
  410. String appId = "2000041";
  411. String appkey = "F0E183D5F02C48E391F5FADF1B646F54";
  412. Long currentTimeMillis = System.currentTimeMillis() / 1000;
  413. String Sign = appId + appkey + currentTimeMillis.toString();
  414. String signMd5 = FormatUtil.MD5(Sign);
  415. // 创建一个OkHttpClient对象
  416. OkHttpClient okHttpClient = new OkHttpClient();
  417. // 创建一个请求对象
  418. Request request = new Request.Builder().url(url)
  419. .addHeader("_appid", "2000041")
  420. .addHeader("_timestamp", currentTimeMillis.toString())
  421. .addHeader("_sign", signMd5)
  422. .get().build();
  423. // 发送请求获取响应
  424. try {
  425. Response response = okHttpClient.newCall(request).execute();
  426. // 判断请求是否成功
  427. if (response.isSuccessful()) {
  428. response.body().toString();
  429. // 打印服务端返回结果
  430. return Objects.requireNonNull(response.body()).string();
  431. }
  432. } catch (IOException e) {
  433. e.printStackTrace();
  434. }
  435. return "{}";
  436. }
  437. /**
  438. * @param patentNo
  439. * @return
  440. * @throws IOException
  441. * @author 李仁杰
  442. * 从专利之星获取同族专利
  443. */
  444. public String getFamilyByPubNoApi(String patentNo) throws IOException {
  445. String url = "https://api.patentstar.com.cn/api/Patent/FamilyByPubNo/" + patentNo;
  446. String appId = "2000041";
  447. String appkey = "F0E183D5F02C48E391F5FADF1B646F54";
  448. Long currentTimeMillis = System.currentTimeMillis() / 1000;
  449. String Sign = appId + appkey + currentTimeMillis.toString();
  450. String signMd5 = FormatUtil.MD5(Sign);
  451. // 创建一个OkHttpClient对象
  452. OkHttpClient okHttpClient = new OkHttpClient();
  453. // 创建一个请求对象
  454. Request request = new Request.Builder().url(url)
  455. .addHeader("_appid", "2000041")
  456. .addHeader("_timestamp", currentTimeMillis.toString())
  457. .addHeader("_sign", signMd5)
  458. .get().build();
  459. // 发送请求获取响应
  460. try {
  461. Response response = okHttpClient.newCall(request).execute();
  462. // 判断请求是否成功
  463. if (response.isSuccessful()) {
  464. response.body().toString();
  465. // 打印服务端返回结果
  466. return Objects.requireNonNull(response.body()).string();
  467. }
  468. } catch (IOException e) {
  469. e.printStackTrace();
  470. }
  471. return "{}";
  472. }
  473. /**
  474. * @param patentNo
  475. * @return
  476. * @throws IOException
  477. * @author 李仁杰
  478. * 获得专利被引用次数api
  479. */
  480. public String getCitedNumByPubNoApi(String patentNo) throws IOException {
  481. String url = "https://api.patentstar.com.cn/api/Patent/CitedNumByPubNo/" + patentNo;
  482. String appId = "2000041";
  483. String appkey = "F0E183D5F02C48E391F5FADF1B646F54";
  484. Long currentTimeMillis = System.currentTimeMillis() / 1000;
  485. String Sign = appId + appkey + currentTimeMillis.toString();
  486. String signMd5 = FormatUtil.MD5(Sign);
  487. // 创建一个OkHttpClient对象
  488. OkHttpClient okHttpClient = new OkHttpClient();
  489. // 创建一个请求对象
  490. Request request = new Request.Builder().url(url)
  491. .addHeader("_appid", "2000041")
  492. .addHeader("_timestamp", currentTimeMillis.toString())
  493. .addHeader("_sign", signMd5)
  494. .get().build();
  495. // 发送请求获取响应
  496. try {
  497. Response response = okHttpClient.newCall(request).execute();
  498. // 判断请求是否成功
  499. if (response.isSuccessful()) {
  500. response.body().toString();
  501. // 打印服务端返回结果
  502. return Objects.requireNonNull(response.body()).string();
  503. }
  504. } catch (IOException e) {
  505. e.printStackTrace();
  506. }
  507. return "{}";
  508. }
  509. public static void main(String[] args) {
  510. String str = "(AB=电子 OR TI=电子)";
  511. String aa = formatQuery(str);
  512. System.out.println(aa);
  513. }
  514. }