PatentStarApiService.java 36 KB

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