zero il y a 1 an
Parent
commit
2b589a94b9

+ 5 - 0
src/main/java/cn/cslg/pas/common/dto/PatentColumnDTO.java

@@ -406,4 +406,9 @@ public class PatentColumnDTO {
 
     //外部专利的原始申请号
     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 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 size;
     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;
+}

+ 6 - 1
src/main/java/cn/cslg/pas/controller/outApi/PatentStarController.java

@@ -33,7 +33,12 @@ public class PatentStarController {
     @PostMapping("/select")
     @Operation(summary = "一般检索接口")
     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);
     }
 

+ 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;
     @TableField(value = "db_type")
     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")
-    private Integer inventor_num;
+    private Integer inventorNum;
 
     /**
      * 代理机构

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

@@ -13,7 +13,7 @@ import java.util.List;
 @Slf4j
 @Component
 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
     public String getWebQuery(WebQueryConfigVO webQueryConfigVO) {

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

@@ -0,0 +1,147 @@
+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 org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
+@Service
+public class NOSCacheService {
+
+    @Autowired
+    private RedisUtil redisUtil;
+
+    public NoCacheVO savaByList(PatentStarListDTO patentStarListDTO) {
+        NoCacheVO cacheVO = new NoCacheVO();
+        String[] noArray = patentStarListDTO.getNumberQuery().split("[,,]|(\\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 = "NO=(" + StringUtils.join(ranges, ",") +")";
+        patentStarListDTO.setCurrentQuery(condition);
+        NoCacheVO cacheVO = new NoCacheVO();
+        cacheVO.setTotal(len);
+        cacheVO.setList(ranges);
+        cacheVO.setKey(patentStarListDTO.getRedisKey());
+        return cacheVO;
+    }
+
+    //处理NO并依照字符串形式存储条件到缓存中
+    public NoCacheVO saveByStr(PatentStarListDTO patentStarListDTO) {
+        NoCacheVO cacheVO = new NoCacheVO();
+        String[] noArray = patentStarListDTO.getNumberQuery().split("[,,]|(\\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");
+                }
+            }
+        }
+        String s = this.formatCondition(noArray, patentStarListDTO.getPageNum(), patentStarListDTO.getRowCount());
+        patentStarListDTO.setCurrentQuery(s);
+        cacheVO.setList(this.formatConditionList(s));
+
+        //存redis
+        String condition = StringUtils.join(noArray, ",");
+        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
+        String now = format.format(new Date());
+        String uuid = IdUtil.randomUUID();
+        String redisKey = uuid + "-" + now;
+        cacheVO.setKey(redisKey);
+        redisUtil.setEx(redisKey, condition, 24, TimeUnit.HOURS);
+        return cacheVO;
+    }
+
+    //根据缓存key取No条件并处理
+    public NoCacheVO getByStr(PatentStarListDTO patentStarListDTO) {
+        NoCacheVO cacheVO = new NoCacheVO();
+        String no = redisUtil.get(patentStarListDTO.getRedisKey());
+        String[] noArray = no.split("[,,]|(\\r\\n)+|\\r+|\\n+");
+        cacheVO.setTotal((long) noArray.length);
+        String s = this.formatCondition(noArray, patentStarListDTO.getPageNum(), patentStarListDTO.getRowCount());
+        patentStarListDTO.setCurrentQuery(s);
+        cacheVO.setKey(patentStarListDTO.getRedisKey());
+        cacheVO.setList(this.formatConditionList(s));
+        return cacheVO;
+    }
+
+    private List<String> formatConditionList(String condition) {
+        String s = condition.substring(condition.indexOf("=") + 1);
+        String s1 = s.replaceAll("[()]", "");
+        final String[] split = s1.split(",");
+        return new ArrayList<>(Arrays.asList(split));
+    }
+
+    private String formatCondition(String[] valueStrs, Integer pageNum, Integer pageSize) {
+        StringBuilder builder = new StringBuilder();
+        builder.append("NO").append("=").append("(");
+        if (valueStrs.length > pageSize) {
+            for (int i = (pageNum - 1) * pageSize; i < (pageNum * pageSize); i++) {
+                String valueStr = valueStrs[i];
+                if (i != valueStrs.length - 1) {
+                    builder.append(valueStr).append(",");
+                } else {
+                    builder.append(valueStr);
+                }
+            }
+        } else {
+            String join = StringUtils.join(valueStrs, ",");
+            builder.append(join);
+        }
+
+        return builder.append(")").toString();
+    }
+}

+ 164 - 42
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.utils.*;
 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.StarPatentVO;
 import cn.cslg.pas.common.vo.business.PatentNoVO;
 import cn.cslg.pas.domain.WebLoginConfig;
 import cn.cslg.pas.domain.business.RetrieveRecord;
 import cn.cslg.pas.domain.es.*;
+import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.service.WebLoginConfigService;
 
 
 import cn.cslg.pas.service.query.FormatQueryService;
+import cn.hutool.core.util.IdUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import lombok.RequiredArgsConstructor;
@@ -66,8 +69,6 @@ import java.util.stream.Collectors;
 @Service
 
 public class PatentStarApiService {
-    private ApplicationContext applicationContext;
-    private PatentStarApiService patentStarApiService;
     @Autowired
     private RetrieveRecordService retrieveRecordService;
     @Autowired
@@ -78,22 +79,43 @@ public class PatentStarApiService {
     private WebLoginConfigService webLoginConfigService;
     @Autowired
     private FormatQueryService formatQueryService;
+    @Autowired
+    private NOSCacheService cacheService;
 
     public Records patentStarSearchLocal(PatentStarListDTO patentStarListDTO) throws IOException {
         RetrieveRecord retrieveRecord = new RetrieveRecord();
         retrieveRecord.setConditions(patentStarListDTO.getCurrentQuery());
-
+        retrieveRecord.setSearchType(0);
         if (patentStarListDTO.getRetrieveRecordId() != null) {
             retrieveRecord = retrieveRecordService.getById(patentStarListDTO.getRetrieveRecordId());
             patentStarListDTO.setCurrentQuery(retrieveRecord.getConditions());
             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);
-long end =System.currentTimeMillis();
-System.out.println("search time:"+(end-start));
         if (map == null) {
             ThrowException.throwXiaoShiException("检索失败,请检查检索式");
+//            throw new XiaoShiException("检索失败,请检查检索式");
         }
 
         //记录检索历史
@@ -117,11 +139,121 @@ System.out.println("search time:"+(end-start));
         records.setRetrieveRecordId(retrieveRecord.getId());
         records.setCurrent(Long.parseLong(map.get("current").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;
     }
 
+    private List<PatentColumnDTO> loadPatentList(List<PatentColumnDTO> columnDTOS, List<String> list, String dbType) {
+        if (CollectionUtils.isEmpty(list) || CollectionUtils.isEmpty(columnDTOS)) {
+            // 如果任一列表为空,直接返回原始columnDTOS或根据list生成新的DTO列表
+            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 result;
+    }
+
+    private boolean containsNumber(PatentColumnDTO dto, String number) {
+        return dto.getAppNo().contains(number) || dto.getPublicNo().contains(number)
+                || dto.getGrantNo().contains(number) || dto.getRowApplicationNo().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;
+    }
+
+    /*private List<PatentColumnDTO> loadPatentList(List<PatentColumnDTO> columnDTOS, List<String> list, String dbType) {
+        List<String> noList = new ArrayList<>(list);
+        if (CollectionUtils.isEmpty(list)) {
+            return columnDTOS;
+        }
+        List<PatentColumnDTO> patentColumnDTOS = new ArrayList<>();
+        if (CollectionUtils.isEmpty(columnDTOS)) {
+            list.forEach(i -> {
+                PatentColumnDTO columnDTO = new PatentColumnDTO();
+                columnDTO.setPatentNo(i);
+                columnDTO.setSearchNo(i);
+                columnDTO.setIfSearch(false);
+                patentColumnDTOS.add(columnDTO);
+            });
+            return patentColumnDTOS;
+        }
+        list.forEach(i -> {
+            for (PatentColumnDTO columnDTO : columnDTOS) {
+                if (dbType.equals("CN")) {
+                    String no = PatentNoUtil.formatApNo(i);
+                    if (columnDTO.getAppNo().contains(no) || columnDTO.getPublicNo().contains(no)
+                            || columnDTO.getGrantNo().contains(no) || columnDTO.getRowApplicationNo().contains(no)) {
+                        columnDTO.setSearchNo(i);
+                        patentColumnDTOS.add(columnDTO);
+                    }
+                } else {
+                    if (columnDTO.getAppNo().contains(i) || columnDTO.getPublicNo().contains(i)
+                            || columnDTO.getGrantNo().contains(i) || columnDTO.getRowApplicationNo().contains(i)) {
+                        columnDTO.setSearchNo(i);
+                        patentColumnDTOS.add(columnDTO);
+                    }
+                }
+            }
+        });
+        List<String> collect = patentColumnDTOS.stream().map(PatentColumnDTO::getSearchNo).collect(Collectors.toList());
+        for (String key : collect) {
+            noList.removeIf(j -> j.equals(key));
+        }
+        if (!CollectionUtils.isEmpty(noList)) {
+            for (String s : noList) {
+                PatentColumnDTO columnDTO = new PatentColumnDTO();
+                columnDTO.setPatentNo(s);
+                columnDTO.setSearchNo(s);
+                columnDTO.setIfSearch(false);
+                patentColumnDTOS.add(columnDTO);
+            }
+        }
+        return patentColumnDTOS;
+    }*/
 
     public Map<String, Object> patentStarSearchApi(PatentStarListDTO PatentStarListDTO) throws IOException {
         try {
@@ -168,12 +300,7 @@ System.out.println("search time:"+(end-start));
         Request request = new Request.Builder().url(url).post(requestBody).build();
         // 发送请求获取响应
         try {
-            long start =    System.currentTimeMillis();
-
             Response response = okHttpClient.newCall(request).execute();
-
-            long end =System.currentTimeMillis();
-            System.out.println("search11time:"+(end-start));
             // 判断请求是否成功
             if (response.isSuccessful()) {
                 JSONObject jsonObject = JSONObject.parseObject(Objects.requireNonNull(response.body()).string());
@@ -192,24 +319,23 @@ System.out.println("search time:"+(end-start));
         } catch (IOException e) {
             e.printStackTrace();
             return null;
+//            throw new XiaoShiException("外部接口检索超时");
         }
         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(",");
+    private String formatCondition(String[] valueStrs, Integer pageNum, Integer pageSize) {
+        StringBuilder builder = new StringBuilder();
+        builder.append("NO").append("=").append("(");
+        for (int i = (pageNum - 1) * pageSize; i < (pageNum * pageSize); i++) {
+            String valueStr = valueStrs[i];
+            if (i != (pageNum * pageSize) - 1) {
+                builder.append(valueStr).append(",");
             } else {
-                stringBuilder.append(value);
+                builder.append(valueStr);
             }
         }
-        return stringBuilder.toString();
+        return builder.append(")").toString();
     }
 
     public List<PatentStarListDTO> getSplitedConditions(PatentStarListDTO patentStarListDTO, int patentNum) throws IOException {
@@ -393,8 +519,7 @@ System.out.println("search time:"+(end-start));
             if (response.isSuccessful()) {
                 // 打印服务端返回结果
                 return Objects.requireNonNull(response.body()).string();
-            }
-            else {
+            } else {
                 response.close();
             }
         } catch (IOException e) {
@@ -480,8 +605,7 @@ System.out.println("search time:"+(end-start));
             if (response.isSuccessful()) {
                 // 打印服务端返回结果
                 return Objects.requireNonNull(response.body()).string();
-            }
-            else {
+            } else {
                 response.close();
             }
 
@@ -631,8 +755,7 @@ System.out.println("search time:"+(end-start));
             if (response.isSuccessful()) {
                 // 打印服务端返回结果
                 return Objects.requireNonNull(response.body()).string();
-            }
-            else {
+            } else {
                 response.close();
             }
         } catch (IOException e) {
@@ -1199,21 +1322,20 @@ System.out.println("search time:"+(end-start));
                         dto.setType(0);
                         list.add(dto);
                     }
-                }
-                else {  //若只有一个
+                } else {  //若只有一个
                     pdfUrl1 = pdfUrlStr.substring(pdfUrlStr.indexOf("http"));
                     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 {
-                            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 +1343,11 @@ System.out.println("search time:"+(end-start));
         } else {
             String usedPatentNo;
             if (publicNo != null && !publicNo.equals("")) {
-                usedPatentNo =publicNo;
+                usedPatentNo = publicNo;
             } else {
                 usedPatentNo = grantNo;
             }
-            if(usedPatentNo!=null){
+            if (usedPatentNo != null) {
                 pdfUrl = this.getEnPdfApi(usedPatentNo);
                 if (!pdfUrl.equals("")) {
                     InnerPatentPdfDTO dto = new InnerPatentPdfDTO();

+ 28 - 14
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.model.cronModel.Records;
 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.StringUtils;
 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.TranslateService;
 import cn.cslg.pas.service.query.FormatQueryService;
+import cn.hutool.core.util.IdUtil;
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
 import co.elastic.clients.elasticsearch._types.query_dsl.Query;
 import co.elastic.clients.elasticsearch.core.SearchRequest;
@@ -48,6 +51,7 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.function.Function;
 import java.util.regex.Matcher;
@@ -626,12 +630,14 @@ public class EventServiceTests {
         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[] valueStrs = s.split("[,,]|(\\r\\n)+|\\r+|\\n+");
+        final String join = StringUtils.join(valueStrs, "|");
+        System.out.println(join);
         StringBuilder builder = new StringBuilder();
         builder.append("NO").append("=").append("(");
         for (int i = (num-1)*size; i < (num*size); i++) {
             final String valueStr = valueStrs[i];
             System.out.println(valueStr);
-            if (i != valueStrs.length - 1) {
+            if (i != (num*size) - 1) {
                 builder.append(valueStr).append(",");
             } else {
                 builder.append(valueStr);
@@ -639,18 +645,6 @@ public class EventServiceTests {
         }
         final String s2 = builder.append(")").toString();
         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
@@ -658,7 +652,7 @@ public class EventServiceTests {
 //        String s = condition.substring(condition.indexOf("=") + 1);
 //        String s1 = s.replaceAll("[()]", "");
 
-        int size = 4;
+        int size = 9;
         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[] valueStrs = s.split("[,,]|(\\r\\n)+|\\r+|\\n+");
@@ -676,4 +670,24 @@ public class EventServiceTests {
         final String s2 = builder.append(")").toString();
         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);
+
+
+    }
 }