Browse Source

Merge remote-tracking branch 'origin/master' into prod_test

lrj 1 month ago
parent
commit
e8907a53ee
31 changed files with 1312 additions and 116 deletions
  1. 2 1
      src/main/java/cn/cslg/pas/common/core/base/Cycle.java
  2. 12 0
      src/main/java/cn/cslg/pas/common/model/common/CommonVO.java
  3. 9 0
      src/main/java/cn/cslg/pas/common/model/project/CopyProjectDTO.java
  4. 2 2
      src/main/java/cn/cslg/pas/common/model/request/QueryRequest.java
  5. 25 0
      src/main/java/cn/cslg/pas/common/patentProject/PatentStatusMonitorAddDTO.java
  6. 12 0
      src/main/java/cn/cslg/pas/common/patentProject/PatentStatusMonitorDeleteDTO.java
  7. 14 0
      src/main/java/cn/cslg/pas/common/patentProject/PatentStatusMonitorQueryDTO.java
  8. 14 0
      src/main/java/cn/cslg/pas/common/patentProject/PatentStatusMonitorUpdateDTO.java
  9. 29 0
      src/main/java/cn/cslg/pas/common/patentProject/PatentStatusMonitorVO.java
  10. 28 11
      src/main/java/cn/cslg/pas/controller/CommonController.java
  11. 10 0
      src/main/java/cn/cslg/pas/controller/PatentProjectController.java
  12. 57 0
      src/main/java/cn/cslg/pas/controller/project/PatentStatusMonitorController.java
  13. 2 0
      src/main/java/cn/cslg/pas/domain/business/SystemDict.java
  14. 46 0
      src/main/java/cn/cslg/pas/domain/project/PatentStatusMonitor.java
  15. 18 0
      src/main/java/cn/cslg/pas/mapper/project/PatentStatusMonitorMapper.java
  16. 15 13
      src/main/java/cn/cslg/pas/service/business/PatentProjectService.java
  17. 2 2
      src/main/java/cn/cslg/pas/service/business/es/EsCustomFieldService.java
  18. 33 3
      src/main/java/cn/cslg/pas/service/business/es/EsMergePersonService.java
  19. 95 0
      src/main/java/cn/cslg/pas/service/business/es/EsPatentService.java
  20. 8 3
      src/main/java/cn/cslg/pas/service/business/es/EsService.java
  21. 46 0
      src/main/java/cn/cslg/pas/service/common/LoadService.java
  22. 0 1
      src/main/java/cn/cslg/pas/service/importPatent/SavePatentToEsThread.java
  23. 279 0
      src/main/java/cn/cslg/pas/service/project/CopyProjectService.java
  24. 219 0
      src/main/java/cn/cslg/pas/service/project/PatentStatusMonitorService.java
  25. 114 0
      src/main/java/cn/cslg/pas/service/quartzService/SysImportPatentStatusJobService.java
  26. 28 27
      src/main/resources/application-dev.yml
  27. 48 16
      src/main/resources/application-prodNetOut.yml
  28. 78 15
      src/main/resources/application-testNetOut.yml
  29. 32 22
      src/test/java/cn/cslg/pas/DifyTest.java
  30. 29 0
      src/test/java/cn/cslg/pas/service/project/PatentProjectServiceTests.java
  31. 6 0
      src/test/java/cn/cslg/pas/test/QuartzTaskTests.java

+ 2 - 1
src/main/java/cn/cslg/pas/common/core/base/Cycle.java

@@ -4,5 +4,6 @@ public class Cycle {
     public static final String YEAR = "year";
     public static final String QUARTER = "quarter";
     public static final String MONTH = "month";
-    public static final String WEEK="week";
+    public static final String WEEK = "week";
+    public static final String DAY = "day";
 }

+ 12 - 0
src/main/java/cn/cslg/pas/common/model/common/CommonVO.java

@@ -0,0 +1,12 @@
+package cn.cslg.pas.common.model.common;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class CommonVO {
+    private String createName;
+    private String createId;
+    private Date createTime;
+}

+ 9 - 0
src/main/java/cn/cslg/pas/common/model/project/CopyProjectDTO.java

@@ -0,0 +1,9 @@
+package cn.cslg.pas.common.model.project;
+
+import lombok.Data;
+
+@Data
+public class CopyProjectDTO {
+    private Integer projectId;
+    private String personId;
+}

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

@@ -28,7 +28,7 @@ public class QueryRequest {
     //专利详情中商品化专用ids
     private List<Integer> productIds;
     private String semanteme;
-    private Integer startNumber;
+    private Long startNumber;
 
-    private Integer endNumber;
+    private Long endNumber;
 }

+ 25 - 0
src/main/java/cn/cslg/pas/common/patentProject/PatentStatusMonitorAddDTO.java

@@ -0,0 +1,25 @@
+package cn.cslg.pas.common.patentProject;
+
+import cn.cslg.pas.common.model.request.StringRequest;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PatentStatusMonitorAddDTO {
+
+    private Integer projectId;
+
+    private StringRequest stringRequest;
+
+    private List<String> isDelete;
+
+    private List<String> isAdd;
+    private Long startNumber;
+
+    private Long endNumber;
+    private String notifyCycle;
+
+    private List<Integer> targetSSs;
+
+}

+ 12 - 0
src/main/java/cn/cslg/pas/common/patentProject/PatentStatusMonitorDeleteDTO.java

@@ -0,0 +1,12 @@
+package cn.cslg.pas.common.patentProject;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PatentStatusMonitorDeleteDTO {
+
+private List<Integer> ids;
+
+}

+ 14 - 0
src/main/java/cn/cslg/pas/common/patentProject/PatentStatusMonitorQueryDTO.java

@@ -0,0 +1,14 @@
+package cn.cslg.pas.common.patentProject;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PatentStatusMonitorQueryDTO {
+
+    private Integer projectId;
+    private Integer status;
+
+
+}

+ 14 - 0
src/main/java/cn/cslg/pas/common/patentProject/PatentStatusMonitorUpdateDTO.java

@@ -0,0 +1,14 @@
+package cn.cslg.pas.common.patentProject;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PatentStatusMonitorUpdateDTO {
+
+    private Integer id;
+    private List<Integer> targetSSs;
+    private String notifyCycle;
+
+}

+ 29 - 0
src/main/java/cn/cslg/pas/common/patentProject/PatentStatusMonitorVO.java

@@ -0,0 +1,29 @@
+package cn.cslg.pas.common.patentProject;
+
+import cn.cslg.pas.common.model.common.CommonVO;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class PatentStatusMonitorVO extends CommonVO {
+    private Integer projectId;
+
+    private String searchQuery;
+
+    private Long startNumber;
+
+    private Long endNumber;
+
+    private List<String> isDelete;
+
+    private List<String> isAdd;
+
+    private String notifyCycle;
+
+    private List<Integer> targetSss;
+
+    private Integer status;
+    private Integer type;
+}

+ 28 - 11
src/main/java/cn/cslg/pas/controller/CommonController.java

@@ -148,18 +148,18 @@ public class CommonController {
     }
 
 
-    @GetMapping("addSysCycleJob")
+    @PostMapping("addSysCycleJob")
     @Operation(summary = "获得检索栏位")
