chendayu 2 tahun lalu
induk
melakukan
32b3a5f66e

+ 1 - 0
PAS/src/main/java/cn/cslg/pas/common/model/dto/TaskWebSocketDTO.java

@@ -7,6 +7,7 @@ import lombok.experimental.Accessors;
 @Accessors(chain = true)
 public class TaskWebSocketDTO {
     private Integer projectId;
+    private Integer reportId;
     private Integer total;
     private Integer index;
     private Integer taskId;

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

@@ -3,11 +3,9 @@ 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类
@@ -50,14 +48,4 @@ public class PatentStarListDto {
     @JsonProperty(value = "OrderByType")
     private String OrderByType;
 
-    private Integer total;
-
-    private DateTime startTime;
-
-    private DateTime endTime;
-
-    private String orginCondition;
-
-    private Boolean formed;
-
 }

+ 3 - 7
PAS/src/main/java/cn/cslg/pas/common/utils/DateUtils.java

@@ -1,17 +1,13 @@
 package cn.cslg.pas.common.utils;
 
-
-import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.DateTime;
-
-import org.joda.time.format.DateTimeFormat;
+import cn.hutool.core.date.DateUtil;
 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;
 
@@ -562,8 +558,8 @@ public class DateUtils {
      * 把date转换成字符串
      */
     public static String formatDate(Date date, String code) {
-        SimpleDateFormat format = new SimpleDateFormat(code);
-        return format.format(date);
+        SimpleDateFormat dateFormat = new SimpleDateFormat(code);
+        return dateFormat.format(date);
     }
 
     public static String formatDate(Integer timestamp, String code) {

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

@@ -1,113 +0,0 @@
-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);
-
-         }
-    }
-}

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

@@ -28,10 +28,8 @@ 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);
-        patentStarApiService.test(patentStarListDto);
-        return Response.success();
+        Map<String, Object> map = patentStarApiService.patentStarSearchLocal(patentStarListDto);
+        return Response.success(map);
     }
 
     @GetMapping("/getCnBib")

+ 5 - 0
PAS/src/main/java/cn/cslg/pas/domain/Task.java

@@ -199,5 +199,10 @@ public class Task extends BaseEntity<Task> {
      */
     @TableField(exist = false)
     private String conditions;
+    /**
+     * 上一次遍历位置信息(检索式下标|检索页数下标|检索专利下标)
+     */
+    @TableField(exist = false)
+    private String continueLastInformation;
 
 }

+ 5 - 0
PAS/src/main/java/cn/cslg/pas/domain/asso/TaskCondition.java

@@ -106,5 +106,10 @@ public class TaskCondition implements Serializable {
      */
     @TableField(value = "isdelete_patentnos")
     private String isDeletePatentNos;
+    /**
+     * 上一次遍历位置信息(检索式下标|检索页数下标|检索专利下标)
+     */
+    @TableField(value = "continue_last_information")
+    private String continueLastInformation;
 
 }

+ 7 - 76
PAS/src/main/java/cn/cslg/pas/service/outApi/PatentStarApiService.java

@@ -4,8 +4,10 @@ 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.*;
+import cn.cslg.pas.common.utils.CacheUtils;
+import cn.cslg.pas.common.utils.FormatUtil;
 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;
@@ -17,17 +19,10 @@ 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;
@@ -154,11 +149,9 @@ 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());
@@ -167,7 +160,6 @@ public class PatentStarApiService {
                 System.out.println("");
 
             }
-
             //陈宇 ↓ 如果没有公开日就将公告日作为公开日
             if (item.getPublicDate() == null || item.getPublicDate().equals("")) {
                 item.setPublicDate(item.getPublicAccreditDate());
@@ -186,7 +178,6 @@ public class PatentStarApiService {
                         item.getApplicant().add(patentApplicant);
                     }
             );
-
             if (item.getCurrentApplicantStr() != null && !item.getCurrentApplicantStr().equals("")) {
                 List<String> cApplicants = Arrays.asList(item.getCurrentApplicantStr().split(";"));
                 cApplicants.forEach(
@@ -199,14 +190,12 @@ 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<>());
@@ -220,7 +209,6 @@ public class PatentStarApiService {
                         }
                 );
             }
