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.model.vo.outApi.StarPatentVO; 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.PatentApplicant; import cn.cslg.pas.domain.PubNo; import cn.hutool.crypto.SecureUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; 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) { query = query .replace(" AND ", "*") .replace(" OR ", "+") .replace(" NOT ", "-"); StringBuilder sb = new StringBuilder(query); String regex = "(?<=[\\(\\)\\+\\-=\\*])[\\w\\W]+?(?=[\\(\\+\\-=\\)\\*])"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(query); Map map = new LinkedHashMap<>(); while (matcher.find()) { String a = matcher.group(); String regex2 = "[^\\(^\\)^\\+^-^=^*]"; Pattern pattern2 = Pattern.compile(regex2); Matcher matcher2 = pattern2.matcher(a); Integer start = matcher.start(); if (matcher2.find()) { start += matcher2.start(); } map.put(start, matcher.end()); } if (map.size() == 0) { return ""; } List list = new ArrayList(map.keySet()); for (int i = 0; i < list.size(); i += 2) { int start1 = list.get(i); int end1 = map.get(list.get(i)); int len1 = end1 - start1; int start2 = list.get(i + 1); int end2 = map.get(list.get(i + 1)); int len2 = end2 - start2; int diff = len2 - len1; if (diff > 0) { sb.replace(start1, end1, query.substring(start2, end2)); sb.replace(start2 + diff, end2 + diff, query.substring(start1, end1)); } else { sb.replace(start2, end2, query.substring(start1, end1)); sb.replace(start1, end1, query.substring(start2, end2)); } } String reStr = sb.toString(); reStr = "FXX" + reStr.replace("=", "/"); return reStr; } public Map patentStarSearchApi(PatentStarListDto patentStarListDto) throws IOException { String formQuery = patentStarListDto.getCurrentQuery(); patentStarListDto.setCurrentQuery(PatentStarApiService.formatQuery(formQuery)); 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"); List starPatentVOS = JSONArray.parseArray(Data.get("List").toString(), StarPatentVO.class); starPatentVOS.forEach(item->{ item.setApplicant(new ArrayList<>()); item.setInventor(Arrays.asList(item.getInventorStr().split(";"))); item.setIpcList(Arrays.asList(item.getIpcListStr().split(";"))); List applicants = Arrays.asList( item.getApplicantStr().split(";")); applicants.forEach( tem->{ PatentApplicant patentApplicant =new PatentApplicant(); patentApplicant.setType(2); patentApplicant.setDataType(2); patentApplicant.setName(tem); item.getApplicant().add(patentApplicant); } ); }); // 打印服务端返回结果 // return Objects.requireNonNull(response.body()).string(); Map reMap = new HashMap<>(); reMap.put("size", patentStarListDto.getRowCount()); reMap.put("current", patentStarListDto.getPageNum()); reMap.put("records",starPatentVOS); 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) { 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 = "(AB=电子 OR TI=电子)"; String aa = formatQuery(str); System.out.println(aa); } }