-    public Response addSysCycleJob() throws Exception {
-        QrtzTaskDTO qrtzTaskDTO = new QrtzTaskDTO();
-        QuartzVO quartzVO = new QuartzVO();
-        quartzVO.setJobName("sys_cycle_job");
-        quartzVO.setJobGroupName("sys_cycle_job_group");
-        quartzVO.setTriggerGroupName("sys_cycle_trigger_group");
-        quartzVO.setTriggerName("sys_cycle_trigger");
-        qrtzTaskDTO.setQuartzVO(quartzVO);
-        qrtzTaskDTO.setJobClass("cn.cslg.pas.service.quartzService.SysImportPatentJobService");
-        qrtzTaskDTO.setCron("0 0 0 * * ? *");
+    public Response addSysCycleJob(@RequestBody QrtzTaskDTO qrtzTaskDTO) throws Exception {
+
+//        QuartzVO quartzVO = new QuartzVO();
+//        quartzVO.setJobName("sys_cycle_job");
+//        quartzVO.setJobGroupName("sys_cycle_job_group");
+//        quartzVO.setTriggerGroupName("sys_cycle_trigger_group");
+//        quartzVO.setTriggerName("sys_cycle_trigger");
+//        qrtzTaskDTO.setQuartzVO(quartzVO);
+//        qrtzTaskDTO.setJobClass("cn.cslg.pas.service.quartzService.SysImportPatentJobService");
+//        qrtzTaskDTO.setCron("0 0 0 * * ? *");
 //     qrtzTaskDTO.setCron("0/10 * * * * ?");
         jobService.addJob(qrtzTaskDTO);
         return Response.success("");
@@ -172,4 +172,21 @@ public class CommonController {
         return Response.success("");
     }
 
+    @PostMapping("deleteSysCycleJob")
+    @Operation(summary = "获得检索栏位")
+    public Response deleteSysCycleJob(@RequestBody QuartzVO quartzVO) throws Exception {
+
+//        QuartzVO quartzVO = new QuartzVO();
+//        quartzVO.setJobName("sys_cycle_job");
+//        quartzVO.setJobGroupName("sys_cycle_job_group");
+//        quartzVO.setTriggerGroupName("sys_cycle_trigger_group");
+//        quartzVO.setTriggerName("sys_cycle_trigger");
+//        qrtzTaskDTO.setQuartzVO(quartzVO);
+//        qrtzTaskDTO.setJobClass("cn.cslg.pas.service.quartzService.SysImportPatentJobService");
+//        qrtzTaskDTO.setCron("0 0 0 * * ? *");
+//     qrtzTaskDTO.setCron("0/10 * * * * ?");
+        jobService.deleteJob(quartzVO);
+        return Response.success("");
+    }
+
 }

+ 10 - 0
src/main/java/cn/cslg/pas/controller/PatentProjectController.java

@@ -8,6 +8,7 @@ import cn.cslg.pas.common.importTask.ProjectQuartzQueryDTO;
 import cn.cslg.pas.common.importTask.ProjectQuartzSetDTO;
 import cn.cslg.pas.common.model.addPatentToReport.AddProjectPatentToReportDTO;
 import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.model.project.CopyProjectDTO;
 import cn.cslg.pas.common.model.request.StringGroupRequest;
 import cn.cslg.pas.common.model.request.StringRequest;
 import cn.cslg.pas.common.patentProject.ProjectQuartzDTO;
@@ -20,6 +21,7 @@ import cn.cslg.pas.factorys.businessFactory.Business;
 import cn.cslg.pas.factorys.businessFactory.BusinessFactory;
 import cn.cslg.pas.service.business.PatentProjectService;
 import cn.cslg.pas.service.business.ProjectService;
+import cn.cslg.pas.service.project.CopyProjectService;
 import com.alibaba.fastjson.JSONObject;
 import io.swagger.v3.oas.annotations.Operation;
 import lombok.extern.slf4j.Slf4j;
@@ -47,6 +49,8 @@ public class PatentProjectController {
     private ProjectService projectService;
     @Autowired
     private PatentProjectService patentProjectService;
+    @Autowired
+    private CopyProjectService copyProjectService;
     @Operation(summary = "查询专利数据库")
     @PostMapping("/queryPatentProject")
     public Response queryPatentProject(@RequestBody StringRequest stringRequest) throws Exception {
@@ -142,4 +146,10 @@ public class PatentProjectController {
         PatentProject patentProject= patentProjectService.queryProjectQuartz(projectQuartzDTO);
         return  Response.success(patentProject);
     }
+    @Operation(summary = "复制专题库")
+    @PostMapping("/copyProject")
+    public Response copyProject(@RequestBody CopyProjectDTO copyProjectDTO) throws Exception {
+        copyProjectService.copyPatentProjectAll(copyProjectDTO);
+        return  Response.success("复制成功");
+    }
 }

+ 57 - 0
src/main/java/cn/cslg/pas/controller/project/PatentStatusMonitorController.java

@@ -0,0 +1,57 @@
+package cn.cslg.pas.controller.project;
+
+import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.TranslateDTO;
+import cn.cslg.pas.common.patentProject.*;
+import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.common.vo.TranslateVO;
+import cn.cslg.pas.domain.project.PatentStatusMonitor;
+import cn.cslg.pas.service.common.TranslateService;
+import cn.cslg.pas.service.project.PatentStatusMonitorService;
+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.ArrayList;
+import java.util.List;
+
+@Slf4j
+@RequestMapping(Constants.API_XiaoSHI + "/patentStatusMonitor")
+@RestController
+public class PatentStatusMonitorController {
+    @Autowired
+    private PatentStatusMonitorService patentStatusMonitorService;
+
+
+    @Operation(summary = "添加专利状态监控任务")
+    @PostMapping("/add")
+    public Response add(@RequestBody PatentStatusMonitorAddDTO patentStatusMonitorAddDTO) throws Exception {
+
+            Integer id  = patentStatusMonitorService.add(patentStatusMonitorAddDTO);
+
+        return Response.success(id);
+    }
+
+    @Operation(summary = "查询专利状态监控任务")
+    @PostMapping("/query")
+    public Response query(@RequestBody PatentStatusMonitorQueryDTO patentStatusMonitorQueryDTO) throws Exception {
+        List<PatentStatusMonitorVO> patentStatusMonitorVOList = patentStatusMonitorService.query(patentStatusMonitorQueryDTO);
+        return Response.success(patentStatusMonitorVOList);
+    }
+    @Operation(summary = "更新专利状态监控任务")
+    @PostMapping("/update")
+    public Response update(@RequestBody PatentStatusMonitorUpdateDTO patentStatusMonitorUpdateDTO) throws Exception {
+        Integer id= patentStatusMonitorService.updateMonitor(patentStatusMonitorUpdateDTO);
+        return Response.success(id);
+    }
+    @Operation(summary = "删除专利状态监控任务")
+    @PostMapping("/delete")
+    public Response delete(@RequestBody PatentStatusMonitorDeleteDTO patentStatusMonitorDeleteDTO) throws Exception {
+        List<Integer> ids = patentStatusMonitorService.deleteMonitor(patentStatusMonitorDeleteDTO);
+        return Response.success(ids);
+    }
+}

+ 2 - 0
src/main/java/cn/cslg/pas/domain/business/SystemDict.java

@@ -45,6 +45,8 @@ public class SystemDict extends BaseEntity<SystemDict> {
      */
     @TableField("simple_label")
     private String simpleLabel;
+    private String remark;
+
     public SystemDict() {
         this.label = "-";
         this.value = "-1";

+ 46 - 0
src/main/java/cn/cslg/pas/domain/project/PatentStatusMonitor.java

@@ -0,0 +1,46 @@
+package cn.cslg.pas.domain.project;
+
+import cn.cslg.pas.domain.BaseEntity;
+import cn.cslg.pas.domain.report.AssoComLiteratureFile;
+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 java.io.Serializable;
+import java.util.Date;
+
+import lombok.Data;
+
+/**
+ * @TableName patent_status_monitor
+ */
+@TableName(value = "patent_status_monitor")
+@Data
+public class PatentStatusMonitor extends BaseEntity<AssoComLiteratureFile> {
+
+    private Integer projectId;
+
+    private String searchQuery;
+
+    private Long startNumber;
+
+    private Long endNumber;
+
+    private String isDelete;
+
+    private String isAdd;
+
+    private String notifyCycle;
+
+    private String targetSss;
+
+    private String createId;
+
+    private Date createTime;
+    private Integer status;
+    private String patentList;
+    //0专利号监控,1检索式监控
+    private Integer type;
+
+}

+ 18 - 0
src/main/java/cn/cslg/pas/mapper/project/PatentStatusMonitorMapper.java

@@ -0,0 +1,18 @@
+package cn.cslg.pas.mapper.project;
+
+import cn.cslg.pas.domain.project.PatentStatusMonitor;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author admin
+* @description 针对表【patent_status_monitor(专利状态监控表)】的数据库操作Mapper
+* @createDate 2025-11-04 11:39:14
+* @Entity cn.cslg.pas.domain.novelty.domain.PatentStatusMonitor
+*/
+public interface PatentStatusMonitorMapper extends BaseMapper<PatentStatusMonitor> {
+
+}
+
+
+
+

+ 15 - 13
src/main/java/cn/cslg/pas/service/business/PatentProjectService.java

@@ -26,6 +26,7 @@ import cn.cslg.pas.factorys.businessFactory.Business;
 import cn.cslg.pas.factorys.reGroupFactory.QueryGroupFactory;
 import cn.cslg.pas.factorys.reGroupFactory.QueryGroupImp;
 import cn.cslg.pas.mapper.PatentProjectMapper;
+import cn.cslg.pas.service.business.es.EsCustomFieldService;
 import cn.cslg.pas.service.common.FileManagerService;
 import cn.cslg.pas.service.permissions.PermissionService;
 import cn.cslg.pas.service.quartzService.JobService;
@@ -112,6 +113,7 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
     @Autowired
     private JobService jobService;
 
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Object queryMessage(QueryRequest queryRequest) throws Exception {
@@ -322,11 +324,11 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
         /**
          * 装载patentProject
          */
-            ProjectQuartzSetDTO projectQuartzSetDTO =new ProjectQuartzSetDTO();
-            projectQuartzSetDTO.setProjectId(project.getId());
-            projectQuartzSetDTO.setIfUpdate(patentProjectDTO.getIfUpdate());
-            projectQuartzSetDTO.setUpdateCycle(patentProjectDTO.getUpdateCycle());
-            this.setProjectQuartz(projectQuartzSetDTO);
+        ProjectQuartzSetDTO projectQuartzSetDTO = new ProjectQuartzSetDTO();
+        projectQuartzSetDTO.setProjectId(project.getId());
+        projectQuartzSetDTO.setIfUpdate(patentProjectDTO.getIfUpdate());
+        projectQuartzSetDTO.setUpdateCycle(patentProjectDTO.getUpdateCycle());
+        this.setProjectQuartz(projectQuartzSetDTO);
 
 
         /**
@@ -494,11 +496,11 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
          * 装载patentProject
          */
         //根据projectId查询出patentProject
-            ProjectQuartzSetDTO projectQuartzSetDTO =new ProjectQuartzSetDTO();
-            projectQuartzSetDTO.setProjectId(project.getId());
-            projectQuartzSetDTO.setIfUpdate(updatePatentProjectDTO.getIfUpdate());
-            projectQuartzSetDTO.setUpdateCycle(updatePatentProjectDTO.getUpdateCycle());
-            this.setProjectQuartz(projectQuartzSetDTO);
+        ProjectQuartzSetDTO projectQuartzSetDTO = new ProjectQuartzSetDTO();
+        projectQuartzSetDTO.setProjectId(project.getId());
+        projectQuartzSetDTO.setIfUpdate(updatePatentProjectDTO.getIfUpdate());
+        projectQuartzSetDTO.setUpdateCycle(updatePatentProjectDTO.getUpdateCycle());
+        this.setProjectQuartz(projectQuartzSetDTO);
 
         LambdaQueryWrapper<PatentProject> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(PatentProject::getProjectId, project.getId());
@@ -623,7 +625,7 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
      * @param patentProjectVOS
      * @throws IOException
      */
-    private void loadPatentProject(List<PatentProjectVO> patentProjectVOS) throws IOException {
+    public void loadPatentProject(List<PatentProjectVO> patentProjectVOS) throws IOException {
         List<String> createIds = new ArrayList<>();
         List<String> departmentIds = new ArrayList<>();
         List<Integer> clientIds = new ArrayList<>();
@@ -1003,7 +1005,6 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
             project.setCrons(crons);
 
 
-
         }
         project.insert();
         return project;
@@ -1049,10 +1050,11 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
 
 
     public PatentProject queryProjectQuartz(ProjectQuartzQueryDTO projectQuartzQueryDTO) {
-        Integer projectId =projectQuartzQueryDTO.getProjectId();
+        Integer projectId = projectQuartzQueryDTO.getProjectId();
         LambdaQueryWrapper<PatentProject> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(PatentProject::getProjectId, projectId);
         PatentProject patentProject = this.getOne(queryWrapper);
         return patentProject;
     }
+
 }

+ 2 - 2
src/main/java/cn/cslg/pas/service/business/es/EsCustomFieldService.java

@@ -788,7 +788,7 @@ public class EsCustomFieldService {
      * @param value
      * @return
      */
-    public List<FieldValueVO> getCustomFieldValues(Integer type, List<String> value) {
+    public List<FieldValueVO>     getCustomFieldValues(Integer type, List<String> value) {
         List<FieldValueVO> fieldValueVOS = new ArrayList<>();
         switch (type) {
             case 0:
@@ -839,7 +839,7 @@ public class EsCustomFieldService {
 
                         }
                         pathNames.add(item.getName());
-                        String pathValue = cn.cslg.pas.common.utils.StringUtils.join(pathNames, "/");
+                        String pathValue = StringUtils.join(pathNames, "\\");
                         fieldValueVO.setValue(pathValue);
                         fieldValueVO.setPath(item.getPath());
                         fieldValueVOS.add(fieldValueVO);

+ 33 - 3
src/main/java/cn/cslg/pas/service/business/es/EsMergePersonService.java

@@ -22,13 +22,13 @@ public class EsMergePersonService {
         List<PatentPerson> rightHolder = patent.getRightHolder();
         List<PatentPerson> inventor = patent.getInventor();
         if (applicant != null && applicant.size() != 0) {
-           this.addMergePersonToEs(applicant,patentId,projectId,"merge_applicat");
+            this.addMergePersonToEs(applicant, patentId, projectId, "merge_applicat");
         }
         if (rightHolder != null && rightHolder.size() != 0) {
-            this.addMergePersonToEs(rightHolder,patentId,projectId,"merge_right_holder");
+            this.addMergePersonToEs(rightHolder, patentId, projectId, "merge_right_holder");
         }
         if (inventor != null && inventor.size() != 0) {
-            this.addMergePersonToEs(inventor,patentId,projectId,"merge_inventor");
+            this.addMergePersonToEs(inventor, patentId, projectId, "merge_inventor");
         }
     }
 
@@ -69,4 +69,34 @@ public class EsMergePersonService {
 
 
     }
+
+    public void addMergePersonToEs2(List<PatentMergePerson> patentMergePersons, String patentId, Integer projectId, String mergeType) {
+        if (patentMergePersons != null && patentMergePersons.size() != 0) {
+            patentMergePersons.forEach(item -> item.setProjectId(projectId.toString()));
+            Patent patent = new Patent();
+            if (patentMergePersons.size() != 0) {
+                switch (mergeType) {
+                    case "merge_applicant":
+                        patent.setMergeApplicant(patentMergePersons);
+                        break;
+                    case "merge_right_holder":
+                        patent.setMergeRightHolder(patentMergePersons);
+                        break;
+                    case "merge_inventor":
+                        patent.setMergeInventor(patentMergePersons);
+                        break;
+                }
+            }
+            PatentJoin patentJoin = new PatentJoin();
+            patentJoin.setParent(patentId);
+            patentJoin.setName(mergeType);
+            patent.setPatentJoin(patentJoin);
+            try {
+                esService.addChildPatent(patent, patentId);
+            } catch (Exception e) {
+            }
+        }
+
+
+    }
 }

+ 95 - 0
src/main/java/cn/cslg/pas/service/business/es/EsPatentService.java

@@ -1105,4 +1105,99 @@ public class EsPatentService {
         }
     }
 
+
+
+    //获取合并申请人
+    public  List<PatentMergePerson> getMergeApp2(Integer projectId, String id) throws IOException {
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent");
+        Query q1 = QueryBuilders.term(i -> i.field("merge_applicat.project_id").value(projectId));
+        Query exist1 = QueryBuilders.exists(i -> i.field("merge_applicat"));
+        Query bool = QueryBuilders.bool(i -> i.must(q1, exist1));
+        Query nested = QueryBuilders.nested(i -> i.path("merge_applicat").query(bool));
+        Query ids = QueryBuilders.ids(i -> i.values(Arrays.asList(id)));
+        Query query = QueryBuilders.hasParent(i -> i.parentType("patent").query(ids));
+        Query q = QueryBuilders.bool(i -> i.must(nested, query));
+        builder.query(q);
+        SearchResponse<Patent> response = null;
+        try {
+            response = client.search(builder.build(), Patent.class);
+        } catch (IOException e) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "ES检索失败");
+        }
+        List<Hit<Patent>> hits = response.hits().hits();
+        List<PatentMergePerson> list = new ArrayList<>();
+        for (Hit<Patent> hit : hits) {
+            Patent patent = hit.source();
+            if (!CollectionUtils.isEmpty(patent.getMergeApplicant())) {
+                list.addAll(patent.getMergeApplicant());
+            }
+        }
+
+        return list;
+    }
+
+    //获取合并权利人
+    public  List<PatentMergePerson> getMergeRight2(Integer projectId, String id) throws IOException {
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent");
+        Query q1 = QueryBuilders.term(i -> i.field("merge_right_holder.project_id").value(projectId));
+        Query exist1 = QueryBuilders.exists(i -> i.field("merge_right_holder"));
+        Query bool = QueryBuilders.bool(i -> i.must(q1, exist1));
+        Query nested = QueryBuilders.nested(i -> i.path("merge_right_holder").query(bool));
+        Query ids = QueryBuilders.ids(i -> i.values(Arrays.asList(id)));
+        Query query = QueryBuilders.hasParent(i -> i.parentType("patent").query(ids));
+        Query q = QueryBuilders.bool(i -> i.must(nested, query));
+        builder.query(q);
+        SearchResponse<Patent> response = null;
+        try {
+            response = client.search(builder.build(), Patent.class);
+        } catch (IOException e) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "ES检索失败");
+        }
+        List<Hit<Patent>> hits = response.hits().hits();
+        List<PatentMergePerson> list = new ArrayList<>();
+        for (Hit<Patent> hit : hits) {
+            Patent patent = hit.source();
+            if (!CollectionUtils.isEmpty(patent.getMergeRightHolder())) {
+                list.addAll(patent.getMergeRightHolder());
+            }
+        }
+
+        return list;
+    }
+
+    //获取合并发明人
+    public  List<PatentMergePerson> getMergeInventor2(Integer projectId, String id) throws IOException {
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent");
+        Query q1 = QueryBuilders.term(i -> i.field("merge_inventor.project_id").value(projectId));
+        Query exist1 = QueryBuilders.exists(i -> i.field("merge_inventor"));
+        Query bool = QueryBuilders.bool(i -> i.must(q1, exist1));
+        Query nested = QueryBuilders.nested(i -> i.path("merge_inventor").query(bool));
+        Query ids = QueryBuilders.ids(i -> i.values(Arrays.asList(id)));
+        Query query = QueryBuilders.hasParent(i -> i.parentType("patent").query(ids));
+        Query q = QueryBuilders.bool(i -> i.must(nested, query));
+        builder.query(q);
+        SearchResponse<Patent> response = null;
+        try {
+            response = client.search(builder.build(), Patent.class);
+        } catch (IOException e) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "ES检索失败");
+        }
+        List<Hit<Patent>> hits = response.hits().hits();
+        List<PatentMergePerson> list = new ArrayList<>();
+        for (Hit<Patent> hit : hits) {
+            Patent patent = hit.source();
+            if (!CollectionUtils.isEmpty(patent.getMergeInventor())) {
+                list.addAll(patent.getMergeInventor());
+            }
+        }
+        return list;
+    }
+
+
 }

