Browse Source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/main/resources/jsons/patentProject.json
lwhhszx 1 year ago
parent
commit
85fbd688fe
25 changed files with 1234 additions and 1321 deletions
  1. 3 1
      src/main/java/cn/cslg/pas/common/dto/GetAllPersonDTO.java
  2. 20 15
      src/main/java/cn/cslg/pas/common/dto/PatentColumnDTO.java
  3. 4 0
      src/main/java/cn/cslg/pas/common/dto/PatentStarListDTO.java
  4. 1 0
      src/main/java/cn/cslg/pas/common/model/cronModel/Records.java
  5. 15 0
      src/main/java/cn/cslg/pas/common/vo/NoCacheVO.java
  6. 5 2
      src/main/java/cn/cslg/pas/common/vo/business/MergePersonAgainVO.java
  7. 32 0
      src/main/java/cn/cslg/pas/common/vo/business/MergePersonCommonVO.java
  8. 2 0
      src/main/java/cn/cslg/pas/common/vo/business/MergePersonVO.java
  9. 5 47
      src/main/java/cn/cslg/pas/controller/PatentController.java
  10. 12 2
      src/main/java/cn/cslg/pas/controller/outApi/PatentStarController.java
  11. 2 0
      src/main/java/cn/cslg/pas/domain/business/RetrieveRecord.java
  12. 1 1
      src/main/java/cn/cslg/pas/domain/es/Patent.java
  13. 6 0
      src/main/java/cn/cslg/pas/domain/es/PatentMergePerson.java
  14. 6 8
      src/main/java/cn/cslg/pas/factorys/EsCountAnalyseBuilderFactory/ChildNestedAnalyseBuilder.java
  15. 1 1
      src/main/java/cn/cslg/pas/factorys/WebQueryFactory/GetWebPatentNosQuery.java
  16. 7 3
      src/main/java/cn/cslg/pas/service/ReportExportService.java
  17. 736 1083
      src/main/java/cn/cslg/pas/service/business/MergePersonService.java
  18. 13 21
      src/main/java/cn/cslg/pas/service/business/es/EsCountService.java
  19. 1 1
      src/main/java/cn/cslg/pas/service/business/es/EsPatentService.java
  20. 5 52
      src/main/java/cn/cslg/pas/service/business/es/EsService.java
  21. 85 0
      src/main/java/cn/cslg/pas/service/common/NOSCacheService.java
  22. 114 52
      src/main/java/cn/cslg/pas/service/common/PatentStarApiService.java
  23. 2 1
      src/main/java/cn/cslg/pas/service/importPatent/GetPatentPictureFromWebThread.java
  24. 16 16
      src/main/resources/jsons/patent.json
  25. 140 15
      src/test/java/cn/cslg/pas/service/EventServiceTests.java

+ 3 - 1
src/main/java/cn/cslg/pas/common/dto/GetAllPersonDTO.java

@@ -21,10 +21,12 @@ public class GetAllPersonDTO {
 
 
     private String remark;
     private String remark;
 
 
+    private Integer projectId;
+
     //类型  0 申请人  1 权利人  2 发明人
     //类型  0 申请人  1 权利人  2 发明人
     private Integer type;
     private Integer type;
 
 
-    //合并标识
+    //合并标识id
     private Integer mergeId;
     private Integer mergeId;
 
 
 }
 }

+ 20 - 15
src/main/java/cn/cslg/pas/common/dto/PatentColumnDTO.java

