瀏覽代碼

后续事项

lwhhszx 1 年之前
父節點
當前提交
beaf7eb381
共有 28 個文件被更改,包括 959 次插入79 次删除
  1. 38 0
      src/main/java/cn/cslg/pas/common/dto/ComparedPatentVO.java
  2. 32 0
      src/main/java/cn/cslg/pas/common/dto/FollowUpQueryDTO.java
  3. 45 0
      src/main/java/cn/cslg/pas/common/dto/FollowUpUpdateDTO.java
  4. 1 0
      src/main/java/cn/cslg/pas/common/model/request/QueryRequest.java
  5. 66 0
      src/main/java/cn/cslg/pas/common/vo/business/FollowUpVO.java
  6. 20 8
      src/main/java/cn/cslg/pas/controller/FTOController.java
  7. 84 0
      src/main/java/cn/cslg/pas/controller/FollowUpController.java
  8. 3 0
      src/main/java/cn/cslg/pas/domain/business/FollowUp.java
  9. 41 0
      src/main/java/cn/cslg/pas/domain/business/TemplateConfig.java
  10. 0 2
      src/main/java/cn/cslg/pas/domain/es/FamilyPatent.java
  11. 1 2
      src/main/java/cn/cslg/pas/domain/es/PatentFamilyMessage.java
  12. 0 2
      src/main/java/cn/cslg/pas/domain/es/Text.java
  13. 4 0
      src/main/java/cn/cslg/pas/mapper/FTOCompareRecordMapper.java
  14. 16 0
      src/main/java/cn/cslg/pas/mapper/TemplateConfigMapper.java
  15. 153 10
      src/main/java/cn/cslg/pas/service/ReportExportService.java
  16. 1 1
      src/main/java/cn/cslg/pas/service/business/CompareLiteratureService.java
  17. 67 16
      src/main/java/cn/cslg/pas/service/business/FTOCompareRecordService.java
  18. 149 0
      src/main/java/cn/cslg/pas/service/business/FollowUpService.java
  19. 14 0
      src/main/java/cn/cslg/pas/service/business/TemplateConfigService.java
  20. 97 0
      src/main/java/cn/cslg/pas/service/business/es/EsFamilyService.java
  21. 24 22
      src/main/java/cn/cslg/pas/service/business/es/EsPatentService.java
  22. 1 0
      src/main/java/cn/cslg/pas/service/business/es/EsService.java
  23. 14 14
      src/main/java/cn/cslg/pas/service/importPatent/GetCataloguingFromWebThread.java
  24. 8 0
      src/main/java/cn/cslg/pas/service/query/FormatQueryService.java
  25. 15 0
      src/main/resources/jsons/followUp.json
  26. 14 0
      src/main/resources/mapper/FTOCompareRecordMapper.xml
  27. 12 2
      src/test/java/cn/cslg/pas/service/EsPatentServiceTests.java
  28. 39 0
      src/test/java/cn/cslg/pas/service/FTOCompareRecordServiceTests.java

+ 38 - 0
src/main/java/cn/cslg/pas/common/dto/ComparedPatentVO.java

@@ -0,0 +1,38 @@
+package cn.cslg.pas.common.dto;
+
+import cn.cslg.pas.domain.es.PatentPerson;
+import cn.cslg.pas.domain.es.Priorities;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+@Data
+public class ComparedPatentVO {
+    /**
+     * 授权号
+     */
+    private String grantNo;
+
+    /**
+     * 授权日
+     */
+    @JsonFormat(
+            pattern = "yyyy-MM-dd",
+            timezone = "GMT+8"
+    )
+    private Date grantDate;
+    /**
+     * 权利人
+     */
+    private List<PatentPerson> rightHolder;
+    /**
+     * 优先权
+     */
+    private List<Priorities> priorities;
+
+    private String simpleStatus;
+
+    private List<String> InpadocFamilyNos;
+}

+ 32 - 0
src/main/java/cn/cslg/pas/common/dto/FollowUpQueryDTO.java

@@ -0,0 +1,32 @@
+package cn.cslg.pas.common.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 后续事项表
+ * </p>
+ *
+ * @author 李仁杰
+ * @since 2023-11-9
+ */
+@Data
+/*数据库中的表对应的类
+ */
+public class FollowUpQueryDTO {
+    /**
+     * 报告id
+     */
+    private Integer projectId;
+    /**
+     * 当前页
+     */
+    private Integer current;
+    /**
+     * 每页条数
+     */
+    private Integer size;
+
+}

+ 45 - 0
src/main/java/cn/cslg/pas/common/dto/FollowUpUpdateDTO.java

@@ -0,0 +1,45 @@
+package cn.cslg.pas.common.dto;
+
+import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 后续事项表
+ * </p>
+ *
+ * @author 李仁杰
+ * @since 2023-11-9
+ */
+@Data
+/*数据库中的表对应的类
+ */
+public class FollowUpUpdateDTO {
+    private Integer id;
+    /**
+     * 名称
+     */
+
+    private String name;
+
+    /**
+     * 处理人
+     */
+    private String handler;
+    /**
+     * 协同人
+     */
+    private String synery;
+
+    /**
+     * 截止时间
+     */
+    private Date deadline;
+
+    private String   description;
+
+}

+ 1 - 0
src/main/java/cn/cslg/pas/common/model/request/QueryRequest.java

@@ -20,4 +20,5 @@ public class QueryRequest {
     private Boolean ifHaveChild = false;
     private List<EsCustomFieldValueDTO> customFields;
     private Integer taskId;
+    private List<String> patentNos;
 }

+ 66 - 0
src/main/java/cn/cslg/pas/common/vo/business/FollowUpVO.java

@@ -0,0 +1,66 @@
+package cn.cslg.pas.common.vo.business;
+
+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 lombok.Data;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 后续事项表
+ * </p>
+ *
+ * @author 李仁杰
+ * @since 2023-11-9
+ */
+@Data
+/*数据库中的表对应的类
+ */
+public class FollowUpVO  {
+   private Integer id;
+    private Integer projectId;
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 处理人
+     */
+    private String handler;
+    /**
+     * 协同人
+     */
+    private String synery;
+
+    /**
+     * 截止时间
+     */
+    @JsonFormat(
+            pattern = "yyyy-MM-dd",
+            timezone = "GMT+8"
+    )
+    private Date deadline;
+
+    /**
+     * 创建人
+     */
+    private String createName;
+
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    private String statusStr;
+
+    /**
+     * 备注
+     */
+
+    private String description;
+}

+ 20 - 8
src/main/java/cn/cslg/pas/controller/FTOController.java

@@ -1,6 +1,7 @@
 package cn.cslg.pas.controller;
 
 import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.ComparedPatentVO;
 import cn.cslg.pas.common.dto.business.GetFeatureSplitDTO;
 import cn.cslg.pas.common.dto.business.ProductMessageDTO;
 import cn.cslg.pas.common.dto.business.TortCompareRecordDTO;
@@ -26,6 +27,7 @@ import java.util.List;
 
 /**
  * FTOTort
+ *
  * @Author xiexiang
  * @Date 2023/12/8
  */