+ 8 - 3
src/main/java/cn/cslg/pas/service/business/es/EsService.java

@@ -111,7 +111,7 @@ public class EsService {
      * @throws Exception
      */
     public PatentWithIdVO getIdByPatentNo(String patentNo) throws Exception {
-         String patentNo1 = patentNo.replace(" ", "");
+        String patentNo1 = patentNo.replace(" ", "");
         SearchRequest.Builder builder = new SearchRequest.Builder();
         //设置查询索引
         builder.index("patent");
@@ -173,6 +173,7 @@ public class EsService {
         }
         return patentWithIdVO;
     }
+
     /**
      * Es检索
      *
@@ -190,6 +191,8 @@ public class EsService {
         Long current = queryRequest.getCurrent();
         Long size = queryRequest.getSize();
         String groupField = queryRequest.getGroupField();
+        Long startNumber = queryRequest.getStartNumber();
+        Long endNumber = queryRequest.getEndNumber();
         //判断表达式
         if (queryRequest instanceof StringRequest) {
             searchCondition = ((StringRequest) queryRequest).getSearchQuery();
@@ -231,6 +234,8 @@ public class EsService {
         commonVO.setCustomFields(queryRequest.getCustomFields());
         commonVO.setOrderDTOList(queryRequest.getOrderDTOList());
         commonVO.setSemanteme(queryRequest.getSemanteme());
+        commonVO.setStartNum(startNumber);
+        commonVO.setEndNum(endNumber);
         SearchRequest.Builder builder = this.getCommonPatent(commonVO);
         //解除最大条数限制
         builder.trackTotalHits(i -> i.enabled(true));
@@ -250,9 +255,9 @@ public class EsService {
             total = response.hits().total().value();
         }
         for (Hit<Patent> hit : hits) {
-         Double score=   hit.score();
+            Double score = hit.score();
 
-            String  str = String.format("%.4f",score);
+            String str = String.format("%.4f", score);
             double four = Double.parseDouble(str);
             String id = hit.id();
             Patent esMess = hit.source();

+ 46 - 0
src/main/java/cn/cslg/pas/service/common/LoadService.java

@@ -0,0 +1,46 @@
+package cn.cslg.pas.service.common;
+
+
+import cn.cslg.pas.common.model.common.CommonVO;
+import cn.cslg.pas.common.model.cronModel.Personnel;
+import cn.cslg.pas.service.permissions.PermissionService;
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class LoadService {
+    @Autowired
+    private PermissionService permissionService;
+
+
+    public void loadCommonVO(List<? extends CommonVO> commonVOs) {
+        List<String> createIds = commonVOs.stream().filter(item->item.getCreateId()!=null).map(CommonVO::getCreateId).collect(Collectors.toList());
+        List<Personnel> personnels = new ArrayList<>();
+        //查询创建人名称
+        if (createIds != null&&createIds.size() != 0) {
+
+            try {
+             String   res = permissionService.getPersonnelByIdsFromPCS(createIds);
+                JSONObject jsonObject = JSONObject.parseObject(res);
+                personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+
+        }
+        for (CommonVO commonVO : commonVOs) {
+            String createId = commonVO.getCreateId();
+            Personnel personnel = personnels.stream().filter(item -> item.getId().equals(createId)).findFirst().orElse(null);
+            if (personnel != null) {
+                commonVO.setCreateName(personnel.getPersonnelName());
+            }
+        }
+    }
+
+}

+ 0 - 1
src/main/java/cn/cslg/pas/service/importPatent/SavePatentToEsThread.java

@@ -229,7 +229,6 @@ public class SavePatentToEsThread extends Thread {
                         esCustomFieldService.addCustomField(esCustomFieldDTO);
                     }
                 }
-
                 //导入完成,通知前台
                 taskThread.updateProcess(false, 1, "");
             } catch (Exception e) {

+ 279 - 0
src/main/java/cn/cslg/pas/service/project/CopyProjectService.java

@@ -0,0 +1,279 @@
+package cn.cslg.pas.service.project;
+
+import cn.cslg.pas.common.dto.PatentExport.PatentExportVO;
+import cn.cslg.pas.common.dto.business.PatentProjectDTO;
+import cn.cslg.pas.common.dto.business.ProjectEventDTO;
+import cn.cslg.pas.common.dto.business.ProjectTreesDTO;
+import cn.cslg.pas.common.dto.es.EsCustomFieldDTO;
+import cn.cslg.pas.common.dto.es.EsQueryPatentFieldsDTO;
+import cn.cslg.pas.common.dto.es.InnerFields;
+import cn.cslg.pas.common.model.addPatentToReport.PatentNoWithIdVO;
+import cn.cslg.pas.common.model.cronModel.SystemFile;
+import cn.cslg.pas.common.model.project.CopyProjectDTO;
+import cn.cslg.pas.common.vo.FieldValueVO;
+import cn.cslg.pas.common.vo.PatentWithIdVO;
+import cn.cslg.pas.common.vo.UploadParamsVO;
+import cn.cslg.pas.common.vo.business.AllCustomFieldVO;
+import cn.cslg.pas.common.vo.business.PatentProjectVO;
+import cn.cslg.pas.common.vo.es.EsPatentCommonVO;
+import cn.cslg.pas.common.vo.es.EsPatentFieldsVO;
+import cn.cslg.pas.common.vo.es.InnerPatentFieldsVO;
+import cn.cslg.pas.domain.es.Patent;
+import cn.cslg.pas.domain.es.PatentJoin;
+import cn.cslg.pas.domain.es.PatentMergePerson;
+import cn.cslg.pas.exception.ExceptionEnum;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.mapper.PatentProjectMapper;
+import cn.cslg.pas.service.business.CustomFieldService;
+import cn.cslg.pas.service.business.PatentProjectService;
+import cn.cslg.pas.service.business.es.EsCustomFieldService;
+import cn.cslg.pas.service.business.es.EsMergePersonService;
+import cn.cslg.pas.service.business.es.EsPatentService;
+import cn.cslg.pas.service.business.es.EsService;
+import co.elastic.clients.elasticsearch.ElasticsearchClient;
+import co.elastic.clients.elasticsearch.core.SearchRequest;
+import co.elastic.clients.elasticsearch.core.SearchResponse;
+import co.elastic.clients.elasticsearch.core.search.Hit;
+import lombok.Data;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class CopyProjectService {
+
+    private final EsCustomFieldService esCustomFieldService;
+
+    private final EsService esService;
+    private final ElasticsearchClient client;
+    private final EsPatentService esPatentService;
+    private final CustomFieldService customFieldService;
+    private final PatentProjectMapper patentProjectMapper;
+    private final PatentProjectService patentProjectService;
+    private final EsMergePersonService esMergePersonService;
+
+    public void copyPatentProjectAll(CopyProjectDTO copyProjectDTO) {
+        Integer projectId = copyProjectDTO.getProjectId();
+        EsPatentCommonVO esPatentCommonVO = new EsPatentCommonVO();
+        esPatentCommonVO.setProjectId(projectId);
+        esPatentCommonVO.setSearchCondition("");
+        esPatentCommonVO.setStartNum(1l);
+        esPatentCommonVO.setEndNum(2l);
+        esPatentCommonVO.setSemanteme("");
+        Long total = 0l;
+        Integer newProjectId = null;
+        newProjectId = this.copyPatentProject(projectId);
+        List<AllCustomFieldVO> customFieldVOS = customFieldService.getAllProjectCustomField(projectId);
+        List<InnerFields> innerFields = this.transforToInner(customFieldVOS);
+        EsQueryPatentFieldsDTO esQueryPatentFieldsDTO = new EsQueryPatentFieldsDTO();
+        esQueryPatentFieldsDTO.setProjectId(projectId);
+        esQueryPatentFieldsDTO.setInnerFields(innerFields);
+
+        try {
+            SearchRequest.Builder builder = esService.getCommonPatent(esPatentCommonVO);
+            builder.trackTotalHits(i -> i.enabled(true));
+            SearchResponse<Patent> response = null;
+            response = client.search(builder.build(), Patent.class);
+            List<Hit<Patent>> hits = response.hits().hits();
+            total = response.hits().total().value();
+
+            Long startIndex = 1l;
+            Long endIndex = 100l;
+            if (endIndex > total) {
+                endIndex = total;
+            }
+            while (startIndex <= total) {
+                esPatentCommonVO.setStartNum(startIndex);
+                esPatentCommonVO.setEndNum(endIndex);
+                builder = esService.getCommonPatent(esPatentCommonVO);
+                response = client.search(builder.build(), Patent.class);
+                hits = response.hits().hits();
+
+                for (Hit<Patent> hit : hits) {
+                    String id = hit.id();
+                    String patentNo = hit.source().getPatentNo();
+                    PatentNoWithIdVO patentWithIdVO = new PatentNoWithIdVO();
+                    patentWithIdVO.setId(hit.id());
+                    patentWithIdVO.setPatentNo(hit.source().getPatentNo());
+                    //保存专利关联
+                    this.savePatentProject(id, newProjectId);
+                    this.saveCustomField(id, patentNo, esQueryPatentFieldsDTO, projectId, newProjectId, customFieldVOS);
+                    this.saveMergePerson(hit.source(), id, projectId, newProjectId);
+                }
+                startIndex += 100l;
+                endIndex += 100l;
+                if (endIndex > total) {
+                    endIndex = total;
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    private void saveMergePerson(Patent patent, String patentId, Integer projectId, Integer newProjectId) {
+        try {
+//            List<PatentMergePerson> applicants = esPatentService.getMergeApp2(projectId, patentId);
+//            List<PatentMergePerson> rightHolders = esPatentService.getMergeRight2(projectId, patentId);
+//            List<PatentMergePerson> inventors = esPatentService.getMergeInventor2(projectId, patentId);
+//            esMergePersonService.addMergePersonToEs2(applicants, patentId, newProjectId, "merge_applicat");
+//            esMergePersonService.addMergePersonToEs2(rightHolders, patentId, newProjectId, "merge_right_holder");
+//            esMergePersonService.addMergePersonToEs2(inventors, patentId, newProjectId, "merge_inventor");
+            esMergePersonService.addDefaultMergePerson(patent, patentId, newProjectId);
+
+        } catch (Exception e) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "保存合并人员失败");
+        }
+
+    }
+
+    public void transTo() {
+
+    }
+
+    private void savePatentProject(String patentId, Integer projectId) {
+
+        Patent patentChild = new Patent();
+        PatentJoin patentJoin = new PatentJoin();
+        patentJoin.setParent(patentId);
+        patentJoin.setName("project");
+        patentChild.setPatentJoin(patentJoin);
+        patentChild.setProjectId(projectId);
+        try {
+            esService.addChildPatent(patentChild, patentId);
+        } catch (Exception e) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "保存专利错误");
+        }
+    }
+
+    private void saveCustomField(String patentId, String patentNo, EsQueryPatentFieldsDTO esQueryPatentFieldsDTO, Integer projectId, Integer newProjectId, List<AllCustomFieldVO> customFieldVOS) {
+
+        esQueryPatentFieldsDTO.setPatentNos(Arrays.asList(patentNo));
+        try {
+            List<EsPatentFieldsVO> esPatentFieldsVOS = esCustomFieldService.getPatentFields(esQueryPatentFieldsDTO);
+            EsPatentFieldsVO esPatentFieldsVO = esPatentFieldsVOS.get(0);
+            List<InnerPatentFieldsVO> innerClassFields = esPatentFieldsVO.getInnerClassFields();
+            List<UploadParamsVO.Field> fields = new ArrayList<>();
+            for (InnerPatentFieldsVO innerPatentFieldsVO : innerClassFields) {
+                List<FieldValueVO> fieldValueVOS = innerPatentFieldsVO.getFieldValueVOS();
+                if (fieldValueVOS != null && fieldValueVOS.size() > 0) {
+                    List<String> values = fieldValueVOS.stream().map(FieldValueVO::getValue).collect(Collectors.toList());
+                    String key = innerPatentFieldsVO.getField();
+                    AllCustomFieldVO customFieldVO = customFieldVOS.stream().filter(item -> item.getId().toString().equals(key)).findFirst().orElse(null);
+                    if (customFieldVO != null) {
+                        Integer type = innerPatentFieldsVO.getFieldType();
+                        if (type <= 6) {
+                            String finalKey = customFieldVO.getName() + ":" + type;
+
+                            UploadParamsVO.Field field = new UploadParamsVO.Field();
+                            field.setKey(finalKey);
+                            field.setFieldList(values);
+                            fields.add(field);
+                        }
+                    }
+                }
+
+            }
+            if (fields.size() > 0) {
+                List<EsCustomFieldDTO> esCustomFieldDTOList = customFieldService.getFieldDTOByStrings(fields, newProjectId, null);
+                for (EsCustomFieldDTO esCustomFieldDTO : esCustomFieldDTOList) {
+                    esCustomFieldDTO.setPatentId(patentId);
+                    esCustomFieldDTO.setOptionType(2);
+                    esCustomFieldDTO.setPatentNo(patentNo);
+                    if (esCustomFieldDTO.getFieldType() == null) {
+                        System.out.println(1);
+                    }
+                    esCustomFieldService.addCustomField(esCustomFieldDTO);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "保存自定义栏位错误");
+        }
+    }
+
+    private List<InnerFields> transforToInner(List<AllCustomFieldVO> customFieldVOS) {
+        List<InnerFields> innerFieldsList = new ArrayList<>();
+        for (AllCustomFieldVO allCustomFieldVO : customFieldVOS) {
+            InnerFields innerFields = new InnerFields();
+            innerFields.setFieldId(allCustomFieldVO.getId().toString());
+            innerFields.setFieldType(allCustomFieldVO.getType());
+            innerFieldsList.add(innerFields);
+        }
+        return innerFieldsList;
+    }
+
+    private Integer copyPatentProject(Integer targetId) {
+        List<String> sqls = new ArrayList<>();
+        sqls.add("id=" + targetId);
+        sqls.add("order by t.createTime desc");
+        sqls.add("limit 0,10");
+
+        List<PatentProjectVO> patentProjectVOS = patentProjectMapper.getPatentProject(sqls.get(0), sqls.get(1), sqls.get(2));
+        if (patentProjectVOS == null || patentProjectVOS.size() == 0) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "未找到专题库");
+        }
+        try {
+            patentProjectService.loadPatentProject(patentProjectVOS);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        PatentProjectVO patentProjectVO = patentProjectVOS.get(0);
+        PatentProjectDTO patentProjectDTO = this.transformToPatentProjectDTO(patentProjectVO);
+        Integer newProjectId = (Integer) patentProjectService.addMessage(patentProjectDTO);
+        return newProjectId;
+    }
+
+    public PatentProjectDTO transformToPatentProjectDTO(PatentProjectVO patentProjectVO) {
+        PatentProjectDTO patentProjectDTO = new PatentProjectDTO();
+        patentProjectDTO.setIfUpdate(patentProjectVO.getIfUpdate());
+        patentProjectDTO.setStatus(patentProjectVO.getStatus());
+        patentProjectDTO.setName(patentProjectVO.getName() + "-副本");
+        patentProjectDTO.setEntrustId(patentProjectVO.getEntrustId());
+        patentProjectDTO.setHeadId(patentProjectVO.getHeadId());
+        patentProjectDTO.setDepartmentId(patentProjectVO.getDepartmentId());
+        patentProjectDTO.setContractNo(patentProjectVO.getContractNo());
+        patentProjectDTO.setVolumeNumber(patentProjectVO.getVolumeNumber());
+        patentProjectDTO.setCommissionCaseDay(patentProjectVO.getCommissionCaseDay());
+        patentProjectDTO.setDescription(patentProjectVO.getDescription());
+        patentProjectDTO.setScenarioIds(patentProjectVO.getScenarioIds());
+        patentProjectDTO.setMatterIds(patentProjectVO.getMatterIds());
+        patentProjectDTO.setCrons(patentProjectVO.getCrons());
+        patentProjectDTO.setPersonId(patentProjectVO.getCreateId());
+        patentProjectDTO.setUpdateCycle(patentProjectVO.getUpdateCycle());
+        if (patentProjectVO.getSystemFileList() != null) {
+            List<String> fileGuids = patentProjectVO.getSystemFileList().stream().map(SystemFile::getGuid).collect(Collectors.toList());
+            patentProjectDTO.setFileGuids(fileGuids);
+        }
+        if (patentProjectVO.getEventIds() != null) {
+            List<ProjectEventDTO> projectEventDTOS = new ArrayList<>();
+            patentProjectVO.getEventIds().forEach(item -> {
+                ProjectEventDTO projectEventDTO = new ProjectEventDTO();
+                projectEventDTO.setEventId(item);
+                projectEventDTOS.add(projectEventDTO);
+            });
+            patentProjectDTO.setEvents(projectEventDTOS);
+        }
+        List<ProjectTreesDTO> projectTreesDTOS = new ArrayList<>();
+        if (patentProjectVO.getProductOrCategory() != null) {
+            ProjectTreesDTO projectTreesDTO = new ProjectTreesDTO();
+            projectTreesDTO.setTreeType(patentProjectVO.getProductOrCategory().getType());
+            projectTreesDTO.setValueIds(patentProjectVO.getProductOrCategory().getValueIds());
+            projectTreesDTO.setFieldId(patentProjectVO.getProductOrCategory().getId());
+            projectTreesDTOS.add(projectTreesDTO);
+            patentProjectDTO.setTrees(projectTreesDTOS);
+        }
+        return patentProjectDTO;
+
+    }
+}

+ 219 - 0
src/main/java/cn/cslg/pas/service/project/PatentStatusMonitorService.java

@@ -0,0 +1,219 @@
+package cn.cslg.pas.service.project;
+
+import cn.cslg.pas.common.core.base.Cycle;
+import cn.cslg.pas.common.dto.PatentColumnDTO;
+import cn.cslg.pas.common.dto.PatentDTO;
+import cn.cslg.pas.common.model.request.StringRequest;
+import cn.cslg.pas.common.patentProject.*;
+import cn.cslg.pas.common.utils.LoginUtils;
+import cn.cslg.pas.common.utils.StringUtils;
+import cn.cslg.pas.exception.ExceptionEnum;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.service.business.es.EsService;
+import cn.cslg.pas.service.common.LoadService;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.util.BeanUtils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import cn.cslg.pas.domain.project.PatentStatusMonitor;
+import cn.cslg.pas.mapper.project.PatentStatusMonitorMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author admin
+ * @description 针对表【patent_status_monitor(专利状态监控表)】的数据库操作Service实现
+ * @createDate 2025-11-04 11:39:14
+ */
+@Service
+public class PatentStatusMonitorService extends ServiceImpl<PatentStatusMonitorMapper, PatentStatusMonitor> {
+    @Autowired
+    private LoginUtils loginUtils;
+    @Autowired
+    private LoadService loadService;
+    @Autowired
+    private EsService esService;
+
+    public Integer add(PatentStatusMonitorAddDTO patentStatusMonitorAddDTO) {
+        Integer loginId = loginUtils.getId();
+        Integer maxSize = 50;
+        PatentStatusMonitor patentStatusMonitor = new PatentStatusMonitor();
+        List<String> isAdd = patentStatusMonitorAddDTO.getIsAdd();
+        List<String> isDelete = patentStatusMonitorAddDTO.getIsDelete();
+        Long startNumber = patentStatusMonitorAddDTO.getStartNumber();
+        Long endNumber = patentStatusMonitorAddDTO.getEndNumber();
+        String notifyCycle = patentStatusMonitorAddDTO.getNotifyCycle();
+        List<Integer> targetSSs = patentStatusMonitorAddDTO.getTargetSSs();
+        StringRequest stringRequest = patentStatusMonitorAddDTO.getStringRequest();
+        List<String> patentNos = new ArrayList<>();
+        Integer type = 0;
+        //判断是哪种监控
+        //检索式导入
+        if ((startNumber == null
+                || endNumber == null
+                || startNumber < endNumber)
+                && (isAdd == null || isAdd.size() == 0)
+                && (isDelete == null || isDelete.size() == 0)) {
+            type = 1;
+        } else {
+            type = 0;
+            try {
+                if (stringRequest != null) {
+                    stringRequest.setStartNumber(startNumber);
+                    stringRequest.setEndNumber(endNumber);
+                    PatentDTO patentDTO = esService.esSearch(stringRequest);
+                    List<PatentColumnDTO> patents = patentDTO.getPatents();
+                    patentNos = patents.stream().map(PatentColumnDTO::getPatentNo).collect(Collectors.toList());
+                }
+            } catch (Exception e) {
+                throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "专利检索错误");
+            }
+        }
+
+
+        if (isAdd != null && isAdd.size() > 0) {
+            patentNos.addAll(isAdd);
+        }
+        if (isDelete != null && isDelete.size() > 0) {
+            patentNos.retainAll(isDelete);
+        }
+
+        //当选择了范围,则证明是范围选择专利号,需要判断专利号数量
+        if (type == 0) {
+            if (patentNos.size() > maxSize) {
+                throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "选择专利数量不允许超过50");
+            }
+        }
+
+
+        this.check(notifyCycle);
+
+        if (isAdd != null && isAdd.size() > 0) {
+            String isAddStr = StringUtils.join(isAdd, ",");
+            patentStatusMonitor.setIsAdd(isAddStr);
+        }
+        if (patentNos != null && patentNos.size() > 0) {
+            String patentNosStr = StringUtils.join(patentNos, ",");
+            patentStatusMonitor.setIsAdd(patentNosStr);
+        }
+        if (isDelete != null && isDelete.size() > 0) {
+            String isDeleteStr = StringUtils.join(isDelete, ",");
+            patentStatusMonitor.setIsDelete(isDeleteStr);
+        }
+
+        if (targetSSs != null && targetSSs.size() > 0) {
+            String targetSSsStr = StringUtils.join(targetSSs, ",");
+            patentStatusMonitor.setTargetSss(targetSSsStr);
+        }
+        patentStatusMonitor.setCreateId(loginId.toString());
+        patentStatusMonitor.setEndNumber(endNumber);
+        patentStatusMonitor.setStartNumber(startNumber);
+        patentStatusMonitor.setNotifyCycle(notifyCycle);
+        patentStatusMonitor.setType(type);
+        if (stringRequest != null) {
+            String searchQuery = JSON.toJSONString(stringRequest);
+            patentStatusMonitor.setSearchQuery(searchQuery);
+        }
+        patentStatusMonitor.insert();
+        return patentStatusMonitor.getId();
+    }
+
+    public List<PatentStatusMonitorVO> query(PatentStatusMonitorQueryDTO patentStatusMonitorQueryDTO) {
+        Integer projectId = patentStatusMonitorQueryDTO.getProjectId();
+        Integer status = patentStatusMonitorQueryDTO.getStatus();
+        LambdaQueryWrapper<PatentStatusMonitor> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(PatentStatusMonitor::getProjectId, projectId);
+        if (status != null) {
+            queryWrapper.eq(PatentStatusMonitor::getStatus, status);
+        }
+        List<PatentStatusMonitor> patentStatusMonitors = this.list(queryWrapper);
+        List<PatentStatusMonitorVO> list = this.loadVo(patentStatusMonitors);
+        return list;
+    }
+
+    private List<PatentStatusMonitorVO> loadVo(List<PatentStatusMonitor> patentStatusMonitors) {
+        List<PatentStatusMonitorVO> patentStatusMonitorVOList = new ArrayList<>();
+        for (PatentStatusMonitor patentStatusMonitor : patentStatusMonitors) {
+            PatentStatusMonitorVO patentStatusMonitorVO = new PatentStatusMonitorVO();
+            patentStatusMonitorVO.setStatus(patentStatusMonitor.getStatus());
+            patentStatusMonitorVO.setEndNumber(patentStatusMonitor.getEndNumber());
+            patentStatusMonitorVO.setStartNumber(patentStatusMonitor.getStartNumber());
+            patentStatusMonitorVO.setCreateTime(patentStatusMonitor.getCreateTime());
+            String targetSss = patentStatusMonitor.getTargetSss();
+            String isAdd = patentStatusMonitor.getIsAdd();
+            String isDelete = patentStatusMonitor.getIsDelete();
+            if (targetSss != null && !targetSss.isEmpty()) {
+                List<Integer> targetSssList = StringUtils.changeStringToInteger(targetSss, ",");
+                patentStatusMonitorVO.setTargetSss(targetSssList);
+            }
+            if (isAdd != null && !isAdd.isEmpty()) {
+                List<String> isAddList = StringUtils.changeStringToString(isAdd, ",");
+                patentStatusMonitorVO.setIsAdd(isAddList);
+            }
+            if (isDelete != null && !isDelete.isEmpty()) {
+                List<Integer> targetSssList = StringUtils.changeStringToInteger(targetSss, ",");
+                patentStatusMonitorVO.setTargetSss(targetSssList);
+            }
+
+            patentStatusMonitorVOList.add(patentStatusMonitorVO);
+        }
+        if (patentStatusMonitorVOList.size() > 0) {
+            loadService.loadCommonVO(patentStatusMonitorVOList);
+        }
+        return patentStatusMonitorVOList;
+    }
+
+
+    public Integer updateMonitor(PatentStatusMonitorUpdateDTO patentStatusMonitorUpdateDTO) {
+        String targetSS = null;
+        Integer id = patentStatusMonitorUpdateDTO.getId();
+        List<Integer> targetSSs = patentStatusMonitorUpdateDTO.getTargetSSs();
+        String notifyCycle = patentStatusMonitorUpdateDTO.getNotifyCycle();
+        this.check(notifyCycle);
+        if (targetSSs != null && targetSSs.size() > 0) {
+            targetSS = StringUtils.join(targetSSs, ",");
+        }
+
+        LambdaUpdateWrapper<PatentStatusMonitor> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(PatentStatusMonitor::getTargetSss, targetSS)
+                .eq(PatentStatusMonitor::getId, id)
+                .set(PatentStatusMonitor::getNotifyCycle, notifyCycle);
+        return id;
+    }
+
+    public List<Integer> deleteMonitor(PatentStatusMonitorDeleteDTO patentStatusMonitorDeleteDTO) {
+        List<Integer> ids = patentStatusMonitorDeleteDTO.getIds();
+
+        this.removeBatchByIds(ids);
+        return ids;
+    }
+
+    private void check(String notifyCycle) {
+        if (notifyCycle == null ||
+                !notifyCycle.equals(Cycle.MONTH) ||
+                !notifyCycle.equals(Cycle.DAY) ||
+                !notifyCycle.equals(Cycle.QUARTER) ||
+                !notifyCycle.equals(Cycle.WEEK) ||
+                !notifyCycle.equals(Cycle.YEAR)) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "周期非法输入");
+        }
+
+    }
+
+    public List<PatentStatusMonitor> getAllRunning() {
+        LambdaQueryWrapper<PatentStatusMonitor> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(PatentStatusMonitor::getStatus, 1);
+        List<PatentStatusMonitor> patentStatusMonitors = this.list(queryWrapper);
+        return patentStatusMonitors;
+    }
+}
+
+
+
+

