package cn.cslg.pas.service.outApi; import cn.cslg.pas.common.model.PatentCell; import cn.cslg.pas.common.model.dto.GetClaimsInfoParamsDTO; import cn.cslg.pas.common.model.dto.GetDescriptionInfoParamsDTO; import cn.cslg.pas.common.model.dto.GetFuTuParamsDTO; import cn.cslg.pas.common.model.dto.GetSearchBiblioParamsDTO; import cn.cslg.pas.common.model.outApi.PatentStarListDto; import cn.cslg.pas.common.utils.FormatUtil; import cn.cslg.pas.common.utils.JsonUtils; import cn.cslg.pas.common.utils.SecurityUtils.SecurityUtils; import cn.cslg.pas.domain.PubNo; import cn.hutool.crypto.SecureUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; import com.google.gson.JsonObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import okhttp3.*; import org.apache.commons.lang3.StringEscapeUtils; import org.junit.Test; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.IOException; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 调用外部接口的Service类 PCS:权限系统 * * @Author chenyu * @Date 2023/4/25 */ @RequiredArgsConstructor @Slf4j @Service public class PatentStarApiService { @Value("${authorUrl}") private String PCSUrl; @Value("${OPSUrl}") private String OPSUrl; @Value("${PASUrl}") private String PASUrl; public static String formatQuery(String query){ String str = "((abc=13+ac=232)+ad=33+(ad=2))"; StringBuilder sb =new StringBuilder(str); String regex = "(?<=[\\(\\)\\+\\-=])[\\w\\W]+?(?=[\\(\\+\\-=\\)])"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(str); Map map =new LinkedHashMap<>(); while (matcher.find()) { String a= matcher.group(); String regex2 = "[^\\(^\\)^\\+^-^=^*]"; Pattern pattern2 = Pattern.compile(regex2); Matcher matcher2 = pattern2.matcher(a); System.out.println(matcher.start() + "->" + matcher.end()+matcher.group()); Integer start =matcher.start(); if(matcher2.find()){ start +=matcher2.start(); } map.put(start,matcher.end()); } List list = new ArrayList(map.keySet()); for(int i=0;i0){ sb.replace(start1,end1,str.substring(start2,end2)); sb.replace(start2+diff,end2+diff,str.substring(start1,end1)); } else { sb.replace(start2,end2,str.substring(start1,end1)); sb.replace(start1,end1,str.substring(start2,end2)); } System.out.println(sb); } String aa =sb.toString(); aa.replace("\\","="); System.out.println(aa); return ""; } public Map patentStarSearchApi(PatentStarListDto patentStarListDto) throws IOException { String formQuery=patentStarListDto.getCurrentQuery(); String json = JSONObject.toJSONString(patentStarListDto); String url = "http://s.patentstar.com.cn/SearchAPI/PatentSearch/ResultGet"; Long currentTimeMillis = System.currentTimeMillis() / 1000; String Sign = "FNYJD7902206FFB741E163BE6536C3689D55" + currentTimeMillis.toString(); String signMd5 = FormatUtil.MD5(Sign); // 创建一个OkHttpClient对象 OkHttpClient okHttpClient = new OkHttpClient(); // 创建一个RequestBody(参数1:数据类型 参数2传递的json串) FormBody.Builder builder = new FormBody.Builder(); builder.add("AppID", "K8FFB741E163BE6536"); builder.add("Stamp", currentTimeMillis.toString()); builder.add("Sign", signMd5); builder.add("QueryJson", json); FormBody requestBody = builder.build(); // 创建一个请求对象 Request request = new Request.Builder().url(url).post(requestBody).build(); // 发送请求获取响应 try { Response response = okHttpClient.newCall(request).execute(); // 判断请求是否成功 if (response.isSuccessful()) { JSONObject jsonObject =JSONObject.parseObject(Objects.requireNonNull(response.body()).string()); JSONObject Data= (JSONObject)jsonObject.get("Data"); // 打印服务端返回结果 // return Objects.requireNonNull(response.body()).string(); Map reMap =new HashMap<>(); reMap.put("size",patentStarListDto.getRowCount()); reMap.put("current",patentStarListDto.getPageNum()); reMap.put("records",Data.get("List")); reMap.put("total",Data.get("HitCount")); return reMap; } } catch (IOException e) { e.printStackTrace(); } return null; } /** * @param appNo * @return * @throws IOException * @author 李仁杰 * 从专利之星获取摘要附图 */ public String getCnBibApi(String appNo) throws IOException { String url = "https://api.patentstar.com.cn/api/Patent/CnBibo/" + appNo; String appId = "2000041"; String appkey = "F0E183D5F02C48E391F5FADF1B646F54"; Long currentTimeMillis = System.currentTimeMillis() / 1000; String Sign = appId + appkey + currentTimeMillis.toString(); String signMd5 = FormatUtil.MD5(Sign); // 创建一个OkHttpClient对象 OkHttpClient okHttpClient = new OkHttpClient(); // 创建一个请求对象 Request request = new Request.Builder().url(url) .addHeader("_appid", "2000041") .addHeader("_timestamp", currentTimeMillis.toString()) .addHeader("_sign", signMd5) .get().build(); // 发送请求获取响应 try { Response response = okHttpClient.newCall(request).execute(); // 判断请求是否成功 if (response.isSuccessful()) { response.body().toString(); // 打印服务端返回结果 return Objects.requireNonNull(response.body()).string(); } } catch (IOException e) { e.printStackTrace(); } return "{}"; } /** * @param patentNo * @return * @throws IOException * @author 李仁杰 * 从专利之星获取摘要附图 */ public String getPictureApi(String patentNo) throws IOException { String url = "https://api.patentstar.com.cn/api/Patent/CnMainImage/" + patentNo; String appId = "2000041"; String appkey = "F0E183D5F02C48E391F5FADF1B646F54"; Long currentTimeMillis = System.currentTimeMillis() / 1000; String Sign = appId + appkey + currentTimeMillis.toString(); String signMd5 = FormatUtil.MD5(Sign); // 创建一个OkHttpClient对象 OkHttpClient okHttpClient = new OkHttpClient(); // 创建一个请求对象 Request request = new Request.Builder().url(url) .addHeader("_appid", "2000041") .addHeader("_timestamp", currentTimeMillis.toString()) .addHeader("_sign", signMd5) .get().build(); // 发送请求获取响应 try { Response response = okHttpClient.newCall(request).execute(); // 判断请求是否成功 if (response.isSuccessful()) { response.body().toString(); // 打印服务端返回结果 return Objects.requireNonNull(response.body()).string(); } } catch (IOException e) { e.printStackTrace(); } return "{}"; } /** * @param appNo * @return * @throws IOException * @author 李仁杰 * 从专利之星获取中国专利外观图 */ public String getWGPictureApi(String appNo) throws IOException { String url = "https://api.patentstar.com.cn/api/Patent/CnWGImage/" + appNo; String appId = "2000041"; String appkey = "F0E183D5F02C48E391F5FADF1B646F54"; Long currentTimeMillis = System.currentTimeMillis() / 1000; String Sign = appId + appkey + currentTimeMillis.toString(); String signMd5 = FormatUtil.MD5(Sign); // 创建一个OkHttpClient对象 OkHttpClient okHttpClient = new OkHttpClient(); // 创建一个请求对象 Request request = new Request.Builder().url(url) .addHeader("_appid", "2000041") .addHeader("_timestamp", currentTimeMillis.toString()) .addHeader("_sign", signMd5) .get().build(); // 发送请求获取响应 try { Response response = okHttpClient.newCall(request).execute(); // 判断请求是否成功 if (response.isSuccessful()) { response.body().toString(); // 打印服务端返回结果 return Objects.requireNonNull(response.body()).string(); } } catch (IOException e) { e.printStackTrace(); } return "{}"; } /** * @param appNo * @return * @throws IOException * @author 李仁杰 * 从专利之星获取中国专利法律状态 */ public String getCnLegalApi(String appNo) throws IOException { String url = "https://api.patentstar.com.cn/api/Patent/CnLegal/"+appNo; String appId = "2000041"; String appkey = "F0E183D5F02C48E391F5FADF1B646F54"; Long currentTimeMillis = System.currentTimeMillis() / 1000; String Sign = appId + appkey + currentTimeMillis.toString(); String signMd5 = FormatUtil.MD5(Sign); // 创建一个OkHttpClient对象 OkHttpClient okHttpClient = new OkHttpClient(); // 创建一个请求对象 Request request = new Request.Builder().url(url) .addHeader("_appid", "2000041") .addHeader("_timestamp", currentTimeMillis.toString()) .addHeader("_sign", signMd5) .get().build(); // 发送请求获取响应 try { Response response = okHttpClient.newCall(request).execute(); // 判断请求是否成功 if (response.isSuccessful()) { response.body().toString(); // 打印服务端返回结果 return Objects.requireNonNull(response.body()).string(); } } catch (IOException e) { e.printStackTrace(); } return "{}"; } /** * @param appNo * @return * @throws IOException * @author 李仁杰 * 从专利之星获取中国专利全文图片 */ public String getCnPdfApi(String appNo) throws IOException { String url = "https://api.patentstar.com.cn/api/Patent/CnPdf/"+appNo; String appId = "2000041"; String appkey = "F0E183D5F02C48E391F5FADF1B646F54"; Long currentTimeMillis = System.currentTimeMillis() / 1000; String Sign = appId + appkey + currentTimeMillis.toString(); String signMd5 = FormatUtil.MD5(Sign); // 创建一个OkHttpClient对象 OkHttpClient okHttpClient = new OkHttpClient(); // 创建一个请求对象 Request request = new Request.Builder().url(url) .addHeader("_appid", "2000041") .addHeader("_timestamp", currentTimeMillis.toString()) .addHeader("_sign", signMd5) .get().build(); // 发送请求获取响应 try { Response response = okHttpClient.newCall(request).execute(); // 判断请求是否成功 if (response.isSuccessful()) { response.body().toString(); // 打印服务端返回结果 return Objects.requireNonNull(response.body()).string(); } } catch (IOException e) { e.printStackTrace(); } return "{}"; } /** * @param appNo * @return * @throws IOException * @author 李仁杰 * 从专利之星获取中国专利全文文本 */ public String getCnFullXmlApi(String appNo) throws IOException { String url = "https://api.patentstar.com.cn/api/Patent/CnFullXml/"+appNo; String appId = "2000041"; String appkey = "F0E183D5F02C48E391F5FADF1B646F54"; Long currentTimeMillis = System.currentTimeMillis() / 1000; String Sign = appId + appkey + currentTimeMillis.toString(); String signMd5 = FormatUtil.MD5(Sign); // 创建一个OkHttpClient对象 OkHttpClient okHttpClient = new OkHttpClient(); // 创建一个请求对象 Request request = new Request.Builder().url(url) .addHeader("_appid", "2000041") .addHeader("_timestamp", currentTimeMillis.toString()) .addHeader("_sign", signMd5) .get().build(); // 发送请求获取响应 try { Response response = okHttpClient.newCall(request).execute(); // 判断请求是否成功 if (response.isSuccessful()) { response.body().toString(); // 打印服务端返回结果 return Objects.requireNonNull(response.body()).string(); } } catch (IOException e) { e.printStackTrace(); } return "{}"; } /** * @param patentNo * @return * @throws IOException * @author 李仁杰 * 从专利之星获取世界专利pdf */ public String getEnPdfApi(String patentNo) throws IOException { String url = " https://api.patentstar.com.cn/api/Patent/EnPdf/"+patentNo; String appId = "2000041"; String appkey = "F0E183D5F02C48E391F5FADF1B646F54"; Long currentTimeMillis = System.currentTimeMillis() / 1000; String Sign = appId + appkey + currentTimeMillis.toString(); String signMd5 = FormatUtil.MD5(Sign); // 创建一个OkHttpClient对象 OkHttpClient okHttpClient = new OkHttpClient(); // 创建一个请求对象 Request request = new Request.Builder().url(url) .addHeader("_appid", "2000041") .addHeader("_timestamp", currentTimeMillis.toString()) .addHeader("_sign", signMd5) .get().build(); // 发送请求获取响应 try { Response response = okHttpClient.newCall(request).execute(); // 判断请求是否成功 if (response.isSuccessful()) { response.body().toString(); // 打印服务端返回结果 return Objects.requireNonNull(response.body()).string(); } } catch (IOException e) { e.printStackTrace(); } return "{}"; } /** * @param patentNo * @return * @throws IOException * @author 李仁杰 * 从专利之星获取世界专利著录信息 */ public String getENBibApi(String patentNo) throws IOException { String url = "https://api.patentstar.com.cn/api/Patent/ENBib/"+patentNo; String appId = "2000041"; String appkey = "F0E183D5F02C48E391F5FADF1B646F54"; Long currentTimeMillis = System.currentTimeMillis() / 1000; String Sign = appId + appkey + currentTimeMillis.toString(); String signMd5 = FormatUtil.MD5(Sign); // 创建一个OkHttpClient对象 OkHttpClient okHttpClient = new OkHttpClient(); // 创建一个请求对象 Request request = new Request.Builder().url(url) .addHeader("_appid", "2000041") .addHeader("_timestamp", currentTimeMillis.toString()) .addHeader("_sign", signMd5) .get().build(); // 发送请求获取响应 try { Response response = okHttpClient.newCall(request).execute(); // 判断请求是否成功 if (response.isSuccessful()) { response.body().toString(); // 打印服务端返回结果 return Objects.requireNonNull(response.body()).string(); } } catch (IOException e) { e.printStackTrace(); } return "{}"; } /** * @param patentNo * @return * @throws IOException * @author 李仁杰 * 从专利之星获取同族专利 */ public String getFamilyByPubNoApi(String patentNo) throws IOException { String url = "https://api.patentstar.com.cn/api/Patent/FamilyByPubNo/"+patentNo; String appId = "2000041"; String appkey = "F0E183D5F02C48E391F5FADF1B646F54"; Long currentTimeMillis = System.currentTimeMillis() / 1000; String Sign = appId + appkey + currentTimeMillis.toString(); String signMd5 = FormatUtil.MD5(Sign); // 创建一个OkHttpClient对象 OkHttpClient okHttpClient = new OkHttpClient(); // 创建一个请求对象 Request request = new Request.Builder().url(url) .addHeader("_appid", "2000041") .addHeader("_timestamp", currentTimeMillis.toString()) .addHeader("_sign", signMd5) .get().build(); // 发送请求获取响应 try { Response response = okHttpClient.newCall(request).execute(); // 判断请求是否成功 if (response.isSuccessful()) { response.body().toString(); // 打印服务端返回结果 return Objects.requireNonNull(response.body()).string(); } } catch (IOException e) { e.printStackTrace(); } return "{}"; } /** * @param patentNo * @return * @throws IOException * @author 李仁杰 * 获得专利被引用次数api */ public String getCitedNumByPubNoApi(String patentNo) throws IOException { String url = "https://api.patentstar.com.cn/api/Patent/CitedNumByPubNo/"+patentNo; String appId = "2000041"; String appkey = "F0E183D5F02C48E391F5FADF1B646F54"; Long currentTimeMillis = System.currentTimeMillis()/ 1000; String Sign = appId + appkey + currentTimeMillis.toString(); String signMd5 = FormatUtil.MD5(Sign); // 创建一个OkHttpClient对象 OkHttpClient okHttpClient = new OkHttpClient(); // 创建一个请求对象 Request request = new Request.Builder().url(url) .addHeader("_appid", "2000041") .addHeader("_timestamp", currentTimeMillis.toString()) .addHeader("_sign", signMd5) .get().build(); // 发送请求获取响应 try { Response response = okHttpClient.newCall(request).execute(); // 判断请求是否成功 if (response.isSuccessful()) { response.body().toString(); // 打印服务端返回结果 return Objects.requireNonNull(response.body()).string(); } } catch (IOException e) { e.printStackTrace(); } return "{}"; } public static void main(String[] args) { String str ="D=ABC"; String aa= PatentStarApiService.formatQuery(str); System.out.println(aa); } }