Explorar o código

20240904 导出任务修改

lwhhszx hai 1 ano
pai
achega
095ca35f60

+ 85 - 0
src/main/java/cn/cslg/pas/common/dto/NoveltyProjectDTO/NoveltyCompareRecordDTO.java

@@ -0,0 +1,85 @@
+package cn.cslg.pas.common.dto.NoveltyProjectDTO;
+
+import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import org.joda.time.DateTime;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 标注
+ * @Author xiexiang
+ * @Date 2024/1/10
+ */
+@Data
+/*数据库中的表对应的类
+ */
+public class NoveltyCompareRecordDTO {
+    private String id;
+    private String patentNo;
+
+    /**
+     * 标注颜色
+     */
+    private  String markColor;
+
+    /**
+     * 标注备注
+     */
+    private String markNoteText;
+
+    /**
+     * 标注类型 1查新报告对比记录
+     */
+    @JsonProperty("mark_type")
+    private  Integer markType;
+
+    /**
+     * 标注栏位
+     */
+    private String markSelectField;
+
+    /**
+     * 标注选择文本
+     */
+    private String markSelectText;
+
+    private Integer markSite;
+
+    /**
+     * 标注时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date markTime;
+
+
+
+    /**
+     * 标注专利数据库id/报告id
+     */
+    private Integer projectId;
+
+
+    private String technicalFeature;
+
+    private List<String> pictureUrl;
+
+    private Integer targetType;
+    /**
+     * 标注人
+     */
+    @JsonProperty("mark_user_id")
+    private String markUserId;
+    /**
+     * 标注租户id
+     */
+    @JsonProperty("public_tenant_id")
+    private Integer publicTenantId;
+}

+ 81 - 0
src/main/java/cn/cslg/pas/common/vo/NoveltyProjectVO/NoveltyCompareRecordVO.java

@@ -0,0 +1,81 @@
+package cn.cslg.pas.common.vo.NoveltyProjectVO;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 标注
+ * @Author xiexiang
+ * @Date 2024/1/10
+ */
+@Data
+/*数据库中的表对应的类
+ */
+public class NoveltyCompareRecordVO {
+    private String id;
+    private String patentNo;
+
+    /**
+     * 标注颜色
+     */
+    private  String markColor;
+
+    /**
+     * 标注备注
+     */
+    private String markNoteText;
+
+    /**
+     * 标注类型 1查新报告对比记录
+     */
+    @JsonProperty("mark_type")
+    private  Integer markType;
+
+    /**
+     * 标注栏位
+     */
+    private String markSelectField;
+
+    /**
+     * 标注选择文本
+     */
+    private String markSelectText;
+
+    private Integer markSite;
+
+    /**
+     * 标注时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date markTime;
+
+
+
+    /**
+     * 标注专利数据库id/报告id
+     */
+    private Integer projectId;
+
+
+    private String technicalFeature;
+
+    private List<String> pictureUrl;
+
+    private Integer targetType;
+    /**
+     * 标注人
+     */
+    @JsonProperty("mark_user_id")
+    private String markUserId;
+    /**
+     * 标注租户id
+     */
+    @JsonProperty("public_tenant_id")
+    private Integer publicTenantId;
+}

+ 83 - 0
src/main/java/cn/cslg/pas/controller/NoveltyCompareRecordController.java