+ 114 - 0
src/main/java/cn/cslg/pas/service/quartzService/SysImportPatentStatusJobService.java

@@ -0,0 +1,114 @@
+package cn.cslg.pas.service.quartzService;
+
+import cn.cslg.pas.common.core.base.Cycle;
+import cn.cslg.pas.common.dto.PatentColumnDTO;
+import cn.cslg.pas.common.utils.DateUtils2;
+import cn.cslg.pas.common.utils.StringUtils;
+import cn.cslg.pas.common.utils.utilVO.CheckDateConditionVO;
+import cn.cslg.pas.common.vo.business.PatentNoVO;
+import cn.cslg.pas.domain.business.ImportTaskCondition;
+import cn.cslg.pas.domain.business.PatentProject;
+import cn.cslg.pas.domain.es.Patent;
+import cn.cslg.pas.domain.project.PatentStatusMonitor;
+import cn.cslg.pas.service.MailSendService;
+import cn.cslg.pas.service.business.ImportTaskConditionService;
+import cn.cslg.pas.service.business.ImportTaskService;
+import cn.cslg.pas.service.business.PatentProjectService;
+import cn.cslg.pas.service.business.es.EsPatentService;
+import cn.cslg.pas.service.project.PatentStatusMonitorService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.RequiredArgsConstructor;
+import org.quartz.DisallowConcurrentExecution;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+
+@DisallowConcurrentExecution
+@RequiredArgsConstructor
+@Service
+public class SysImportPatentStatusJobService extends QuartzJobBean {
+    private final MailSendService mailSendService;
+    private final PatentStatusMonitorService patentStatusMonitorService;
+    private final EsPatentService esPatentService;
+
+    @Override
+    public void executeInternal(JobExecutionContext context) throws JobExecutionException {
+
+        mailSendService.sendSysCycleStartEmail("系统专利状态监控开始");
+        this.monitorPatentStatus();
+
+    }
+
+
+    public void monitorPatentStatus() {
+        List<PatentStatusMonitor> patentStatusMonitors = patentStatusMonitorService.getAllRunning();
+        for (PatentStatusMonitor patentStatusMonitor : patentStatusMonitors) {
+            List<String> successNos = new ArrayList<>();
+            List<Map<String, Object>> errorNos = new ArrayList<>();
+            Integer type = patentStatusMonitor.getType();
+            if (type == 0) {
+                String patentNosStr = patentStatusMonitor.getPatentList();
+                List<String> patentNosList = StringUtils.changeStringToString(patentNosStr, ",");
+                for (String patentNo : patentNosList) {
+
+                }
+            }
+        }
+    }
+
+    public void addErrorMessage(String patentNos, String message, List<Map<String, Object>> errorNos) {
+        Map<String, Object> map = new HashMap<>();
+        map.put("patentNo", patentNos);
+        map.put("message", message);
+        errorNos.add(map);
+    }
+
+    public void updatePatentStatus(String patentNo, List<String> successNos, List<Map<String, Object>> errorNos) {
+        PatentNoVO patentNoVO = new PatentNoVO();
+        patentNoVO.setPatentNo(patentNo);
+        try {
+            PatentColumnDTO patentColumnDTO = esPatentService.selectPatentDetail(patentNoVO);
+            if (patentColumnDTO == null) {
+                return;
+            }
+        } catch (Exception e) {
+
+        }
+
+        //获取专利的法律状态
+        //获取专利最新的法律状态
+        //对比
+        //若有变化,对专利进行更新
+    }
+
+    public List<String> getCnCycles() {
+        CheckDateConditionVO checkDateConditionVO = DateUtils2.checkDateCycleCondition(null);
+        Boolean ifMeetMonth = checkDateConditionVO.getIfMeetMonth();
+        Boolean ifMeetQuarter = checkDateConditionVO.getIfMeetQuarter();
+        Boolean ifMeetYear = checkDateConditionVO.getIfMeetYear();
+        List<String> cycles = new ArrayList<>();
+        cycles.add(Cycle.WEEK);
+
+        if (ifMeetMonth != null && ifMeetMonth) {
+            cycles.add(Cycle.MONTH);
+        }
+        if (ifMeetQuarter != null && ifMeetQuarter) {
+            cycles.add(Cycle.QUARTER);
+        }
+        if (ifMeetYear != null && ifMeetYear) {
+            cycles.add(Cycle.YEAR);
+        }
+        return cycles;
+
+    }
+}
+
+

