Sfoglia il codice sorgente

Merge remote-tracking branch 'origin/dev2' into dev2

lwhhszx 2 anni fa
parent
commit
7aa691669c
25 ha cambiato i file con 970 aggiunte e 294 eliminazioni
  1. 7 0
      PAS/src/main/java/cn/cslg/pas/common/model/PatentCell.java
  2. 4 0
      PAS/src/main/java/cn/cslg/pas/common/model/dto/QrtzTaskAddNewDTO.java
  3. 27 0
      PAS/src/main/java/cn/cslg/pas/common/model/dto/SWQueryDTO.java
  4. 32 17
      PAS/src/main/java/cn/cslg/pas/common/model/dto/ScratchWordsDTO.java
  5. 32 18
      PAS/src/main/java/cn/cslg/pas/common/model/dto/ScratchWordsUpdateDTO.java
  6. 21 1
      PAS/src/main/java/cn/cslg/pas/common/model/outApi/PatentStarListDto.java
  7. 86 0
      PAS/src/main/java/cn/cslg/pas/common/model/vo/ScratchWordsVO.java
  8. 32 5
      PAS/src/main/java/cn/cslg/pas/common/model/vo/outApi/StarPatentVO.java
  9. 9 8
      PAS/src/main/java/cn/cslg/pas/common/utils/FormatUtil.java
  10. 36 33
      PAS/src/main/java/cn/cslg/pas/controller/ScratchWordsController.java
  11. 2 1
      PAS/src/main/java/cn/cslg/pas/controller/TaskController.java
  12. 17 5
      PAS/src/main/java/cn/cslg/pas/controller/outApi/PatentStarController.java
  13. 99 0
      PAS/src/main/java/cn/cslg/pas/domain/ChinaPatentZhuLu.java
  14. 1 1
      PAS/src/main/java/cn/cslg/pas/domain/Patent.java
  15. 36 35
      PAS/src/main/java/cn/cslg/pas/domain/ScratchWords.java
  16. 1 1
      PAS/src/main/java/cn/cslg/pas/domain/Task.java
  17. 13 1
      PAS/src/main/java/cn/cslg/pas/mapper/ScratchWordsMapper.java
  18. 67 28
      PAS/src/main/java/cn/cslg/pas/service/ScratchWordsService.java
  19. 1 1
      PAS/src/main/java/cn/cslg/pas/service/TaskService.java
  20. 34 32
      PAS/src/main/java/cn/cslg/pas/service/outApi/PatentStarApiService.java
  21. 19 103
      PAS/src/main/java/cn/cslg/pas/service/upLoadPatent/ExcutePatentDataEpo.java
  22. 260 0
      PAS/src/main/java/cn/cslg/pas/service/upLoadPatent/ExcutePatentDataStar.java
  23. 8 4
      PAS/src/main/java/cn/cslg/pas/service/upLoadPatent/PantentQueueService.java
  24. 65 0
      PAS/src/main/java/cn/cslg/pas/service/upLoadPatent/UploadTaskService.java
  25. 61 0
      PAS/src/main/resources/mapper/ScratchWordsMapper.xml

+ 7 - 0
PAS/src/main/java/cn/cslg/pas/common/model/PatentCell.java