@@ -0,0 +1,83 @@
+package cn.cslg.pas.controller;
+
+import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.business.CustomOptionDTO;
+import cn.cslg.pas.common.dto.business.CustomOptionDeleteDTO;
+import cn.cslg.pas.common.dto.business.GetCustomOptionDTO;
+import cn.cslg.pas.common.dto.business.UpdateCustomOptionDTO;
+import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.exception.ConditionException;
+import cn.cslg.pas.exception.UnLoginException;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.service.business.CustomOptionService;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 自定义选项Controller层
+ * @Author xiexiang
+ * @Date 2023/11/13
+ */
+@Slf4j
+@RequestMapping(Constants.API_XiaoSHI + "/noveltyCompareRecord")
+@RestController
+public class NoveltyCompareRecordController {
+    @Autowired
+    private CustomOptionService customOptionService;
+
+    @Operation(summary = "添加对比记录")
+    @PostMapping("/add")
+    public Response queryCustomOption(@RequestBody GetCustomOptionDTO getCustomOptionDTO) throws Exception {
+        Records records = customOptionService.getCustomOption(getCustomOptionDTO);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "新增自定义选项")
+    @PostMapping("/addCustomOption")
+    public Response addCustomOption(@RequestBody CustomOptionDTO customOptionDTO) throws Exception {
+        if(customOptionDTO != null){
+            Integer id = null;
+            try {
+                id = customOptionService.addCustomOption(customOptionDTO);
+            } catch (Exception e){
+                if(e instanceof XiaoShiException) {
+                    return Response.error(e.getMessage());
+                } else if (e instanceof UnLoginException) {
+                    return Response.unLogin(e.getMessage());
+                } else if (e instanceof ConditionException) {
+                    return Response.conditionError(e.getMessage());
+                }
+            }
+            return Response.success(id);
+        } else {
+            return Response.error("网络异常");
+        }
+    }
+
+    @Operation(summary = "更新自定义选项")
+    @PostMapping("/updateCustomOption")
+    public Response updateCustomOption(@RequestBody UpdateCustomOptionDTO updateCustomOptionDTO) throws Exception {
+        if (updateCustomOptionDTO != null) {
+            Integer id = customOptionService.updateCustomOption(updateCustomOptionDTO);
+            return Response.success(id);
+        } else {
+            return Response.error("网络异常");
+        }
+    }
+
+    @Operation(summary = "删除自定义选项")
+    @PostMapping("/deleteCustomOption")
+    public Response deleteCustomOption(@RequestBody List<CustomOptionDeleteDTO> customOptionDeleteDTOS) throws Exception {
+        customOptionService.deleteCustomOption(customOptionDeleteDTOS);
+        return Response.success("删除成功");
+    }
+
+}

+ 1 - 4
src/main/java/cn/cslg/pas/domain/business/novelty/AssoRetrieveRecordProject.java