+ 28 - 27
src/main/resources/application-dev.yml

@@ -31,35 +31,36 @@ spring:
         exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
   quartz:
     #相关属性配置
-    #    properties:
-    #      org:
-    #        quartz:
-    #          scheduler:
-    #            instanceName: DefaultQuartzScheduler
-    #            instanceId: AUTO
-    #          jobStore:
-    #            class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
-    #            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
-    #            tablePrefix: QRTZ_
-    #            isClustered: false
-    #            clusterCheckinInterval: 10000
-    #            useProperties: false
-    #          threadPool:
-    #            class: org.quartz.simpl.SimpleThreadPool
-    #            threadCount: 10
-    #            threadPriority: 5
-    #            threadsInheritContextClassLoaderOfInitializingThread: true
-    #          dataSource:
-    #            default:
-    #              URL: jdbc:mysql://192.168.2.24:3306/pas_prod2?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8
-    #              user: root
-    #              password: rrzTwWAYX8Gxh5JH
-    #              driver: com.mysql.jdbc.Driver
+    properties:
+      org:
+        quartz:
+          scheduler:
+            instanceName: DefaultQuartzScheduler
+            instanceId: AUTO
+          jobStore:
+            class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
+            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
+            tablePrefix: QRTZ_
+            isClustered: false
+            clusterCheckinInterval: 10000
+            useProperties: false
+          threadPool:
+            class: org.quartz.simpl.SimpleThreadPool
+            threadCount: 10
+            threadPriority: 5
+            threadsInheritContextClassLoaderOfInitializingThread: true
+          dataSource:
+            default:
+              URL: jdbc:mysql://192.168.2.24:3306/pas_prod2?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8
+              user: root
+              password: rrzTwWAYX8Gxh5JH
+              driver: com.mysql.jdbc.Driver
 
     #数据库方式
