PatentStarApiService.java 19 KB

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