@@ -16,10 +16,7 @@ import lombok.Data;
 @TableName(value ="asso_retrieve_record_project")
 @Data
 public class AssoRetrieveRecordProject extends BaseEntity<AssoRetrieveRecordProject> {
-    /**
-     * ID
-     */
-    private Integer id;
+
 
     /**
      * 检索记录id

+ 36 - 0
src/main/java/cn/cslg/pas/domain/business/novelty/ImportPatentQueen.java

@@ -0,0 +1,36 @@
+package cn.cslg.pas.domain.business.novelty;
+
+import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 导入专利队列
+ * @TableName import_patent_queen
+ */
+@TableName(value ="import_patent_queen")
+@Data
+public class ImportPatentQueen extends BaseEntity<ImportPatentQueen> {
+
+
+    /**
+     * 
+     */
+    private String patentNo;
+
+    /**
+     * 
+     */
+    private Integer projectId;
+
+    /**
+     * 
+     */
+    private Integer state;
+
+}

+ 20 - 1
src/main/java/cn/cslg/pas/domain/es/Marking.java

@@ -8,6 +8,7 @@ import org.joda.time.DateTime;
 import org.springframework.stereotype.Component;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * 标注
@@ -36,7 +37,7 @@ public class Marking {
     private String markNoteText;
 
     /**
-     * 标注类型
+     * 标注类型 1查新报告对比记录
      */
     @JsonProperty("mark_type")
     private  Integer markType;
@@ -91,4 +92,22 @@ public class Marking {
   private String patentTitle;
   @JsonProperty("create_from")
   private Integer createFrom;
+
+    /**
+     * 技术特征
+     */
+    @JsonProperty("technical_feature")
+    private String technicalFeature;
+
+    /**
+     * 图片url
+     */
+    @JsonProperty("picture_url")
+    private List<String> pictureUrl;
+
+        /**
+     * 标的类型 1 技术特征 2代表图
+     */
+    @JsonProperty("picture_url")
+    private List<String> targetType;
 }

+ 18 - 0
src/main/java/cn/cslg/pas/mapper/novelty/ImportPatentQueenMapper.java

@@ -0,0 +1,18 @@
+package cn.cslg.pas.mapper.novelty;
+
+import cn.cslg.pas.domain.business.novelty.ImportPatentQueen;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author admin
+* @description 针对表【import_patent_queen(导入专利队列)】的数据库操作Mapper
+* @createDate 2024-09-27 10:49:45
+* @Entity generator.domain.ImportPatentQueen
+*/
+public interface ImportPatentQueenMapper extends BaseMapper<ImportPatentQueen> {
+
+}
+
+
+
+

+ 42 - 3
src/main/java/cn/cslg/pas/service/business/es/EsScratchWordsService.java

@@ -12,6 +12,7 @@ import cn.cslg.pas.common.utils.parseQueryToTree.expressManager;
 import cn.cslg.pas.common.utils.parseQueryToTree.operateNode;
 import cn.cslg.pas.common.utils.parseQueryToTree.treeNode;
 import cn.cslg.pas.common.vo.EsConfigVO;
+import cn.cslg.pas.common.vo.NoveltyProjectVO.NoveltyCompareRecordVO;
 import cn.cslg.pas.common.vo.PatentWithIdVO;
 import cn.cslg.pas.common.vo.ScratchWordsVO;
 import cn.cslg.pas.domain.business.ScratchWords;
@@ -89,10 +90,10 @@ public class EsScratchWordsService {
         try {
             markingLast = this.getById(id);
         } catch (Exception e) {
-            throw new XiaoShiException("错误");
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR,"查询错误");
         }
         if (markingLast == null) {
-            throw new XiaoShiException("划词信息不存在");
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR,"id不存在");
         }
         BeanUtils.copyProperties(marking, markingLast);
         this.updateToEs(marking, id);
@@ -134,7 +135,7 @@ public class EsScratchWordsService {
         return records;
     }
 
-    public Query getSearchQuerys(StringRequest stringRequest) {
+    public Query getSearchQuerys(StringRequest stringRequest)  {
         PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
         String createId = personnelVO.getId();
         Integer tenantId = personnelVO.getTenantId();
@@ -398,4 +399,42 @@ public class EsScratchWordsService {
         return maps;
 
     }
+
+
+
+    public Records queryNoveltyRecord(StringRequest stringRequest)  throws Exception{
+        Long current = stringRequest.getCurrent();
+        Long size = stringRequest.getSize();
+        String condition =stringRequest.getSearchQuery();
+        Records records = new Records();
+        List<NoveltyCompareRecordVO> vos = new ArrayList<>();
+        Query searchQuerys = this.getSearchQQuery(condition);
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        builder.index("patent_marking");
+        if (current == null || size == null || current < 0 || size < 0) {
+            current = Long.parseLong(1 + "");
+            size = Long.parseLong(1000 + "");
+        }
+        builder.from((current.intValue() - 1) * size.intValue()).size(size.intValue());
+        builder.query(searchQuerys);
+
+        long total = 0;
+        try {
+            SearchResponse<Marking> response = client.search(builder.build(), Marking.class);
+            List<Hit<Marking>> hits = response.hits().hits();
+            total = response.hits().total().value();
+            for (Hit<Marking> hit : hits) {
+                Marking marking = hit.source();
+                NoveltyCompareRecordVO noveltyCompareRecordVO = new NoveltyCompareRecordVO();
+                BeanUtils.copyProperties(marking, noveltyCompareRecordVO);
+                noveltyCompareRecordVO.setId(hit.id());
+                vos.add(noveltyCompareRecordVO);
+            }
+        } catch (Exception e) {
+
+        }
+        records.setTotal(total);
+        records.setData(vos);
+        return records;
+    }
 }

+ 1 - 0
src/main/java/cn/cslg/pas/service/business/es/EsService.java

@@ -1486,6 +1486,7 @@ public class EsService {
             }
         }
     }
+
 }
 
 

+ 51 - 0
src/main/java/cn/cslg/pas/service/importPatent/ImportSinglePatentService.java

@@ -21,6 +21,7 @@ import cn.cslg.pas.common.vo.OPS.PatentNoDetailVO;
 import cn.cslg.pas.domain.business.PatentClaim;
 import cn.cslg.pas.domain.business.ReportProject;
 import cn.cslg.pas.domain.es.*;