-    job-store-type: memory
-    #初始化表结构
-
+    job-store-type: jdbc
+    #初始化表结构`
+    jdbc:
+      initialize-schema: never
 authorUrl: http://192.168.2.24:8871
 PCSUrl: http://192.168.2.24:8871
 #OPSUrl: http://192.168.2.24:5001

+ 48 - 16
src/main/resources/application-prodNetOut.yml

@@ -6,7 +6,7 @@ spring:
     password: 123456
   data:
     redis:
-      host: 139.224.34.118
+      host: 192.168.0.71
       port: 6379
       database: 3
       password: Xx0GWxdWQJxx6Swe
@@ -18,7 +18,7 @@ spring:
           max-wait: -1ms
       timeout: 2000ms
   datasource:
-    url: jdbc:mysql://139.224.34.118:3306/pas_prod2?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8
+    url: jdbc:mysql://192.168.0.71:3306/pas_prod2?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8
     username: root
     password: TU5x6IeBi7rl
     driver-class-name: com.mysql.cj.jdbc.Driver
@@ -29,29 +29,61 @@ spring:
         login-password: Cslg2022+
       web-stat-filter:
         exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
-authorUrl: http://47.116.194.135:8880
+  quartz:
+    #相关属性配置
+    properties:
+      org:
+        quartz:
+          scheduler:
+            instanceName: DefaultQuartzScheduler
+            instanceId: AUTO
+          jobStore:
+            class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
+            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
+            tablePrefix: QRTZ_
+            isClustered: false
+            clusterCheckinInterval: 10000
+            useProperties: false
+          threadPool:
+            class: org.quartz.simpl.SimpleThreadPool
+            threadCount: 10
+            threadPriority: 5
+            threadsInheritContextClassLoaderOfInitializingThread: true
+          dataSource:
+            default:
+              URL: jdbc:mysql://192.168.0.71:3306/pas_prod2?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8
+              user: root
+              password: TU5x6IeBi7rl
+              driver: com.mysql.jdbc.Driver
 
