lwhhszx 1 год назад
Родитель
Сommit
274e68dfc1

+ 11 - 0
src/main/java/com/example/xiaoshiweixinback/domain/es/PatentVector.java

@@ -28,4 +28,15 @@ public class PatentVector {
      */
     @JsonProperty("title")
     private List<Text> title;
+
+    @JsonProperty("image_index")
+    private Integer imageIndex;
+
+    @JsonProperty("guid")
+    private String guid;
+
+    @JsonProperty("my_vector")
+    private List<Float> myVector;
+
+
 }

+ 17 - 0
src/main/java/com/example/xiaoshiweixinback/entity/dto/patent/PatentDTO.java

@@ -0,0 +1,17 @@
+package com.example.xiaoshiweixinback.entity.dto.patent;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PatentDTO {
+
+    private Long total;
+
+    private Long pageNum;
+
+    private Long pageSize;
+
+    private List<PatentColumnDTO> patents;
+}

+ 13 - 0
src/main/java/com/example/xiaoshiweixinback/entity/patent/MapRequest.java

@@ -0,0 +1,13 @@
+package com.example.xiaoshiweixinback.entity.patent;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.Map;
+
+@Data
+@Accessors(chain = true)
+public class MapRequest extends QueryRequest{
+  private Map<String,Object> searchQuery;
+
+}

+ 25 - 0
src/main/java/com/example/xiaoshiweixinback/entity/patent/QueryRequest.java

@@ -0,0 +1,25 @@
+ package com.example.xiaoshiweixinback.entity.patent;
+
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+public class QueryRequest {
+    private Long current;
+    private Long size;
+    private String groupField;
+    private String groupFieldValue;
+    private Integer projectId;
+    private Integer taskId;
+    private List<String> patentNos;
+    //商品化专利
+    private Integer productId;
+    //商品化专利标识
+    private String from;
+    //专利详情中商品化专用ids
+    private List<Integer> productIds;
+}

+ 10 - 0
src/main/java/com/example/xiaoshiweixinback/entity/patent/StringRequest.java

@@ -0,0 +1,10 @@
+package com.example.xiaoshiweixinback.entity.patent;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+public class StringRequest extends QueryRequest{
+  private String searchQuery;
+}

+ 25 - 0
src/main/java/com/example/xiaoshiweixinback/service/PatentService.java

@@ -0,0 +1,25 @@
+package com.example.xiaoshiweixinback.service;
+
+
+import com.example.xiaoshiweixinback.business.common.base.Records;
+import com.example.xiaoshiweixinback.entity.dto.patent.PatentDTO;
+import com.example.xiaoshiweixinback.entity.patent.QueryRequest;
+import com.example.xiaoshiweixinback.service.importPatent.EsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class PatentService {
+    @Autowired
+    private EsService esService;
+    public Object queryMessage(QueryRequest queryRequest) throws Exception {
+        PatentDTO patentDTO = esService.esSearch(queryRequest);
+        Records records = new Records();
+        records.setCurrent(queryRequest.getCurrent());
+        records.setSize(queryRequest.getSize());
+        records.setData(patentDTO.getPatents());
+        records.setTotal(patentDTO.getTotal());
+        return records;
+    }
+
+}

+ 0 - 1
src/main/java/com/example/xiaoshiweixinback/service/common/FileManagerService.java

@@ -167,7 +167,6 @@ public class FileManagerService {
         Response response = null;
         response = okHttpClient.newCall(request).execute();
         // 最后记得删除临时文件
-        FileUtils.deleteQuietly(file);
 
         return Objects.requireNonNull(response.body()).string();
     }

+ 1 - 1
src/main/java/com/example/xiaoshiweixinback/service/common/GetVectorService.java