+import cn.cslg.pas.exception.ExceptionEnum;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.service.business.ReportProjectService;
 import cn.cslg.pas.service.business.es.EsMergePersonService;
@@ -592,4 +593,54 @@ public class ImportSinglePatentService {
             }
         }
     }
+
+    public PatentWithIdVO addPatentToProject(String patentNo, Integer projectId) {
+
+        try {
+            PatentWithIdVO patentWithIdVO = this.addPatentWithNo(patentNo);
+
+            String patentId = patentWithIdVO.getId();
+            Boolean ifInproject = esService.searchPatent(patentId, projectId);
+            if (!ifInproject) {
+                Patent patentChild = new Patent();
+                PatentJoin patentJoin = new PatentJoin();
+                patentJoin.setParent(patentId);
+                patentJoin.setName("project");
+                patentChild.setPatentJoin(patentJoin);
+                patentChild.setProjectId(projectId);
+                esService.addChildPatent(patentChild, patentId);
+
+            }
+            return patentWithIdVO;
+        } catch (Exception e) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, e.getMessage());
+        }
+
+    }
+
+    public PatentWithIdVO addPatentWithNo(String patentNo) {
+        try {
+            PatentWithIdVO patentWithIdVO = esService.getIdByPatentNo(patentNo);
+            if (patentWithIdVO != null) {
+                return patentWithIdVO;
+            } else {
+                Patent patent =new Patent();
+                patent.setPatentNo(patentNo);
+                PatentJoin patentJoin = new PatentJoin();
+                patentJoin.setName("patent");
+                patent.setPatentJoin(patentJoin);
+                patentWithIdVO = new PatentWithIdVO();
+                String patentId = esService.addPatent(patent);
+                patentWithIdVO.setPatent(patent);
+                patentWithIdVO.setId(patentId);
+
+                //放入待导入队列
+            }
+            return patentWithIdVO;
+        } catch (Exception e) {
+            return null;
+        }
+
+    }
+
 }

+ 63 - 0
src/main/java/cn/cslg/pas/service/novelty/ImportPatentQueenService.java

@@ -0,0 +1,63 @@
+package cn.cslg.pas.service.novelty;
+
+import cn.cslg.pas.common.dto.es.RefreshPatentDTO;
+import cn.cslg.pas.domain.business.novelty.ImportPatentQueen;
+import cn.cslg.pas.mapper.novelty.ImportPatentQueenMapper;
+import cn.cslg.pas.service.importPatent.ImportSinglePatentService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author admin
+ * @description 针对表【import_patent_queen(导入专利队列)】的数据库操作Service实现
+ * @createDate 2024-09-27 10:49:45
+ */
+@Service
+@RequiredArgsConstructor
+public class ImportPatentQueenService extends ServiceImpl<ImportPatentQueenMapper, ImportPatentQueen> {
+    private final ImportSinglePatentService importSinglePatentService;
+    private Integer total = 0;
+
+    public void add(String patentNo, Integer projectId) {
+        ImportPatentQueen importPatentQueen = new ImportPatentQueen();
+        importPatentQueen.setPatentNo(patentNo);
+        importPatentQueen.setProjectId(projectId);
+        importPatentQueen.insert();
+        this.startImport();
+
+    }
+
+    /**
+     *
+     */
+    @Async
+    public void importPatent(ImportPatentQueen importPatentQueen) {
+        RefreshPatentDTO refreshPatentDTO = new RefreshPatentDTO();
+        refreshPatentDTO.setPatentNo(importPatentQueen.getPatentNo());
+
+        try {
+            importSinglePatentService.refreshPatent(refreshPatentDTO);
+        } catch (Exception e) {
+        }
+        total = total - 1;
+        this.startImport();
+        this.removeById(importPatentQueen);
+    }
+     public  void  startImport(){
+         total += 1;
+         if (total > 5) {
+             return;
+         }
+         LambdaQueryWrapper<ImportPatentQueen> queryWrapper = new LambdaQueryWrapper<>();
+         queryWrapper.eq(ImportPatentQueen::getState, 0);
+         ImportPatentQueen importPatentQueen = this.getOne(queryWrapper, false);
+         this.importPatent(importPatentQueen);
+     }
+}
+
+
+
+