-PCSUrl: http://47.116.194.135:8880
+    #数据库方式
+    job-store-type: jdbc
+    #初始化表结构`
+    jdbc:
+      initialize-schema: never
+authorUrl: http://localhost:8880
+PCSUrl: http://localhost:8880
 #OPSUrl: http://192.168.1.24:5001
-OPSUrl: http://139.224.24.90:8880
-PASUrl: http://localhost:8877
-RMSUrl: http://localhost:8872
-FMSUrl: http://47.116.194.135:8803
+OPSUrl: http://139.224.24.90:5001
+PASUrl: http://localhost:8880
+FMSUrl: http://localhost:8803
 WDUrl: http://1.116.113.26:81
 PythonUrl: http://localhost:8001
-FileDownloadUrl: https://xsip.cn/api/fileManager/downloadFile?fileId=159766751baa4565a137bc3959f3b4a0
-FileSource: 3
+FileDownloadUrl: https://xsip.cn/api/fileManager/downloadFile?fileId=
+FileSource: 6
 ES:
-  patent: patent
-  config: es-cn-em93o8856000ho9e7.public.elasticsearch.aliyuncs.com
+  patentVector: patent_vector
+  patent: wxpatent
+  config: es-cn-em93o8856000ho9e7.elasticsearch.aliyuncs.com
 WDSYS:
   account: caiyangl
   password: Lqftiu807005
 DIFY:
-  apiKey: app-YfoUDlED4oJNO9hVk6hfdKSw
-  #  cliamKey: app-fxpiWOYqtJM1BOaJnG54NlCZ
+  apiKey: app-DDGJt4QUmzlc2aFQ5voOAXIj
+  cliamKey: app-fxpiWOYqtJM1BOaJnG54NlCZ
   OAApiKey: app-NvKwdHvEK2UmJdmjTGDR0xu6
   checkApiKey: aa
-  cliamKey: app-jF3akhYKgljPLdpeIpTNbs6f
   gInstructionKey: app-YfoUDlED4oJNO9hVk6hfdKSw
-  url: http://192.168.2.24/v1/
+  discoveryResultKey: app-ekzGTtvRnSq2aSqwZqKG5EH3
+  aiPatentResultKey: app-75tyEOkdvARTTaAjFm3K9sKn
+  url: https://ai.xsip.cn/v1/