-
             //代理人
             if (item.getAgentStr() != null && !item.getAgentStr().equals("")) {
                 List<String> agent = Arrays.asList(item.getAgentStr().split(";"));
@@ -253,6 +241,7 @@ public class PatentStarApiService {
     }
 
     public Map<String, Object> patentStarSearchLocal(PatentStarListDto patentStarListDto) throws IOException {
+
         RetrieveRecord retrieveRecord = new RetrieveRecord();
         retrieveRecord.setConditions(patentStarListDto.getCurrentQuery());
         if (patentStarListDto.getRetrieveRecordId() != null) {
@@ -284,13 +273,11 @@ public class PatentStarApiService {
 
     }
 
-
     public Map<String, Object> patentStarSearchApi(PatentStarListDto patentStarListDto) throws IOException {
         try {
-if(patentStarListDto.getFormed()==null||patentStarListDto.getFormed()==false) {
-    String formQuery = patentStarListDto.getCurrentQuery();
-    patentStarListDto.setCurrentQuery(PatentStarApiService.formatQuery(formQuery));
-}
+            String formQuery = patentStarListDto.getCurrentQuery();
+            patentStarListDto.setCurrentQuery(PatentStarApiService.formatQuery(formQuery));
+
         } catch (Exception e) {
             return null;
         }
@@ -344,62 +331,6 @@ if(patentStarListDto.getFormed()==null||patentStarListDto.getFormed()==false) {
         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

+ 179 - 25
PAS/src/main/java/cn/cslg/pas/service/upLoadPatent/ExcutePatentDataStar.java

@@ -9,8 +9,10 @@ import cn.cslg.pas.common.utils.FileUtils;
 import cn.cslg.pas.common.utils.RemoveHtmlTagsUtils;
 import cn.cslg.pas.common.utils.ThrowException;
 import cn.cslg.pas.domain.*;
+import cn.cslg.pas.domain.asso.TaskCondition;
 import cn.cslg.pas.service.TaskService;
 import cn.cslg.pas.service.UploadPatentBatchService;
+import cn.cslg.pas.service.asso.TaskConditionService;
 import cn.cslg.pas.service.outApi.PatentStarApiService;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson2.JSONObject;
@@ -25,8 +27,6 @@ import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
 import java.io.*;
 import java.net.URL;
-import java.sql.Timestamp;
-import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -48,6 +48,7 @@ public class ExcutePatentDataStar implements IExcutePatentData {
     private final PantentQueueService pantentQueueService;
     private final UploadPatentBatchService uploadPatentBatchService;
     private final TaskService taskService;
+    private final TaskConditionService taskConditionService;
     private Integer pTaskId = 0;
     private Integer pTaskStatus = 0;
 
@@ -58,8 +59,141 @@ public class ExcutePatentDataStar implements IExcutePatentData {
      */
     @Override
     public void startExcute(Task task) throws IOException {
+
+        //若本次下载任务是超过一万条专利的全部下载任务
+        if (task.getEndNumber() == 50) {
+            try {
+                Integer total = task.getTotal();
+                String orderBy = task.getOrderBy();  //排序字段
+                String orderByType = task.getOrderByType();  //排序类型
+                String dbType = task.getDBType();  //检索数据库类型
+                List<String> cells = task.getConfigCells();  //下载字段
+                Integer startNumber = task.getStartNumber();  //下载起始条数位置
+                List<String> isDeletePatentNos = task.getIsDeletePatentNos();  //起止条数中不需要下载的专利号
+
+                //多个检索式
+                ArrayList<MultipleCondition> multipleConditions = new ArrayList<>();
+                multipleConditions.add(new MultipleCondition().setConditions("AD=20230511 AND TI=(计算机 OR 手机)").setTotal(26));
+                multipleConditions.add(new MultipleCondition().setConditions("AD=20230512 AND TI=(计算机 OR 手机)").setTotal(15));
+                multipleConditions.add(new MultipleCondition().setConditions("AD=20230531 AND TI=(计算机 OR 手机)").setTotal(16));
+
+                //第一层遍历多个检索式,第二层遍历每个检索式检索出的检索页数,第三层遍历每页专利
+                int lastH, lastI, lastJ;
+                //若本次下载是暂停后继续,则取出上一次遍历位置信息
+                if (task.getContinueLastInformation() != null && !task.getContinueLastInformation().equals("")) {
+                    String[] lastIndexArr = task.getContinueLastInformation().split("\\|");
+                    lastH = Integer.parseInt(lastIndexArr[0]);
+                    lastI = Integer.parseInt(lastIndexArr[1]);
+                    lastJ = Integer.parseInt(lastIndexArr[2]);
+                } else {
+                    lastH = 0;
+                    lastI = 0;
+                    lastJ = 0;
+                }
+
+                for (int h = lastH; h < multipleConditions.size(); h++) {
+                    Calculate calculate = calculateFromStartAndEndNumber(1, multipleConditions.get(h).getTotal());
+                    //根据计算出的起止页数,一页一页检索
+                    for (int i = lastI; i <= calculate.getEndPage(); i++) {
+                        PatentStarListDto patentStarListDto = new PatentStarListDto()
+                                .setCurrentQuery(multipleConditions.get(h).getConditions())
+                                .setOrderBy(orderBy)
+                                .setOrderByType(orderByType)
+                                .setPageNum(i + 1)
+                                .setRowCount(50)
+                                .setDBType(dbType);
+                        //调用一般接口返回一批专利著录相关数据
+                        Map<String, Object> resultMap = patentStarApiService.patentStarSearchApi(patentStarListDto);
+                        if (resultMap == null || (Integer) resultMap.get("total") == 0) {
+                            ThrowException.throwXiaoShiException("未检索到相关专利");
+                        }
+
+                        List<StarPatentVO> starPatents = (List<StarPatentVO>) resultMap.get("records");
+                        //遍历这一页的专利
+                        for (int j = lastJ; j < starPatents.size(); j++) {
+                            //若任务状态为已暂停,则将当前三层循环的位置信息保存入任务条件表,并结束本次任务的下载
+                            if (pTaskId.equals(task.getId()) && pTaskStatus == 4) {
+                                TaskCondition taskCondition = new TaskCondition()
+                                        .setId(task.getTaskConditionId())
+                                        .setContinueLastInformation(h + "|" + i + "|" + j);
+                                taskConditionService.updateById(taskCondition);
+                                return;
+                            }
+
+                            //判断若本任务是第一次下载,并且刚检索到第一页专利
+                            if (h == 0 && i == 0) {
+                                //如果还没走到需要下载的专利开始位置startNumber,则跳过
+                                if (j < startNumber - 1) {
+                                    continue;
+                                }
+                            }
+
+                            //查询当前任务完成专利数量,判断若达到total,则结束
+                            if (taskService.getById(task.getId()).getSuccessNum().equals(total)) {
+                                return;
+                            }
+
+                            //若当前遍历到的专利号是需要删除的专利,则跳过,不下载它
+                            if (isDeletePatentNos != null && isDeletePatentNos.size() > 0 && isDeletePatentNos.contains(starPatents.get(j).getApplicationNo())) {
+                                continue;
+                            }
+
+                            UploadParamsVO uploadParamsVO = new UploadParamsVO();
+                            Patent patent = new Patent();
+                            uploadParamsVO.setPatent(patent);
+                            uploadParamsVO.getPatent().setPatentNo(starPatents.get(j).getPatentNo());
+                            uploadPatentBatchService.getOneOrInsertOne(uploadParamsVO);
+
+                            PQueueData pQueueData = new PQueueData()
+                                    .setTask(task)
+                                    .setStarPatent(starPatents.get(j))
+                                    .setUploadParamsVO(uploadParamsVO);
+
+                            //专利丢入著录生产者队列,并唤醒著录生产者线程
+                            if (cells.contains("1")) {
+                                pantentQueueService.zhuluToPQueue(pQueueData);
+                            }
+                            //专利丢入权要生产者队列,并唤醒权要生产者线程
+                            if (cells.contains("2")) {
+                                pantentQueueService.rightToPQueue(pQueueData);
+                            }
+                            //专利丢入说明书文本生产者队列,并唤醒说明书文本生产者线程
+                            if (cells.contains("3")) {
+                                pantentQueueService.instructionTextToPQueue(pQueueData);
+                            }
+                            //专利丢入说明书pdf生产者队列,并唤醒说明书pdf生产者线程
+                            if (cells.contains("4")) {
+                                pantentQueueService.instructionPDFToPQueue(pQueueData);
+                            }
+                            //专利丢入摘要附图生产者队列,并唤醒摘要附图生产者线程
+                            if (cells.contains("6")) {
+                                pantentQueueService.imageToPQueue(pQueueData);
+                            }
+
+                        }
+                    }
+
+                }
+
+            } catch (IOException e) {
+                e.printStackTrace();
+                //生产消费到一半时,发生错误异常,将任务状态置为完成
+                task = taskService.getById(task.getId());
+                if (task.getStatus().equals(1)) {
+                    task.setStatus(2);
+                    taskService.updateById(task);
+                }
+            }
+
+        } else {
+            excuteLessThan10000(task);
+        }
+
+
+    }
+
+    private void excuteLessThan10000(Task task) {
         try {
-            Integer total = task.getTotal();  //总条数
             Integer successNum = task.getSuccessNum();  //成功条数(即上一次下载到的位置)
             String conditions = task.getConditions();  //检索式
             String orderBy = task.getOrderBy();  //排序字段
@@ -70,7 +204,6 @@ public class ExcutePatentDataStar implements IExcutePatentData {
             Integer endNumber = task.getEndNumber();  //下载终止条数位置
             List<String> isAddPatentNos = task.getIsAddPatentNos();  //需要额外下载的专利号
             List<String> isDeletePatentNos = task.getIsDeletePatentNos();  //起止条数中不需要下载的专利号
-
             //startToEndNum:起止条数中需要下载的专利总数量
             int startToEndNum = 0;
             if (endNumber > 0) {
@@ -87,24 +220,11 @@ public class ExcutePatentDataStar implements IExcutePatentData {
 
             //若有起止条数,并且完成条数在起止条数内(即起止条数的专利还没有下载完)
             if (endNumber > 0 && startNumber <= endNumber && successNum < startToEndNum) {
-                int startPage;  //检索开始页数
-                int startNum;  //检索开始页数的开始专利位置
-                int endPage;  //检索结束页数
-                int endNum;  //检索结束页数的结束专利位置
-                if (startNumber % 50 != 0) {
-                    startPage = startNumber / 50 + 1;
-                    startNum = startNumber % 50;
-                } else {
-                    startPage = startNumber / 50;
-                    startNum = 50;
-                }
-                if (endNumber % 50 != 0) {
-                    endPage = endNumber / 50 + 1;
-                    endNum = endNumber % 50;
-                } else {
-                    endPage = endNumber / 50;
-                    endNum = 50;
-                }
+                Calculate calculate = calculateFromStartAndEndNumber(startNumber, endNumber);
+                Integer startPage = calculate.getStartPage();
+                Integer startNum = calculate.getStartNum();
+                Integer endPage = calculate.getEndPage();
+                Integer endNum = calculate.getEndNum();
 
                 //根据计算出的起止页数,一页一页检索
                 int pageNum = startPage;
@@ -179,7 +299,7 @@ public class ExcutePatentDataStar implements IExcutePatentData {
                 }
             }
 
-            //若是暂停后继续的任务,若 successNum > startToEndNum,即上一次执行不仅下载完了起止条数中的专利,还下载了isAdd中的部分专利
+            //若是暂停后继续的任务,若 successNum > startToEndNum,即上一次已经下载完了起止条数中的专利,还下载了isAdd中的部分专利
             int fromIndex = 0;
             if (successNum > 0 && successNum > startToEndNum) {
                 fromIndex = successNum - startToEndNum;
@@ -208,8 +328,6 @@ public class ExcutePatentDataStar implements IExcutePatentData {
                 taskService.updateById(task);
             }
         }
-
-
     }
 
     /**
@@ -677,6 +795,42 @@ public class ExcutePatentDataStar implements IExcutePatentData {
         return (int) timeStamp;
     }
 
+    /**
+     * 根据起止条数计算开始页数、开始页数的开始位置、结束页数、结束页数的结束位置
+     *
+     * @param startNumber 起始条数
+     * @param endNumber   终止条数
+     * @return 返回计算结果对象(开始页数、开始页数的开始位置、结束页数、结束页数的结束位置)
+     */
+    public Calculate calculateFromStartAndEndNumber(Integer startNumber, Integer endNumber) {
+        int startPage;  //检索开始页数
+        int startNum;  //检索开始页数的开始专利位置
+        int endPage;  //检索结束页数
+        int endNum;  //检索结束页数的结束专利位置
+        if (startNumber % 50 != 0) {
+            startPage = startNumber / 50 + 1;
+            startNum = startNumber % 50;
+        } else {
+            startPage = startNumber / 50;
+            startNum = 50;
+        }
+        if (endNumber % 50 != 0) {
+            endPage = endNumber / 50 + 1;
+            endNum = endNumber % 50;
+        } else {
+            endPage = endNumber / 50;
+            endNum = 50;
+        }
+
+        Calculate calculate = new Calculate()
+                .setStartPage(startPage)
+                .setStartNum(startNum)
+                .setEndPage(endPage)
+                .setEndNum(endNum);
+
+        return calculate;
+    }
+
     public void setTaskStatus(Integer taskId, Integer taskStatus) {
         this.pTaskId = taskId;
         this.pTaskStatus = taskStatus;

+ 1 - 0
PAS/src/main/java/cn/cslg/pas/service/upLoadPatent/MessageService.java

@@ -35,6 +35,7 @@ public class MessageService {
                 .setTaskId(task.getId())
                 .setTaskStatus(task.getStatus())
                 .setProjectId(task.getProjectId())
+                .setReportId(task.getReportId())
                 .setComplete(flag)
                 .setIndex(i)
                 .setTaskType(task.getType())

+ 2 - 1
PAS/src/main/java/cn/cslg/pas/service/upLoadPatent/PantentQueueService.java

@@ -107,7 +107,7 @@ public class PantentQueueService {
                     if (task.getType().equals(3) || task.getType().equals(4)) {
                         TaskCondition taskCondition = taskConditionService.getById(task.getTaskConditionId());
                         List<String> configCells = Arrays.asList(taskCondition.getConfigCells().split(","));
-                        task.setConfigCellsNum(configCells.size());  //将下载字段数量存入task对象中(为了在后面发送进度时可以根据下载字段的数量来对应消费者数量,从而确定是否完成了一个专利的下载)
+                        task.setConfigCellsNum(configCells.size());
                         task.setConfigCells(configCells);
                         task.setOrderBy(taskCondition.getOrderBy());
                         task.setOrderByType(taskCondition.getOrderByType());
@@ -121,6 +121,7 @@ public class PantentQueueService {
                             task.setIsDeletePatentNos(Arrays.asList(taskCondition.getIsDeletePatentNos().split(",")));
                         }
                         task.setConditions(taskCondition.getConditions());
+                        task.setContinueLastInformation(taskCondition.getContinueLastInformation());
                     }
 
                     //TODO 调用工厂方法,工厂方法会根据任务类型创建并返回对应的生产专利方法的对象

+ 51 - 58
PAS/src/main/java/cn/cslg/pas/service/upLoadPatent/UploadTaskService.java

@@ -67,57 +67,6 @@ public class UploadTaskService {
     }
 
     /**
-     * 新增Epo网站导入任务
-     *
-     * @param taskAddNewDTO 前台参数(检索信息conditions、专题库id、下载字段configCells等)
-     */
-    public TaskCondition addEpoTask(TaskAddNewDTO taskAddNewDTO) throws IOException {
-        Integer webId = taskAddNewDTO.getConfigId();
-        PersonnelVO personnelVO = cacheUtils.getLoginUserPersonnel(loginUtils.getId());
-        //根据网站id获得配置
-        WebLoginConfig webLoginConfig = webLoginConfigService.getLoginConfig(webId, personnelVO.getTenantId());
-        if (webLoginConfig == null) {
-            ThrowException.throwXiaoShiException("未配置网站登录信息");
-        }
-
-        //检查任务合法性(检查当前检索式能否检索出专利)
-        //根据检索式conditions检索一件专利著录信息
-        SerachBiblioData serachBiblioData = excutePatentDataEpo.getSerachBiblioData(taskAddNewDTO.getConditions(), 1, 1);
-        if (serachBiblioData == null || serachBiblioData.getTotals() == 0) {
-            ThrowException.throwXiaoShiException("根据检索信息未检索到相关专利,请尝试更换检索信息");
-        }
-        //任务与任务条件关联表新增数据
-        TaskCondition taskCondition = new TaskCondition();
-        taskCondition
-                .setTaskType(taskAddNewDTO.getTaskType())
-                .setConditions(taskAddNewDTO.getConditions())
-                .setCrons(taskAddNewDTO.getCrons())
-                .setConfigId(taskAddNewDTO.getConfigId())
-                .setTaskName(taskAddNewDTO.getTaskName())
-                .setTotal(serachBiblioData.getTotals());
-        List<String> cells = taskAddNewDTO.getConfigCells();
-        if (cells == null) {
-            taskCondition.setConfigCells("");
-        } else {
-            taskCondition.setConfigCells(String.join(",", cells));
-        }
-        taskConditionService.save(taskCondition);
-
-        //任务表新增任务
-        Integer taskId = taskService.addTask3(taskAddNewDTO, serachBiblioData.getTotals(), taskCondition);
-
-        //任务与任务条件关联表更新数据
-        taskCondition.setTaskId(taskId);
-        taskConditionService.updateById(taskCondition);
-
-        //任务存入生产者任务队列并唤醒生产者线程
-        pantentQueueService.taskQueueListAddTask(Arrays.asList(taskId));
-        pantentQueueService.awakeTasktch();
-
-        return taskCondition;
-    }
-
-    /**
      * 新增专利之星导入任务
      *
      * @param taskAddNewDTO 前台参数(检索信息conditions、专题库id、下载字段configCells等)
@@ -132,13 +81,6 @@ public class UploadTaskService {
                 ThrowException.throwXiaoShiException("该专题库已不存在,请尝试刷新页面");
             }
         }
-        //TODO 检查报告是否被删除
-//        if (taskAddNewDTO.getReportId() != null) {
-//            Report report = reportService.getById(taskAddNewDTO.getReportId());
-//            if (report == null) {
-//                ThrowException.throwXiaoShiException("该报告已不存在,请尝试刷新页面");
-//            }
-//        }
 
         //检查任务合法性2(根据网站配置id和登陆人所属租户id,看是否有网站导入任务的权限)
         Integer webId = taskAddNewDTO.getConfigId();
@@ -222,6 +164,57 @@ public class UploadTaskService {
         return taskCondition;
     }
 
+    /**
+     * 新增Epo网站导入任务
+     *
+     * @param taskAddNewDTO 前台参数(检索信息conditions、专题库id、下载字段configCells等)
+     */
+    public TaskCondition addEpoTask(TaskAddNewDTO taskAddNewDTO) throws IOException {
+        Integer webId = taskAddNewDTO.getConfigId();
+        PersonnelVO personnelVO = cacheUtils.getLoginUserPersonnel(loginUtils.getId());
+        //根据网站id获得配置
+        WebLoginConfig webLoginConfig = webLoginConfigService.getLoginConfig(webId, personnelVO.getTenantId());
+        if (webLoginConfig == null) {
+            ThrowException.throwXiaoShiException("未配置网站登录信息");
+        }
+
+        //检查任务合法性(检查当前检索式能否检索出专利)
+        //根据检索式conditions检索一件专利著录信息
+        SerachBiblioData serachBiblioData = excutePatentDataEpo.getSerachBiblioData(taskAddNewDTO.getConditions(), 1, 1);
+        if (serachBiblioData == null || serachBiblioData.getTotals() == 0) {
+            ThrowException.throwXiaoShiException("根据检索信息未检索到相关专利,请尝试更换检索信息");
+        }
+        //任务与任务条件关联表新增数据
+        TaskCondition taskCondition = new TaskCondition();
+        taskCondition
+                .setTaskType(taskAddNewDTO.getTaskType())
+                .setConditions(taskAddNewDTO.getConditions())
+                .setCrons(taskAddNewDTO.getCrons())
+                .setConfigId(taskAddNewDTO.getConfigId())
+                .setTaskName(taskAddNewDTO.getTaskName())
+                .setTotal(serachBiblioData.getTotals());
+        List<String> cells = taskAddNewDTO.getConfigCells();
+        if (cells == null) {
+            taskCondition.setConfigCells("");
+        } else {
+            taskCondition.setConfigCells(String.join(",", cells));
+        }
+        taskConditionService.save(taskCondition);
+
+        //任务表新增任务
+        Integer taskId = taskService.addTask3(taskAddNewDTO, serachBiblioData.getTotals(), taskCondition);
+
+        //任务与任务条件关联表更新数据
+        taskCondition.setTaskId(taskId);
+        taskConditionService.updateById(taskCondition);
+
+        //任务存入生产者任务队列并唤醒生产者线程
+        pantentQueueService.taskQueueListAddTask(Arrays.asList(taskId));
+        pantentQueueService.awakeTasktch();
+
+        return taskCondition;
+    }
+
     public void addPatentNoTask(TaskAddNewDTO taskAddNewDTO) throws IOException {
         log.info("开始处理【根据专利号导入专利任务】的业务,参数为:{}", taskAddNewDTO);