Ver código fonte

检索接口

lwhhszx 2 anos atrás
pai
commit
a6c9e9b81b

+ 5 - 0
PAS/pom.xml

@@ -186,6 +186,11 @@
             <artifactId>spire.pdf</artifactId>
             <version>8.7.0</version>
         </dependency>
+        <dependency>
+            <groupId>joda-time</groupId>
+            <artifactId>joda-time</artifactId>
+            <version>2.9.9</version>
+        </dependency>
     </dependencies>
 
 

+ 12 - 0
PAS/src/main/java/cn/cslg/pas/common/model/outApi/PatentStarListDto.java

@@ -3,9 +3,11 @@ package cn.cslg.pas.common.model.outApi;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 import lombok.experimental.Accessors;
+import org.joda.time.DateTime;
 import reactor.util.annotation.NonNull;
 
 import javax.validation.constraints.NotNull;
+import java.util.Date;
 
 /**
  * 专利之星检索dto类
@@ -48,4 +50,14 @@ public class PatentStarListDto {
     @JsonProperty(value = "OrderByType")
     private String OrderByType;
 
+    private Integer total;
+
+    private DateTime startTime;
+
+    private DateTime endTime;
+
+    private String orginCondition;
+
+    private Boolean formed;
+
 }

+ 5 - 1
PAS/src/main/java/cn/cslg/pas/common/utils/DateUtils.java

@@ -1,13 +1,17 @@
 package cn.cslg.pas.common.utils;
 
-import cn.hutool.core.date.DateTime;
+
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.DateTime;
+
+import org.joda.time.format.DateTimeFormat;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.lang.management.ManagementFactory;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.regex.Pattern;
 

+ 113 - 0
PAS/src/main/java/cn/cslg/pas/common/utils/DateUtils2.java

@@ -0,0 +1,113 @@
+package cn.cslg.pas.common.utils;
+
+
+import cn.hutool.core.date.DateUtil;
+import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.lang.management.ManagementFactory;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.regex.Pattern;
+
+import static cn.cslg.pas.common.utils.DateUtils.FORMAT_STRING;
+
+public class DateUtils2 {
+
+    public static DateTime formStrToDateTime(String dateString) {
+        try {
+            DateTimeFormatter formatter;
+
+            if (dateString.contains("-")) {
+                formatter = DateTimeFormat.forPattern("yyyy-MM-dd");
+            } else if (dateString.contains("//")) {
+                formatter = DateTimeFormat.forPattern("yyyy/MM/dd");
+            } else if (dateString.contains(":")) {
+                formatter = DateTimeFormat.forPattern("yyyy:MM:dd");
+            } else if (dateString.contains(".")) {
+                formatter = DateTimeFormat.forPattern("yyyy.MM.dd");
+            } else {
+                formatter = DateTimeFormat.forPattern("yyyyMMdd");
+            }
+
+            return formatter.parseDateTime(dateString);
+        } catch (Exception e) {
+            throw new RuntimeException("时间转化格式错误" + "[dateString=" + dateString + "]" + "[FORMAT_STRING=" + FORMAT_STRING + "]");
+        }
+    }
+
+
+    public static List<DateTime> formStrToDateTime(DateTime dateStart, DateTime dateEnd) {
+        List<DateTime> dateTimes = new ArrayList<>();
+        dateTimes.add(dateStart);
+        DateTime minDate1 = new DateTime();
+        DateTime minDate2= new DateTime();
+        Integer startYear = dateStart.getYear();
+        Integer startMonth = dateStart.getMonthOfYear();
+        Integer startDay = dateStart.getDayOfYear();
+        Integer endYear = dateEnd.getYear();
+        Integer endMonth = dateEnd.getMonthOfYear();
+        Integer endDay = dateEnd.getDayOfYear();
+        if (startYear.equals(endYear) ) {
+            if (startMonth.equals(endMonth)) {
+                if (startDay .equals(endDay) ) {
+                    minDate1=dateStart;
+                } else {
+                    int diffDay = endDay - startDay;
+                    int minDay = diffDay / 2;
+                    minDate1 = dateStart.plusDays(minDay);
+                }
+            } else {
+                int diffMonth = endYear - startYear;
+                int minMonth = diffMonth / 2;
+                if(minMonth==0){
+                    minMonth=1;
+                }
+                minDate1 = dateStart.plusMonths(minMonth).minusDays(1);
+                minDate2 =dateStart.plusMonths(minMonth);
+            }
+        } else {
+            int diffYear = endYear - startYear;
+            int minYear = diffYear / 2;
+            if(minYear==0){
+                minYear=1;
+            }
+            minDate1 = dateStart.plusYears(minYear).minusDays(1);
+            minDate2 =dateStart.plusYears(minYear);
+        }
+        dateTimes.add(minDate1);
+        dateTimes.add(minDate2);
+        dateTimes.add(dateEnd);
+        return dateTimes;
+    }
+
+    public static void main(String[] args) {
+        List<DateTime> dateTimeList =new ArrayList<>();
+        List<DateTime> dateTimeList2 =new ArrayList<>();
+        DateTime dateTime =DateUtils2.formStrToDateTime("1901-7-14");
+        DateTime dateTime1 =DateUtils2.formStrToDateTime("1900-1-1");
+      List<DateTime> dateTimes =   DateUtils2.formStrToDateTime(dateTime1,dateTime);
+        dateTimeList2.addAll(dateTimes);
+         while (true){
+             DateTime d1 =dateTimeList2.get(0);
+             DateTime d2 =dateTimeList2.get(1);
+             DateTime d3 =dateTimeList2.get(2);
+             DateTime d4 =dateTimeList2.get(3);
+             dateTimeList2.remove(d1);
+             dateTimeList2.remove(d2);
+             dateTimeList2.remove(d3);
+             dateTimeList2.remove(d4);
+             List<DateTime> dateTimes3 =   DateUtils2.formStrToDateTime(d1,d2);
+             List<DateTime> dateTimes4 =   DateUtils2.formStrToDateTime(d3,d4);
+             dateTimeList2.addAll(dateTimes3);
+             dateTimeList2.addAll(dateTimes4);
+             dateTimeList.addAll(dateTimes3);
+             dateTimeList.addAll(dateTimes4);
+
+         }
+    }
+}

+ 4 - 2
PAS/src/main/java/cn/cslg/pas/controller/outApi/PatentStarController.java

@@ -28,8 +28,10 @@ public class PatentStarController {
     @PostMapping("/select")
     @Operation(summary = "一般检索接口")
     public String getAreaList(@RequestBody @Validated PatentStarListDto patentStarListDto) throws IOException {
-        Map<String, Object> map = patentStarApiService.patentStarSearchLocal(patentStarListDto);
-        return Response.success(map);
+//        Map<String, Object> map = patentStarApiService.patentStarSearchLocal(patentStarListDto);
+//        return Response.success(map);
+        patentStarApiService.test(patentStarListDto);
+        return Response.success();
     }
 
     @GetMapping("/getCnBib")

+ 83 - 17
PAS/src/main/java/cn/cslg/pas/service/outApi/PatentStarApiService.java

@@ -4,10 +4,8 @@ import cn.cslg.pas.common.model.PersonnelVO;
 import cn.cslg.pas.common.model.outApi.PatentStarDto;
 import cn.cslg.pas.common.model.outApi.PatentStarListDto;
 import cn.cslg.pas.common.model.vo.outApi.StarPatentVO;
-import cn.cslg.pas.common.utils.CacheUtils;
-import cn.cslg.pas.common.utils.FormatUtil;
+import cn.cslg.pas.common.utils.*;
 import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
-import cn.cslg.pas.common.utils.ThrowException;
 import cn.cslg.pas.domain.*;
 import cn.cslg.pas.service.upLoadPatent.RetrieveRecordService;
 import com.alibaba.fastjson.JSONArray;
@@ -19,10 +17,17 @@ import okhttp3.FormBody;
 import okhttp3.OkHttpClient;
 import okhttp3.Request;
 import okhttp3.Response;
+
+import org.joda.time.DateTime;
+import org.joda.time.Days;
+import org.joda.time.Months;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
 import java.io.IOException;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.regex.Matcher;
@@ -52,11 +57,11 @@ public class PatentStarApiService {
         Pattern patternSim = Pattern.compile(regexSim);
         Matcher matcherSim = patternSim.matcher(query);
         Map<String, String> map = new LinkedHashMap<>();
-        Integer i=1;
+        Integer i = 1;
         while (matcherSim.find()) {
-            String aa =matcherSim.group();
-            map.put("$"+i,matcherSim.group());
-            query = query.replaceFirst(matcherSim.group(),"\\$"+i);
+            String aa = matcherSim.group();
+            map.put("$" + i, matcherSim.group());
+            query = query.replaceFirst(matcherSim.group(), "\\$" + i);
             i++;
             System.out.println(query);
         }
@@ -69,11 +74,10 @@ public class PatentStarApiService {
                 .replace(" OR ", "+")
                 .replace(" NOT ", "-");
 
-    for (String key:map.keySet())
-    {
-   query=query.replace(key,map.get(key));
+        for (String key : map.keySet()) {
+            query = query.replace(key, map.get(key));
 
-    }
+        }
         //记录偏移量
         int t = 0;
         StringBuilder query2 = new StringBuilder(query);
@@ -150,9 +154,11 @@ public class PatentStarApiService {
     public void loadStarPatentVOS(List<StarPatentVO> starPatentVOS, JSONObject Data) {
         String aa = Data.toString();
         starPatentVOS.forEach(item -> {
+
             //如果有公开号,则将公开号作为专利号
             if (item.getPublicNo() != null && !item.getPublicNo().equals("")) {
                 item.setPatentNo(item.getPublicNo());
+
                 //如果没有公开号,但是有公告号,则将公告号作为公开号和专利号
             } else if (item.getAnnounceNo() != null && !item.getAnnounceNo().equals("")) {
                 item.setPublicNo(item.getAnnounceNo());
@@ -161,6 +167,7 @@ public class PatentStarApiService {
                 System.out.println("");
 
             }
+
             //陈宇 ↓ 如果没有公开日就将公告日作为公开日
             if (item.getPublicDate() == null || item.getPublicDate().equals("")) {
                 item.setPublicDate(item.getPublicAccreditDate());
@@ -179,6 +186,7 @@ public class PatentStarApiService {
                         item.getApplicant().add(patentApplicant);
                     }
             );
+
             if (item.getCurrentApplicantStr() != null && !item.getCurrentApplicantStr().equals("")) {
                 List<String> cApplicants = Arrays.asList(item.getCurrentApplicantStr().split(";"));
                 cApplicants.forEach(
@@ -191,12 +199,14 @@ public class PatentStarApiService {
                         }
                 );
             }
+
             //代理机构
             if (item.getAgencyStr() != null && !item.getAgencyStr().equals("")) {
                 PatentAgency patentAgency = new PatentAgency();
                 patentAgency.setName(item.getAgencyStr().split(" ")[0]);
                 item.setAgency(patentAgency);
             }
+
             //发明人
             if (item.getInventorStr() != null && !item.getInventorStr().equals("")) {
                 item.setInventor(new ArrayList<>());
@@ -210,6 +220,7 @@ public class PatentStarApiService {
                         }
                 );
             }
+
             //代理人
             if (item.getAgentStr() != null && !item.getAgentStr().equals("")) {
                 List<String> agent = Arrays.asList(item.getAgentStr().split(";"));
@@ -242,7 +253,6 @@ public class PatentStarApiService {
     }
 
     public Map<String, Object> patentStarSearchLocal(PatentStarListDto patentStarListDto) throws IOException {
-
         RetrieveRecord retrieveRecord = new RetrieveRecord();
         retrieveRecord.setConditions(patentStarListDto.getCurrentQuery());
         if (patentStarListDto.getRetrieveRecordId() != null) {
@@ -274,11 +284,13 @@ public class PatentStarApiService {
 
     }
 
+
     public Map<String, Object> patentStarSearchApi(PatentStarListDto patentStarListDto) throws IOException {
         try {
-            String formQuery = patentStarListDto.getCurrentQuery();
-            patentStarListDto.setCurrentQuery(PatentStarApiService.formatQuery(formQuery));
-
+if(patentStarListDto.getFormed()==null||patentStarListDto.getFormed()==false) {
+    String formQuery = patentStarListDto.getCurrentQuery();
+    patentStarListDto.setCurrentQuery(PatentStarApiService.formatQuery(formQuery));
+}
         } catch (Exception e) {
             return null;
         }
@@ -332,6 +344,62 @@ public class PatentStarApiService {
         return null;
     }
 
+    public List<PatentStarListDto> test(PatentStarListDto patentStarListDto) throws IOException {
+        DateTime nowDate = new DateTime();
+        DateTime date = DateUtils2.formStrToDateTime("2000-01-01");
+        //超过1万的列表
+        List<PatentStarListDto> patentStarListDtos = new ArrayList<>();
+        //返回的列表
+        List<PatentStarListDto> reDtos = new ArrayList<>();
+        patentStarListDto.setStartTime(date);
+        patentStarListDto.setEndTime(nowDate);
+        String formQuery = patentStarListDto.getCurrentQuery();
+        patentStarListDto.setOrginCondition(PatentStarApiService.formatQuery(formQuery));
+        patentStarListDtos.add(patentStarListDto);
+        while (patentStarListDtos.size() > 0) {
+            PatentStarListDto dto = patentStarListDtos.get(0);
+            patentStarListDtos.remove(dto);
+            Map<String, Object> map1 = this.patentStarSearchApi(dto);
+            Integer total1 = Integer.parseInt(map1.get("total").toString());
+            dto.setTotal(total1);
+            patentStarListDto.setFormed(true);
+            if (total1 > 10000) {
+                DateTime startTime1 = dto.getStartTime();
+                DateTime endTime1 = dto.getEndTime();
+                List<DateTime> dateTimes = DateUtils2.formStrToDateTime(startTime1, endTime1);
+                PatentStarListDto dto1 = new PatentStarListDto();
+                BeanUtils.copyProperties(dto, dto1);
+                dto1.setStartTime(dateTimes.get(0));
+                dto1.setEndTime(dateTimes.get(1));
+                this.setConditions(dto1);
+                PatentStarListDto dto2 = new PatentStarListDto();
+                BeanUtils.copyProperties(dto, dto2);
+                dto2.setStartTime(dateTimes.get(2));
+                dto2.setEndTime(dateTimes.get(3));
+                this.setConditions(dto2);
+                patentStarListDtos.add(dto1);
+                patentStarListDtos.add(dto2);
+            }
+            else{
+                reDtos.add(dto);
+            }
+
+        }
+
+        return reDtos;
+    }
+
+    public void setConditions(PatentStarListDto patentStarListDto) {
+        DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyyMMdd");
+        String startStr =formatter.print(patentStarListDto.getStartTime());
+        String endStr =formatter.print(patentStarListDto.getEndTime());
+        String cond = "*(" + startStr+ ">" + endStr + "/" + "AD)";
+        Integer len =patentStarListDto.getOrginCondition().length();
+        StringBuilder stringBuilder =new StringBuilder(patentStarListDto.getOrginCondition());
+        stringBuilder.insert(len-1,cond);
+        patentStarListDto.setCurrentQuery(stringBuilder.toString());
+    }
+
     /**
      * @param appNo
      * @return
@@ -746,6 +814,4 @@ public class PatentStarApiService {
     }
 
 
-
-
 }