@@ -48,7 +48,7 @@ public class PatentColumnDTO {
     /**
     /**
      * 申请人地址
      * 申请人地址
      */
      */
-    private PersonAddress applicantAddr;
+//    private PersonAddress applicantAddr;
 
 
     //申请人地址
     //申请人地址
     private String appAddress;
     private String appAddress;
@@ -61,6 +61,11 @@ public class PatentColumnDTO {
     //申请人县
     //申请人县
     private String appDistrict;
     private String appDistrict;
 
 
+    /**
+     * 权利人地址
+     */
+//    private PersonAddress rightHolderAddr;
+
     //权利人地址
     //权利人地址
     private String rightAddress;
     private String rightAddress;
     //权利人国家
     //权利人国家
@@ -73,11 +78,6 @@ public class PatentColumnDTO {
     private String rightDistrict;
     private String rightDistrict;
 
 
     /**
     /**
-     * 权利人地址
-     */
-    private PersonAddress rightHolderAddr;
-
-    /**
      * 审查员
      * 审查员
      */
      */
     private String examiner;
     private String examiner;
@@ -141,7 +141,7 @@ public class PatentColumnDTO {
     /**
     /**
      * 优先权
      * 优先权
      */
      */
-    private List<Priorities> priorities;
+//    private List<Priorities> priorities;
     private String priorityCountry;
     private String priorityCountry;
     private String priorityDate;
     private String priorityDate;
     private String priorityNo;
     private String priorityNo;
@@ -307,7 +307,7 @@ public class PatentColumnDTO {
     /**
     /**
      * 发明人数量
      * 发明人数量
      */
      */
-    private Integer inventor_num;
+    private Integer inventorNum;
 
 
     /**
     /**
      * 代理机构
      * 代理机构
@@ -337,7 +337,7 @@ public class PatentColumnDTO {
     /**
     /**
      * 自定义栏位
      * 自定义栏位
      */
      */
-    List<ESCustomField> ESCustomField;
+//    List<ESCustomField> ESCustomField;
     /**
     /**
      * 扩展同族数量
      * 扩展同族数量
      */
      */
@@ -373,29 +373,29 @@ public class PatentColumnDTO {
     /**
     /**
      * 专题库或报告id
      * 专题库或报告id
      */
      */
-    private String productId;
+//    private String productId;
 
 
     /**
     /**
      * 专题库或报告的任务
      * 专题库或报告的任务
      */
      */
-    EsProjectTask projectTask;
+//    EsProjectTask projectTask;
 
 
     /**
     /**
      * 导入任务
      * 导入任务
      */
      */
-    ESImportTask importTask;
+//    ESImportTask importTask;
 
 
     /**
     /**
      * 法律状态
      * 法律状态
      */
      */
-    List<String> legalStatus;
+//    List<String> legalStatus;
 
 
     /**
     /**
      * 标注
      * 标注
      */
      */
-    List<Marking> markings;
+//    List<Marking> markings;
 
 
-    PatentJoin patentJoin;
+//    PatentJoin patentJoin;
 
 
    private String pictureGuid;
    private String pictureGuid;
 
 
@@ -406,4 +406,9 @@ public class PatentColumnDTO {
 
 
     //外部专利的原始申请号
     //外部专利的原始申请号
     private String rowApplicationNo;
     private String rowApplicationNo;
+
+    //外部专利的查询条件的no
+    private String searchNo;
+    //外部专利的是否检索到
+    private Boolean ifSearch = true;
 }
 }

+ 4 - 0
src/main/java/cn/cslg/pas/common/dto/PatentStarListDTO.java

@@ -60,4 +60,8 @@ public class PatentStarListDTO {
 
 
     private List<String> nos;
     private List<String> nos;
 
 
+    private String numberQuery;
+
+    private String redisKey;
+
 }
 }

+ 1 - 0
src/main/java/cn/cslg/pas/common/model/cronModel/Records.java

@@ -12,4 +12,5 @@ public class Records {
     Long current;
     Long current;
     Long size;
     Long size;
     Integer retrieveRecordId;
     Integer retrieveRecordId;
+    String redisKey;
 }
 }

+ 15 - 0
src/main/java/cn/cslg/pas/common/vo/NoCacheVO.java

@@ -0,0 +1,15 @@
+package cn.cslg.pas.common.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class NoCacheVO {
+
+    private String key;
+
+    private List<String> list;
+
+    private Long total;
+}

+ 5 - 2
src/main/java/cn/cslg/pas/common/vo/business/MergePersonAgainVO.java

@@ -6,11 +6,14 @@ import java.util.List;
 
 
 @Data
 @Data
 public class MergePersonAgainVO {
 public class MergePersonAgainVO {
-    //已存在的合并后名称
+    //已合并后名称
     private List<String> needMergedName;
     private List<String> needMergedName;
-    //存在再次要合并的名称
+    //需要再次合并的名称
     private List<String> mergedName;
     private List<String> mergedName;
 
 
+    //id
+    private Integer id;
+
     private Integer projectId;
     private Integer projectId;
 
 
     private Integer type;
     private Integer type;

+ 32 - 0
src/main/java/cn/cslg/pas/common/vo/business/MergePersonCommonVO.java

@@ -0,0 +1,32 @@
+package cn.cslg.pas.common.vo.business;
+
+import cn.cslg.pas.common.dto.GetAllPersonDTO;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MergePersonCommonVO {
+    //id
+    private Integer id;
+    //专题库id
+    private Integer projectId;
+    //类型 0 申请人 1 权利人  2 发明人
+    private Integer type;
+    //名称
+    private String name;
+    //简称
+    private String abbreviation;
+    //地址国家
+    private String country;
+    //地址省份
+    private String province;
+    //地址
+    private String address;
+    //备注
+    private String remark;
+
+    private List<GetAllPersonDTO> mergePersonDTOS;
+
+    private List<GetAllPersonDTO> delMergePersonDTOS;
+}

+ 2 - 0
src/main/java/cn/cslg/pas/common/vo/business/MergePersonVO.java

@@ -49,4 +49,6 @@ public class MergePersonVO {
      * 备注
      * 备注
      */
      */
     private String remark;
     private String remark;
+
+    private List<String> delNames;
 }
 }

+ 5 - 47
src/main/java/cn/cslg/pas/controller/PatentController.java

@@ -41,6 +41,7 @@ import cn.cslg.pas.service.importPatent.ImportSinglePatentService;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.IdUtil;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Operation;
 import org.apache.commons.io.input.XmlStreamReaderException;
 import org.apache.commons.io.input.XmlStreamReaderException;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.io.InputStreamResource;
 import org.springframework.core.io.InputStreamResource;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpHeaders;
@@ -194,49 +195,18 @@ public class PatentController {
     }
     }
 
 
     //------------------------合并-----------------------------
     //------------------------合并-----------------------------
-    @Operation(summary = "专利列表上新增发明人/权利人/申请人合并")
-    @PostMapping("/mergePerson")
-    public Response mergePerson(@RequestBody MergePersonVO personVO) throws Exception {
+    @Operation(summary = "专利列表上新增或编辑发明人/权利人/申请人合并共享接口")
+    @PostMapping("/commonMerge")
+    public Response commonMerge(@RequestBody MergePersonCommonVO commonVO) throws Exception {
         Integer personId = null;
         Integer personId = null;
         try {
         try {
-            personId = mergePersonService.mergePerson(personVO);
+            personId = mergePersonService.commonMerge(commonVO);
         } catch (Exception e) {
         } catch (Exception e) {
             return Response.error(e.getMessage());
             return Response.error(e.getMessage());
         }
         }
         return Response.success(personId);
         return Response.success(personId);
     }
     }
 
 
-    @Operation(summary = "专利列表上再次新增发明人/权利人/申请人合并")
-    @PostMapping("/mergePersonAgain")
-    public Response mergePersonAgain(@RequestBody MergePersonAgainVO againVO) throws Exception {
-        Integer personId = null;
-        try {
-            personId = mergePersonService.mergePersonAgain(againVO);
-        } catch (Exception e) {
-            return Response.error(e.getMessage());
-        }
-        return Response.success(personId);
-    }
-
-    @Operation(summary = "专利列表上编辑发明人/权利人/申请人合并")
-    @PostMapping("/updateMergePerson")
-    public Response updateMergePerson(@RequestBody MergePersonVO personVO) throws Exception {
-        Integer personId = null;
-        try {
-            personId = mergePersonService.updateMergePerson(personVO);
-        } catch (Exception e) {
-            return Response.error(e.getMessage());
-        }
-        return Response.success(personId);
-    }
-
-    @Operation(summary = "发明人/权利人/申请人合并列表查询")
-    @PostMapping("/selectMergePerson")
-    public Response selectMergePerson(@RequestBody MergePersonQueryVO vo) {
-        Records records = mergePersonService.selectMergePersonList(vo);
-        return Response.success(records);
-    }
-
     @Operation(summary = "合并人员详情")
     @Operation(summary = "合并人员详情")
     @PostMapping("/selectMergePersonDetail")
     @PostMapping("/selectMergePersonDetail")
     public Response selectMergePersonDetail(@RequestBody MergePersonIdVO vo) {
     public Response selectMergePersonDetail(@RequestBody MergePersonIdVO vo) {
@@ -251,18 +221,6 @@ public class PatentController {
         return Response.success(records);
         return Response.success(records);
     }
     }
 
 
-    @Operation(summary = "发明人/权利人/申请人合并后的名称移除")
-    @PostMapping("/delMergedName")
-    public Response delMergedName(@RequestBody MergedNameVO vo) throws Exception {
-        Integer id = null;
-        try {
-            id = mergePersonService.delMergedName(vo);
-        } catch (Exception e) {
-            return Response.error(e.getMessage());
-        }
-        return Response.success(id);
-    }
-
     @Operation(summary = "发明人/权利人/申请人合并记录删除")
     @Operation(summary = "发明人/权利人/申请人合并记录删除")
     @PostMapping("/delMergePerson")
     @PostMapping("/delMergePerson")
     public Response delMergePerson(@RequestBody MergePersonIdVO vo) throws Exception {
     public Response delMergePerson(@RequestBody MergePersonIdVO vo) throws Exception {

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

@@ -33,7 +33,12 @@ public class PatentStarController {
     @PostMapping("/select")
     @PostMapping("/select")
     @Operation(summary = "一般检索接口")
     @Operation(summary = "一般检索接口")
     public Response select(@RequestBody PatentStarListDTO patentStarListDto) throws IOException {
     public Response select(@RequestBody PatentStarListDTO patentStarListDto) throws IOException {
-        Records records = patentStarApiService.patentStarSearchLocal(patentStarListDto);
+        Records records = null;
+        try {
+            records = patentStarApiService.patentStarSearchLocal(patentStarListDto);
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
+        }
         return Response.success(records);
         return Response.success(records);
     }
     }
 
 
@@ -109,7 +114,12 @@ public class PatentStarController {
     @Operation(summary = "查询外部专利详情")
     @Operation(summary = "查询外部专利详情")
     @PostMapping("/queryExternalDetail")
     @PostMapping("/queryExternalDetail")
     public Response queryExternalDetail(@RequestBody QueryExternalFamilyVO vo) throws Exception {
     public Response queryExternalDetail(@RequestBody QueryExternalFamilyVO vo) throws Exception {
-        PatentColumnDTO dto = patentStarApiService.queryExternalDetail(vo);
+        PatentColumnDTO dto = null;
+        try {
+            dto = patentStarApiService.queryExternalDetail(vo);
+        } catch (IOException e) {
+            return Response.error(e.getMessage());
+        }
         return Response.success(dto);
         return Response.success(dto);
     }
     }
 
 

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

@@ -23,6 +23,8 @@ public class RetrieveRecord extends BaseEntity<RetrieveRecord> {
     private String conditions;
     private String conditions;
     @TableField(value = "db_type")
     @TableField(value = "db_type")
     private String dbType;
     private String dbType;
+    @TableField(value = "search_type")
+    private Integer searchType;
     /**
     /**
      * 租户
      * 租户
      */
      */

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

@@ -313,7 +313,7 @@ public class Patent {
      * 发明人数量
      * 发明人数量
      */
      */
     @JsonProperty("inventor_num")
     @JsonProperty("inventor_num")
-    private Integer inventor_num;
+    private Integer inventorNum;
 
 
     /**
     /**
      * 代理机构
      * 代理机构

+ 6 - 0
src/main/java/cn/cslg/pas/domain/es/PatentMergePerson.java

@@ -26,4 +26,10 @@ public class PatentMergePerson {
      */
      */
     @JsonProperty("project_id")
     @JsonProperty("project_id")
     String projectId;
     String projectId;
+
+    @JsonProperty("if_merged")
+    Boolean ifMerged = false;
+
+    @JsonProperty("merged_num")
+    Integer mergedNum = 1;
 }
 }

+ 6 - 8
src/main/java/cn/cslg/pas/factorys/EsCountAnalyseBuilderFactory/ChildNestedAnalyseBuilder.java

@@ -39,19 +39,17 @@ public class ChildNestedAnalyseBuilder implements IEsCountAnalysisBuilder{
                 put("filter_agg", aggregation);
                 put("filter_agg", aggregation);
             }}).build();
             }}).build();
         } else if (!CollectionUtils.isEmpty(values)) {
         } else if (!CollectionUtils.isEmpty(values)) {
-            Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(q1)));
-            terms = new Aggregation.Builder().terms(new TermsAggregation.Builder()
-                    .field(field).include(j -> j.terms(values)).size(topN).build())
+            Aggregation aggregation = AggregationBuilders.terms(j -> j.field(field).include(n -> n.terms(values)).size(topN));
+            terms = new Aggregation.Builder().filter(i -> i.bool(j -> j.must(q1)))
                     .aggregations(new HashMap() {{
                     .aggregations(new HashMap() {{
-                        put("filter_agg", filter);
+                        put("filter_agg", aggregation);
                     }}).build();
                     }}).build();
         } else {
         } else {
             topN = topN + 1;
             topN = topN + 1;
-            Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(q1)));
-            terms = new Aggregation.Builder().terms(new TermsAggregation.Builder()
-                    .field(field).size(topN).build())
+            Aggregation aggregation = AggregationBuilders.terms(j -> j.field(field).size(topN));
+            terms = new Aggregation.Builder().filter(i -> i.bool(j -> j.must(q1)))
                     .aggregations(new HashMap() {{
                     .aggregations(new HashMap() {{
-                        put("filter_agg", filter);
+                        put("filter_agg", aggregation);
                     }}).build();
                     }}).build();
         }
         }
         Aggregation finalTerms = terms;
         Aggregation finalTerms = terms;