@@ -49,7 +51,7 @@ public class FTOController {
 
     @Operation(summary = "保存FTO对比结果")
     @PostMapping("/addFTOCompareRecord")
-    public Response addFTOCompareRecord(@RequestBody TortCompareRecordDTO tortCompareRecordDTO){
+    public Response addFTOCompareRecord(@RequestBody TortCompareRecordDTO tortCompareRecordDTO) {
         if (tortCompareRecordDTO != null) {
             List<Integer> ids = new ArrayList<>();
             try {
@@ -73,7 +75,7 @@ public class FTOController {
 
     @Operation(summary = "添加FTO协同任务")
     @PostMapping("/addFTOAssitTask")
-    public Response addFTOAssitTask(@RequestBody TortTaskDTO tortTaskDTO){
+    public Response addFTOAssitTask(@RequestBody TortTaskDTO tortTaskDTO) {
         Integer id = projectTaskService.addFTOAssitTask(tortTaskDTO);
         Records records = new Records();
         records.setData(id);
@@ -82,7 +84,7 @@ public class FTOController {
 
     @Operation(summary = "保存FTO协同任务对比结果")
     @PostMapping("/addFTOAssitTaskResult")
-    public Response addFTOAssitTaskResult(@RequestBody TortCompareRecordDTO tortCompareRecordDTO){
+    public Response addFTOAssitTaskResult(@RequestBody TortCompareRecordDTO tortCompareRecordDTO) {
         List<Integer> ids = ftoCompareRecordService.addFTOAssitTaskResult(tortCompareRecordDTO);
         Records records = new Records();
         records.setData(ids);
@@ -91,7 +93,7 @@ public class FTOController {
 
     @Operation(summary = "查询fto协同前后对比结果")
     @GetMapping("/getFTOAssitResult")
-    public Response getFTOAssitResult(String patentNo, Integer taskId){
+    public Response getFTOAssitResult(String patentNo, Integer taskId) {
         Integer type = 1;
         TortCompareRecordVO tortCompareRecordVO = ftoCompareRecordService.getFTOAssitResult(patentNo, taskId, type);
         return Response.success(tortCompareRecordVO);
@@ -99,7 +101,7 @@ public class FTOController {
 
     @Operation(summary = "保存最终对比结果")
     @PostMapping("/addFinalAssitResult")
-    public Response addFinalAssitResult(@RequestBody TortCompareRecordDTO tortCompareRecordDTO){
+    public Response addFinalAssitResult(@RequestBody TortCompareRecordDTO tortCompareRecordDTO) {
         List<Integer> ids = ftoCompareRecordService.addFinalAssitResult(tortCompareRecordDTO);
         Records records = new Records();
         records.setData(ids);
@@ -108,16 +110,26 @@ public class FTOController {
 
     @Operation(summary = "查询最终结果")
     @GetMapping("/getFTOFinalResult")
-    public Response getFTOFinalResult(String patentNo, Integer taskId){
+    public Response getFTOFinalResult(String patentNo, Integer taskId) {
         Integer type = 2;
-        TortCompareRecordVO tortCompareRecordVO = ftoCompareRecordService.getFTOAssitResult(patentNo,taskId, type);
+        TortCompareRecordVO tortCompareRecordVO = ftoCompareRecordService.getFTOAssitResult(patentNo, taskId, type);
         return Response.success(tortCompareRecordVO);
     }
 
     @Operation(summary = "查询报告专利最新对比结果")
     @GetMapping("/getLastRecord")
-    public Response getLastRecord(Integer projectId, String patentNo){
+    public Response getLastRecord(Integer projectId, String patentNo) {
         ftoCompareRecordService.getLastRecord(projectId, patentNo);
         return null;
     }
+
+    @Operation(summary = "查询报告专利最新对比结果")
+    @GetMapping("/getComparedPatent")
+    public Response getComparedPatent(Integer projectId,Integer compareResult) {
+        List<ComparedPatentVO> comparedPatentVOS = ftoCompareRecordService.getComparedPatent(projectId,compareResult);
+        Records records = new Records();
+        records.setData(comparedPatentVOS);
+        return Response.success(records);
+    }
+
 }

+ 84 - 0
src/main/java/cn/cslg/pas/controller/FollowUpController.java

@@ -0,0 +1,84 @@
+package cn.cslg.pas.controller;
+
+import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.FollowUpQueryDTO;
+import cn.cslg.pas.common.dto.FollowUpUpdateDTO;
+import cn.cslg.pas.common.dto.business.EventDTO;
+import cn.cslg.pas.common.dto.business.FollowUpDTO;
+import cn.cslg.pas.common.dto.business.UpdateEventDTO;
+import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.model.request.StringGroupRequest;
+import cn.cslg.pas.common.model.request.StringRequest;
+import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.common.vo.business.FollowUpVO;
+import cn.cslg.pas.exception.ConditionException;
+import cn.cslg.pas.exception.UnLoginException;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.factorys.businessFactory.Business;
+import cn.cslg.pas.factorys.businessFactory.BusinessFactory;
+import cn.cslg.pas.service.business.FollowUpService;
+import com.alibaba.fastjson.JSONObject;
+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 org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * @author chenyu
+ * @date 2023/10/17
+ */
+@Slf4j
+@RequestMapping(Constants.API_XiaoSHI + "/followUp")
+@RestController
+public class FollowUpController {
+    @Autowired
+    private FollowUpService followUpService;
+
+    @Operation(summary = "新增后续事项")
+    @PostMapping("/add")
+    public Response add(@RequestBody List<FollowUpDTO> followUps) {
+        if (followUps == null) {
+            return Response.error("请求参数为null");
+        } else {
+            log.info("开始处理【新增后续事项】的请求,请求参数为:{}", followUps);
+            followUpService.add(followUps);
+            return Response.success("新增后续事项完成");
+        }
+    }
+
+    @Operation(summary = "修改后续事项")
+    @PostMapping("/update")
+    public Response update(@RequestBody List<FollowUpUpdateDTO> followUpUpdateDTOList) {
+        if (followUpUpdateDTOList == null) {
+            return Response.error("请求参数为null");
+        } else {
+            followUpService.update(followUpUpdateDTOList);
+            return Response.success("修改后续事项完成");
+        }
+    }
+    @Operation(summary = "根据报告id查询后续事项数据信息")
+    @PostMapping("/query")
+    public Response query(@RequestBody FollowUpQueryDTO followUpQueryDTO){
+        Records records= followUpService.query(followUpQueryDTO);
+        return Response.success(records);
+    }
+
+    @Operation(summary = "根据ids删除后续事项数据信息")
+    @PostMapping("/delete")
+    public Response delete(@RequestBody List<Integer> ids) {
+        log.info("开始处理【删除后续事项】的请求,请求参数为:{}", ids);
+        if (ids != null) {
+            followUpService.delete(ids);
+            return Response.success("删除后续事项完成");
+        }
+        return Response.error("请求参数为null");
+    }
+
+
+}

+ 3 - 0
src/main/java/cn/cslg/pas/domain/business/FollowUp.java

@@ -58,6 +58,9 @@ public class FollowUp extends BaseEntity<FollowUp> {
     @TableField(value = "create_time")
     private Date createTime;
 
+    @TableField(value = "status")
+    private Integer status;
+
     /**
      * 备注
      */

+ 41 - 0
src/main/java/cn/cslg/pas/domain/business/TemplateConfig.java

@@ -0,0 +1,41 @@
+package cn.cslg.pas.domain.business;
+
+
+import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+
+/**
+ * 模板配置表
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "template_config")
+public class TemplateConfig extends BaseEntity<TemplateConfig> {
+
+    @Schema(description = "模板Id")
+    @TableField(value = "template_id")
+    private Integer templateId;
+
+
+    @Schema(description = "自定义字段值名称")
+    @TableField(value = "value_name")
+    private String valueName;
+
+
+    @Schema(description = "映射名称")
+    @TableField(value = "map_name")
+    private String mapName;
+
+    @Schema(description = "顺序")
+    @TableField(value = "order_num")
+    private Integer orderNum;
+
+
+}

+ 0 - 2
src/main/java/cn/cslg/pas/domain/es/FamilyPatent.java

@@ -11,8 +11,6 @@ import java.util.List;
 
 @Component
 @Data
-@AllArgsConstructor
-@NoArgsConstructor
 public class FamilyPatent {
 
     @JsonProperty("public_no")

+ 1 - 2
src/main/java/cn/cslg/pas/domain/es/PatentFamilyMessage.java

@@ -1,6 +1,7 @@
 package cn.cslg.pas.domain.es;
 
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -14,8 +15,6 @@ import java.util.List;
  */
 @Component
 @Data
-@AllArgsConstructor
-@NoArgsConstructor
 public class PatentFamilyMessage {
 
     /**

+ 0 - 2
src/main/java/cn/cslg/pas/domain/es/Text.java

@@ -33,6 +33,4 @@ public class Text {
      */
     @JsonProperty("if_origin")
     Boolean ifOrigin;
-
-
 }

+ 4 - 0
src/main/java/cn/cslg/pas/mapper/FTOCompareRecordMapper.java

@@ -4,6 +4,8 @@ import cn.cslg.pas.domain.business.FTOCompareRecord;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 /**
  * FTO对比记录的Mapper层
  * @Author xiexiang
@@ -11,4 +13,6 @@ import org.springframework.stereotype.Repository;
  */
 @Repository
 public interface FTOCompareRecordMapper extends BaseMapper<FTOCompareRecord> {
+public List<String> getComparedPatents(Integer projectId,Integer compareResult);
+
 }

+ 16 - 0
src/main/java/cn/cslg/pas/mapper/TemplateConfigMapper.java

@@ -0,0 +1,16 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.domain.business.AssoEventFile;
+import cn.cslg.pas.domain.business.TemplateConfig;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 模板配置表(FTO)
+ *
+ * @author lirj
+ * @date 2023/10/20
+ */
+@Repository
+public interface TemplateConfigMapper extends BaseMapper<TemplateConfig> {
+}

+ 153 - 10
src/main/java/cn/cslg/pas/service/ReportExportService.java

@@ -11,10 +11,13 @@ import cn.cslg.pas.common.vo.PatentRightParams;
 import cn.cslg.pas.common.vo.RePatentClaim;
 import cn.cslg.pas.common.vo.business.PatentNoVO;
 import cn.cslg.pas.domain.business.ReportProject;
+import cn.cslg.pas.domain.business.ReportTemple;
+import cn.cslg.pas.domain.business.TemplateConfig;
 import cn.cslg.pas.domain.es.Text;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.mapper.AvoidDesignMapper;
 import cn.cslg.pas.service.business.ReportProjectService;
+import cn.cslg.pas.service.business.TemplateConfigService;
 import cn.cslg.pas.service.business.TempleService;
 import cn.cslg.pas.service.business.es.EsPatentService;
 import cn.cslg.pas.service.common.FileManagerService;
@@ -56,6 +59,9 @@ public class ReportExportService {
     private EsPatentService esPatentService;
     @Autowired
     private AvoidDesignMapper avoidDesignMapper;
+
+    @Autowired
+    private TemplateConfigService templateConfigService;
     /**
      * @param projectId
      * @param templeId
@@ -65,28 +71,34 @@ public class ReportExportService {
      */
     public String exportReport(Integer projectId, Integer templeId) throws IOException {
         //根据模板ID获得模板
-//        ReportTemple reportTemplate = templeService.getById(templeId);
-//        //获得模板路径
-//        String filePath = fileUtils.getPath(reportTemplate.getTemplatePath());
+        ReportTemple reportTemplate = templeService.getById(templeId);
+        //获得模板路径
+        String templateFilePath = fileUtils.getPath(reportTemplate.getTemplatePath());
         //读取模板后保存生成word的地址
         String fileName = IdUtil.simpleUUID() + ".docx";
         String directoryName = fileUtils.createDirectory();
         String outPath = fileUtils.getSavePath(directoryName) + fileName;
 
-
+        //根据ProjectId 获得报告
+        LambdaQueryWrapper<ReportProject> queryWrapper =new LambdaQueryWrapper<>();
+        queryWrapper.eq(ReportProject::getProjectId,projectId);
+        ReportProject report =reportProjectService.getOne(queryWrapper,false);
+if(report==null){
+    throw  new XiaoShiException("报告不存在");
+}
         XWPFTemplate template = null;
         template = this.avoidDesignTemplate(projectId);
-//        if (report.getReportType() == 0 || report.getReportType() == 2) {
+        if (report.getReportType() == 0 || report.getReportType() == 2) {
 //           template = this.getstabilityTemplate(report, filePath);
-//        } else if (report.getReportType() == 3) {
+        } else if (report.getReportType() == 3) {
 //            template = this.FTOtemplate(reportId, filePath, templeId);
-//        } else if (report.getReportType() == 4) {
+        } else if (report.getReportType() == 4) {
 //         template = this.Torttemplate(reportId, filePath, templeId);
-//        } else if (report.getReportType() == 5) {
+        } else if (report.getReportType() == 5) {
 //           template = this.avoidDesignTemplate(reportId, filePath);
-//        } else if (report.getReportType() == 1) {
+        } else if (report.getReportType() == 1) {
 //          template = this.getThirdTemplate(report, filePath);
-//        }
+        }
         // 读取模板、数据并渲染
 //         文件是否已存在,则删除
         File file = new File(outPath);
@@ -330,4 +342,135 @@ public class ReportExportService {
         });
         return rights;
     }
+
+
+    /**
+     * @param reportId
+     * @param filePath
+     * @return
+     * @description 装载FTO模板
+     */
+    private XWPFTemplate FTOTemplate(Integer reportId, String filePath, Integer templateId) throws IOException {
+        //根据报告ID获得自定义字段值的信息
+//        List<Map<String, Object>> fieldMaps = reportFieldService.getFieldsMap(reportId);
+//        //获得模板的配置信息
+//        LambdaQueryWrapper<TemplateConfig> templateConfigWrapper = new LambdaQueryWrapper<TemplateConfig>();
+//        templateConfigWrapper.eq(TemplateConfig::getTemplateId, templateId);
+//        List<TemplateConfig> templateConfigs = templateConfigService.list(templateConfigWrapper);
+//        List<Map<String, Object>> loadMaps = new ArrayList<>();
+//        //根据配置信息装载
+//        for (TemplateConfig item : templateConfigs) {
+//            for (Map<String, Object> map : fieldMaps) {
+//                //如果自定义字段的值映射到配置则装载
+//                if (map.get("CName").toString().equals(item.getValueName())) {
+//                    //装载
+//                    map.put("CName", item.getMapName());
+//                    map.put("order", item.getOrderNum());
+//                    loadMaps.add(map);
+//                }
+//            }
+//        }
+//        //
+//        List<Map<String, Object>> classifyMaps = new ArrayList<>();
+//        //装载信息
+//        for (Map<String, Object> map : loadMaps) {
+//            Map<String, Object> classifyMap = new HashMap<>();
+//            classifyMap.put("classify", map.get("CName"));
+//            //根据自定义字段ID和值Id查询专利号
+//            List<String> patentNos = reportFieldPatentLinkService.getPatentNos(Integer.parseInt(map.get("FId").toString()), Integer.parseInt(map.get("CId").toString()));
+//            PatentVO patentVO = new PatentVO();
+//            patentVO.setPatentNos(patentNos);
+//            //根据专利号查询专利详细信息
+//            String resBody = outInterfaceService.getPatentDTOListForRMS(patentVO);
+//            JSONObject jsonObject = JSONObject.parseObject(resBody);
+//            List<JSONObject> patentDTOS = JSON.parseArray(jsonObject.get("data").toString(), JSONObject.class);
+//            //根据专利号和报告Id获得对比记录
+//            //存放公告专利
+//            List<Map<String, Object>> announcePatents = new ArrayList<>();
+//            //存放公开专利
+//            List<Map<String, Object>> publicPatents = new ArrayList<>();
+//            //存放失效专利信息
+//            List<Map<String, Object>> lapsePatents = new ArrayList<>();
+//            for (JSONObject patent : patentDTOS) {
+//                List<JSONObject> applicantJSONs = JSON.parseArray(patent.get("applicant").toString(), JSONObject.class);
+//                StringBuilder applicants = new StringBuilder();
+//                StringBuilder rightPerson = new StringBuilder();
+//                applicantJSONs.forEach(tem -> {
+//                    if (Integer.parseInt(tem.get("dataType").toString()) == 1) {
+//                        applicants.append(tem.get("name") + "\r");
+//                    } else {
+//                        rightPerson.append(tem.get("name") + "\r");
+//                    }
+//                });
+//                //装载同族信息
+//                JSONObject familys = JSONObject.parseObject(patent.get("family").toString());
+//                List<String> patSnaps = JSON.parseArray(familys.get("patSnap").toString(), String.class);
+//                List<String> simples = JSON.parseArray(familys.get("simple").toString(), String.class);
+//                List<String> inpadocs = JSON.parseArray(familys.get("inpadoc").toString(), String.class);
+//                patSnaps.addAll(simples);
+//                patSnaps.addAll(inpadocs);
+//                String familyStr = StringUtils.join(patSnaps, ",");
+//                //装载法律状态
+//                StringBuilder affair = new StringBuilder();
+//                List<JSONObject> affaires = JSON.parseArray(patent.get("affair").toString(), JSONObject.class);
+//                affaires.forEach(item -> {
+//                            affair.append(item.get("status") + "\r");
+//                        }
+//
+//                );
+//                //装载单个专利的信息
+//                Map<String, Object> patentMap = new HashMap<>();
+//                //同族专利
+//                patentMap.put("simpleFamilys", familyStr);
+//                //引用专利
+//                patentMap.put("quotePatents", patent.get("quote"));
+//                //申请日
+//                patentMap.put("applicationDate", patent.get("applicationDate"));
+//                //公开日
+//                patentMap.put("publicDate", patent.get("publicDate"));
+//                //专利号
+//                patentMap.put("publicNo", patent.get("publicNo"));
+//                patentMap.put("firstPublicDate", patent.get("firstPublicDate"));
+//                patentMap.put("applicant", applicants);
+//                patentMap.put("rightPerson", rightPerson);
+//                patentMap.put("affair", affair);
+//                //优先权日
+//                patentMap.put("priorityDate", patent.get("priorityDate"));
+//                //图示
+//                patentMap.put("abstractPath", "http://139.224.24.90:8081" + patent.get("abstractPath"));
+//                //获得专利对比记录的信息
+//                Map<String, Object> temMap = compareMessageService.queryforTemplate(patent.get("patentNo").toString(), reportId);
+//                List<CompareMessageVO> compareMessageVOS = (List<CompareMessageVO>) temMap.get("compareMessageVOs");
+//                //装载对比记录的信息
+//                patentMap.put("cM", compareMessageVOS);
+//                patentMap.put("rightNum", temMap.get("right"));
+//                patentMap.put("mainRightNum", temMap.get("mainRight"));
+//                Integer status = Integer.parseInt(patent.get("simpleStatusInt").toString());
+//                if (status == 1 || status == 5 || status == 6) {
+//                    announcePatents.add(patentMap);
+//                } else if (status == 2) {
+//                    lapsePatents.add(patentMap);
+//                } else if (status == 3) {
+//                    publicPatents.add(patentMap);
+//                }
+//                classifyMap.put("publicPatents", publicPatents);
+//                classifyMap.put("lapsePatents", lapsePatents);
+//                classifyMap.put("announcePatents", announcePatents);
+//            }
+//            classifyMaps.add(classifyMap);
+//        }
+//        Map<String, Object> map = new HashMap<>();
+//        String date = DateUtils.formatDate(new Date(), DateUtils.YYYY_MM_DD);
+//        String[] ds = date.split("-");
+//        map.put("sys", new SystemMO(ds[0], ds[1], ds[2], "", "reportName"));
+//        map.put("classifys", classifyMaps);
+//        // 为表格的显示绑定行循环
+//        LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
+//        HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
+//        // 将bz设置为行循环绑定的数据源的key,即key是bz的value会在模板中的{{bz}}处进行解析
+//        Configure configure = Configure.builder().bind("cM", policy).bind("targetDescription", htmlRenderPolicy).build();
+//        XWPFTemplate template = XWPFTemplate.compile(filePath, configure).render(map);
+//        return template;
+        return  null;
+    }
 }

+ 1 - 1
src/main/java/cn/cslg/pas/service/business/CompareLiteratureService.java

@@ -128,7 +128,7 @@ public class CompareLiteratureService extends ServiceImpl<CompareLiteratureMappe
 
         if (patentNos.size() > 0) {
             try {
-                patentList = esPatentService.getPatentsByNo(patentNos);
+                patentList = esPatentService.getPatentsByNo(patentNos,false);
             } catch (Exception e) {
                 throw new XiaoShiException("装载文献信息失败");
             }

+ 67 - 16
src/main/java/cn/cslg/pas/service/business/FTOCompareRecordService.java

@@ -1,5 +1,6 @@
 package cn.cslg.pas.service.business;
 
+import cn.cslg.pas.common.dto.ComparedPatentVO;
 import cn.cslg.pas.common.dto.business.GetFeatureSplitDTO;
 import cn.cslg.pas.common.dto.business.TortCompareRecordDTO;
 import cn.cslg.pas.common.dto.business.TortDTO;
@@ -14,9 +15,12 @@ import cn.cslg.pas.domain.business.CompareLiterature;
 import cn.cslg.pas.domain.business.FTOCompareRecord;
 import cn.cslg.pas.domain.business.Feature;
 import cn.cslg.pas.domain.business.ProjectTask;
+import cn.cslg.pas.domain.es.Patent;
 import cn.cslg.pas.exception.UnLoginException;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.mapper.FTOCompareRecordMapper;
+import cn.cslg.pas.service.business.es.EsFamilyService;
+import cn.cslg.pas.service.business.es.EsPatentService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.spire.pdf.packages.sprcxq;
@@ -28,11 +32,13 @@ import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
  * FTO
+ *
  * @Author xiexiang
  * @Date 2023/12/13
  */
@@ -61,12 +67,19 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
     @Autowired
     private TortCompareRecordService tortCompareRecordService;
 
+    @Autowired
+    private EsPatentService esPatentService;
+
+    @Autowired
+    private EsFamilyService esFamilyService;
+
     /**
      * 查询FTO对比结果VO
+     *
      * @param getFeatureSplitDTO
      * @return
      */
-    public TortCompareRecordVO getTortCompareRecord(GetFeatureSplitDTO getFeatureSplitDTO){
+    public TortCompareRecordVO getTortCompareRecord(GetFeatureSplitDTO getFeatureSplitDTO) {
         // 判断参数不能为空
         // 分配任务id
         Integer taskId = getFeatureSplitDTO.getTaskId();
@@ -125,10 +138,11 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
 
     /**
      * 装载权要层
+     *
      * @param patentRightVos
      * @return
      */
-    public List<TortRightVO> loadTortRightVO(String patentNo, Integer taskId, List<PatentRightVo> patentRightVos){
+    public List<TortRightVO> loadTortRightVO(String patentNo, Integer taskId, List<PatentRightVo> patentRightVos) {
         //新建权要层信息
         List<TortRightVO> tortRightVOS = new ArrayList<>();
         //遍历装载权要层信息
@@ -152,12 +166,13 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
     /**
      * 发起人查询
      * 装载特征与对比结果
+     *
      * @param taskId
      * @param features
      * @param ftoCompareRecords
      * @return
      */
-    public List<TortVO> loadAllTortVO(Integer taskId, List<Feature> features, List<FTOCompareRecord> ftoCompareRecords){
+    public List<TortVO> loadAllTortVO(Integer taskId, List<Feature> features, List<FTOCompareRecord> ftoCompareRecords) {
         List<TortVO> tortVOS = new ArrayList<>();
         for (Feature feature : features) {
             //新建特征与侵权分析对比结果VO
@@ -238,8 +253,8 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
         LambdaQueryWrapper<Feature> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.select(Feature::getId)
                 .eq(Feature::getProjectTaskId, taskId);
-        Function<Object,Integer> f = (o -> Integer.parseInt(o.toString()));
-        List<Integer> featureIds = featureService.listObjs(queryWrapper,f);
+        Function<Object, Integer> f = (o -> Integer.parseInt(o.toString()));
+        List<Integer> featureIds = featureService.listObjs(queryWrapper, f);
         // 删除特征
         List<Integer> ids = new ArrayList<>();
         if (!featureIds.isEmpty()) {
@@ -258,12 +273,13 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
 
     /**
      * 更新剩余特征和对比结果
+     *
      * @param patentNo
      * @param taskId
      * @param featureIds
      * @param tortDTOS
      */
-    public List<Integer> updateFeatures(String patentNo, Integer taskId, List<Integer> featureIds, List<TortDTO> tortDTOS){
+    public List<Integer> updateFeatures(String patentNo, Integer taskId, List<Integer> featureIds, List<TortDTO> tortDTOS) {
         // 获取登录人信息
         PersonnelVO personnelVO = new PersonnelVO();
         try {
@@ -312,19 +328,20 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
                     ftoIds.add(id);
                 }
             }
-            order++ ;
+            order++;
         }
         return ftoIds;
     }
 
     /**
      * 对比结果入库
+     *
      * @param patentNo
      * @param projectId
      * @param taskId
      * @param tortDTO
      */
-    public Integer addCompareRecords(String patentNo, Integer projectId, Integer taskId, TortDTO tortDTO){
+    public Integer addCompareRecords(String patentNo, Integer projectId, Integer taskId, TortDTO tortDTO) {
         Integer featureId = tortDTO.getFeatureId();
         //获取登录人信息
         PersonnelVO personnelVO = new PersonnelVO();
@@ -353,9 +370,10 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
 
     /**
      * 保存协同任务对比结果
+     *
      * @param tortCompareRecordDTO
      */
-    public List<Integer> addFTOAssitTaskResult(TortCompareRecordDTO tortCompareRecordDTO){
+    public List<Integer> addFTOAssitTaskResult(TortCompareRecordDTO tortCompareRecordDTO) {
         if (tortCompareRecordDTO == null) {
             throw new XiaoShiException("入参不能为空");
         }
@@ -421,6 +439,7 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
     /**
      * 查询侵权分析协同前后对比结果
      * 三份结果:原始、协同处理、最终
+     *
      * @param taskId
      * @return
      */
@@ -455,12 +474,13 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
 
     /**
      * 协同前后对比结果
+     *
      * @param patentNo
      * @param taskId
      * @param patentRightVos
      * @return
      */
-    public List<TortRightVO> loadBeforeAndAfter(Integer taskId, String patentNo, List<PatentRightVo> patentRightVos){
+    public List<TortRightVO> loadBeforeAndAfter(Integer taskId, String patentNo, List<PatentRightVo> patentRightVos) {
         if (patentRightVos != null && !patentRightVos.isEmpty()) {
             //新建权要层信息
             List<TortRightVO> tortRightVOS = new ArrayList<>();
@@ -487,11 +507,12 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
     /**
      * 协同前后对比结果
      * 装载特征与对比结果
+     *
      * @param features
      * @param ftoCompareRecords
      * @return
      */
-    public List<TortVO> loadBeforeAndAfterTortVO(List<Feature> features, List<FTOCompareRecord> ftoCompareRecords){
+    public List<TortVO> loadBeforeAndAfterTortVO(List<Feature> features, List<FTOCompareRecord> ftoCompareRecords) {
         List<TortVO> tortVOS = new ArrayList<>();
         for (Feature feature : features) {
             //新建特征与侵权分析对比结果VO
@@ -531,12 +552,13 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
 
     /**
      * 根据projectId和权要集合装载返回侵权分析对比结果页面VO
+     *
      * @param taskId
      * @param projectId
      * @param patentRightVos
      * @return
      */
-    public List<TortRightVO> loadTortRightVOS2(Integer taskId, Integer projectId, List<PatentRightVo> patentRightVos){
+    public List<TortRightVO> loadTortRightVOS2(Integer taskId, Integer projectId, List<PatentRightVo> patentRightVos) {
         if (patentRightVos != null && !patentRightVos.isEmpty()) {
             //新建权要层信息
             List<TortRightVO> tortRightVOS = new ArrayList<>();
@@ -562,12 +584,13 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
     /**
      * 发起人查询
      * 装载特征与对比结果
+     *
      * @param taskId
      * @param features
      * @param ftoCompareRecords
      * @return
      */
-    public List<TortVO> loadTortVO2(Integer taskId, List<Feature> features, List<FTOCompareRecord> ftoCompareRecords){
+    public List<TortVO> loadTortVO2(Integer taskId, List<Feature> features, List<FTOCompareRecord> ftoCompareRecords) {
         List<TortVO> tortVOS = new ArrayList<>();
         for (Feature feature : features) {
             //新建特征与侵权分析对比结果VO
@@ -626,10 +649,11 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
 
     /**
      * 保存最终对比结果接口
+     *
      * @param tortCompareRecordDTO
      * @return
      */
-    public List<Integer> addFinalAssitResult(TortCompareRecordDTO tortCompareRecordDTO){
+    public List<Integer> addFinalAssitResult(TortCompareRecordDTO tortCompareRecordDTO) {
         List<Integer> ids = new ArrayList<>();
         Integer taskId = tortCompareRecordDTO.getTaskId();
         if (taskId == null) {
@@ -689,12 +713,13 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
 
     /**
      * 从侵权分析中获得对比结果,并复制保存
+     *
      * @param projectId
      * @param taskId
      * @param createId
      * @param patentNo
      */
-    public void copyTortCompareRecords(Integer projectId, Integer taskId, String createId, String patentNo){
+    public void copyTortCompareRecords(Integer projectId, Integer taskId, String createId, String patentNo) {
         if (projectId != null && taskId != null) {
             LambdaQueryWrapper<FTOCompareRecord> queryWrapper = new LambdaQueryWrapper<>();
             queryWrapper.eq(FTOCompareRecord::getProjectTaskId, taskId)
@@ -723,7 +748,7 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
         }
     }
 
-    public void getLastRecord(Integer projectId, String patentNo){
+    public void getLastRecord(Integer projectId, String patentNo) {
         LambdaQueryWrapper<FTOCompareRecord> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(FTOCompareRecord::getCompareFileNumber, patentNo)
                 .eq(FTOCompareRecord::getProjectId, projectId)
@@ -734,4 +759,30 @@ public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper,
 
     }
 
+
+    public List<ComparedPatentVO> getComparedPatent(Integer projectId,Integer compareResult) {
+        //根据projectId 查询出对比过的专利号
+        List<String> patentNos = this.getBaseMapper().getComparedPatents(projectId,compareResult);
+        List<ComparedPatentVO> comparedPatentVOS = new ArrayList<>();
+        //根据专利号查询专利信息
+        List<Patent> patents = new ArrayList<>();
+        try {
+            if (patentNos != null && patentNos.size() != 0) {
+                patents = esPatentService.getPatentsByNo(patentNos, true);
+                List<Map<String, Object>> maps = esFamilyService.getPatentFamilyByNos(patentNos, "inpadoc");
+                patents.forEach(item -> {
+                    ComparedPatentVO comparedPatentVO = new ComparedPatentVO();
+                    BeanUtils.copyProperties(item, comparedPatentVO);
+                    Map<String, Object> map = maps.stream().filter(i -> i.get("id").toString().equals(item.getInpadocFamilyId())).findFirst().orElse(null);
+                    if(map!=null){
+                        comparedPatentVO.setInpadocFamilyNos((List<String>)map.get("nos"));
+                    }
+                    comparedPatentVOS.add(comparedPatentVO);
+                });
+            }
+        } catch (Exception e) {
+        }
+        return comparedPatentVOS;
+    }
+
 }

+ 149 - 0
src/main/java/cn/cslg/pas/service/business/FollowUpService.java

@@ -1,11 +1,37 @@
 package cn.cslg.pas.service.business;
 
+import cn.cslg.pas.common.dto.FollowUpQueryDTO;
+import cn.cslg.pas.common.dto.FollowUpUpdateDTO;
+import cn.cslg.pas.common.dto.business.FollowUpDTO;
+import cn.cslg.pas.common.model.cronModel.Personnel;
+import cn.cslg.pas.common.model.cronModel.PersonnelVO;
+import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.model.request.GroupRequest;
+import cn.cslg.pas.common.model.request.QueryRequest;
+import cn.cslg.pas.common.vo.business.FollowUpVO;
+import cn.cslg.pas.common.vo.business.ReportProjectVO;
 import cn.cslg.pas.domain.business.FollowUp;
 import cn.cslg.pas.domain.business.RdProject;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.factorys.businessFactory.Business;
 import cn.cslg.pas.mapper.FollowUpMapper;
 import cn.cslg.pas.mapper.RdProjectMapper;
+import cn.cslg.pas.service.permissions.PermissionService;
+import cn.cslg.pas.service.query.FormatQueryService;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.PageHelper;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @Author lrj
@@ -13,4 +39,127 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class FollowUpService extends ServiceImpl<FollowUpMapper, FollowUp> {
+    @Autowired
+    private PermissionService permissionService;
+
+
+    /**
+     * 新增后续事项
+     *
+     * @param followUps 新增后续事项的前端传输DTO数据对象
+     */
+    public void add(List<FollowUpDTO> followUps) {
+        for (FollowUpDTO followUpDTO : followUps) {
+            if (followUpDTO.getName() == null) {
+                throw new XiaoShiException("名称不可为空");
+            }
+        }
+        //判断传入列表不为空
+        if (followUps != null && followUps.size() > 0) {
+            //遍历传入列表
+            for (int i = 0; i < followUps.size(); i++) {
+                FollowUp followUp = new FollowUp();
+                //DTO赋值给后续事项表实体类
+                FollowUpDTO followUpDTO = followUps.get(i);
+                BeanUtils.copyProperties(followUpDTO, followUp);
+                //获取当前登陆人信息
+//                PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+                PersonnelVO personnelVO = new PersonnelVO();
+                personnelVO.setId("1");
+                //给实体类赋值登陆人id和姓名
+                followUp.setCreateId(personnelVO.getId());
+                followUp.insert();
+            }
+        }
+    }
+
+    public void update(List<FollowUpUpdateDTO> followUpUpdateDTOList) {
+        for (FollowUpUpdateDTO followUpDTO : followUpUpdateDTOList) {
+            if (followUpDTO.getName() == null) {
+                throw new XiaoShiException("名称不可为空");
+            }
+        }
+        //DTO赋值给后续事项表实体类
+        FollowUp followUp = new FollowUp();
+        if (followUpUpdateDTOList.size() > 0 && followUpUpdateDTOList != null) {
+            //遍历传入列表
+            for (int i = 0; i < followUpUpdateDTOList.size(); i++) {
+                FollowUpUpdateDTO followUpUpdateDTO = followUpUpdateDTOList.get(i);
+                BeanUtils.copyProperties(followUpUpdateDTO, followUp);
+                //根据id修改后续事项表数据
+                followUp.updateById();
+            }
+        }
+    }
+
+
+    /**
+     * 根据ids删除许可记录数据
+     *
+     * @param ids
+     */
+    public void delete(List<Integer> ids) {
+        if (ids != null) {
+            this.removeBatchByIds(ids);
+        } else {
+            throw new XiaoShiException("请选择至少一个");
+        }
+    }
+
+    public Records query(FollowUpQueryDTO followUpQueryDTO) {
+        Integer size = followUpQueryDTO.getSize();
+        Integer current = followUpQueryDTO.getCurrent();
+        Integer projectId = followUpQueryDTO.getProjectId();
+        if (projectId == null) {
+            throw new XiaoShiException("未选择报告");
+        }
+        LambdaQueryWrapper<FollowUp> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(FollowUp::getProjectId, projectId);
+        if (size != null && current != null) {
+            Page<FollowUp> followUpPage = this.page(new Page<>(current, size), queryWrapper);
+            Records records = new Records();
+            records.setData(this.loadFollowUps(followUpPage.getRecords()));
+            records.setCurrent(Long.parseLong(current.toString()));
+            records.setSize(Long.parseLong(size.toString()));
+            records.setTotal(followUpPage.getTotal());
+            return records;
+        } else {
+            List<FollowUp> followUps = this.list(queryWrapper);
+            long count = this.count(queryWrapper);
+            Records records = new Records();
+            records.setData(this.loadFollowUps(followUps));
+            records.setTotal(count);
+            return records;
+        }
+    }
+
+    private List<FollowUpVO> loadFollowUps(List<FollowUp> followUps) {
+        List<FollowUpVO> followUpVOS = new ArrayList<>();
+        List<String> createIds = followUps.stream().map(FollowUp::getCreateId).collect(Collectors.toList());
+
+        List<Personnel> personnels = new ArrayList<>();
+        //查询创建人名称
+        if (createIds.size() != 0) {
+            try {
+                String res = permissionService.getPersonnelByIdsFromPCS(createIds);
+                JSONObject jsonObject = JSONObject.parseObject(res);
+                personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
+            } catch (Exception e) {
+                throw new XiaoShiException("装载错误");
+            }
+        }
+        for (FollowUp followUp : followUps) {
+            FollowUpVO followUpVO = new FollowUpVO();
+            BeanUtils.copyProperties(followUp, followUpVO);
+            Personnel personnel = personnels.stream().filter(item -> item.getId().equals(followUp.getCreateId())).findFirst().orElse(null);
+            if (personnel != null) {
+                followUpVO.setCreateName(personnel.getPersonnelName());
+            }
+            if (followUp.getStatus().equals(0)) {
+                followUpVO.setStatusStr("进行中");
+            }
+            followUpVOS.add(followUpVO);
+        }
+        return followUpVOS;
+    }
 }

+ 14 - 0
src/main/java/cn/cslg/pas/service/business/TemplateConfigService.java

@@ -0,0 +1,14 @@
+package cn.cslg.pas.service.business;
+
+
+import cn.cslg.pas.domain.business.AssoEventFile;
+import cn.cslg.pas.domain.business.TemplateConfig;
+import cn.cslg.pas.mapper.AssoEventFileMapper;
+import cn.cslg.pas.mapper.TemplateConfigMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service
+public class TemplateConfigService extends ServiceImpl<TemplateConfigMapper, TemplateConfig> {
+
+}

+ 97 - 0
src/main/java/cn/cslg/pas/service/business/es/EsFamilyService.java

@@ -0,0 +1,97 @@
+package cn.cslg.pas.service.business.es;
+
+import cn.cslg.pas.common.core.base.IfConstant;
+import cn.cslg.pas.common.dto.PatentDetailDTO;
+import cn.cslg.pas.common.dto.PatentKinDTO;
+import cn.cslg.pas.common.dto.business.ContentDetailDTO;
+import cn.cslg.pas.common.model.request.MapRequest;
+import cn.cslg.pas.common.model.request.OrderDTO;
+import cn.cslg.pas.common.model.request.QueryRequest;
+import cn.cslg.pas.common.model.request.StringRequest;
+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.ContentVO;
+import cn.cslg.pas.common.vo.PatentPageMessageVO;
+import cn.cslg.pas.common.vo.business.PatentKinDetailVO;
+import cn.cslg.pas.common.vo.business.PatentKinVO;
+import cn.cslg.pas.common.vo.business.PatentNoVO;
+import cn.cslg.pas.domain.es.*;
+import cn.cslg.pas.service.query.FormatQueryService;
+import co.elastic.clients.elasticsearch.ElasticsearchClient;
+import co.elastic.clients.elasticsearch._types.SortOrder;
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import co.elastic.clients.elasticsearch.core.SearchRequest;
+import co.elastic.clients.elasticsearch.core.SearchResponse;
+import co.elastic.clients.elasticsearch.core.search.Hit;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class EsFamilyService {
+    private final ElasticsearchClient client;
+
+    //根据专利号查询同族专利号
+    public List<Map<String, Object>> getPatentFamilyByNos(List<String> patentNos, String type) throws Exception {
+        List<Map<String, Object>> reFamilies = new ArrayList<>();
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent_family");
+        List<Query> querys = new ArrayList<>();
+        for (String patentNo : patentNos) {
+            Query q1 = QueryBuilders.term(t -> t.field("patent.app_no").value(patentNo));
+            //公开号
+            Query q2 = QueryBuilders.term(t -> t.field("patent.public_no").value(patentNo));
+            //授权号
+            Query q3 = QueryBuilders.term(t -> t.field("patent.grant_no").value(patentNo));
+            Query query = QueryBuilders.bool(i -> i.should(q1, q2, q3));
+
+            querys.add(query);
+        }
+        Query query = QueryBuilders.term((t -> t.field("family_type").value(type)));
+        Query nosQuerys = QueryBuilders.bool((i -> i.should(querys)));
+        Query finalQuery =QueryBuilders.bool((i->i.must(nosQuerys,query)));
+        builder.query(finalQuery);
+        SearchResponse<PatentFamilyMessage> response = client.search(builder.build(), PatentFamilyMessage.class);
+        List<Hit<PatentFamilyMessage>> hits = response.hits().hits();
+
+        for (Hit<PatentFamilyMessage> hit : hits) {
+            PatentFamilyMessage familyMessage = hit.source();
+            List<FamilyPatent> patentList = familyMessage.getPatent();
+            if (!CollectionUtils.isEmpty(patentList)) {
+                Map<String, Object> reFamily = new HashMap<>();
+                List<String> nos = new ArrayList<>();
+                patentList.forEach(item -> {
+                    if (item.getGrantNo() != null&&!item.getGrantNo().trim().equals("")) {
+                        nos.add(item.getGrantNo());
+                    } else if (item.getPublicNo() != null&&!item.getPublicNo().trim().equals("")) {
+                        nos.add(item.getPublicNo());
+                    } else if (item.getAppNo() != null&&!item.getAppNo().trim().equals("")) {
+                        nos.add(item.getAppNo());
+                    }
+                });
+                reFamily.put("nos", nos);
+                reFamily.put("id", hit.id());
+                reFamilies.add(reFamily);
+            }
+
+        }
+        return reFamilies;
+    }
+
+}

+ 24 - 22
src/main/java/cn/cslg/pas/service/business/es/EsPatentService.java

@@ -210,7 +210,7 @@ public class EsPatentService {
      * @return
      * @throws Exception
      */
-    public List<Patent> getPatentsByNo(List<String> patentNos) throws Exception {
+    public List<Patent> getPatentsByNo(List<String> patentNos,Boolean ifGetAll) throws Exception {
         List<Patent> patentList = new ArrayList<>();
         SearchRequest.Builder builder = new SearchRequest.Builder();
         //设置查询索引
@@ -227,10 +227,12 @@ public class EsPatentService {
         }
         Query finalQuery = QueryBuilders.bool((i -> i.should(querys)));
         builder.query(finalQuery);
-        List<String> reSources = this.rePatentSource();
-        builder.source(sourceOptionsBuilder -> sourceOptionsBuilder
-                .filter(fieldSourceBuilder -> fieldSourceBuilder
-                        .includes(reSources)));
+        if(!ifGetAll) {
+            List<String> reSources = this.rePatentSource();
+            builder.source(sourceOptionsBuilder -> sourceOptionsBuilder
+                    .filter(fieldSourceBuilder -> fieldSourceBuilder
+                            .includes(reSources)));
+        }
         SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
         List<Hit<Patent>> hits = response.hits().hits();
         if (hits != null && hits.size() > 0) {
@@ -273,23 +275,23 @@ public class EsPatentService {
         builder.query(q);
         //排序
         List<OrderDTO> dtoList = queryRequest.getOrderDTOList();
-        if (!CollectionUtils.isEmpty(dtoList)) {
-            for (OrderDTO orderDTO : dtoList) {
-                if (orderDTO.getOrderType().equals(IfConstant.NO)) {
-                    builder.sort(sortOptionsBuilder -> sortOptionsBuilder
-                            .field(fieldSortBuilder -> fieldSortBuilder
-                                    .field(orderDTO.getOrderBy()).order(SortOrder.Asc)));
-                } else {
-                    builder.sort(sortOptionsBuilder -> sortOptionsBuilder
-                            .field(fieldSortBuilder -> fieldSortBuilder
-                                    .field(orderDTO.getOrderBy()).order(SortOrder.Desc)));
-                }
-            }
-        } else {
-            builder.sort(sortOptionsBuilder -> sortOptionsBuilder
-                    .field(fieldSortBuilder -> fieldSortBuilder
-                            .field("patent_no.keyword").order(SortOrder.Desc)));
-        }
+//        if (!CollectionUtils.isEmpty(dtoList)) {
+//            for (OrderDTO orderDTO : dtoList) {
+//                if (orderDTO.getOrderType().equals(IfConstant.NO)) {
+//                    builder.sort(sortOptionsBuilder -> sortOptionsBuilder
+//                            .field(fieldSortBuilder -> fieldSortBuilder
+//                                    .field(orderDTO.getOrderBy()).order(SortOrder.Asc)));
+//                } else {
+//                    builder.sort(sortOptionsBuilder -> sortOptionsBuilder
+//                            .field(fieldSortBuilder -> fieldSortBuilder
+//                                    .field(orderDTO.getOrderBy()).order(SortOrder.Desc)));
+//                }
+//            }
+//        } else {
+//            builder.sort(sortOptionsBuilder -> sortOptionsBuilder
+//                    .field(fieldSortBuilder -> fieldSortBuilder
+//                            .field("patent_no.keyword").order(SortOrder.Desc)));
+//        }
         //分页
         if (current > 0 && size > 0) {
             builder.from(current.intValue()).size(size.intValue());

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

@@ -167,6 +167,7 @@ public class EsService {
                 }
             }
         }
+
         SearchRequest.Builder builder = new SearchRequest.Builder();
         //设置查询索引
         builder.index("patent");

+ 14 - 14
src/main/java/cn/cslg/pas/service/importPatent/GetCataloguingFromWebThread.java

@@ -98,20 +98,20 @@ public class GetCataloguingFromWebThread extends Thread {
 
                 EsService esService = applicationContext.getBean(EsService.class);
 
-                //添加同族专利
-//                String familyPatentNoStr = patentStarApiService.getFamilyByPubNoApi(uploadPatentWebDTO.getPatent().getPublicNo());
-//                if (!familyPatentNoStr.equals("no data")) {
-//                    FamilyPatentNo familyPatentNo = JSON.parseObject(familyPatentNoStr, FamilyPatentNo.class);
-//                    List<String> familyPatentNos = new ArrayList<>();
-//                    if (familyPatentNo != null && familyPatentNo.getFamilyinfo() != null) {
-//                        familyPatentNos = Arrays.asList(familyPatentNo.getFamilyinfo().split(";"));
-//                    }
-//                    if (familyPatentNos.size() != 0) {
-//                        EsPatentFamilyDTO esPatentFamilyDTO = esService.addEsPatentFamily(familyPatentNos, "inpadoc");
-//                        uploadPatentWebDTO.getPatent().setInpadocFamilyNum(esPatentFamilyDTO.getFamilyNum());
-//                        uploadPatentWebDTO.getPatent().setInpadocFamilyId(esPatentFamilyDTO.getPatentFamilyId());
-//                    }
-//                }
+//                添加同族专利
+                String familyPatentNoStr = patentStarApiService.getFamilyByPubNoApi(uploadPatentWebDTO.getPatent().getPublicNo());
+                if (!familyPatentNoStr.equals("no data")) {
+                    FamilyPatentNo familyPatentNo = JSON.parseObject(familyPatentNoStr, FamilyPatentNo.class);
+                    List<String> familyPatentNos = new ArrayList<>();
+                    if (familyPatentNo != null && familyPatentNo.getFamilyinfo() != null) {
+                        familyPatentNos = Arrays.asList(familyPatentNo.getFamilyinfo().split(";"));
+                    }
+                    if (familyPatentNos.size() != 0) {
+                        EsPatentFamilyDTO esPatentFamilyDTO = esService.addEsPatentFamily(familyPatentNos, "inpadoc");
+                        uploadPatentWebDTO.getPatent().setInpadocFamilyNum(esPatentFamilyDTO.getFamilyNum());
+                        uploadPatentWebDTO.getPatent().setInpadocFamilyId(esPatentFamilyDTO.getPatentFamilyId());
+                    }
+                }
 //
 //                //添加法律事务
 //                esService.addEsLegalEvent(uploadPatentWebDTO.getStarPatentVO().getPublicNo());

+ 8 - 0
src/main/java/cn/cslg/pas/service/query/FormatQueryService.java

@@ -244,6 +244,14 @@ public class FormatQueryService {
                 condition = queryRequest.getGroupField() + "=" + queryRequest.getGroupFieldValue();
             }
         }
+        if(queryRequest.getProjectId()!=null){
+            if (condition != null && condition != "") {
+                condition += " AND " + "project_id"+ "=" +queryRequest.getProjectId();
+            }
+            else {
+                condition = "project_id"+ "=" +queryRequest.getProjectId();
+            }
+        }
 
         //检索式格式化
         if (condition != null && condition != "") {

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

@@ -0,0 +1,15 @@
+[
+  {"name":"projectId",
+    "type":"Integer",
+    "value":"projectId",
+    "field":"projectId",
+    "sqlField": "project_id",
+    "sqlClass": "getComSql",
+    "orderClass": "",
+    "groupClass":"",
+    "ifSearch":"true",
+    "ifGroup": "false",
+    "ifShow":"false",
+    "ifAsCondition": "true"
+  }
+]

+ 14 - 0
src/main/resources/mapper/FTOCompareRecordMapper.xml

@@ -0,0 +1,14 @@
+<?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.FTOCompareRecordMapper">
+    <select id="getComparedPatents" resultType="java.lang.String">
+        select distinct compare_file_number
+        from fto_compare_record
+        where project_id = ${projectId}
+<if test="compareResult!=null">
+    and compare_result=${compareResult}
+</if>
+    </select>
+
+
+</mapper>

+ 12 - 2
src/test/java/cn/cslg/pas/service/EsPatentServiceTests.java

@@ -2,6 +2,7 @@ package cn.cslg.pas.service;
 
 import cn.cslg.pas.controller.AvoidDesignController;
 import cn.cslg.pas.service.business.AvoidDesignService;
+import cn.cslg.pas.service.business.es.EsFamilyService;
 import cn.cslg.pas.service.business.es.EsPatentService;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -10,6 +11,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Author xiexiang
@@ -19,7 +21,8 @@ import java.util.List;
 public class EsPatentServiceTests {
     @Autowired
     private EsPatentService  esPatentService;
-
+    @Autowired
+    private EsFamilyService esFamilyService;
 
     @Test
     public void test() throws Exception {
@@ -36,6 +39,13 @@ public class EsPatentServiceTests {
         List<String> patentNos =new ArrayList<>();
         patentNos.add("CN201910069334.7");
         patentNos.add("CN201110286649.0");
-        esPatentService.getPatentsByNo(patentNos);
+        esPatentService.getPatentsByNo(patentNos,true);
+    }
+    @Test
+    public  void getFamilys() throws Exception{
+List<String> patentNos =new ArrayList<>();
+patentNos.add("CN116525219A");
+ List<Map<String,Object>>    maps =   esFamilyService.getPatentFamilyByNos(patentNos,"inpadoc");
+   System.out.println(maps);
     }
 }

+ 39 - 0
src/test/java/cn/cslg/pas/service/FTOCompareRecordServiceTests.java

@@ -0,0 +1,39 @@
+package cn.cslg.pas.service;
+
+import cn.cslg.pas.common.dto.ComparedPatentVO;
+import cn.cslg.pas.domain.es.Patent;
+import cn.cslg.pas.service.business.FTOCompareRecordService;
+import cn.cslg.pas.service.business.es.EsPatentService;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/12/5
+ */
+@SpringBootTest
+public class FTOCompareRecordServiceTests {
+    @Autowired
+    private FTOCompareRecordService ftoCompareRecordService;
+
+
+    @Test
+    public void test() throws Exception {
+
+    }
+
+    @Test
+    public void testUpdate() {
+
+    }
+
+    @Test
+    public void getComparedPatent() throws Exception {
+        List<ComparedPatentVO> comparedPatentVOS =ftoCompareRecordService.getComparedPatent(101,3);
+        System.out.println(comparedPatentVOS);
+    }
+}