+ 76 - 0
src/main/java/cn/cslg/pas/service/novelty/NoveltyCompareRecordService.java

@@ -0,0 +1,76 @@
+package cn.cslg.pas.service.novelty;
+
+import cn.cslg.pas.common.dto.NoveltyProjectDTO.NoveltyCompareRecordDTO;
+import cn.cslg.pas.common.model.cronModel.PersonnelVO;
+import cn.cslg.pas.common.utils.CacheUtils;
+import cn.cslg.pas.common.utils.LoginUtils;
+import cn.cslg.pas.common.vo.PatentWithIdVO;
+import cn.cslg.pas.domain.es.Marking;
+import cn.cslg.pas.domain.es.Patent;
+import cn.cslg.pas.domain.es.PatentJoin;
+import cn.cslg.pas.exception.ExceptionEnum;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.service.business.CompareLiteratureService;
+import cn.cslg.pas.service.business.es.EsMergePersonService;
+import cn.cslg.pas.service.business.es.EsScratchWordsService;
+import cn.cslg.pas.service.business.es.EsService;
+import cn.cslg.pas.service.importPatent.ImportSinglePatentService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service
+@RequiredArgsConstructor
+public class NoveltyCompareRecordService {
+    private final ImportSinglePatentService importSinglePatentService;
+    private final CompareLiteratureService compareLiteratureService;
+    private final CacheUtils cacheUtils;
+    private final LoginUtils loginUtils;
+    private final EsScratchWordsService esScratchWordsService;
+
+    public void addCompareRecord(NoveltyCompareRecordDTO noveltyCompareRecordDTO) {
+        String patentNo = noveltyCompareRecordDTO.getPatentNo();
+        Integer projectId = noveltyCompareRecordDTO.getProjectId();
+        PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        //获取专利
+        PatentWithIdVO patentWithIdVO = importSinglePatentService.addPatentToProject(patentNo, projectId);
+        //添加对比文件
+        compareLiteratureService.addPatentCompareLiterature(patentWithIdVO.getPatent(), projectId,personnelVO.getId());
+        //添加记录
+
+
+        if (personnelVO != null) {
+            //设置创建人id
+            noveltyCompareRecordDTO.setMarkUserId(personnelVO.getId());
+            //设置租户id
+            noveltyCompareRecordDTO.setPublicTenantId(personnelVO.getTenantId());
+        } else {
+            throw new XiaoShiException("未查询到创建人信息");
+        }
+        Marking marking = new Marking();
+        BeanUtils.copyProperties(noveltyCompareRecordDTO, marking);
+        marking.setMarkTime(new Date());
+        String id = null;
+        try {
+            id = esScratchWordsService.saveToEs(marking);
+        } catch (Exception e) {
+            throw new XiaoShiException("保存失败");
+        }
+    }
+
+    public void updateCompareRecord(NoveltyCompareRecordDTO noveltyCompareRecordDTO) {
+        String id = noveltyCompareRecordDTO.getId();
+        Marking marking = new Marking();
+        BeanUtils.copyProperties(noveltyCompareRecordDTO, marking);
+        esScratchWordsService.updateScratchWords(id, marking);
+    }
+
+    public void queryCompareRecord(){
+     Integer projectId =null;
+     //根据projectId 查询所有的对比记录
+
+    }
+
+}

+ 15 - 0
src/main/resources/jsons/marking.json

@@ -59,5 +59,20 @@
     "ifStats": "true",
     "groupBy": "dateType",
     "exportClass": "getDateValue"
+  },
+  {
+    "name": "专利号",
+    "type": "String",
+    "value": "patentNo",
+    "field": "patentNo",
+    "esField": "patent_no",
+    "esClass": "keyWordQueryBuilder",
+    "ifSearch": "true",
+    "ifGroup": "false",
+    "ifShow": "true",
+    "ifAsCondition": "true",
+    "ifStats": "false",
+    "groupBy": "number",
+    "exportClass": "getCommonValue"
   }
 ]