+ 1 - 1
src/main/java/cn/cslg/pas/factorys/WebQueryFactory/GetWebPatentNosQuery.java

@@ -13,7 +13,7 @@ import java.util.List;
 @Slf4j
 @Slf4j
 @Component
 @Component
 public class GetWebPatentNosQuery implements FormWebQueryFieldImp {
 public class GetWebPatentNosQuery implements FormWebQueryFieldImp {
-    private static List<String> fields = new ArrayList<String>(Arrays.asList("ANO", "GN", "PN", "PR"));
+    private static List<String> fields = new ArrayList<String>(Arrays.asList("ANO", "GN", "PN"));
 
 
     @Override
     @Override
     public String getWebQuery(WebQueryConfigVO webQueryConfigVO) {
     public String getWebQuery(WebQueryConfigVO webQueryConfigVO) {

+ 7 - 3
src/main/java/cn/cslg/pas/service/ReportExportService.java

@@ -468,9 +468,13 @@ public class ReportExportService {
 
 
 
 
                     //优先权日
                     //优先权日
-                    if (patent.getPriorities() != null && patent.getPriorities().size() != 0) {
-                        List<String> dates = patent.getPriorities().stream().map(Priorities::getPriorityDate).collect(Collectors.toList());
-                        String nosStr = StringUtils.join(dates, ";");
+//                    if (patent.getPriorities() != null && patent.getPriorities().size() != 0) {
+//                        List<String> dates = patent.getPriorities().stream().map(Priorities::getPriorityDate).collect(Collectors.toList());
+//                        String nosStr = StringUtils.join(dates, ";");
+//                        patentMap.put("priorityDate", nosStr);
+//                    }
+                    if (StringUtils.isNotEmpty(patent.getPriorityDate())) {
+                        String nosStr = patent.getPriorityDate().replace("<br>", ";");
                         patentMap.put("priorityDate", nosStr);
                         patentMap.put("priorityDate", nosStr);
                     }
                     }
 
 

File diff suppressed because it is too large
+ 736 - 1083
src/main/java/cn/cslg/pas/service/business/MergePersonService.java


+ 13 - 21
src/main/java/cn/cslg/pas/service/business/es/EsCountService.java

@@ -149,18 +149,6 @@ public class EsCountService {
             //3. 从es中检索数据
             //3. 从es中检索数据
             query = formatQueryService.EsQueryToQuery((operateNode) tree, "patent",projectId);
             query = formatQueryService.EsQueryToQuery((operateNode) tree, "patent",projectId);
             builder.query(query);
             builder.query(query);
-//            if (StringUtils.isNotEmpty(groupField) && !groupField.equals("0")) {
-//                String esField = esService.getGroupField(groupField);
-//                esGroupField = esField;
-//                Query existQ = QueryBuilders.exists(i -> i.field(esField));
-//                Query finalQuery = query;
-//                Query bool = QueryBuilders.bool(i -> i.must(finalQuery, existQ));
-//                builder.query(bool);
-//                FieldCollapse collapse = FieldCollapse.of(i -> i.field(esField));
-//                builder.collapse(collapse);
-//            } else {
-//                builder.query(query);
-//            }
         }
         }
         if (query != null) {
         if (query != null) {
             for (EsCountVO countVO : countVOS) {
             for (EsCountVO countVO : countVOS) {
@@ -444,6 +432,7 @@ public class EsCountService {
             }
             }
             if (countDetailDTOS.size() > topN) {
             if (countDetailDTOS.size() > topN) {
                 countDetailDTOS.remove(countDetailDTOS.size() - 1);
                 countDetailDTOS.remove(countDetailDTOS.size() - 1);
+                otherNum += 1;
             }
             }
 
 
             EsCountDetailDTO countDTO = new EsCountDetailDTO();
             EsCountDetailDTO countDTO = new EsCountDetailDTO();
@@ -455,7 +444,7 @@ public class EsCountService {
                 countDTO.setNumber(count + otherNum);
                 countDTO.setNumber(count + otherNum);
                 countDetailDTOS.add(countDTO);
                 countDetailDTOS.add(countDTO);
             }
             }
-            esCountDTO.setRemainingNum(count);
+            esCountDTO.setRemainingNum(count + otherNum);
         } else {
         } else {
             List<StringTermsBucket> list = agg.sterms().buckets().array();
             List<StringTermsBucket> list = agg.sterms().buckets().array();
             for (StringTermsBucket bucket : list) {
             for (StringTermsBucket bucket : list) {
@@ -481,6 +470,7 @@ public class EsCountService {
 
 
             if (countDetailDTOS.size() > topN) {
             if (countDetailDTOS.size() > topN) {
                 countDetailDTOS.remove(countDetailDTOS.size() - 1);
                 countDetailDTOS.remove(countDetailDTOS.size() - 1);
+                otherNum += 1;
             }
             }
 
 
             EsCountDetailDTO countDTO = new EsCountDetailDTO();
             EsCountDetailDTO countDTO = new EsCountDetailDTO();
@@ -492,7 +482,7 @@ public class EsCountService {
                 countDTO.setNumber(count + otherNum);
                 countDTO.setNumber(count + otherNum);
                 detailDTOS.add(countDTO);
                 detailDTOS.add(countDTO);
             }
             }
-            esCountDTO.setRemainingNum(count);
+            esCountDTO.setRemainingNum(count + otherNum);
         }
         }
 
 
 
 
@@ -1009,8 +999,8 @@ public class EsCountService {
                                    Map<String, List<EsCountDetailDTO>> map, List<String> values,String valueOne) {
                                    Map<String, List<EsCountDetailDTO>> map, List<String> values,String valueOne) {
         Aggregate termsAgg = agg.nested().aggregations().get("terms_agg");
         Aggregate termsAgg = agg.nested().aggregations().get("terms_agg");
         List<EsCountDetailDTO> countDetailDTOS = new ArrayList<>();
         List<EsCountDetailDTO> countDetailDTOS = new ArrayList<>();
-        long otherNum = 0l;
-        if (StringUtils.isNotEmpty(valueOne)) {
+        long otherNum = 0L;
+        if (StringUtils.isNotEmpty(valueOne) || nestChildList.contains(field)) {
             Aggregate filterAgg = termsAgg.filter().aggregations().get("filter_agg");
             Aggregate filterAgg = termsAgg.filter().aggregations().get("filter_agg");
             List<StringTermsBucket> list = filterAgg.sterms().buckets().array();
             List<StringTermsBucket> list = filterAgg.sterms().buckets().array();
             for (StringTermsBucket bucket : list) {
             for (StringTermsBucket bucket : list) {
@@ -1031,6 +1021,7 @@ public class EsCountService {
             }
             }
             if (countDetailDTOS.size() > topN) {
             if (countDetailDTOS.size() > topN) {
                 countDetailDTOS.remove(countDetailDTOS.size() - 1);
                 countDetailDTOS.remove(countDetailDTOS.size() - 1);
+                otherNum += 1;
             }
             }
 
 
             EsCountDetailDTO countDTO = new EsCountDetailDTO();
             EsCountDetailDTO countDTO = new EsCountDetailDTO();
@@ -1038,11 +1029,11 @@ public class EsCountService {
             countDTO.setName("其他");
             countDTO.setName("其他");
             countDTO.setTopN(topN);
             countDTO.setTopN(topN);
             Long count = filterAgg.sterms().sumOtherDocCount();
             Long count = filterAgg.sterms().sumOtherDocCount();
-            if (count > 0) {
+            if (count != null && count > 0) {
                 countDTO.setNumber(count + otherNum);
                 countDTO.setNumber(count + otherNum);
                 countDetailDTOS.add(countDTO);
                 countDetailDTOS.add(countDTO);
             }
             }
-            esCountDTO.setRemainingNum(count);
+            esCountDTO.setRemainingNum(count + otherNum);
         } else {
         } else {
             List<StringTermsBucket> list = termsAgg.sterms().buckets().array();
             List<StringTermsBucket> list = termsAgg.sterms().buckets().array();
             for (StringTermsBucket bucket : list) {
             for (StringTermsBucket bucket : list) {
@@ -1055,7 +1046,7 @@ public class EsCountService {
                     dto.setNumber(bucket.docCount());
                     dto.setNumber(bucket.docCount());
                     dto.setTopN(topN);
                     dto.setTopN(topN);
                     dto.setFirstName(firstName);
                     dto.setFirstName(firstName);
-                    if (aggregate != null) {
+                    if (aggregate != null && aggregate.filter().docCount() > 0) {
                         dto.setNumber(aggregate.filter().docCount());
                         dto.setNumber(aggregate.filter().docCount());
                     }
                     }
                     if (dto.getNumber() > 0) {
                     if (dto.getNumber() > 0) {
@@ -1068,6 +1059,7 @@ public class EsCountService {
 
 
             if (countDetailDTOS.size() > topN) {
             if (countDetailDTOS.size() > topN) {
                 countDetailDTOS.remove(countDetailDTOS.size() - 1);
                 countDetailDTOS.remove(countDetailDTOS.size() - 1);
+                otherNum += 1;
             }
             }
 
 
             EsCountDetailDTO countDTO = new EsCountDetailDTO();
             EsCountDetailDTO countDTO = new EsCountDetailDTO();
@@ -1075,11 +1067,11 @@ public class EsCountService {
             countDTO.setName("其他");
             countDTO.setName("其他");
             countDTO.setTopN(topN);
             countDTO.setTopN(topN);
             Long count = termsAgg.sterms().sumOtherDocCount();
             Long count = termsAgg.sterms().sumOtherDocCount();
-            if (count > 0) {
+            if (count != null && count > 0) {
                 countDTO.setNumber(count + otherNum);
                 countDTO.setNumber(count + otherNum);
                 countDetailDTOS.add(countDTO);
                 countDetailDTOS.add(countDTO);
             }
             }
-            esCountDTO.setRemainingNum(count);
+            esCountDTO.setRemainingNum(count + otherNum);
         }
         }
 
 
 
 

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

@@ -179,7 +179,7 @@ public class EsPatentService {
     public List<String> loadMergeName(List<PatentMergePerson> list) {
     public List<String> loadMergeName(List<PatentMergePerson> list) {
         List<String> collect = new ArrayList<>();
         List<String> collect = new ArrayList<>();
         if (!CollectionUtils.isEmpty(list)) {
         if (!CollectionUtils.isEmpty(list)) {
-            collect = list.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
+            collect = list.stream().map(PatentMergePerson::getName).distinct().collect(Collectors.toList());
         }
         }
         return collect;
         return collect;
     }
     }

+ 5 - 52
src/main/java/cn/cslg/pas/service/business/es/EsService.java

@@ -400,7 +400,11 @@ public class EsService {
             columnDTO.setPriorityNo(priorityNo);
             columnDTO.setPriorityNo(priorityNo);
             List<String> priorityDates = priorities.stream().map(Priorities::getPriorityDate).distinct().collect(Collectors.toList());
             List<String> priorityDates = priorities.stream().map(Priorities::getPriorityDate).distinct().collect(Collectors.toList());
             String priorityDate = String.join("<br>", priorityDates);
             String priorityDate = String.join("<br>", priorityDates);
-            columnDTO.setPriorityDate(priorityDate);
+            if (priorityDate.contains("null")) {
+                columnDTO.setPriorityDate("");
+            } else {
+                columnDTO.setPriorityDate(priorityDate);
+            }
         }
         }
         columnDTO.setApplicant(esPatentService.loadName(patent.getApplicant()));
         columnDTO.setApplicant(esPatentService.loadName(patent.getApplicant()));
         columnDTO.setRightHolder(esPatentService.loadName(patent.getRightHolder()));
         columnDTO.setRightHolder(esPatentService.loadName(patent.getRightHolder()));
@@ -1385,57 +1389,6 @@ public class EsService {
         return dto;
         return dto;
     }
     }
 
 
-    /**
-     * 更新合并申请人/权利人/发明人
-     *
-     * @param patent
-     * @param id
-     * @return
-     */
-    public Integer updateMergePerson(Patent patent, String id) {
-        UpdateRequest<Patent, Patent> req;
-        req = UpdateRequest.of(
-                b -> b.index("patent")
-                        .id(id)
-                        .doc(patent)
-                        .docAsUpsert(true)
-        );
-        try {
-            client.update(req, Patent.class);
-            return 1;
-        } catch (IOException e) {
-            return -1;
-        }
-    }
-
-    /**
-     * 删除申请人/权利人/发明人合并名称
-     *
-     * @param patent
-     * @param id
-     * @return
-     */
-    public Integer delMergePerson(Patent patent, String id, Integer type, String name) {
-        String source = "";
-        if (type == 0) {
-            source = "if (ctx._source.merge_applicant != null) { ctx._source.merge_applicant.removeIf(item -> item.name == params.name); } if (ctx._source.merge_right_holder  != null) { ctx._source.merge_right_holder .removeIf(item -> item.name == params.name); }";
-        } else {
-            source = "if (ctx._source.merge_inventor != null) { ctx._source.merge_inventor.removeIf(item -> item.name == params.name); }";
-        }
-        String finalSource = source;
-        InlineScript inlineScript = InlineScript.of(i -> i.lang("painless").params("name", JsonData.of(name)).source(finalSource));
-        Script script = Script.of(i -> i.inline(inlineScript));
-        Query query = QueryBuilders.term(i -> i.field("_id").value(id));
-        UpdateByQueryRequest request = UpdateByQueryRequest.of(i -> i.index("patent").script(script).query(query));
-        try {
-            client.updateByQuery(request);
-            return 1;
-        } catch (IOException e) {
-            return -1;
-        }
-    }
-
-
     public PatentFamilyMessageWithId queryPatentFamily(Patent patent, String type) throws Exception {
     public PatentFamilyMessageWithId queryPatentFamily(Patent patent, String type) throws Exception {
         //查询该专利是否已有同族
         //查询该专利是否已有同族
         SearchRequest.Builder builderPatent = new SearchRequest.Builder();
         SearchRequest.Builder builderPatent = new SearchRequest.Builder();

+ 85 - 0
src/main/java/cn/cslg/pas/service/common/NOSCacheService.java

@@ -0,0 +1,85 @@
+package cn.cslg.pas.service.common;
+
+import cn.cslg.pas.common.dto.PatentStarListDTO;
+import cn.cslg.pas.common.utils.RedisUtil;
+import cn.cslg.pas.common.utils.StringUtils;
+import cn.cslg.pas.common.vo.NoCacheVO;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.hutool.core.util.IdUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
+@RequiredArgsConstructor
+@Slf4j
+@Service
+public class NOSCacheService {
+
+    @Autowired
+    private RedisUtil redisUtil;
+
+    public NoCacheVO savaByList(PatentStarListDTO patentStarListDTO) {
+        NoCacheVO cacheVO = new NoCacheVO();
+        String[] noArray = patentStarListDTO.getNumberQuery().split("\\s+|[,,]|(\\r\\n)+|\\r+|\\n+");
+        cacheVO.setTotal((long) noArray.length);
+        if (patentStarListDTO.getDBType().equals("CN")) {
+            for (String s : noArray) {
+                if (s.length() < 9) {
+                    throw new XiaoShiException("中国专利号码检索式错误,每一个号码长度请大于9");
+                }
+            }
+        } else {
+            for (String s : noArray) {
+                if (s.length() < 8) {
+                    throw new XiaoShiException("世界专利号码检索式错误,每一个号码长度请大于9");
+                }
+            }
+        }
+        List<String> list = Arrays.asList(noArray);
+
+        //存redis
+        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
+        String now = format.format(new Date());
+        String uuid = IdUtil.randomUUID();
+        String redisKey = uuid + "-" + now;
+        cacheVO.setKey(redisKey);
+        redisUtil.lRightPushAll(redisKey, list);
+        redisUtil.expire(redisKey, 24, TimeUnit.HOURS);
+        Integer pageNum = patentStarListDTO.getPageNum();
+        Integer pageSize = patentStarListDTO.getRowCount();
+        Long len = redisUtil.lLen(redisKey);
+        cacheVO.setTotal(len);
+        List<String> ranges = redisUtil.lRange(redisKey, (long) (pageNum - 1) * pageSize, (long) pageNum * pageSize - 1);
+        String condition = "NO=(" + StringUtils.join(ranges, ",") +")";
+        patentStarListDTO.setCurrentQuery(condition);
+        cacheVO.setList(ranges);
+        return cacheVO;
+    }
+
+    public NoCacheVO getByList(PatentStarListDTO patentStarListDTO) {
+        String redisKey = patentStarListDTO.getRedisKey();
+        Integer pageNum = patentStarListDTO.getPageNum();
+        Integer pageSize = patentStarListDTO.getRowCount();
+        Long len = redisUtil.lLen(redisKey);
+        List<String> ranges = redisUtil.lRange(redisKey, (long) (pageNum - 1) * pageSize, (long) pageNum * pageSize - 1);
+        String condition = "";
+        if (!CollectionUtils.isEmpty(ranges)) {
+            condition = "NO=(" + StringUtils.join(ranges, ",") +")";
+        } else {
+            condition = "NO=(0)";
+        }
+        patentStarListDTO.setCurrentQuery(condition);
+        patentStarListDTO.setPageNum(1);
+        NoCacheVO cacheVO = new NoCacheVO();
+        cacheVO.setTotal(len);
+        cacheVO.setList(ranges);
+        cacheVO.setKey(patentStarListDTO.getRedisKey());
+        return cacheVO;
+    }
+}

+ 114 - 52
src/main/java/cn/cslg/pas/service/common/PatentStarApiService.java

@@ -10,16 +10,19 @@ import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.model.importTaskModel.PatentApplicant;
 import cn.cslg.pas.common.model.importTaskModel.PatentApplicant;
 import cn.cslg.pas.common.utils.*;
 import cn.cslg.pas.common.utils.*;
 import cn.cslg.pas.common.vo.ContentVO;
 import cn.cslg.pas.common.vo.ContentVO;
+import cn.cslg.pas.common.vo.NoCacheVO;
 import cn.cslg.pas.common.vo.QueryExternalFamilyVO;
 import cn.cslg.pas.common.vo.QueryExternalFamilyVO;
 import cn.cslg.pas.common.vo.StarPatentVO;
 import cn.cslg.pas.common.vo.StarPatentVO;
 import cn.cslg.pas.common.vo.business.PatentNoVO;
 import cn.cslg.pas.common.vo.business.PatentNoVO;
 import cn.cslg.pas.domain.WebLoginConfig;
 import cn.cslg.pas.domain.WebLoginConfig;
 import cn.cslg.pas.domain.business.RetrieveRecord;
 import cn.cslg.pas.domain.business.RetrieveRecord;
 import cn.cslg.pas.domain.es.*;
 import cn.cslg.pas.domain.es.*;
+import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.service.WebLoginConfigService;
 import cn.cslg.pas.service.WebLoginConfigService;
 
 
 
 
 import cn.cslg.pas.service.query.FormatQueryService;
 import cn.cslg.pas.service.query.FormatQueryService;
+import cn.hutool.core.util.IdUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
@@ -64,10 +67,7 @@ import java.util.stream.Collectors;
 @RequiredArgsConstructor
 @RequiredArgsConstructor
 @Slf4j
 @Slf4j
 @Service
 @Service
-
 public class PatentStarApiService {
 public class PatentStarApiService {
-    private ApplicationContext applicationContext;
-    private PatentStarApiService patentStarApiService;
     @Autowired
     @Autowired
     private RetrieveRecordService retrieveRecordService;
     private RetrieveRecordService retrieveRecordService;
     @Autowired
     @Autowired
@@ -78,22 +78,42 @@ public class PatentStarApiService {
     private WebLoginConfigService webLoginConfigService;
     private WebLoginConfigService webLoginConfigService;
     @Autowired
     @Autowired
     private FormatQueryService formatQueryService;
     private FormatQueryService formatQueryService;
+    @Autowired
+    private NOSCacheService cacheService;
 
 
     public Records patentStarSearchLocal(PatentStarListDTO patentStarListDTO) throws IOException {
     public Records patentStarSearchLocal(PatentStarListDTO patentStarListDTO) throws IOException {
         RetrieveRecord retrieveRecord = new RetrieveRecord();
         RetrieveRecord retrieveRecord = new RetrieveRecord();
         retrieveRecord.setConditions(patentStarListDTO.getCurrentQuery());
         retrieveRecord.setConditions(patentStarListDTO.getCurrentQuery());
-
+        retrieveRecord.setSearchType(0);
         if (patentStarListDTO.getRetrieveRecordId() != null) {
         if (patentStarListDTO.getRetrieveRecordId() != null) {
             retrieveRecord = retrieveRecordService.getById(patentStarListDTO.getRetrieveRecordId());
             retrieveRecord = retrieveRecordService.getById(patentStarListDTO.getRetrieveRecordId());
             patentStarListDTO.setCurrentQuery(retrieveRecord.getConditions());
             patentStarListDTO.setCurrentQuery(retrieveRecord.getConditions());
             patentStarListDTO.setDBType(retrieveRecord.getDbType());
             patentStarListDTO.setDBType(retrieveRecord.getDbType());
         }
         }
-    long start =    System.currentTimeMillis();
+
+        String redisKey = patentStarListDTO.getRedisKey();
+        List<String> nos = new ArrayList<>();
+        Long total = 0L;
+        if (StringUtils.isNotEmpty(patentStarListDTO.getNumberQuery())) {
+            NoCacheVO cacheVO = cacheService.savaByList(patentStarListDTO);
+            retrieveRecord.setConditions(patentStarListDTO.getNumberQuery());
+            retrieveRecord.setSearchType(1);
+            redisKey = cacheVO.getKey();
+            total = cacheVO.getTotal();
+            nos.addAll(cacheVO.getList());
+        }
+        if (Boolean.TRUE.equals(StringUtils.isEmpty(patentStarListDTO.getNumberQuery())) && StringUtils.isNotEmpty(redisKey)) {
+            NoCacheVO cacheVO = cacheService.getByList(patentStarListDTO);
+            retrieveRecord.setConditions(patentStarListDTO.getNumberQuery());
+            retrieveRecord.setSearchType(1);
+            nos.addAll(cacheVO.getList());
+            total = cacheVO.getTotal();
+            redisKey = cacheVO.getKey();
+        }
+
         Map<String, Object> map = this.patentStarSearchApi(patentStarListDTO);
         Map<String, Object> map = this.patentStarSearchApi(patentStarListDTO);
-long end =System.currentTimeMillis();
-System.out.println("search time:"+(end-start));
         if (map == null) {
         if (map == null) {
-            ThrowException.throwXiaoShiException("检索失败,请检查检索式");
+            throw new XiaoShiException("检索失败,请检查检索式");
         }
         }
 
 
         //记录检索历史
         //记录检索历史
@@ -117,12 +137,23 @@ System.out.println("search time:"+(end-start));
         records.setRetrieveRecordId(retrieveRecord.getId());
         records.setRetrieveRecordId(retrieveRecord.getId());
         records.setCurrent(Long.parseLong(map.get("current").toString()));
         records.setCurrent(Long.parseLong(map.get("current").toString()));
         records.setSize(Long.parseLong(map.get("size").toString()));
         records.setSize(Long.parseLong(map.get("size").toString()));
-        records.setData(this.loadPatent(starPatentVOS));
-        records.setTotal(Long.parseLong(map.get("total").toString()));
+        List<PatentColumnDTO> columnDTOS = this.loadPatent(starPatentVOS);
+        records.setData(this.loadPatentList(columnDTOS, nos, patentStarListDTO.getDBType()));
+        if (total != 0) {
+            records.setTotal(total);
+        } else {
+            records.setTotal(Long.parseLong(map.get("total").toString()));
+        }
+        records.setRedisKey(redisKey);
         return records;
         return records;
     }
     }
 
 
-
+    /**
+     * 格式化条件后并请求外部接口
+     * @param PatentStarListDTO
+     * @return
+     * @throws IOException
+     */
     public Map<String, Object> patentStarSearchApi(PatentStarListDTO PatentStarListDTO) throws IOException {
     public Map<String, Object> patentStarSearchApi(PatentStarListDTO PatentStarListDTO) throws IOException {
         try {
         try {
             if (PatentStarListDTO.getFormed() == null || PatentStarListDTO.getFormed() == false) {
             if (PatentStarListDTO.getFormed() == null || PatentStarListDTO.getFormed() == false) {
@@ -168,12 +199,7 @@ System.out.println("search time:"+(end-start));
         Request request = new Request.Builder().url(url).post(requestBody).build();
         Request request = new Request.Builder().url(url).post(requestBody).build();
         // 发送请求获取响应
         // 发送请求获取响应
         try {
         try {
-            long start =    System.currentTimeMillis();
-
             Response response = okHttpClient.newCall(request).execute();
             Response response = okHttpClient.newCall(request).execute();
-
-            long end =System.currentTimeMillis();
-            System.out.println("search11time:"+(end-start));
             // 判断请求是否成功
             // 判断请求是否成功
             if (response.isSuccessful()) {
             if (response.isSuccessful()) {
                 JSONObject jsonObject = JSONObject.parseObject(Objects.requireNonNull(response.body()).string());
                 JSONObject jsonObject = JSONObject.parseObject(Objects.requireNonNull(response.body()).string());
@@ -190,26 +216,70 @@ System.out.println("search time:"+(end-start));
                 return reMap;
                 return reMap;
             }
             }
         } catch (IOException e) {
         } catch (IOException e) {
-            e.printStackTrace();
-            return null;
+//            e.printStackTrace();
+//            return null;
+            throw new XiaoShiException("外部接口检索超时");
         }
         }
         return null;
         return null;
     }
     }
 
 
-    public String getFormatCondition(String condition) {
-        String s = condition.substring(condition.indexOf("=") + 1);
-        String s1 = s.replaceAll("[()]", "");
-        String[] valueStrs = s1.split("[,,]|(\\r\\n)+|\\r+|\\n+");
-        StringBuilder stringBuilder = new StringBuilder();
-        for (int i = 0; i < valueStrs.length; i++) {
-            final String value = valueStrs[i];
-            if (i != valueStrs.length - 1) {
-                stringBuilder.append(value).append(",");
-            } else {
-                stringBuilder.append(value);
+    //封装patent column数据返回
+    private List<PatentColumnDTO> loadPatentList(List<PatentColumnDTO> columnDTOS, List<String> list, String dbType) {
+        if (CollectionUtils.isEmpty(list) || CollectionUtils.isEmpty(columnDTOS)) {
+            return list.isEmpty() ? columnDTOS : createNewDTOs(list);
+        }
+
+        List<PatentColumnDTO> result = new ArrayList<>(columnDTOS.size());
+        Set<String> searchedNumbers = new HashSet<>(); // 用于跟踪已搜索的专利号
+
+        for (String patentNo : list) {
+            boolean found = false;
+            String formattedNo = dbType.equals("CN") ? PatentNoUtil.formatApNo(patentNo) : patentNo;
+
+            for (PatentColumnDTO columnDTO : columnDTOS) {
+                if (containsNumber(columnDTO, formattedNo)) {
+                    PatentColumnDTO dto = new PatentColumnDTO();
+                    BeanUtils.copyProperties(columnDTO,dto);
+                    dto.setSearchNo(patentNo);
+                    result.add(dto);
+                    searchedNumbers.add(patentNo); // 标记为已搜索
+                    found = true;
+                    break; // 找到匹配项后跳出内层循环
+                }
+            }
+
+            if (!found) {
+                // 如果没有在columnDTOS中找到匹配项,则创建一个新的DTO
+                PatentColumnDTO newDTO = new PatentColumnDTO();
+                newDTO.setPatentNo(patentNo);
+                newDTO.setSearchNo(patentNo);
+                newDTO.setIfSearch(false);
+                result.add(newDTO);
             }
             }
         }
         }
-        return stringBuilder.toString();
+
+        return result;
+    }
+
+    private boolean containsNumber(PatentColumnDTO dto, String number) {
+        String appNo = StringUtils.isNotEmpty(dto.getAppNo()) ? dto.getAppNo() : "";
+        String publicNo = StringUtils.isNotEmpty(dto.getPublicNo()) ? dto.getPublicNo() : "";
+        String grantNo = StringUtils.isNotEmpty(dto.getGrantNo()) ? dto.getGrantNo() : "";
+        String rowAppNo = StringUtils.isNotEmpty(dto.getRowApplicationNo()) ? dto.getRowApplicationNo() : "";
+        return appNo.contains(number) || publicNo.contains(number)
+                || grantNo.contains(number) || rowAppNo.contains(number);
+    }
+
+    private List<PatentColumnDTO> createNewDTOs(List<String> list) {
+        List<PatentColumnDTO> newDTOs = new ArrayList<>();
+        for (String s : list) {
+            PatentColumnDTO dto = new PatentColumnDTO();
+            dto.setPatentNo(s);
+            dto.setSearchNo(s);
+            dto.setIfSearch(false);
+            newDTOs.add(dto);
+        }
+        return newDTOs;
     }
     }
 
 
     public List<PatentStarListDTO> getSplitedConditions(PatentStarListDTO patentStarListDTO, int patentNum) throws IOException {
     public List<PatentStarListDTO> getSplitedConditions(PatentStarListDTO patentStarListDTO, int patentNum) throws IOException {
@@ -393,8 +463,7 @@ System.out.println("search time:"+(end-start));
             if (response.isSuccessful()) {
             if (response.isSuccessful()) {
                 // 打印服务端返回结果
                 // 打印服务端返回结果
                 return Objects.requireNonNull(response.body()).string();
                 return Objects.requireNonNull(response.body()).string();
-            }
-            else {
+            } else {
                 response.close();
                 response.close();
             }
             }
         } catch (IOException e) {
         } catch (IOException e) {
@@ -480,8 +549,7 @@ System.out.println("search time:"+(end-start));
             if (response.isSuccessful()) {
             if (response.isSuccessful()) {
                 // 打印服务端返回结果
                 // 打印服务端返回结果
                 return Objects.requireNonNull(response.body()).string();
                 return Objects.requireNonNull(response.body()).string();
-            }
-            else {
+            } else {
                 response.close();
                 response.close();
             }
             }
 
 
@@ -631,8 +699,7 @@ System.out.println("search time:"+(end-start));
             if (response.isSuccessful()) {
             if (response.isSuccessful()) {
                 // 打印服务端返回结果
                 // 打印服务端返回结果
                 return Objects.requireNonNull(response.body()).string();
                 return Objects.requireNonNull(response.body()).string();
-            }
-            else {
+            } else {
                 response.close();
                 response.close();
             }
             }
         } catch (IOException e) {
         } catch (IOException e) {
@@ -925,10 +992,6 @@ System.out.println("search time:"+(end-start));
             }
             }
 //            patentColumnDTO.setAppCountry(item.getBureau());
 //            patentColumnDTO.setAppCountry(item.getBureau());
             //装载申请人地址
             //装载申请人地址
-            PersonAddress appAddress = new PersonAddress();
-            appAddress.setAddress(item.getApplicationAddress());
-            appAddress.setProvince(item.getProvinceStr());
-            patentColumnDTO.setApplicantAddr(appAddress);
             patentColumnDTO.setAppAddress(item.getApplicationAddress());
             patentColumnDTO.setAppAddress(item.getApplicationAddress());
 //            patentColumnDTO.setApplicantCountry(item.getProvinceStr());
 //            patentColumnDTO.setApplicantCountry(item.getProvinceStr());
             String provinceStr = item.getProvinceStr();
             String provinceStr = item.getProvinceStr();
@@ -1199,21 +1262,20 @@ System.out.println("search time:"+(end-start));
                         dto.setType(0);
                         dto.setType(0);
                         list.add(dto);
                         list.add(dto);
                     }
                     }
-                }
-                else {  //若只有一个
+                } else {  //若只有一个
                     pdfUrl1 = pdfUrlStr.substring(pdfUrlStr.indexOf("http"));
                     pdfUrl1 = pdfUrlStr.substring(pdfUrlStr.indexOf("http"));
                     if (pdfUrl1.contains("0A_CN_0.pdf")) {
                     if (pdfUrl1.contains("0A_CN_0.pdf")) {
 
 
-                            InnerPatentPdfDTO dto = new InnerPatentPdfDTO();
-                            dto.setPdfGuid(pdfUrl1);
-                            dto.setType(0);
-                            list.add(dto);
+                        InnerPatentPdfDTO dto = new InnerPatentPdfDTO();
+                        dto.setPdfGuid(pdfUrl1);
+                        dto.setType(0);
+                        list.add(dto);
 
 
                     } else {
                     } else {
-                            InnerPatentPdfDTO dto = new InnerPatentPdfDTO();
-                            dto.setPdfGuid(pdfUrl1);
-                            dto.setType(1);
-                            list.add(dto);
+                        InnerPatentPdfDTO dto = new InnerPatentPdfDTO();
+                        dto.setPdfGuid(pdfUrl1);
+                        dto.setType(1);
+                        list.add(dto);
 
 
                     }
                     }
                 }
                 }
@@ -1221,11 +1283,11 @@ System.out.println("search time:"+(end-start));
         } else {
         } else {
             String usedPatentNo;
             String usedPatentNo;
             if (publicNo != null && !publicNo.equals("")) {
             if (publicNo != null && !publicNo.equals("")) {
-                usedPatentNo =publicNo;
+                usedPatentNo = publicNo;
             } else {
             } else {
                 usedPatentNo = grantNo;
                 usedPatentNo = grantNo;
             }
             }
-            if(usedPatentNo!=null){
+            if (usedPatentNo != null) {
                 pdfUrl = this.getEnPdfApi(usedPatentNo);
                 pdfUrl = this.getEnPdfApi(usedPatentNo);
                 if (!pdfUrl.equals("")) {
                 if (!pdfUrl.equals("")) {
                     InnerPatentPdfDTO dto = new InnerPatentPdfDTO();
                     InnerPatentPdfDTO dto = new InnerPatentPdfDTO();

+ 2 - 1
src/main/java/cn/cslg/pas/service/importPatent/GetPatentPictureFromWebThread.java

@@ -14,6 +14,7 @@ import cn.cslg.pas.service.common.PatentStarApiService;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.IdUtil;
 import org.apache.commons.fileupload.FileItem;
 import org.apache.commons.fileupload.FileItem;
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+import org.apache.commons.lang3.StringUtils;
 import org.dom4j.Document;
 import org.dom4j.Document;
 import org.dom4j.Element;
 import org.dom4j.Element;
 import org.dom4j.XPath;
 import org.dom4j.XPath;
@@ -58,7 +59,7 @@ public class GetPatentPictureFromWebThread extends Thread {
             UploadPatentWebDTO uploadPatentWebDTO = uploadPatentWebDTOs.remove(0);
             UploadPatentWebDTO uploadPatentWebDTO = uploadPatentWebDTOs.remove(0);
             try {
             try {
                 String usedNo = uploadPatentWebDTO.getStarPatentVO().getPublicNo();
                 String usedNo = uploadPatentWebDTO.getStarPatentVO().getPublicNo();
-                if (usedNo == null) {
+                if (StringUtils.isEmpty(usedNo)) {
                     usedNo = uploadPatentWebDTO.getStarPatentVO().getPublicAccreditNo();
                     usedNo = uploadPatentWebDTO.getStarPatentVO().getPublicAccreditNo();
                 }
                 }
                 if (usedNo.contains("CN")) {
                 if (usedNo.contains("CN")) {

+ 16 - 16
src/main/resources/jsons/patent.json

@@ -16,6 +16,22 @@
     "exportClass": "getCommonValue"
     "exportClass": "getCommonValue"
   },
   },
   {
   {
+    "name": "标题",
+    "type": "Object",
+    "value": "title",
+    "field": "TI",
+    "esField": "title.text_content",
+    "esClass": "matchPhaseQueryBuilder",
+    "ifSearch": "true",
+    "ifGroup": "true",
+    "ifShow": "true",
+    "ifAsCondition": "true",
+    "ifStats": "false",
+    "groupBy": "text",
+    "ifSort": "false",
+    "exportClass": "getTextContentValue"
+  },
+  {
     "name": "申请号",
     "name": "申请号",
     "type": "String",
     "type": "String",
     "value": "appNo",
     "value": "appNo",
@@ -155,22 +171,6 @@
     "exportClass": "getTextContentValue"
     "exportClass": "getTextContentValue"
   },
   },
   {
   {
-    "name": "标题",
-    "type": "Object",
-    "value": "title",
-    "field": "TI",
-    "esField": "title.text_content",
-    "esClass": "matchPhaseQueryBuilder",
-    "ifSearch": "true",
-    "ifGroup": "true",
-    "ifShow": "true",
-    "ifAsCondition": "true",
-    "ifStats": "false",
-    "groupBy": "text",
-    "ifSort": "false",
-    "exportClass": "getTextContentValue"
-  },
-  {
     "name": "申请人",
     "name": "申请人",
     "type": "Array",
     "type": "Array",
     "value": "applicant",
     "value": "applicant",

+ 140 - 15
src/test/java/cn/cslg/pas/service/EventServiceTests.java

@@ -8,6 +8,8 @@ import cn.cslg.pas.common.dto.es.EsCustomFieldDTO;
 import cn.cslg.pas.common.dto.es.EsCustomFieldValueDTO;
 import cn.cslg.pas.common.dto.es.EsCustomFieldValueDTO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.model.request.*;
 import cn.cslg.pas.common.model.request.*;
+import cn.cslg.pas.common.utils.DateUtils;
+import cn.cslg.pas.common.utils.PatentNoUtil;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.common.utils.StringUtils;
 import cn.cslg.pas.common.utils.StringUtils;
 import cn.cslg.pas.common.utils.parseQueryToTree.expressManager;
 import cn.cslg.pas.common.utils.parseQueryToTree.expressManager;
@@ -28,6 +30,7 @@ import cn.cslg.pas.service.business.es.*;
 import cn.cslg.pas.service.common.FileManagerService;
 import cn.cslg.pas.service.common.FileManagerService;
 import cn.cslg.pas.service.common.TranslateService;
 import cn.cslg.pas.service.common.TranslateService;
 import cn.cslg.pas.service.query.FormatQueryService;
 import cn.cslg.pas.service.query.FormatQueryService;
+import cn.hutool.core.util.IdUtil;
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
 import co.elastic.clients.elasticsearch._types.query_dsl.Query;
 import co.elastic.clients.elasticsearch._types.query_dsl.Query;
 import co.elastic.clients.elasticsearch.core.SearchRequest;
 import co.elastic.clients.elasticsearch.core.SearchRequest;
@@ -48,6 +51,7 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.*;
 import java.util.function.Function;
 import java.util.function.Function;
 import java.util.regex.Matcher;
 import java.util.regex.Matcher;
@@ -421,7 +425,7 @@ public class EventServiceTests {
         String id = "hy7ayIwB68vilgBjUWBz";
         String id = "hy7ayIwB68vilgBjUWBz";
         String name = "士大夫";
         String name = "士大夫";
         Integer type = 0;
         Integer type = 0;
-        esService.delMergePerson(patent, id, type, name);
+        mergePersonService.delMergePerson(patent, id, type, name);
     }
     }
 
 
     @Test
     @Test
@@ -626,12 +630,14 @@ public class EventServiceTests {
         int num = 2;
         int num = 2;
         String s = "CN202311743859.7,CN202311695772.7,CN202311695122.2,CN202380013186.1,CN202321985312.3,CN202321795870.3,CN202321466063.7,CN202321458147.6,CN202321047372.0,CN202321021503.8";
         String s = "CN202311743859.7,CN202311695772.7,CN202311695122.2,CN202380013186.1,CN202321985312.3,CN202321795870.3,CN202321466063.7,CN202321458147.6,CN202321047372.0,CN202321021503.8";
         String[] valueStrs = s.split("[,,]|(\\r\\n)+|\\r+|\\n+");
         String[] valueStrs = s.split("[,,]|(\\r\\n)+|\\r+|\\n+");
+        final String join = StringUtils.join(valueStrs, "|");
+        System.out.println(join);
         StringBuilder builder = new StringBuilder();
         StringBuilder builder = new StringBuilder();
         builder.append("NO").append("=").append("(");
         builder.append("NO").append("=").append("(");
         for (int i = (num-1)*size; i < (num*size); i++) {
         for (int i = (num-1)*size; i < (num*size); i++) {
             final String valueStr = valueStrs[i];
             final String valueStr = valueStrs[i];
             System.out.println(valueStr);
             System.out.println(valueStr);
-            if (i != valueStrs.length - 1) {
+            if (i != (num*size) - 1) {
                 builder.append(valueStr).append(",");
                 builder.append(valueStr).append(",");
             } else {
             } else {
                 builder.append(valueStr);
                 builder.append(valueStr);
@@ -639,18 +645,6 @@ public class EventServiceTests {
         }
         }
         final String s2 = builder.append(")").toString();
         final String s2 = builder.append(")").toString();
         System.out.println(s2);
         System.out.println(s2);
-        System.out.println("---------------------");
-        StringBuilder stringBuilder = new StringBuilder();
-        for (int i = 0; i < valueStrs.length; i++) {
-            final String value = valueStrs[i];
-            if (i != valueStrs.length - 1) {
-                stringBuilder.append(value).append("|");
-            } else {
-                stringBuilder.append(value);
-            }
-        }
-        final String s1 = stringBuilder.toString();
-        System.out.println(s1);
     }
     }
 
 
     @Test
     @Test
@@ -658,7 +652,7 @@ public class EventServiceTests {
 //        String s = condition.substring(condition.indexOf("=") + 1);
 //        String s = condition.substring(condition.indexOf("=") + 1);
 //        String s1 = s.replaceAll("[()]", "");
 //        String s1 = s.replaceAll("[()]", "");
 
 
-        int size = 4;
+        int size = 9;
         int num = 2;
         int num = 2;
         String s = "CN202311743859.7,CN202311695772.7,CN202311695122.2,CN202380013186.1,CN202321985312.3,CN202321795870.3,CN202321466063.7,CN202321458147.6,CN202321047372.0,CN202321021503.8";
         String s = "CN202311743859.7,CN202311695772.7,CN202311695122.2,CN202380013186.1,CN202321985312.3,CN202321795870.3,CN202321466063.7,CN202321458147.6,CN202321047372.0,CN202321021503.8";
         String[] valueStrs = s.split("[,,]|(\\r\\n)+|\\r+|\\n+");
         String[] valueStrs = s.split("[,,]|(\\r\\n)+|\\r+|\\n+");
@@ -676,4 +670,135 @@ public class EventServiceTests {
         final String s2 = builder.append(")").toString();
         final String s2 = builder.append(")").toString();
         System.out.println(s2);
         System.out.println(s2);
     }
     }
+
+    @Test
+    public void test110() {
+        String str = "351100A";
+        String no = PatentNoUtil.formatApNo(str);
+        System.out.println(no);
+        System.out.println("-------------------------");
+        List<String> list = new ArrayList<>(Arrays.asList("CN202380013186.1", "CN202380011991.0", "CN202380009147.4",
+                "CN118418408A","CN308771890S","FR351100A"));
+        List<String> list1 = new ArrayList<>();
+        list1.add("FR351100A");
+        list1.add("CN118418408A");
+        list1.add("CN202380013186.1");
+        for (String s : list) {
+            list1.removeIf(i -> i.equals(s));
+        }
+        list1.forEach(System.out::println);
+    }
+
+    @Test
+    public void test111() {
+        String input = "MINM=((\"li yao\" \"liu xiu\" \"liu yang\"))";
+
+        // 编写一个正则表达式来匹配 = 后面的双括号内的内容
+        // 注意:这里假设等号后面紧跟着的就是双括号,并且双括号内是我们想要提取的内容
+        String regex = "=\\(\\(([^)]*)\\)\\)";
+
+        // 编译正则表达式
+        Pattern pattern = Pattern.compile(regex);
+
+        // 创建matcher对象
+        Matcher matcher = pattern.matcher(input);
+        List<String> list = new ArrayList<>();
+        // 查找所有匹配项
+        while (matcher.find()) {
+            // 提取双括号中的内容
+            String content = matcher.group(1); // group(1) 是第一个捕获组,即括号内的内容
+            String[] noArray = content.split("\\s+|[,,]|(\\r\\n)+|\\r+|\\n+|or|OR");
+            list.addAll(Arrays.asList(noArray));
+        }
+        final List<String> collect = list.stream().filter(StringUtils::isNotEmpty).distinct().collect(Collectors.toList());
+        collect.stream().forEach(System.out::println);
+    }
+
+    @Test
+    public void test112() {
+        String input = "MINM=((\"li yao\" \"liu xiu\" \"liu yang\"))";
+
+        // 编写正则表达式来匹配 = 后面的双括号内的内容
+        String regex = "=\\(\\(([^)]*)\\)\\)";
+
+        // 编译正则表达式
+        Pattern pattern = Pattern.compile(regex);
+
+        // 创建matcher对象
+        Matcher matcher = pattern.matcher(input);
+
+        // 使用List来存储结果,因为数组的大小是固定的
+        List<String> values = new ArrayList<>();
+
+        // 查找所有匹配项
+        while (matcher.find()) {
+            // 提取双括号中的内容
+            String content = matcher.group(1);
+
+            // 将提取的内容添加到列表中
+            values.add(content);
+        }
+        List<String> list = new ArrayList<>();
+        List<String> collect = values.stream().filter(StringUtils::isNotEmpty).distinct().collect(Collectors.toList());
+        for (String s : collect) {
+            List<String> split = splitWithQuotes(s);
+            list.addAll(split);
+        }
+        List<String> list1 = new ArrayList<>();
+        for (String s : list) {
+            if (s.contains("\"")) {
+                String replace = s.replace("\"", "");
+                list1.add(replace);
+            } else {
+                list1.add(s);
+            }
+        }
+        List<String> collect1 = list1.stream().filter(StringUtils::isNotEmpty).distinct().collect(Collectors.toList());
+        collect1.forEach(System.out::println);
+    }
+
+    public static List<String> splitWithQuotes(String input) {
+        List<String> result = new ArrayList<>();
+        StringBuilder currentPart = new StringBuilder();
+        boolean inQuotes = false;
+
+        for (int i = 0; i < input.length(); i++) {
+            char c = input.charAt(i);
+
+            if (c == '"' || c == '\'') {
+                // 切换引号状态
+                inQuotes = !inQuotes;
+
+                // 如果我们不是在引号内,并且前面有内容,则添加当前部分到结果中
+                if (!inQuotes && currentPart.length() > 0) {
+                    result.add(currentPart.toString());
+                    currentPart.setLength(0); // 重置当前部分
+                }
+
+                // 引号内的字符直接添加到当前部分
+                currentPart.append(c);
+
+                // 如果引号后面紧跟着的是空格,并且我们刚刚离开了引号,则跳过这个空格
+                if (i + 1 < input.length() && input.charAt(i + 1) == ' ' && !inQuotes) {
+                    i++; // 跳过空格
+                }
+            } else if (c == ' ' && !inQuotes) {
+                // 如果我们在空格处且不在引号内,则添加当前部分到结果中,并重置当前部分
+                if (currentPart.length() > 0) {
+                    result.add(currentPart.toString());
+                    currentPart.setLength(0);
+                }
+            } else {
+                // 其他字符直接添加到当前部分
+                currentPart.append(c);
+            }
+        }
+
+        // 添加最后一个部分(如果有的话)
+        if (currentPart.length() > 0) {
+            result.add(currentPart.toString());
+        }
+        // 将List转换为数组
+        return result;
+    }
 }
 }