@@ -30,7 +30,7 @@ public class GetVectorService {
      */
     @Value("${VectorUrl}")
     private String vectorUrl;
-    public List<String> uploadFile(File file) throws IOException {
+    public List<String> getVectorByFile(File file) throws IOException {
 
         MultipartBody.Builder multipartBodyBuilder = new MultipartBody.Builder()
                 .setType(MultipartBody.FORM);

+ 121 - 1
src/main/java/com/example/xiaoshiweixinback/service/importPatent/EsService.java

@@ -11,8 +11,15 @@ import co.elastic.clients.elasticsearch.core.*;
 import co.elastic.clients.elasticsearch.core.search.Hit;
 import co.elastic.clients.json.JsonData;
 import com.alibaba.fastjson.JSON;
+import com.example.xiaoshiweixinback.business.utils.parseQueryToTree.expressManager;
+import com.example.xiaoshiweixinback.business.utils.parseQueryToTree.operateNode;
+import com.example.xiaoshiweixinback.business.utils.parseQueryToTree.treeNode;
 import com.example.xiaoshiweixinback.domain.es.Patent;
 import com.example.xiaoshiweixinback.domain.es.PatentVector;
+import com.example.xiaoshiweixinback.entity.dto.patent.PatentDTO;
+import com.example.xiaoshiweixinback.entity.patent.MapRequest;
+import com.example.xiaoshiweixinback.entity.patent.QueryRequest;
+import com.example.xiaoshiweixinback.entity.patent.StringRequest;
 import com.example.xiaoshiweixinback.entity.vo.patent.PatentWithIdVO;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.ObjectUtils;
@@ -186,7 +193,120 @@ public class EsService {
         }
     }
 
-
+    /**
+     * Es检索
+     *
+     * @param queryRequest 检索条件
+     * @return
+     */
+    public PatentDTO esSearch(QueryRequest queryRequest) throws Exception {
+//        PatentDTO dto = new PatentDTO();
+//        String searchCondition = "";
+//        Integer productId = queryRequest.getProductId();
+//        String productFrom = queryRequest.getFrom();
+//        Long current = queryRequest.getCurrent();
+//        Long size = queryRequest.getSize();
+//        String groupField = queryRequest.getGroupField();
+//        //判断表达式
+//        if (queryRequest instanceof StringRequest) {
+//            searchCondition = ((StringRequest) queryRequest).getSearchQuery();
+//        } else if (queryRequest instanceof MapRequest) {
+//            Map<String, Object> map = ((MapRequest) queryRequest).getSearchQuery();
+//            StringBuilder stringBuilder = new StringBuilder();
+//            for (String key : map.keySet()) {
+//                Object value = map.get(key);
+//                if (!"".contentEquals(stringBuilder)) {
+//                    stringBuilder = stringBuilder.append(" AND ").append(key).append("=").append(value);
+//                } else {
+//                    stringBuilder = stringBuilder.append(key).append("=").append(value);
+//                }
+//            }
+//            searchCondition = stringBuilder.toString();
+//        }
+//
+//        SearchRequest.Builder builder = new SearchRequest.Builder();
+//        //设置查询索引
+//        builder.index("patent");
+//        //1. 解析检索条件
+//        treeNode tree = expressManager.getInstance().Parse(condition, false);
+//        //3. 从es中检索数据
+//        Query q = formatQueryService.EsQueryToQuery((operateNode) tree, "patent",projectId);
+//        builder.query(q);
+//        //判断同族分组
+//        String str = "";
+//        if (StringUtils.isNotEmpty(groupField)) {
+//            switch (groupField) {
+//                case "simpleFamilyId":
+//                    str = "simple_family_id";
+//                    break;
+//                case "inpadocFamilyId":
+//                    str = "inpadoc_family_id";
+//                    break;
+//                case "patsnapFamilyId":
+//                    str = "patsnap_family_id";
+//                    break;
+//            }
+//        }
+//        String esField = str;
+//        if (StringUtils.isNotEmpty(esField)) {
+//            List<SortOptions> options = new ArrayList<>();
+//            SortOptions appDate = SortOptions.of(i -> i.field(j -> j.field("app_date").order(SortOrder.Asc)));
+//            options.add(appDate);
+//            Aggregation bucketSort = AggregationBuilders.bucketSort(i -> i.from((current.intValue() - 1) * size.intValue()).size(size.intValue()));
+//            Aggregation aggregation = new Aggregation.Builder().terms(new TermsAggregation.Builder()
+//                    .field(esField).size(100000).build())
+//                    .aggregations(new HashMap() {{
+//                        put("hitAgg", bucketSort);
+//                    }}).build();
+//            builder.aggregations("Agg", aggregation);
+//            //对聚合结果统计出总数
+//            Aggregation terms = AggregationBuilders.terms(i -> i.field(esField).size(100000));
+//            builder.aggregations("termAgg", terms);
+//            BucketsPath bucketsPath = BucketsPath.of(i -> i.single("termAgg>_count"));
+//            Aggregation statsBucket = AggregationBuilders.statsBucket(i -> i.bucketsPath(bucketsPath));
+//            builder.aggregations("statsBucket", statsBucket);
+//        }
+//
+//        //分页
+//        if (current != null && size != null && current > 0 && size > 0) {
+//            builder.from((current.intValue() - 1) * size.intValue()).size(size.intValue());
+//        } else {
+//            builder.from(0).size(99999);
+//        }
+//
+//        //解除最大条数限制
+//        builder.trackTotalHits(i -> i.enabled(true));
+//        SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+//        List<PatentColumnDTO> list = new ArrayList<>();
+//        long total = 0L;
+//        if (StringUtils.isNotEmpty(esField)) {
+//            Aggregate statsAgg = response.aggregations().get("statsBucket");
+//            total = statsAgg.statsBucket().count();
+//            Aggregate agg = response.aggregations().get("Agg");
+//            List<StringTermsBucket> termsBuckets = agg.sterms().buckets().array();
+//            for (StringTermsBucket termsBucket : termsBuckets) {
+//                String key = termsBucket.key().stringValue();
+//                PatentColumnDTO columnDTO = this.getPatentColumnDTO(key, projectId,esField);
+//                list.add(columnDTO);
+//            }
+//        } else {
+//            List<Hit<Patent>> hits = response.hits().hits();
+//            total = response.hits().total().value();
+//            for (Hit<Patent> hit : hits) {
+//                String id = hit.id();
+//                Patent esMess = hit.source();
+//                PatentColumnDTO columnDTO = this.getPatentColumnDTO(esMess, projectId, id);
+//                list.add(columnDTO);
+//            }
+//        }
+//        this.loadCoulumnDTO(list);
+//        dto.setTotal(total);
+//        dto.setPatents(list);
+//        dto.setPageNum(current);
+//        dto.setPageSize(size);
+//        return dto;
+        return null;
+    }
 }
 
 

+ 40 - 25
src/main/java/com/example/xiaoshiweixinback/service/importPatent/GetPatentPictureFromWebService.java

@@ -6,41 +6,56 @@ import com.example.xiaoshiweixinback.domain.es.Patent;
 import com.example.xiaoshiweixinback.domain.es.PatentVector;
 import com.example.xiaoshiweixinback.entity.dto.patent.UploadPatentWebDTO;
 import com.example.xiaoshiweixinback.service.common.FileManagerService;
+import com.example.xiaoshiweixinback.service.common.GetVectorService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
 
 
 @Service
-public class GetPatentPictureFromWebService  {
-@Autowired
-private PatentStarApiService patentStarApiService;
-@Autowired
-private FileManagerService fileManagerService;
-@Autowired
-private EsService esService;
+public class GetPatentPictureFromWebService {
+    @Autowired
+    private PatentStarApiService patentStarApiService;
+    @Autowired
+    private FileManagerService fileManagerService;
+    @Autowired
+    private EsService esService;
+    @Autowired
+    private GetVectorService getVectorService;
+
     public void getPatentPicture(UploadPatentWebDTO uploadPatentWebDTO) {
-            try {
-
-                String pictureUrl = patentStarApiService.getPictureApi(uploadPatentWebDTO.getStarPatentVO().getRowApplicationNo());
-                Patent patent =uploadPatentWebDTO.getPatent();
-                if (pictureUrl != null && !pictureUrl.contains("408")) {
-                    File file = FileUtils.getPictureFileByUrl(pictureUrl);
-                    String guid = FormatUtil.getPictureFormat(uploadPatentWebDTO.getStarPatentVO().getApplicationNo());
-                    fileManagerService.uploadFileWithGuid(file, guid);
-                    PatentVector patentVector =new PatentVector();
-                    patentVector.setAppNo(patent.getAppNo());
-                    patentVector.setTitle(patent.getTitle());
-                    patentVector.setRightHolder(patent.getRightHolder());
-                    esService.addPatentVector(patentVector);
-                }
-
-            } catch (Exception e) {
-                e.printStackTrace();
+        try {
+
+            String pictureUrl = patentStarApiService.getPictureApi(uploadPatentWebDTO.getStarPatentVO().getRowApplicationNo());
+            Patent patent = uploadPatentWebDTO.getPatent();
+            if (pictureUrl != null && !pictureUrl.contains("408")) {
+                File file = FileUtils.getPictureFileByUrl(pictureUrl);
+                String guid = FormatUtil.getPictureFormat(uploadPatentWebDTO.getStarPatentVO().getApplicationNo());
+                fileManagerService.uploadFileWithGuid(file, guid);
+                PatentVector patentVector = new PatentVector();
+                patentVector.setAppNo(patent.getAppNo());
+                patentVector.setTitle(patent.getTitle());
+                patentVector.setRightHolder(patent.getRightHolder());
+                patentVector.setImageIndex(0);
+                List<String> stringList = getVectorService.getVectorByFile(file);
+                List<Float> floats =new ArrayList<>();
+                stringList.forEach(item->{
+                    Float a =Float.parseFloat(item);
+                  floats.add(a);
+
+                });
+                org.apache.commons.io.FileUtils.deleteQuietly(file);
+                patentVector.setMyVector(floats);
+                esService.addPatentVector(patentVector);
             }
-    }
 
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 
 
 }

+ 3 - 1
src/main/java/com/example/xiaoshiweixinback/service/importPatent/ImportFromWebToEsService.java

@@ -28,7 +28,8 @@ public class ImportFromWebToEsService {
 
     @Autowired
     private SavePatentToEsService savePatentToEsService;
-
+@Autowired
+private GetPatentPictureFromWebService getPatentPictureFromWebService;
     public Boolean ImportTask(ImportTaskAMVO importTaskAMVO) {
 
         return excuteLessThan10000(importTaskAMVO);
@@ -128,6 +129,7 @@ public class ImportFromWebToEsService {
                         uploadPatentWebDTO.setHaveSaveCounter(0);
                         getCataloguingFromWebService.loadPatentMessage(uploadPatentWebDTO);
                          savePatentToEsService.saveOrUpdate(uploadPatentWebDTO);
+                         getPatentPictureFromWebService.getPatentPicture(uploadPatentWebDTO);
                         ifHaveGet = true;
                         index += 1;
                     }