@@ -30,7 +30,14 @@ public class PatentCell {
     private String legal;
     private String url;
     private String abstrc;
+    /**
+     * 附图路径
+     */
     private String picUrl;
+    /**
+     * 附图文件名称
+     */
+    private String fileName;
     /*
     申请号
      */

+ 4 - 0
PAS/src/main/java/cn/cslg/pas/common/model/dto/QrtzTaskAddNewDTO.java

@@ -23,6 +23,10 @@ public class QrtzTaskAddNewDTO {
      */
     private Integer taskType;
     /**
+     * 任务类型(3.EPO 4.专利之星)
+     */
+    private Integer taskType2;
+    /**
      * 检索信息
      */
     private String conditions;

+ 27 - 0
PAS/src/main/java/cn/cslg/pas/common/model/dto/SWQueryDTO.java

@@ -0,0 +1,27 @@
+package cn.cslg.pas.common.model.dto;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/6/16
+ */
+@Data
+@Accessors(chain = true)
+public class SWQueryDTO {
+    /**
+     * 专利号
+     */
+    private String patentNo;
+
+    /**
+     * id
+     */
+    private Integer id;
+
+    /**
+     * 创建来源
+     */
+    private Integer createFrom;
+}

+ 32 - 17
PAS/src/main/java/cn/cslg/pas/common/model/dto/ScratchWordsDTO.java

@@ -16,29 +16,44 @@ import lombok.experimental.Accessors;
 public class ScratchWordsDTO extends BaseEntity<ScratchWordsDTO> {
 
     /**
+     * 创建人
+     */
+    private Integer createId;
+
+    /**
+     * 租户id
+     */
+    private Integer tenantId;
+
+    /**
      * 专利号
      */
-    private Integer patentNo;
+    private String patentNo;
+
+    /**
+     * 位置
+     */
+    private Integer position;
 
     /**
-     *
+     * 内容
      */
-    private String position;
+    private String text;
 
     /**
-     *
+     * 划词栏位
      */
-    private String content;
+    private String scratchField;
 
     /**
-     *
+     * 划词类型(0下划线,1高亮,2波浪线)
      */
-    private String scratchType;
+    private Integer scratchType;
 
     /**
-     *
+     * 划词颜色
      */
-    private String scratchColor;
+    private String color;
 
     /**
      * 标引备注
@@ -46,23 +61,23 @@ public class ScratchWordsDTO extends BaseEntity<ScratchWordsDTO> {
     private String remark;
 
     /**
-     * 创建
+     * 创建来源
      */
-    private Integer createId;
+    private Integer createFrom;
 
     /**
-     * 报告id
+     * 存放id(专题库id/报告id
      */
-    private Integer reportId;
+    private Integer rangeId;
 
     /**
-     * 租户id
+     * 公开类型(0私有1公有)
      */
-    private Integer tenantId;
+    private Integer permissionType;
 
     /**
-     * 专题库id
+     * 公开范围(true只在来源处可见/false所有地方可见)
      */
-    private Integer projectId;
+    private String rangeType;
 
 }

+ 32 - 18
PAS/src/main/java/cn/cslg/pas/common/model/dto/ScratchWordsUpdateDTO.java

@@ -15,29 +15,44 @@ import lombok.experimental.Accessors;
 public class ScratchWordsUpdateDTO extends BaseEntity<ScratchWordsUpdateDTO> {
 
     /**
+     * 创建人
+     */
+    private Integer createId;
+
+    /**
+     * 租户id
+     */
+    private Integer tenantId;
+
+    /**
      * 专利号
      */
-    private Integer patentNo;
+    private String patentNo;
 
     /**
-     *
+     * 位置
      */
-    private String position;
+    private Integer position;
 
     /**
-     *
+     * 内容
      */
-    private String content;
+    private String text;
 
     /**
-     *
+     * 划词栏位
      */
-    private String scratchType;
+    private String scratchField;
 
     /**
-     *
+     * 划词类型(0下划线,1高亮,2波浪线)
      */
-    private String scratchColor;
+    private Integer scratchType;
+
+    /**
+     * 划词颜色
+     */
+    private String color;
 
     /**
      * 标引备注
@@ -45,23 +60,22 @@ public class ScratchWordsUpdateDTO extends BaseEntity<ScratchWordsUpdateDTO> {
     private String remark;
 
     /**
-     * 创建
+     * 创建来源
      */
-    private Integer createId;
+    private Integer createFrom;
 
     /**
-     * 报告id
+     * 存放id(专题库id/报告id
      */
-    private Integer reportId;
+    private Integer rangeId;
 
     /**
-     * 租户id
+     * 公开类型(0私有1公有)
      */
-    private Integer tenantId;
+    private Integer permissionType;
 
     /**
-     * 专题库id
+     * 公开范围(true只在来源处可见/false所有地方可见)
      */
-    private Integer projectId;
-
+    private String rangeType;
 }

+ 21 - 1
PAS/src/main/java/cn/cslg/pas/common/model/outApi/PatentStarListDto.java

@@ -3,6 +3,9 @@ package cn.cslg.pas.common.model.outApi;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 import lombok.experimental.Accessors;
+import reactor.util.annotation.NonNull;
+
+import javax.validation.constraints.NotNull;
 
 /**
  * 专利之星检索dto类
@@ -10,21 +13,38 @@ import lombok.experimental.Accessors;
  * @author 李仁杰
  */
 
+@Accessors(chain = true)
 @Data
 public class PatentStarListDto {
     /**
      * 检索式
      */
     @JsonProperty(value = "CurrentQuery")
-   private String CurrentQuery;
+    private String CurrentQuery;
+    /**
+     * 表示检索中文库或世界库(CN中文专利库 WD世界专利库)
+     */
     @JsonProperty(value = "DBType")
     private String DBType;
+    /**
+     * 当前页,最多 200 页
+     */
     @JsonProperty(value = "PageNum")
     private Integer PageNum;
+    /**
+     * 每页条数,最多 50 条
+     */
     @JsonProperty(value = "RowCount")
     private Integer RowCount;
+    /**
+     * 排序字段:“AD”,“PD”,“GD”, “ID”
+     */
     @JsonProperty(value = "OrderBy")
     private String OrderBy;
+    /**
+     * 排序方式:“ASC”,“DESC”
+     */
     @JsonProperty(value = "OrderByType")
     private String OrderByType;
+
 }

+ 86 - 0
PAS/src/main/java/cn/cslg/pas/common/model/vo/ScratchWordsVO.java

@@ -0,0 +1,86 @@
+package cn.cslg.pas.common.model.vo;
+
+import cn.cslg.pas.common.model.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 管理员表
+ * </p>
+ *
+ * @author 王岩
+ * @since 2022-03-25
+ */
+@Data
+@Accessors(chain = true)
+public class ScratchWordsVO extends BaseEntity<ScratchWordsVO> {
+
+    /**
+     * 创建人
+     */
+    private Integer createId;
+
+    /**
+     * 租户id
+     */
+    private Integer tenantId;
+
+    /**
+     * 专利号
+     */
+    private String patentNo;
+
+    /**
+     * 位置
+     */
+    private Integer position;
+
+    /**
+     * 内容
+     */
+    private String text;
+
+    /**
+     * 划词栏位
+     */
+    private String scratchField;
+
+    /**
+     * 划词类型(0下划线,1高亮)
+     */
+    private Integer scratchType;
+
+    /**
+     * 划词颜色
+     */
+    private String color;
+
+    /**
+     * 标引备注
+     */
+    private String remark;
+
+    /**
+     * 创建来源
+     */
+    private Integer createFrom;
+
+    /**
+     * 存放id(专题库id/报告id)
+     */
+    private Integer rangeId;
+
+    /**
+     * 公开类型(0私有1公有)
+     */
+    private Integer permissionType;
+
+    /**
+     * 公开范围(T只在来源处可见/F所有地方可见)
+     */
+    private String rangeType;
+
+}

+ 32 - 5
PAS/src/main/java/cn/cslg/pas/common/model/vo/outApi/StarPatentVO.java

@@ -1,28 +1,55 @@
 package cn.cslg.pas.common.model.vo.outApi;
 
-import cn.cslg.pas.common.model.vo.BaseVO;
 import com.alibaba.fastjson.annotation.JSONField;
-import com.baomidou.mybatisplus.annotation.TableField;
 import lombok.Data;
+import lombok.experimental.Accessors;
 
+@Accessors(chain = true)
 @Data
-public class StarPatentVO  {
+public class StarPatentVO {
+    /**
+     * 专利号
+     */
     @JSONField(name = "PN")
-  private String patentNo;
+    private String patentNo;
+    /**
+     * 摘要
+     */
     @JSONField(name = "AB")
-   private String abstractStr;
+    private String abstractStr;
+    /**
+     * 申请号
+     */
     @JSONField(name = "ANO")
     private String applicationNo;
+    /**
+     * 标题
+     */
     @JSONField(name = "TI")
     private String name;
+    /**
+     * 申请日
+     */
     @JSONField(name = "AD")
     private String applicationDate;
+    /**
+     * 申请人
+     */
     @JSONField(name = "PA")
     private String applicantStr;
+    /**
+     * IPC分类号
+     */
     @JSONField(name = "IC")
     private String ipcListStr;
+    /**
+     * 公开日
+     */
     @JSONField(name = "PD")
     private String publicDate;
+    /**
+     * 公开号
+     */
     @JSONField(name = "PNO")
     private String publicNo;
 }

+ 9 - 8
PAS/src/main/java/cn/cslg/pas/common/utils/FormatUtil.java

@@ -7,20 +7,21 @@ public class FormatUtil {
     public static String toString(Object o) {
         return o == null ? "" : o.toString();
     }
-    public static String MD5(String src){
+
+    public static String MD5(String src) {
         // 需要加密的字符串
         try {
-// 加密对象,指定加密方式
+            // 加密对象,指定加密方式
             MessageDigest md5 = MessageDigest.getInstance("md5");
-// 准备要加密的数据
+            // 准备要加密的数据
             byte[] b = src.getBytes();
-// 加密
+            // 加密
             byte[] digest = md5.digest(b);
-// 十六进制的字符
-            char[] chars = new char[] { '0', '1', '2', '3', '4', '5',
-                    '6', '7' , '8', '9', 'A', 'B', 'C', 'D', 'E','F' };
+            // 十六进制的字符
+            char[] chars = new char[]{'0', '1', '2', '3', '4', '5',
+                    '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
             StringBuffer sb = new StringBuffer();
-// 处理成十六进制的字符串(通常)
+            // 处理成十六进制的字符串(通常)
             for (byte bb : digest) {
                 sb.append(chars[(bb >> 4) & 15]);
                 sb.append(chars[bb & 15]);

+ 36 - 33
PAS/src/main/java/cn/cslg/pas/controller/ScratchWordsController.java

@@ -1,47 +1,19 @@
 package cn.cslg.pas.controller;
 
-import cn.cslg.pas.common.core.annotation.Permission;
 import cn.cslg.pas.common.core.base.Constants;
-import cn.cslg.pas.common.model.vo.PoiVO;
+import cn.cslg.pas.common.model.dto.SWQueryDTO;
+import cn.cslg.pas.common.model.dto.ScratchWordsDTO;
+import cn.cslg.pas.common.model.dto.ScratchWordsUpdateDTO;
+import cn.cslg.pas.common.model.vo.ScratchWordsVO;
 import cn.cslg.pas.common.utils.*;
-import cn.cslg.pas.common.utils.auth.checkAuth;
-import cn.cslg.pas.domain.SystemDict;
-import cn.cslg.pas.domain.SystemDictAssociate;
-import cn.cslg.pas.service.AreaService;
-import cn.cslg.pas.service.PoiService;
-import cn.cslg.pas.service.SystemDictAssociateService;
-import cn.cslg.pas.service.SystemDictService;
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.io.FileUtil;
-import cn.hutool.core.io.IoUtil;
-import cn.hutool.core.io.resource.ClassPathResource;
-import cn.hutool.core.io.resource.ResourceUtil;
-import cn.hutool.core.util.IdUtil;
-import cn.hutool.core.util.NumberUtil;
-import cn.hutool.poi.excel.ExcelUtil;
-import cn.hutool.poi.excel.ExcelWriter;
+import cn.cslg.pas.service.*;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
-import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.core.io.FileSystemResource;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
 
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.File;
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.net.URLEncoder;
 import java.util.*;
-import java.util.stream.Collectors;
 
 @Tag(name = "划词高亮")
 @CrossOrigin
@@ -49,6 +21,37 @@ import java.util.stream.Collectors;
 @RequestMapping(Constants.API_VERSION_V2 + "/scratchWords")
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class ScratchWordsController {
+    private final ScratchWordsService scratchWordsService;
 
+    @Operation(summary = "新增划词高亮")
+    @PostMapping("/add")
+    public String add(@RequestBody ScratchWordsDTO scratchWordsDTO) {
+        if (scratchWordsDTO == null) {
+            return Response.error("请求参数为null");
+        } else {
+            scratchWordsService.add(scratchWordsDTO);
+            return Response.success("新增划词高亮完成");
+        }
+    }
 
+    @Operation(summary = "查询划词高亮")
+    @PostMapping("/query")
+    public String query(@RequestBody SWQueryDTO swQueryDTO) {
+        List<ScratchWordsVO> scratchWordsVOS = scratchWordsService.queryAll(swQueryDTO);
+        return Response.success(scratchWordsVOS);
+    }
+
+    @Operation(summary = "更新划词高亮")
+    @PostMapping("/update")
+    public String update(@RequestBody ScratchWordsUpdateDTO scratchWordsUpdateDTO){
+        scratchWordsService.update(scratchWordsUpdateDTO);
+        return Response.success("更新成功");
+    }
+
+    @Operation(summary = "删除划词高亮")
+    @PostMapping("/delete")
+    public String delete(@RequestBody List<Integer> ids){
+        scratchWordsService.delete(ids);
+        return Response.success("删除成功");
+    }
 }

+ 2 - 1
PAS/src/main/java/cn/cslg/pas/controller/TaskController.java

@@ -70,7 +70,8 @@ public class TaskController {
     @Operation(summary = "新增网站导入专利任务")
     public String add(@RequestBody QrtzTaskAddNewDTO qrtzTaskAddNewDTO) throws IOException, SchedulerException {
         //添加任务
-        AssoOsTaskQrtzTask assoOsTaskQrtzTask = uploadTaskService.addEpoTask(qrtzTaskAddNewDTO);
+//        AssoOsTaskQrtzTask assoOsTaskQrtzTask = uploadTaskService.addEpoTask(qrtzTaskAddNewDTO);
+        AssoOsTaskQrtzTask assoOsTaskQrtzTask = uploadTaskService.addPatentStarTask(qrtzTaskAddNewDTO);
         //任务添加完,判断是定时任务则任务调度添加该定时任务
         if (assoOsTaskQrtzTask.getTaskType() == 1) {
             jobService.addJob(assoOsTaskQrtzTask);

+ 17 - 5
PAS/src/main/java/cn/cslg/pas/controller/outApi/PatentStarController.java

@@ -10,6 +10,7 @@ import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
 import org.springframework.context.annotation.Lazy;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
@@ -22,56 +23,67 @@ import java.io.IOException;
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class PatentStarController {
     private final PatentStarApiService patentStarApiService;
+
     @PostMapping("/select")
-    @Operation(summary = "检索接口")
-    public String getAreaList(@RequestBody PatentStarListDto patentStarListDto) throws IOException {
-        return Response.success(patentStarApiService.patentStarSearchApi(patentStarListDto)) ;
+    @Operation(summary = "一般检索接口")
+    public String getAreaList(@RequestBody @Validated PatentStarListDto patentStarListDto) throws IOException {
+        return Response.success(patentStarApiService.patentStarSearchApi(patentStarListDto));
     }
+
     @GetMapping("/getCnBib")
     @Operation(summary = "获得中国专利著录")
-    public String getCnBib(String appNo) throws IOException {
+    public String getCnBib(String appNo) {
         return patentStarApiService.getCnBibApi(appNo);
     }
+
     @GetMapping("/getPicture")
     @Operation(summary = "获得中国专利摘要附图")
     public String getPicture(String appNo) throws IOException {
         return patentStarApiService.getPictureApi(appNo);
     }
+
     @GetMapping("/getWGPicture")
     @Operation(summary = "获得中国专利外观图")
     public String getWGPicture(String appNo) throws IOException {
         return patentStarApiService.getWGPictureApi(appNo);
     }
+
     @GetMapping("/getCnLegal")
     @Operation(summary = "获得中国专利法律状态")
     public String getCnLegal(String appNo) throws IOException {
         return patentStarApiService.getCnLegalApi(appNo);
     }
+
     @GetMapping("/getCnPdf")
     @Operation(summary = "获得中国专利pdf全文")
     public String getCnPdf(String appNo) throws IOException {
         return patentStarApiService.getCnPdfApi(appNo);
     }
+
     @GetMapping("/getCnFullXml")
     @Operation(summary = "获得中国专利全文文本")
     public String getCnFullXml(String appNo) throws IOException {
         return patentStarApiService.getCnFullXmlApi(appNo);
     }
+
     @GetMapping("/getEnPdf")
     @Operation(summary = "获得世界专利pdf")
     public String getEnPdf(String patentNo) throws IOException {
         return patentStarApiService.getEnPdfApi(patentNo);
     }
+
     @GetMapping("/getENBib")
     @Operation(summary = "获得世界专利著录信息")
     public String getENBib(String patentNo) throws IOException {
         return Response.success(patentStarApiService.getENBibApi(patentNo));
     }
+
     @GetMapping("/getFamilyByPubNo")
-    @Operation(summary = "获得同专利")
+    @Operation(summary = "获得同专利")
     public String getFamilyByPubNo(String patentNo) throws IOException {
         return patentStarApiService.getFamilyByPubNoApi(patentNo);
     }
+
     @GetMapping("/getCitedNumByPubNo")
     @Operation(summary = "获得被引用次数")
     public String getCitedNumByPubNo(String patentNo) throws IOException {

+ 99 - 0
PAS/src/main/java/cn/cslg/pas/domain/ChinaPatentZhuLu.java

@@ -0,0 +1,99 @@
+package cn.cslg.pas.domain;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 专利之星中国专利著录实体类
+ *
+ * @Author chenyu
+ * @Date 2023/6/25
+ */
+@Accessors(chain = true)
+@Data
+public class ChinaPatentZhuLu implements Serializable {
+    /**
+     * 申请号
+     */
+    private String AN;
+    /**
+     * 申请日
+     */
+    private String AD;
+    private String CPT;
+    /**
+     * 公开日
+     */
+    private String PD;
+    private String CGT;
+    /**
+     * 公告日
+     */
+    private String GD;
+    private String ZLTP;
+    /**
+     * 标题
+     */
+    private String TI;
+    /**
+     * 国省代码
+     */
+    private String CO;
+    private String MingCheng;
+    /**
+     * 代理人
+     */
+    private String AT;
+    /**
+     * 代理机构代码
+     */
+    private String AG;
+    /**
+     * 代理机构名称
+     */
+    private String AGN;
+    /**
+     * 主分类号
+     */
+    private String MC;
+    /**
+     * 分类号
+     */
+    private String IC;
+    /**
+     * 范畴分类
+     */
+    private String CT;
+    /**
+     * 申请人
+     */
+    private String PA;
+    /**
+     * 发明人
+     */
+    private String IV;
+    /**
+     * 申请人地址
+     */
+    private String DZ;
+    private String ZipCode;
+    /**
+     * 优先权号
+     */
+    private String PR;
+    private String PRD;
+    private String Examiner;
+    private String CiteInfo;
+    private String NoCiteInfo;
+    /**
+     * 摘要
+     */
+    private String AB;
+    /**
+     * 主权要
+     */
+    private String CL1;
+
+}

+ 1 - 1
PAS/src/main/java/cn/cslg/pas/domain/Patent.java

@@ -151,7 +151,7 @@ public class Patent extends BaseEntity<Patent> {
     private Integer selfRightNum;
 
     /**
-     * 权利要求
+     * 权利要求原文
      */
     @TableField("content")
     private String rightContent;

+ 36 - 35
PAS/src/main/java/cn/cslg/pas/domain/ScratchWords.java

@@ -22,38 +22,52 @@ import java.util.Date;
 public class ScratchWords extends BaseEntity<ScratchWords> {
 
     /**
+     * 创建人
+     */
+    @TableField("create_id")
+    private Integer createId;
+
+    /**
+     * 租户id
+     */
+    @TableField("tenant_id")
+    private Integer tenantId;
+
+    /**
      * 专利号
      */
     @TableField("patent_no")
-    private Integer patentNo;
+    private String patentNo;
 
     /**
-     *
+     * 位置
      */
     @TableField("position")
-    private String position;
+    private Integer position;
 
     /**
-     *
+     * 内容
      */
-    @TableField("content")
-    private String content;
+    @TableField("text")
+    private String text;
 
     /**
-     *
+     * 划词栏位
      */
-    @TableField("scratch_type")
-    private String scratchType;
-
     @TableField("scratch_field")
     private String scratchField;
 
+    /**
+     * 划词类型(0下划线,1高亮,2波浪线)
+     */
+    @TableField("scratch_type")
+    private Integer scratchType;
 
     /**
-     *
+     * 划词颜色
      */
-    @TableField("scratch_color")
-    private String scratchColor;
+    @TableField("color")
+    private String color;
 
     /**
      * 标引备注
@@ -62,39 +76,26 @@ public class ScratchWords extends BaseEntity<ScratchWords> {
     private String remark;
 
     /**
-     * 创建
+     * 创建来源
      */
-    @TableField("create_id")
-    private Integer createId;
+    @TableField("create_from")
+    private Integer createFrom;
 
     /**
-     * 报告id
+     * 存放id(专题库id/报告id
      */
-    @TableField("report_id")
-    private Integer reportId;
+    @TableField("range_id")
+    private Integer rangeId;
 
     /**
-     * 租户id
-     */
-    @TableField("tenant_id")
-    private Integer tenantId;
-
-    /**
-     * 专题库id
-     */
-    @TableField("project_id")
-    private Integer projectId;
-
-    /**
-     * 公开类型 0私有1公有
+     * 公开类型(0私有1公有)
      */
     @TableField("permission_type")
     private Integer permissionType;
 
     /**
-     * 公开范围类型(0全部1本专题库2本报告
+     * 公开范围(true只在来源处可见/false所有地方可见)
      */
     @TableField("range_type")
-    private Integer rangeType;
-
+    private String rangeType;
 }

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

@@ -20,7 +20,7 @@ import lombok.experimental.Accessors;
 public class Task extends BaseEntity<Task> {
 
     /**
-     * 任务类型 1.Excel导入专利任务 2.导出 3.Epo欧专局网站导入
+     * 任务类型 1.Excel导入专利任务 2.导出 3.Epo欧专局导入 4.专利之星导入
      */
     @TableField("type")
     private Integer type;

+ 13 - 1
PAS/src/main/java/cn/cslg/pas/mapper/ScratchWordsMapper.java

@@ -1,9 +1,12 @@
 package cn.cslg.pas.mapper;
 
+import cn.cslg.pas.common.model.vo.ScratchWordsVO;
 import cn.cslg.pas.domain.AdminUser;
 import cn.cslg.pas.domain.ScratchWords;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
+import java.util.List;
+
 /**
  * <p>
  * 专利划词表Mapper 接口
@@ -13,5 +16,14 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @since 2023-06-13
  */
 public interface ScratchWordsMapper extends BaseMapper<ScratchWords> {
-
+    /**
+     *
+     * @param patentNo
+     * @param tenantId
+     * @param createId
+     * @param projectId
+     * @param reportId
+     * @return
+     */
+    List<ScratchWordsVO> querySW(String patentNo, Integer tenantId, Integer createId, Integer projectId, Integer reportId);
 }

+ 67 - 28
PAS/src/main/java/cn/cslg/pas/service/ScratchWordsService.java

@@ -2,8 +2,10 @@ package cn.cslg.pas.service;
 
 
 import cn.cslg.pas.common.model.PersonnelVO;
+import cn.cslg.pas.common.model.dto.SWQueryDTO;
 import cn.cslg.pas.common.model.dto.ScratchWordsDTO;
 import cn.cslg.pas.common.model.dto.ScratchWordsUpdateDTO;
+import cn.cslg.pas.common.model.vo.ScratchWordsVO;
 import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
 import cn.cslg.pas.domain.ScratchWords;
@@ -18,6 +20,7 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 
 
@@ -32,58 +35,80 @@ import java.util.List;
 @Service
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class ScratchWordsService extends ServiceImpl<ScratchWordsMapper, ScratchWords> {
+    private final ScratchWordsMapper scratchWordsMapper;
     private final CacheUtils cacheUtils;
     private final LoginUtils loginUtils;
 
     /**
      * 新增划词高亮
      *
-     * @param scratchWordsDTOS
+     * @param scratchWordsDTO
      */
-    public void add(List<ScratchWordsDTO> scratchWordsDTOS){
+    public void add(ScratchWordsDTO scratchWordsDTO){
         ScratchWords scratchWords = new ScratchWords();
         //判断传入列表不为空
-        if(scratchWordsDTOS != null && scratchWordsDTOS.size() != 0){
-            //遍历传入列表
-            for(int i = 0; i < scratchWordsDTOS.size(); i++){
-                ScratchWordsDTO scratchWordsDTO = scratchWordsDTOS.get(i);
-                BeanUtils.copyProperties(scratchWordsDTO, scratchWords);
-                //获取当前登陆人信息
-                PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
-                //设置创建人id
-                scratchWords.setCreateId(personnelVO.getId());
-                //数据入表
-                scratchWords.insert();
-            }
+        if(scratchWordsDTO != null){
+            BeanUtils.copyProperties(scratchWordsDTO, scratchWords);
+            //获取当前登陆人信息
+            PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+            //设置创建人id
+            scratchWords.setCreateId(personnelVO.getId());
+            //设置租户id
+            scratchWords.setTenantId(personnelVO.getTenantId());
+            //数据入表
+            scratchWords.insert();
         } else {
-            throw new XiaoShiException("传入列表不能为空");
+            throw new XiaoShiException("传入对象不能为空");
         }
     }
 
     /**
      * 更新划词高亮
-     * @param scratchWordsUpdateDTOS
+     * @param scratchWordsUpdateDTO
      */
-    public void update(List<ScratchWordsUpdateDTO> scratchWordsUpdateDTOS){
+    public void update(ScratchWordsUpdateDTO scratchWordsUpdateDTO){
         ScratchWords scratchWords = new ScratchWords();
         //判断传入列表不为空
-        if(scratchWordsUpdateDTOS != null && scratchWordsUpdateDTOS.size() != 0){
-            //遍历传入列表
-            for(int i = 0; i < scratchWordsUpdateDTOS.size(); i++) {
-                ScratchWordsUpdateDTO scratchWordsUpdateDTO = scratchWordsUpdateDTOS.get(i);
-                BeanUtils.copyProperties(scratchWordsUpdateDTO, scratchWords);
-                scratchWordsUpdateDTO.updateById();
-            }
+        if(scratchWordsUpdateDTO != null){
+            BeanUtils.copyProperties(scratchWordsUpdateDTO, scratchWords);
+            scratchWords.updateById();
         } else {
-            throw new XiaoShiException("传入列表不能为空");
+            throw new XiaoShiException("传入对象不能为空");
         }
     }
 
-    public List<ScratchWords> queryAll(){
-        List<ScratchWords> scratchWords = this.list();
-        return scratchWords;
+
+    public List<ScratchWordsVO> queryAll(SWQueryDTO swQueryDTO){
+        if(swQueryDTO.getPatentNo() != null && swQueryDTO.getId() != null && swQueryDTO.getCreateFrom() != null) {
+            //获取当前登陆人信息
+            PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+            Integer tenantId = personnelVO.getTenantId();
+            Integer createId = personnelVO.getId();
+//            Integer tenantId = 10;
+//            Integer createId = 10;
+            if(swQueryDTO.getCreateFrom().equals(1)){
+                Integer projectId = swQueryDTO.getId();
+                Integer reportId = -1;
+                List<ScratchWordsVO> scratchWords = scratchWordsMapper.querySW(swQueryDTO.getPatentNo(), tenantId, createId, projectId, reportId);
+                return scratchWords;
+            }
+            if(swQueryDTO.getCreateFrom().equals(2)){
+                Integer reportId = swQueryDTO.getId();
+                Integer projectId = -1;
+                List<ScratchWordsVO> scratchWords = scratchWordsMapper.querySW(swQueryDTO.getPatentNo(), tenantId, createId, projectId, reportId);
+                return scratchWords;
+            } else {
+                throw new XiaoShiException("暂无该情况");
+            }
+        } else {
+            throw new XiaoShiException("传入参数不可为空");
+        }
     }
 
+    /**
+     * 删除划词高亮
+     * @param ids
+     */
     public void delete(List<Integer> ids){
         for(int i = 0; i < ids.size(); i++){
             LambdaQueryWrapper<ScratchWords> LW = new LambdaQueryWrapper<>();
@@ -92,4 +117,18 @@ public class ScratchWordsService extends ServiceImpl<ScratchWordsMapper, Scratch
             scratchWords.deleteById();
         }
     }
+//
+//    public List<ScratchWordsVO> querySW(String patentNo, Integer id, Integer type){
+//        //多重情况考虑
+//        //根据tenantId(公司)、patentNo(专利号),
+//        //   permissionType为1,全公司人都可见的批注;
+//        //        查询rangeType为F的(全部地方可见);
+//        //        查询rangeType为T的(只在来源处可见),但是要判断传入type=createFrom创建来源,传入id=rangeId;
+//        //   permissionType为0,只有自己可见的批注,需要满足登陆人信息=createId;
+//        //        查询rangeType为F的(全部地方可见);
+//        //        查询rangeType为T的(只在来源处可见),但是要判断传入type=createFrom创建来源,传入id=rangeId;
+//        List<ScratchWordsVO> swVOS = new ArrayList<>();
+//        List<ScratchWordsVO> swvos = new ArrayList<>();
+//        swVOS.add(swvos);
+//    }
 }

+ 1 - 1
PAS/src/main/java/cn/cslg/pas/service/TaskService.java

@@ -170,7 +170,7 @@ public class TaskService extends ServiceImpl<TaskMapper, Task> implements ITaskS
         //专利总数量
         task.setTotal(total);
         //任务类型 (1上传 2导出 3网站导入)
-        task.setType(3);
+        task.setType(qrtzTaskAddNewDTO.getTaskType2());
         //导入导出字段数量
         task.setFieldNum(0);
         //创建人id

+ 34 - 32
PAS/src/main/java/cn/cslg/pas/service/outApi/PatentStarApiService.java

@@ -91,12 +91,12 @@ public class PatentStarApiService {
             }
         }
         String reStr = sb.toString();
-        reStr ="FXX"+reStr.replace("=", "/");
+        reStr = "FXX" + reStr.replace("=", "/");
         return reStr;
     }
 
-    public Map<String,Object> patentStarSearchApi(PatentStarListDto patentStarListDto) throws IOException {
-        String formQuery=patentStarListDto.getCurrentQuery();
+    public Map<String, Object> 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";
@@ -119,16 +119,16 @@ public class PatentStarApiService {
             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<StarPatentVO> starPatentVOS  = JSONArray.parseArray(Data.get("List").toString(),StarPatentVO.class);
+                JSONObject jsonObject = JSONObject.parseObject(Objects.requireNonNull(response.body()).string());
+                JSONObject Data = (JSONObject) jsonObject.get("Data");
+                List<StarPatentVO> starPatentVOS = JSONArray.parseArray(Data.get("List").toString(), StarPatentVO.class);
                 // 打印服务端返回结果
-              //  return Objects.requireNonNull(response.body()).string();
-                Map<String,Object> reMap =new HashMap<>();
-                reMap.put("size",patentStarListDto.getRowCount());
-                reMap.put("current",patentStarListDto.getPageNum());
-                reMap.put("records",starPatentVOS);
-                reMap.put("total",Data.get("HitCount"));
+                //  return Objects.requireNonNull(response.body()).string();
+                Map<String, Object> 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) {
@@ -136,14 +136,15 @@ public class PatentStarApiService {
         }
         return null;
     }
+
     /**
      * @param appNo
      * @return
      * @throws IOException
      * @author 李仁杰
-     * 从专利之星获取摘要附图
+     * 从专利之星获取中国专利著录
      */
-    public String getCnBibApi(String appNo) throws IOException {
+    public String getCnBibApi(String appNo) {
         String url = "https://api.patentstar.com.cn/api/Patent/CnBibo/" + appNo;
         String appId = "2000041";
         String appkey = "F0E183D5F02C48E391F5FADF1B646F54";
@@ -178,7 +179,7 @@ public class PatentStarApiService {
      * @return
      * @throws IOException
      * @author 李仁杰
-     * 从专利之星获取摘要附图
+     * 从专利之星获取中国专利摘要附图
      */
     public String getPictureApi(String patentNo) throws IOException {
         String url = "https://api.patentstar.com.cn/api/Patent/CnMainImage/" + patentNo;
@@ -256,7 +257,7 @@ public class PatentStarApiService {
      * 从专利之星获取中国专利法律状态
      */
     public String getCnLegalApi(String appNo) throws IOException {
-        String url = "https://api.patentstar.com.cn/api/Patent/CnLegal/"+appNo;
+        String url = "https://api.patentstar.com.cn/api/Patent/CnLegal/" + appNo;
         String appId = "2000041";
         String appkey = "F0E183D5F02C48E391F5FADF1B646F54";
         Long currentTimeMillis = System.currentTimeMillis() / 1000;
@@ -293,8 +294,8 @@ public class PatentStarApiService {
      * 从专利之星获取中国专利全文图片
      */
 
-    public String  getCnPdfApi(String appNo) throws IOException {
-        String url = "https://api.patentstar.com.cn/api/Patent/CnPdf/"+appNo;
+    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;
@@ -322,6 +323,7 @@ public class PatentStarApiService {
         }
         return "{}";
     }
+
     /**
      * @param appNo
      * @return
@@ -330,8 +332,8 @@ public class PatentStarApiService {
      * 从专利之星获取中国专利全文文本
      */
 
-    public String  getCnFullXmlApi(String appNo) throws IOException {
-        String url = "https://api.patentstar.com.cn/api/Patent/CnFullXml/"+appNo;
+    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;
@@ -367,8 +369,8 @@ public class PatentStarApiService {
      * @author 李仁杰
      * 从专利之星获取世界专利pdf
      */
-    public String  getEnPdfApi(String patentNo) throws IOException {
-        String url = "  https://api.patentstar.com.cn/api/Patent/EnPdf/"+patentNo;
+    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;
@@ -404,8 +406,8 @@ public class PatentStarApiService {
      * @author 李仁杰
      * 从专利之星获取世界专利著录信息
      */
-    public String  getENBibApi(String patentNo) throws IOException {
-        String url = "https://api.patentstar.com.cn/api/Patent/ENBib/"+patentNo;
+    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;
@@ -441,8 +443,8 @@ public class PatentStarApiService {
      * @author 李仁杰
      * 从专利之星获取同族专利
      */
-    public String  getFamilyByPubNoApi(String patentNo) throws IOException {
-        String url = "https://api.patentstar.com.cn/api/Patent/FamilyByPubNo/"+patentNo;
+    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;
@@ -478,11 +480,11 @@ public class PatentStarApiService {
      * @author 李仁杰
      * 获得专利被引用次数api
      */
-    public String  getCitedNumByPubNoApi(String patentNo) throws IOException {
-        String url = "https://api.patentstar.com.cn/api/Patent/CitedNumByPubNo/"+patentNo;
+    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;
+        Long currentTimeMillis = System.currentTimeMillis() / 1000;
         String Sign = appId + appkey + currentTimeMillis.toString();
         String signMd5 = FormatUtil.MD5(Sign);
         // 创建一个OkHttpClient对象
@@ -509,8 +511,8 @@ public class PatentStarApiService {
     }
 
     public static void main(String[] args) {
-        String str ="(AB=电子 OR TI=电子)";
-    String aa=   PatentStarApiService.formatQuery(str);
-    System.out.println(aa);
+        String str = "(AB=电子 OR TI=电子)";
+        String aa = formatQuery(str);
+        System.out.println(aa);
     }
 }

+ 19 - 103
PAS/src/main/java/cn/cslg/pas/service/upLoadPatent/ExcutePatentDataEpo.java

@@ -51,6 +51,7 @@ public class ExcutePatentDataEpo implements IExcutePatentData {
     private final PatentAffairService patentAffairService;
     private final ProjectPatentLinkService projectPatentLinkService;
     private final PatentService patentService;
+    private final PatentImageService patentImageService;
 
     /**
      * 解析获取专利数据
@@ -60,13 +61,11 @@ public class ExcutePatentDataEpo implements IExcutePatentData {
      */
     @Override
     public void startExcute(Task task) throws IOException {
-        Integer taskId = task.getId();
-        List<AssoOsTaskQrtzTask> assoOsTaskQrtzTasks = assoOsTaskQrtzTaskService.list(new LambdaQueryWrapper<AssoOsTaskQrtzTask>().eq(AssoOsTaskQrtzTask::getTaskId, taskId));
+        //从任务关联网站导入任务表中取出当前任务
+        List<AssoOsTaskQrtzTask> assoOsTaskQrtzTasks = assoOsTaskQrtzTaskService.list(new LambdaQueryWrapper<AssoOsTaskQrtzTask>().eq(AssoOsTaskQrtzTask::getTaskId, task.getId()));
         AssoOsTaskQrtzTask assoOsTaskQrtzTask = assoOsTaskQrtzTasks.get(0);
 
-        Integer successNum = task.getSuccessNum();
-
-        //从任务关联网站导入任务对象中取出下载字段、检索信息
+        //从任务数据中获取下载字段、检索式
         String cellsStr = assoOsTaskQrtzTask.getConfigCells();
         List<String> cells = Arrays.asList(cellsStr.split(","));
         String conditions = assoOsTaskQrtzTask.getConditions();
@@ -77,40 +76,8 @@ public class ExcutePatentDataEpo implements IExcutePatentData {
         //获得专利总数量
         Integer count = task.getTotal();
 
-        //计算进度值
-//        double percentage = count == 0 ? 0 : (count.equals(successNum) ? (successNum * 1D) : (successNum + 1D) / count * 100D);
-//        percentage = MathUtils.saveTwoDecimal(percentage);
         //1.根据专利总数量count遍历检索专利
         for (int i = 1; i <= count; i += size) {
-            //查看任务状态
-//            QrtzTaskDetail qrtzTaskDetail1 = qrTaskDetailService.getById(webQueryDTO.getTaskId());
-//            if (qrtzTaskDetail1.getTaskDetailState().equals(7)) {
-//                qrtzTaskDetail1.setTaskDetailState(5);
-//                qrtzTaskDetail1.setSuccessNum(successNum);
-//                qrtzTaskDetail1.setTaskProcess(percentage);
-//                qrtzTaskDetail1.updateById();
-//                WebSocketServer.sendInfo(Response.websocket(new TaskWebSocketDTO()
-//                        .setId(webQueryDTO.getTaskId())
-//                        .setProjectId(task.getProjectId())
-//                        .setComplete(false)
-//                        .setIndex(successNum)
-//                        .setTaskDetailState(5)
-//                        .setTotal(count), ResponseEnum.PATENT_IMPORT_TASK_SUCCESS), "null");
-//                return null;
-//            } else if (qrtzTaskDetail1.getTaskDetailState().equals(8)) {
-//                qrtzTaskDetail1.setTaskDetailState(6);
-//                qrtzTaskDetail1.setSuccessNum(successNum);
-//                qrtzTaskDetail1.setTaskProcess(percentage);
-//                qrtzTaskDetail1.updateById();
-//                WebSocketServer.sendInfo(Response.websocket(new TaskWebSocketDTO()
-//                        .setId(webQueryDTO.getTaskId())
-//                        .setProjectId(task.getProjectId())
-//                        .setComplete(false)
-//                        .setIndex(successNum)
-//                        .setTaskDetailState(6)
-//                        .setTotal(count), ResponseEnum.PATENT_IMPORT_TASK_SUCCESS), "null");
-//                return null;
-//            }
             //根据检索式conditions、专利开始数i、专利最后数i + size - 1检索专利著录信息
             SerachBiblioData serachBiblioData = getSerachBiblioData(conditions, i, i + size - 1);
             //获取检索结果中的所有专利著录信息
@@ -188,14 +155,8 @@ public class ExcutePatentDataEpo implements IExcutePatentData {
                         setFuJian(drawingLink, drawingPage, drawingType, patentCell, ".tiff");
                     }
 
-                    //将专利发送到分析系统(保存专利入库
+                    //先将部分入库,再将其余扔给消费者来入库(消费者方更改任务状态发送进度通知
                     if (patentCell.getPatentNo() != null) {
-//                        String res = outInterfaceService.importPatents(patentCell);
-//                        JSONObject jsonObject = JSONObject.parseObject(res);
-//                        if (jsonObject.get("code").toString().equals("500")) {
-//                            //舍弃这个专利,继续下一个专利
-//                            continue;
-//                        }
                         UploadParamsVO uploadParamsVO = new UploadParamsVO();
                         Patent patent2 = new Patent();
                         //设置专利号
@@ -230,6 +191,16 @@ public class ExcutePatentDataEpo implements IExcutePatentData {
                         uploadParamsVO.setSimpleStatus(patentCell.getStatue());
                         uploadParamsVO.setPatent(patent2);
                         getOneOrInsertOne(uploadParamsVO);
+                        //摘要附图上传专利附图表"os_patent_img"根据专利id删除该专利的摘要图片数据,以免上传重复
+                        patentImageService.deleteByPatentIdAndStatus(uploadParamsVO.getPatent().getId(), 1);
+                        PatentImage patentImage = new PatentImage();
+                        patentImage.setStatus(1);
+                        patentImage.setPatentId(uploadParamsVO.getPatent().getId());
+                        patentImage.setUrl(patentCell.getPicUrl());
+                        patentImage.setFileName(patentCell.getFileName());
+                        //摘要附图数据入库
+                        patentImage.insert();
+
                         if (patentCell.getAgency() != null && !patentCell.getAgency().equals("")) {
                             uploadParamsVO.getPatent().setAgencyId(patentAgencyService.getAgencyStringIdByName(patentCell.getAgency()));
                         }
@@ -276,73 +247,16 @@ public class ExcutePatentDataEpo implements IExcutePatentData {
                         pantentQueueService.patentToQueue(task, uploadParamsVO, null);
                     }
 
-//                    QrtzTaskDetail qrtzTaskDetail11 = qrTaskDetailService.getById(qrtzTaskDetail.getId());
-//                    percentage = count == 0 ? 0 : (count.equals(successNum) ? (successNum * 1D) : (successNum + 1D) / count * 100D);
-//                    percentage = MathUtils.saveTwoDecimal(percentage);
-//                    WebSocketServer.sendInfo(Response.websocket(new TaskWebSocketDTO()
-//                            .setId(webQueryDTO.getTaskId())
-//                            .setProjectId(task.getProjectId())
-//                            .setComplete(false)
-//                            .setIndex(successNum)
-//                            .setPercentage(percentage)
-//                            .setTaskDetailState(qrtzTaskDetail11.getTaskDetailState())
-//                            .setFileName("")
-//                            .setUrl("")
-//                            .setTotal(count), ResponseEnum.PATENT_IMPORT_TASK_SUCCESS), "null");
                 } catch (XiaoShiException e) {
                     //虽然拿不到所有附图,但已经拿到了专利著录,能拿到啥是啥
                     log.info(e.getMessage());
                 } catch (Exception e) {
-//                    qrtzTaskDetail.setTaskDetailState(3);
-//                    qrtzTaskDetail.setSuccessNum(successNum);
-//                    qrtzTaskDetail.setDefaultNum(qrtzTaskDetail.getAllNum() - successNum);
-//                    qrtzTaskDetail.setFailure("拉取节点失败");
-//                    qrtzTaskDetail.setEndTime(new Date());
-//                    qrtzTaskDetail.updateById();
-//                    if (qrtzTask.getTaskType() == 1) {
-//                        qrtzTask.setTaskState(4);
-//                    } else {
-//                        qrtzTask.setTaskState(3);
-//                    }
-//                    qrtzTask.updateById();
-//                    WebSocketServer.sendInfo(Response.websocket(new TaskWebSocketDTO()
-//                            .setId(webQueryDTO.getTaskId())
-//                            .setProjectId(task.getProjectId())
-//                            .setComplete(true)
-//                            .setIndex(successNum)
-//                            .setPercentage(100D)
-//                            .setTaskDetailState(qrtzTaskDetail.getTaskDetailState())
-//                            .setFileName("")
-//                            .setUrl("")
-//                            .setTotal(successNum), ResponseEnum.PATENT_IMPORT_TASK_SUCCESS), "");
+
                 }
 
             }
         }
-//        WebSocketServer.sendInfo(Response.websocket(new TaskWebSocketDTO()
-//                .setId(webQueryDTO.getTaskId())
-//                .setProjectId(task.getProjectId())
-//                .setComplete(true)
-//                .setIndex(count)
-//                .setPercentage(100D)
-//                .setTaskDetailState(qrtzTaskDetail.getTaskDetailState())
-//                .setFileName("")
-//                .setUrl("")
-//                .setTotal(count), ResponseEnum.PATENT_IMPORT_TASK_SUCCESS), "");
-//        //任务执行情况状态设为成功,任务条件状态设为已完成(若是任务条件是定时任务则设为等待下一次执行)
-//        qrtzTaskDetail.setTaskDetailState(2);
-//        qrtzTaskDetail.setSuccessNum(successNum);
-//        qrtzTaskDetail.setDefaultNum(qrtzTaskDetail.getAllNum() - successNum);
-//        qrtzTaskDetail.setTaskProcess(100);
-//        qrtzTaskDetail.setEndTime(new Date());
-//        qrtzTaskDetail.updateById();
-//        if (qrtzTask.getTaskType() == 1) {
-//            qrtzTask.setTaskState(4);
-//        } else {
-//            qrtzTask.setTaskState(2);
-//        }
-//        qrtzTask.updateById();
-//        return patentCells;
+
     }
 
     //调用外部接口获取一批专利著录信息
@@ -415,6 +329,7 @@ public class ExcutePatentDataEpo implements IExcutePatentData {
             applicationPersons.add(application.getOriginalName());
         }
         patentCell.setApplicationPersons(applicationPersons);
+
         //装载申请人地址(未找到)
         //装载发明人
         ArrayList<String> inventors = new ArrayList<>();
@@ -592,6 +507,7 @@ public class ExcutePatentDataEpo implements IExcutePatentData {
                 //如果是摘要附图
                 if (FuJianSuffix.equals(".jpeg")) {
                     patentCell.setPicUrl(fileDTO.getPath());
+                    patentCell.setFileName(fileDTO.getFileName());
                 }
                 //如果是其他附图
                 if (FuJianSuffix.equals(".tiff")) {

+ 260 - 0
PAS/src/main/java/cn/cslg/pas/service/upLoadPatent/ExcutePatentDataStar.java

@@ -0,0 +1,260 @@
+package cn.cslg.pas.service.upLoadPatent;
+
+import cn.cslg.pas.common.model.outApi.PatentStarListDto;
+import cn.cslg.pas.common.model.vo.UploadParamsVO;
+import cn.cslg.pas.common.model.vo.outApi.StarPatentVO;
+import cn.cslg.pas.domain.*;
+import cn.cslg.pas.domain.asso.AssoOsTaskQrtzTask;
+import cn.cslg.pas.service.asso.AssoOsTaskQrtzTaskService;
+import cn.cslg.pas.service.outApi.PatentStarApiService;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * 专利之星类型任务解析获取专利类
+ *
+ * @Author chenyu
+ * @Date 2023/6/25
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class ExcutePatentDataStar implements IExcutePatentData {
+    private final AssoOsTaskQrtzTaskService assoOsTaskQrtzTaskService;
+    private final PatentStarApiService patentStarApiService;
+
+    /**
+     * 解析获取专利数据
+     *
+     * @param task 任务
+     * @throws IOException 抛出IO异常
+     */
+    @Override
+    public void startExcute(Task task) throws IOException {
+        //从任务关联网站导入任务表中取出当前任务
+        List<AssoOsTaskQrtzTask> assoOsTaskQrtzTasks = assoOsTaskQrtzTaskService.list(new LambdaQueryWrapper<AssoOsTaskQrtzTask>().eq(AssoOsTaskQrtzTask::getTaskId, task.getId()));
+        AssoOsTaskQrtzTask assoOsTaskQrtzTask = assoOsTaskQrtzTasks.get(0);
+
+        //从任务数据中获取下载字段、检索式
+        String cellsStr = assoOsTaskQrtzTask.getConfigCells();
+        List<String> cells = Arrays.asList(cellsStr.split(","));
+        String conditions = assoOsTaskQrtzTask.getConditions();
+
+        //定义每次检索的专利数量(每次检索50件)
+        int size = 50;
+
+        //获得专利总数量
+        Integer count = task.getTotal();
+
+        ArrayList<UploadParamsVO> uploadParamsVOs = new ArrayList<>();
+        //1.根据专利总数量count遍历检索专利
+        for (int i = 1; i <= count; i += size) {
+            PatentStarListDto patentStarListDto = new PatentStarListDto()
+                    .setCurrentQuery(conditions)
+                    .setOrderBy("AD")
+                    .setOrderByType("DESC")
+                    .setPageNum(1)
+                    .setRowCount(size)
+                    .setDBType("cN");
+            //调用一般接口
+            Map<String, Object> resultMap = patentStarApiService.patentStarSearchApi(patentStarListDto);
+            if (resultMap == null || (Integer) resultMap.get("total") == 0) {
+                continue;
+            }
+            //调用一般接口返回专利相关数据
+            List<StarPatentVO> patents = (List<StarPatentVO>) resultMap.get("records");
+
+            //遍历50个专利
+            for (StarPatentVO starPatent : patents) {
+                UploadParamsVO uploadParamsVO = new UploadParamsVO();
+                Patent patent = new Patent();
+                //装载专利著录
+                if (cells.contains("1")) {
+                    setPatentZhuLu(starPatent, uploadParamsVO, patent);
+                }
+
+                //装载权要
+                if (cells.contains("2")) {
+                    setPatentClaim(starPatent, uploadParamsVO);
+                }
+
+                //装载说明书文本
+                if (cells.contains("3")) {
+                    setPatentInstructionText(starPatent, uploadParamsVO);
+                }
+
+
+                uploadParamsVOs.add(uploadParamsVO);
+            }
+
+        }
+
+        System.out.println("专利总数量:" + uploadParamsVOs.size());
+
+    }
+
+    /**
+     * 装载著录方法
+     *
+     * @param uploadParamsVO 专利实体类对象
+     * @param patent         专利基础数据实体类对象
+     * @param starPatent     专利之星著录对象
+     */
+    private void setPatentZhuLu(StarPatentVO starPatent, UploadParamsVO uploadParamsVO, Patent patent) {
+        //装载专利号
+        patent.setPatentNo(starPatent.getPatentNo());
+        //装载申请号
+        patent.setApplicationNo(starPatent.getApplicationNo());
+        //装载申请日
+        if (starPatent.getApplicationDate() != null && !starPatent.getApplicationDate().equals("")) {
+            patent.setApplicationDate(Integer.parseInt(starPatent.getApplicationDate()));
+        }
+        //装载公开号
+        patent.setPublicNo(starPatent.getPublicNo());
+
+        //装载公开日
+        if (starPatent.getPublicDate() != null && !starPatent.getPublicDate().equals(""))
+            patent.setPublicDate(Integer.parseInt(starPatent.getPublicDate()));
+        //装载申请人
+        if (starPatent.getAbstractStr() != null && !starPatent.getAbstractStr().equals("")) {
+            uploadParamsVO.setPatentApplicantOriginalName(Arrays.asList(starPatent.getApplicantStr().split(";")));
+        }
+        //装载摘要
+        patent.setAbstractStr(starPatent.getAbstractStr());
+        //装载标题
+        patent.setName(starPatent.getName());
+        //装载IPC分类号
+        if (starPatent.getIpcListStr() != null && !starPatent.getIpcListStr().equals("")) {
+            String[] ipcArr = starPatent.getIpcListStr().split(";");
+            //装载IPC分类号
+            uploadParamsVO.setMainIpc(ipcArr[0]);
+            uploadParamsVO.setIpcList(Arrays.asList(ipcArr));
+        }
+        //以上 ↑装载的是调用"一般接口"返回的专利相关数据
+
+        //以下 ↓装载的是调用"中国专利著录接口"返回的专利相关数据
+        String appNo = starPatent.getApplicationNo().substring(0, starPatent.getApplicationNo().lastIndexOf("."));
+        //调用中国专利著录接口返回的专利相关数据最外层是一个集合"[]",但是集合中只有一个对象"{}",以下方式处理
+        String chinaPatentZhuLuStr = patentStarApiService.getCnBibApi(appNo);
+        //chinaPatentZhuLuStr = chinaPatentZhuLuStr.substring(chinaPatentZhuLuStr.indexOf("["), chinaPatentZhuLuStr.lastIndexOf("[")).trim();
+        //ChinaPatentZhuLu chinaPatentZhuLu = JSONObject.parseObject(chinaPatentZhuLuStr, ChinaPatentZhuLu.class);
+        //以上暂无需处理 ↑ 以下 ↓有现成的json数组字符串转为集合方法
+        List<ChinaPatentZhuLu> chinaPatentZhuLus = JSON.parseArray(chinaPatentZhuLuStr, ChinaPatentZhuLu.class);
+        ChinaPatentZhuLu chinaPatentZhuLu = chinaPatentZhuLus.get(0);
+
+        //装载申请人地址
+        ArrayList<String> patentApplicantOriginalAddresss = new ArrayList<>();
+        patentApplicantOriginalAddresss.add(chinaPatentZhuLu.getDZ().substring(chinaPatentZhuLu.getDZ().indexOf(" ") + 1));
+        uploadParamsVO.setPatentApplicantOriginalAddress(patentApplicantOriginalAddresss);
+
+        //装载代理人
+        List<String> patentAgents = Arrays.asList(chinaPatentZhuLu.getAT().split(";"));
+        ArrayList<PatentAgent> patentAgentList = new ArrayList<>();
+        for (String n : patentAgents) {
+            PatentAgent patentAgent = new PatentAgent();
+            patentAgent.setName(n);
+            patentAgentList.add(patentAgent);
+        }
+        uploadParamsVO.setPatentAgentList(patentAgentList);
+
+        //装载代理机构地址
+        if (chinaPatentZhuLu.getAGN() != null && !chinaPatentZhuLu.getAGN().equals("")) {
+            String agencyAddress = chinaPatentZhuLu.getAGN().substring(0, chinaPatentZhuLu.getAGN().lastIndexOf(" "));
+            patent.setAgencyId(agencyAddress);
+        }
+
+        //装载发明人
+        List<String> patentInventorNames = Arrays.asList(chinaPatentZhuLu.getIV().split(";"));
+        ArrayList<PatentInventor> patentInventors = new ArrayList<>();
+        for (String patentInventorName : patentInventorNames) {
+            PatentInventor patentInventor = new PatentInventor();
+            patentInventor.setName(patentInventorName);
+            patentInventors.add(patentInventor);
+        }
+        uploadParamsVO.setPatentInventorList(patentInventors);
+
+        //装载同族号
+//        patentCell.setFamilyId(patent.getFamilyId());
+//        //装载优先权号、优先权国家、优先权日
+//        ArrayList<Priority> priorities = new ArrayList<>();
+//        List<Priorityy> priorties = patent.getPriorties();
+//        for (Priorityy priorty : priorties) {
+//            for (PriorityNumber number : priorty.getNumbers()) {
+//                if (number.getType().equals("epodoc")) {
+//                    Priority priority = new Priority()
+//                            .setPriorityNo(number.getNumber().substring(2))
+//                            .setPriorityCountry(number.getNumber().substring(0, 2))
+//                            .setPriorityDate(priorty.getDate());
+//                    priorities.add(priority);
+//                }
+//            }
+//        }
+//        patentCell.setPriorities(priorities);
+        uploadParamsVO.setPatent(patent);
+
+    }
+
+    /**
+     * 装载权要方法
+     *
+     * @param uploadParamsVO 专利实体类对象
+     */
+    private void setPatentClaim(StarPatentVO starPatent, UploadParamsVO uploadParamsVO) throws IOException {
+        String appNo = starPatent.getApplicationNo().substring(0, starPatent.getApplicationNo().lastIndexOf("."));
+        //根据申请号调用"获得中国专利全文文本"接口,获得包含各种xml标签的专利全文内容的长字符串 cnFullXmlStr
+        String cnFullXmlStr = patentStarApiService.getCnFullXmlApi(appNo);
+
+        //使用正则表达式,拼接出权要原文
+        String regex = "(?<=<claim-text>)[\\w\\W]+?(?=</claim-text>)";
+        Pattern compile = Pattern.compile(regex);
+        Matcher matcher = compile.matcher(cnFullXmlStr);
+        StringBuilder builder = new StringBuilder();
+        while (matcher.find()) {
+            builder.append(matcher.group()).append("\r\n");
+        }
+
+        //装载权利要求原文
+        PatentRight patentRight = new PatentRight();
+        patentRight.setContent(builder + "");
+        uploadParamsVO.setPatentRight(patentRight);
+
+    }
+
+    /**
+     * 装载说明书文本
+     *
+     * @param uploadParamsVO 专利实体类对象
+     */
+    private void setPatentInstructionText(StarPatentVO starPatent, UploadParamsVO uploadParamsVO) throws IOException {
+        String appNo = starPatent.getApplicationNo().substring(0, starPatent.getApplicationNo().lastIndexOf("."));
+        //根据申请号调用"获得中国专利全文文本"接口,获得包含各种xml标签的专利全文内容的长字符串 cnFullXmlStr
+        String cnFullXmlStr = patentStarApiService.getCnFullXmlApi(appNo);
+
+        //使用正则表达式,拼接出说明书文本全文
+        String regex = "(?<=<claim-text>)[\\w\\W]+?(?=</claim-text>)";
+        Pattern compile = Pattern.compile(regex);
+        Matcher matcher = compile.matcher(cnFullXmlStr);
+        StringBuilder builder = new StringBuilder();
+        while (matcher.find()) {
+            builder.append(matcher.group()).append("\r\n");
+        }
+
+        //装载说明书文本全文
+
+
+
+    }
+
+}

+ 8 - 4
PAS/src/main/java/cn/cslg/pas/service/upLoadPatent/PantentQueueService.java

@@ -32,6 +32,7 @@ public class PantentQueueService {
     private final TaskService taskService;
     private final ExcutePatentDataExcel excutePatentDataExcel;
     private final ExcutePatentDataEpo excutePatentDataEpo;
+    private final ExcutePatentDataStar excutePatentDataStar;
     private final List<Integer> taskQueueList = new ArrayList<>();
     private Boolean flag = false;
     private final List<QueueData> patentImageQueueList = new ArrayList<>();
@@ -78,9 +79,10 @@ public class PantentQueueService {
                     //1.用工厂方法根据任务类型创建对应的获取专利数据的对象
                     IExcutePatentData excutePatentDataObject = createObject(task);
                     //2.对象调用执行生产专利方法(解析任务生产专利并丢入消费者专利队列,唤醒消费者线程)
-                    if (excutePatentDataObject != null) {
-                        excutePatentDataObject.startExcute(task);
+                    if (excutePatentDataObject == null) {
+                        throw new Exception();
                     }
+                    excutePatentDataObject.startExcute(task);
 
                 }
 
@@ -326,12 +328,12 @@ public class PantentQueueService {
      * @param taskId 任务id
      */
     public void consumerQueueDeleteTasks(Integer taskId) {
-        //清除4个消费者专利队列中该任务的专利
+        //任务暂停时清除4个消费者专利队列中该任务的专利
         this.patentImageQueueList.removeIf(queueData -> queueData.getTask().getId().equals(taskId));
         this.patentZhuluQueueList.removeIf(queueData -> queueData.getTask().getId().equals(taskId));
         this.patentRightQueueList.removeIf(queueData -> queueData.getTask().getId().equals(taskId));
         this.patentInstructionTextQueueList.removeIf(queueData -> queueData.getTask().getId().equals(taskId));
-        //清除 patentIdMap(任务id + "|" + 专利id,拼接成专利的标识(作为当前某一个消费者消费完的这个专利的数量标识))中该任务的专利的数量标识
+        //任务暂停时清除 patentIdMap(任务id + "|" + 专利id,拼接专利的数量标识(作为当前某一个消费者消费完的这个专利的数量标识))中该任务的专利的数量标识
         Iterator<String> iterator = this.patentIdMap.keySet().iterator();
         while (iterator.hasNext()) {
             String key = iterator.next();
@@ -366,6 +368,8 @@ public class PantentQueueService {
                 return excutePatentDataExcel;
             case 3:  //Epo欧专局网站导入
                 return excutePatentDataEpo;
+            case 4:  //专利之星网站导入
+                return excutePatentDataStar;
             default:
                 return null;
         }

+ 65 - 0
PAS/src/main/java/cn/cslg/pas/service/upLoadPatent/UploadTaskService.java

@@ -3,6 +3,7 @@ package cn.cslg.pas.service.upLoadPatent;
 import cn.cslg.pas.common.model.PersonnelVO;
 import cn.cslg.pas.common.model.dto.QrtzTaskAddNewDTO;
 import cn.cslg.pas.common.model.dto.UploadFileDTO;
+import cn.cslg.pas.common.model.outApi.PatentStarListDto;
 import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.FileUtils;
 import cn.cslg.pas.common.utils.ReadExcelUtils;
@@ -14,6 +15,7 @@ import cn.cslg.pas.domain.asso.AssoOsTaskQrtzTask;
 import cn.cslg.pas.service.TaskService;
 import cn.cslg.pas.service.WebLoginConfigService;
 import cn.cslg.pas.service.asso.AssoOsTaskQrtzTaskService;
+import cn.cslg.pas.service.outApi.PatentStarApiService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
@@ -22,6 +24,7 @@ import org.springframework.web.multipart.MultipartFile;
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 导入专利任务的业务层
@@ -40,6 +43,7 @@ public class UploadTaskService {
     private final CacheUtils cacheUtils;
     private final LoginUtils loginUtils;
     private final WebLoginConfigService webLoginConfigService;
+    private final PatentStarApiService patentStarApiService;
 
     /**
      * 新增Excel导入任务
@@ -113,4 +117,65 @@ public class UploadTaskService {
         return assoOsTaskQrtzTask;
     }
 
+    /**
+     * 新增专利之星导入任务
+     *
+     * @param qrtzTaskAddNewDTO 前台参数(检索信息conditions、专题库id、下载字段configCells等)
+     */
+    public AssoOsTaskQrtzTask addPatentStarTask(QrtzTaskAddNewDTO qrtzTaskAddNewDTO) throws IOException {
+        Integer webId = qrtzTaskAddNewDTO.getConfigId();
+        PersonnelVO personnelVO = cacheUtils.getLoginUserPersonnel(loginUtils.getId());
+        //根据网站id获得配置
+        WebLoginConfig webLoginConfig = webLoginConfigService.getLoginConfig(webId, personnelVO.getTenantId());
+        if (webLoginConfig == null) {
+            ThrowException.throwXiaoShiException("未配置网站登录信息");
+        }
+
+        //检查任务合法性(检查当前检索式能否检索出专利)
+        //根据检索式conditions检索一件专利著录信息
+        PatentStarListDto patentStarListDto = new PatentStarListDto()
+                .setCurrentQuery(qrtzTaskAddNewDTO.getConditions())
+                .setOrderBy("AD")
+                .setOrderByType("DESC")
+                .setPageNum(1)
+                .setRowCount(10)
+                .setDBType("cN");
+        Map<String, Object> resultMap = patentStarApiService.patentStarSearchApi(patentStarListDto);
+        if (resultMap == null || (Integer) resultMap.get("total") == 0) {
+            ThrowException.throwXiaoShiException("根据检索信息未检索到相关专利,请尝试更换检索信息");
+        }
+        //专利总数量
+        Integer total = (Integer) resultMap.get("total");
+
+        //任务与任务条件关联表新增数据
+        AssoOsTaskQrtzTask assoOsTaskQrtzTask = new AssoOsTaskQrtzTask();
+        assoOsTaskQrtzTask
+                .setTaskType(qrtzTaskAddNewDTO.getTaskType())
+                .setConditions(qrtzTaskAddNewDTO.getConditions())
+                .setCrons(qrtzTaskAddNewDTO.getCrons())
+                .setConfigId(qrtzTaskAddNewDTO.getConfigId())
+                .setTaskName(qrtzTaskAddNewDTO.getTaskName())
+                .setTotal(total);
+        List<String> cells = qrtzTaskAddNewDTO.getConfigCells();
+        if (cells == null) {
+            assoOsTaskQrtzTask.setConfigCells("");
+        } else {
+            assoOsTaskQrtzTask.setConfigCells(String.join(",", cells));
+        }
+        assoOsTaskQrtzTaskService.save(assoOsTaskQrtzTask);
+
+        //任务表新增任务
+        Integer taskId = taskService.addTask3(qrtzTaskAddNewDTO, total, assoOsTaskQrtzTask);
+
+        //任务与任务条件关联表更新数据
+        assoOsTaskQrtzTask.setTaskId(taskId);
+        assoOsTaskQrtzTaskService.updateById(assoOsTaskQrtzTask);
+
+        //任务存入生产者任务队列并唤醒生产者线程
+        pantentQueueService.taskQueueAddTask(Arrays.asList(taskId));
+        pantentQueueService.awakeTasktch();
+
+        return assoOsTaskQrtzTask;
+    }
+
 }

+ 61 - 0
PAS/src/main/resources/mapper/ScratchWordsMapper.xml

@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="cn.cslg.pas.mapper.ScratchWordsMapper">
+    <!--namespace根据自己需要创建的的mapper的路径和名称填写-->
+    <select id="querySW" resultMap="querySWResultMap">
+        select * from scratch_words
+        <where>
+            patent_no = #{patentNo}
+            and(
+            <if test="projectId != null and reportId != null and createId != null and tenantId != null">
+                      (range_type = "false" and permission_type = 1 and tenant_id = #{tenantId})
+                    or(range_type = "false" and permission_type = 0 and create_id = #{createId})
+                    or(range_type = "true" and create_from = 2 and range_id = #{reportId} and permission_type = 1 and tenant_id = #{tenantId})
+                    or(range_type = "true" and create_from = 2 and range_id = #{reportId} and permission_type = 0 and create_id = #{createId})
+                    or(range_type = "true" and create_from = 1 and range_id = #{projectId} and permission_type = 1 and tenant_id = #{tenantId})
+                    or(range_type = "true" and create_from = 1 and range_id = #{projectId} and permission_type = 0 and create_id = #{createId})
+            </if>
+                )
+        </where>
+    </select>
+
+
+    <select id="selectByConditions" resultMap="querySWResultMap">
+        SELECT id, create_id, tenant_id, patent_no, create_from, range_id, permission_type, range_type
+        FROM scratch_words
+        WHERE patent_no = #{patentNo}
+        <!-- 如果公开范围为 F,公开类型为 1,公司名为 tenantId,则拼接该条件 -->
+        <if test="rangeType == 'F' and permissionType == 1 and tenantId != null">
+            AND range_type = 'F' AND permission_type = 1 AND tenant_id = #{tenantId}
+        </if>
+        <!-- 如果公开范围为 F,公开类型为 0,创建人为 createId,则拼接该条件 -->
+        <if test="rangeType == 'F' and permissionType == 0 and createId != null">
+            AND range_type = 'F' AND permission_type = 0 AND create_id = #{createId}
+        </if>
+        <!-- 如果公开范围为 T,创建来源为 2,抽象id为 reportId,公开类型为 1,公司名为 tenantId,则拼接该条件 -->
+        <if test="rangeType == 'T' and createFrom == 2 and rangeId == 'reportId' and permissionType == 1 and tenantId != null">
+            AND range_type = 'T' AND create_from = 2 AND range_id = 'reportId' AND permission_type = 1 AND tenant_id = #{tenantId}
+        </if>
+        <!-- 如果公开范围为 T,创建来源为 2,抽象id为 reportId,公开类型为 0,创建人为 createId,则拼接该条件 -->
+        <if test="rangeType == 'T' and createFrom == 2 and rangeId == 'reportId' and permissionType == 0 and createId != null">
+        AND range_type = 'T' AND create_from = 2 AND range_id = 'reportId' AND permission_type = 0 AND create_id = #{createId}
+        </if>
+    </select>
+
+    <resultMap id="querySWResultMap" type="cn.cslg.pas.common.model.vo.ScratchWordsVO">
+        <id column="id" property="id"/>
+        <result column="create_id" property="createId"/>
+        <result column="tenant_id" property="tenantId"/>
+        <result column="patent_no" property="patentNo"/>
+        <result column="position" property="position"/>
+        <result column="text" property="text"/>
+        <result column="scratch_field" property="scratchField"/>
+        <result column="scratch_type" property="scratchType"/>
+        <result column="color" property="color"/>
+        <result column="remark" property="remark"/>
+        <result column="create_from" property="createFrom"/>
+        <result column="range_id" property="rangeId"/>
+        <result column="permission_type" property="permissionType"/>
+        <result column="range_type" property="rangeType"/>
+    </resultMap>
+</mapper>