+ 78 - 15
src/main/resources/application-testNetOut.yml

@@ -1,18 +1,24 @@
 spring:
-  redis:
-    host: 47.101.137.223
-    port: 6379
-    database: 3
-    password: Xx0GWxdWQJxx6Swe
-    lettuce:
-      pool:
-        max-active: 20
-        max-idle: 20
-        min-idle: 0
-        max-wait: -1ms
-    timeout: 2000ms
+  rabbitmq:
+    host: 139.224.34.118
+    port: 5672
+    username: admin
+    password: 123456
+  data:
+    redis:
+      host: 139.224.34.118
+      port: 6379
+      database: 3
+      password: Xx0GWxdWQJxx6Swe
+      lettuce:
+        pool:
+          max-active: 20
+          max-idle: 20
+          min-idle: 0
+          max-wait: -1ms
+      timeout: 2000ms
   datasource:
-    url: jdbc:mysql://47.101.137.223:3306/pas?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8
+    url: jdbc:mysql://139.224.34.118:3306/pas_prod2?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8
     username: root
     password: TU5x6IeBi7rl
     driver-class-name: com.mysql.cj.jdbc.Driver
@@ -20,7 +26,64 @@ spring:
     druid:
       stat-view-servlet:
         login-username: admin
-        login-password: 123456
+        login-password: Cslg2022+
       web-stat-filter:
         exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
-authorUrl: http://localhost:8871
+  quartz:
+    #相关属性配置
+    properties:
+      org:
+        quartz:
+          scheduler:
+            instanceName: DefaultQuartzScheduler
+            instanceId: AUTO
+          jobStore:
+            class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
+            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
+            tablePrefix: QRTZ_
+            isClustered: false
+            clusterCheckinInterval: 10000
+            useProperties: false
+          threadPool:
+            class: org.quartz.simpl.SimpleThreadPool
+            threadCount: 10
+            threadPriority: 5
+            threadsInheritContextClassLoaderOfInitializingThread: true
+          dataSource:
+            default:
+              URL: jdbc:mysql://139.224.34.118:3306/pas_prod2?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8
+              user: root
+              password: TU5x6IeBi7rl
+              driver: com.mysql.jdbc.Driver
+
+    #数据库方式
+    job-store-type: jdbc
+    #初始化表结构`
+    jdbc:
+      initialize-schema: never
+authorUrl: http://localhost:8880
+PCSUrl: http://localhost:8880
+#OPSUrl: http://192.168.1.24:5001
+OPSUrl: http://139.224.24.90:5001
+PASUrl: http://localhost:8880
+FMSUrl: http://localhost:8803
+WDUrl: http://1.116.113.26:81
+PythonUrl: http://localhost:8001
+FileDownloadUrl: https://xsip.cn/api/fileManager/downloadFile?fileId=
+FileSource: 6
+ES:
+  patentVector: patent_vector
+  patent: wxpatent
+  config: es-cn-em93o8856000ho9e7.elasticsearch.aliyuncs.com
+WDSYS:
+  account: caiyangl
+  password: Lqftiu807005
+DIFY:
+  apiKey: app-DDGJt4QUmzlc2aFQ5voOAXIj
+  cliamKey: app-fxpiWOYqtJM1BOaJnG54NlCZ
+  OAApiKey: app-NvKwdHvEK2UmJdmjTGDR0xu6
+  checkApiKey: aa
+  gInstructionKey: app-YfoUDlED4oJNO9hVk6hfdKSw
+  discoveryResultKey: app-ekzGTtvRnSq2aSqwZqKG5EH3
+  aiPatentResultKey: app-75tyEOkdvARTTaAjFm3K9sKn
+  url: https://ai.xsip.cn/v1/

+ 32 - 22
src/test/java/cn/cslg/pas/DifyTest.java

@@ -16,6 +16,7 @@ import cn.cslg.pas.service.dify.GenerateDiscoveryResultService;
 import cn.cslg.pas.service.dify.GenerateInstructionService;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson2.JSON;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.xssf.usermodel.XSSFCell;
 import org.apache.poi.xssf.usermodel.XSSFRow;
@@ -41,8 +42,9 @@ public class DifyTest {
     private GenerateInstructionService generateInstructionService;
     @Autowired
     private DifyService difyService;
- @Autowired
- private GenerateDiscoveryResultService generateDiscoveryResultService;
+    @Autowired
+    private GenerateDiscoveryResultService generateDiscoveryResultService;
+
     @Test
     public void checkFile() throws Exception {
 //        String path = "E:\\temfile\\poi\\test1.docx";
@@ -57,9 +59,17 @@ public class DifyTest {
 
     @Test
     public void checkFile1() throws Exception {
-        String text = "一种多功能汽车座舱,其特征在于,包括:\n地板机构;\n第一座椅机构,设置于所述地板机构,所述第一座椅机构用于作为驾驶舱供驾驶员进行驾驶操作;";
-        String a = text.replaceAll("\n", "");
-        System.out.println(a);
+        String a = "123";
+        String b = "456";
+        String c = "789";
+        List<String> list2 =new ArrayList<>();
+        list2.add(a);
+        list2.add(b);
+        list2.add(c);
+       String tem= StringUtils.join(list2, "\\");
+        String item = "a\\b\\c\\d";
+        List<String> list = cn.cslg.pas.common.utils.StringUtils.changeStringToString(tem, "\\\\");
+        System.out.println(list);
     }
 
     @Test
@@ -219,7 +229,7 @@ public class DifyTest {
 
     @Test
     public void TestWord() throws Exception {
-        Integer start=10;
+        Integer start = 10;
         String path = "E:\\20240716-工作记录文件\\功能文件\\小世系统\\20250310-技术交底书自动生成-lrj-v1\\question3.xlsx";
         // 打开Excel工作簿文件
         XSSFWorkbook workbook = new XSSFWorkbook(path);
@@ -230,13 +240,13 @@ public class DifyTest {
             XSSFRow row = sheet.getRow(i);
             XSSFCell cell1 = row.getCell(0);
             String value = cell1.getStringCellValue();
-            long a1 =System.currentTimeMillis();
+            long a1 = System.currentTimeMillis();
             String a = this.chatMessageGetOpt(value);
-            long b1 =System.currentTimeMillis();
+            long b1 = System.currentTimeMillis();
             XSSFCell xssfCell8 = row.createCell(start);
             xssfCell8.setCellValue(a);
-            XSSFCell xssfCell9 = row.createCell(start+1);
-            long overTime =(b1-a1)/1000;
+            XSSFCell xssfCell9 = row.createCell(start + 1);
+            long overTime = (b1 - a1) / 1000;
             xssfCell9.setCellValue(overTime);
         }
 
@@ -264,19 +274,19 @@ public class DifyTest {
         return answer;
     }
 
-@Test
-    public  void test3(){
-        String cleanText ="";
-    String a ="1.一种,13开发";
-    String regex = "[\u4e00-\u9fff]+";  // 匹配连续中文字符
-    Pattern pattern = Pattern.compile(regex);
-    Matcher matcher = pattern.matcher(a);
-    while (matcher.find()) {
-        cleanText=matcher.group();
-        break;
-    }
+    @Test
+    public void test3() {
+        String cleanText = "";
+        String a = "1.一种,13开发";
+        String regex = "[\u4e00-\u9fff]+";  // 匹配连续中文字符
+        Pattern pattern = Pattern.compile(regex);
+        Matcher matcher = pattern.matcher(a);
+        while (matcher.find()) {
+            cleanText = matcher.group();
+            break;
+        }
 
-      System.out.println(cleanText);
+        System.out.println(cleanText);
     }
 
 }

+ 29 - 0
src/test/java/cn/cslg/pas/service/project/PatentProjectServiceTests.java

@@ -0,0 +1,29 @@
+package cn.cslg.pas.service.project;
+
+import cn.cslg.pas.common.dto.DomainFieldDTO;
+import cn.cslg.pas.common.utils.GenerateObjectUtil;
+import cn.cslg.pas.domain.business.FollowUp;
+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 PatentProjectServiceTests {
+@Autowired
+private  CopyProjectService copyProjectService;
+
+
+    @Test
+    public void test() throws Exception {
+
+    }
+
+
+}

+ 6 - 0
src/test/java/cn/cslg/pas/test/QuartzTaskTests.java

@@ -1,5 +1,6 @@
 package cn.cslg.pas.test;
 
+import cn.cslg.pas.common.utils.FileUtils;
 import cn.cslg.pas.common.utils.GenerateObjectUtil;
 import cn.cslg.pas.controller.AvoidDesignController;
 import cn.cslg.pas.service.MailSendService;
@@ -26,6 +27,7 @@ public class QuartzTaskTests {
     private MailSendService mailSendService;
     @Autowired
     private SysImportPatentJobService sysImportPatentJobService;
+
     @Test
     public void testUpdate() {
         mailSendService.sendSysCycleStartEmail("任务查询专利报错,请管理员手动更正");
@@ -36,4 +38,8 @@ public class QuartzTaskTests {
     public void testUpdate2() {
         sysImportPatentJobService.addChinesePatent();
     }
+    @Test
+    public void test3(){
+        FileUtils.deleteFolder("D:\\PAS_nBase\\4feb04e4-877f-4786-8561-0a0ac5c544d6");
+    }
 }