Browse Source

add collect patent

zero 1 year ago
parent
commit
3d4e6bb746

+ 3 - 2
src/main/java/com/example/xiaoshiweixinback/business/exception/ExceptionEnum.java

@@ -7,7 +7,6 @@ public enum ExceptionEnum {
 
     /*APP端 100000-300000*/
     SUCCESS("000000", "调用成功"),
-    SYSTEM_ERROR("999999", "系统异常"),
     PARAMETER_VERIFICATION_ERROR("000001", "数据参数校验异常"),
     PHONE_FORMAT_ERROR("000002","手机号格式错误"),
 
@@ -19,7 +18,9 @@ public enum ExceptionEnum {
     THE_CODE_IS_NOT_NULL("10006","验证码不能为空"),
 
     //异常20000
-    THE_PARAMETER_EXCEPTION("20001", "参数异常,请传入数据");
+    THE_PARAMETER_EXCEPTION("20001", "参数异常,请传入数据"),
+    THE_GET_INFORMATION_TOKEN_INVALID("20002", "获取用信息token失效"),
+    SYSTEM_ERROR("999999", "系统异常");
 
     private String code;// 异常代码
     private String message;// 异常信息

+ 26 - 12
src/main/java/com/example/xiaoshiweixinback/controller/PatentController.java

@@ -7,10 +7,11 @@ import com.example.xiaoshiweixinback.business.common.base.Records;
 import com.example.xiaoshiweixinback.business.utils.FileUtils;
 import com.example.xiaoshiweixinback.entity.dto.esPicture.EsPictureNoDTO;
 import com.example.xiaoshiweixinback.entity.dto.esPicture.EsPatentVectorDTO;
+import com.example.xiaoshiweixinback.entity.dto.patent.CollectPatentDTO;
 import com.example.xiaoshiweixinback.entity.dto.patent.ImportTaskAMVO;
 import com.example.xiaoshiweixinback.entity.vo.esPicture.EsPictureNoVo;
-import com.example.xiaoshiweixinback.service.common.EsDenseVectorService;
-import com.example.xiaoshiweixinback.service.common.FileManagerService;
+import com.example.xiaoshiweixinback.service.importPatent.EsDenseVectorService;
+import com.example.xiaoshiweixinback.service.importPatent.EsPatentService;
 import com.example.xiaoshiweixinback.service.importPatent.GetPatentFromExcelService;
 import com.example.xiaoshiweixinback.service.importPatent.ImportFromWebToEsService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -20,7 +21,6 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.File;
-import java.util.Arrays;
 import java.util.List;
 
 
@@ -37,6 +37,10 @@ public class PatentController {
     @Autowired
     private GetPatentFromExcelService getPatentFromExcelService;
 
+    @Autowired
+    private EsPatentService esPatentService;
+
+    //--------------------------- 导入  --------------------------
     @Operation(summary = "导入专利")
     @GetMapping(value = "/importPatent")
     public Response queryPatent(@RequestBody ImportTaskAMVO importTaskAMVO) {
@@ -48,6 +52,18 @@ public class PatentController {
         return Response.success("");
     }
 
+    @Operation(summary = "excel导入")
+    @GetMapping(value = "/importPatentE")
+    public Response importPatentE(String path) {
+        try {
+            getPatentFromExcelService.run(path);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return Response.success("");
+    }
+
+    //--------------------------- 关于图片的专利检索  --------------------------
     @Operation(summary = "根据关键词获取列表(图片用于排序)--zero")
     @PostMapping(value = "/getPatentVectors")
     public Response getPatentVectors(@RequestParam(value = "vectorDTO", required = false) String vectorDTO, @RequestParam(value = "multipartFile", required = false) MultipartFile multipartFile) throws Exception {
@@ -67,15 +83,13 @@ public class PatentController {
         return Response.success(pictureByNo);
     }
 
-    @Operation(summary = "excel导入")
-    @GetMapping(value = "/importPatentE")
-    public Response importPatentE(String path) {
-        try {
-            getPatentFromExcelService.run(path);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return Response.success("");
+    //--------------------------- 收藏专利相关  --------------------------
+    @Operation(summary = "收藏专利--zero")
+    @PostMapping(value = "/collectPatent")
+    public Response collectPatent(@RequestBody CollectPatentDTO patentDTO) throws Exception {
+        boolean b = esPatentService.collectPatent(patentDTO);
+        return Response.success(b);
     }
 
+    //--------------------------- 其他  --------------------------
 }

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

@@ -0,0 +1,13 @@
+package com.example.xiaoshiweixinback.entity.dto.patent;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CollectPatentDTO {
+
+    private Integer productId;
+
+        private List<String> patentNos;
+}

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

@@ -1,4 +1,4 @@
-package com.example.xiaoshiweixinback.service.common;
+package com.example.xiaoshiweixinback.service.importPatent;
 
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
 import co.elastic.clients.elasticsearch._types.InlineScript;
@@ -27,6 +27,8 @@ import com.example.xiaoshiweixinback.entity.vo.esPicture.EsPictureNoVo;
 import com.example.xiaoshiweixinback.entity.vo.esPicture.EsPatentVectorVo;
 import com.example.xiaoshiweixinback.mapper.ProductMapper;
 import com.example.xiaoshiweixinback.service.SearchRecordService;
+import com.example.xiaoshiweixinback.service.common.FileManagerService;
+import com.example.xiaoshiweixinback.service.common.GetVectorService;
 import com.example.xiaoshiweixinback.service.importPatent.FormatQueryService;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.StringUtils;

+ 140 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/EsPatentService.java

@@ -0,0 +1,140 @@
+package com.example.xiaoshiweixinback.service.importPatent;
+
+import co.elastic.clients.elasticsearch.ElasticsearchClient;
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
+import co.elastic.clients.elasticsearch.core.SearchRequest;
+import co.elastic.clients.elasticsearch.core.SearchResponse;
+import co.elastic.clients.elasticsearch.core.search.Hit;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.exception.ExceptionEnum;
+import com.example.xiaoshiweixinback.business.utils.CacheUtil;
+import com.example.xiaoshiweixinback.business.utils.LoginUtils;
+import com.example.xiaoshiweixinback.business.utils.ToolUtil;
+import com.example.xiaoshiweixinback.domain.AssoPersonProduct;
+import com.example.xiaoshiweixinback.domain.es.Patent;
+import com.example.xiaoshiweixinback.domain.es.PatentJoin;
+import com.example.xiaoshiweixinback.domain.es.PatentVector;
+import com.example.xiaoshiweixinback.entity.dto.patent.CollectPatentDTO;
+import com.example.xiaoshiweixinback.entity.vo.PersonnelVO;
+import com.example.xiaoshiweixinback.entity.vo.esPicture.EsPictureNoVo;
+import com.example.xiaoshiweixinback.mapper.AssoPersonProductMapper;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class EsPatentService {
+
+    private final ElasticsearchClient client;
+
+    @Autowired
+    private EsService esService;
+
+    @Autowired
+    private CacheUtil cacheUtils;
+
+    @Autowired
+    private AssoPersonProductMapper assoPersonProductMapper;
+
+    /**
+     *
+     * @param patentDTO
+     * @return
+     */
+    public boolean collectPatent(CollectPatentDTO patentDTO) throws IOException {
+        boolean flag = false;
+        List<String> patentNos = patentDTO.getPatentNos();
+        Integer productId = patentDTO.getProductId();
+        //获取用户
+        PersonnelVO personnelVO = cacheUtils.getLoginUser(LoginUtils.getToken());
+        if (ToolUtil.isEmpty(personnelVO)) {
+            throw new BusinessException(ExceptionEnum.THE_GET_INFORMATION_TOKEN_INVALID);
+        }
+        String uuid = personnelVO.getUuid();
+        //获取人员产品关联表id
+        AssoPersonProduct assoPersonProduct = assoPersonProductMapper.selectOne(new LambdaQueryWrapper<AssoPersonProduct>()
+                .eq(AssoPersonProduct::getProductId, productId)
+                .eq(AssoPersonProduct::getPersonUuid, uuid));
+        Integer personProductId = assoPersonProduct.getId();
+        //判断该专利是否已经被收藏
+        boolean b = this.selectPatentByProductId(personProductId);
+        if (!b) {
+            return true;
+        }
+        //根据专利号获取专利id
+        List<String> list = new ArrayList<>();
+        for (String patentNo : patentNos) {
+            String patentId = this.selectPatentByPatentNo(patentNo);
+            Patent patent = new Patent();
+            patent.setProductId(personProductId);
+            PatentJoin patentJoin = new PatentJoin();
+            patentJoin.setParent(patentId);
+            patentJoin.setName("product");
+            patent.setPatentJoin(patentJoin);
+            try {
+                String id = esService.addChildPatent(patent, patentId);
+                list.add(id);
+            } catch (Exception e) {
+            }
+        }
+        if (ToolUtil.equals(list.size(), patentNos.size())) {
+            flag = true;
+        }
+        return flag;
+    }
+
+    /**
+     * 根据专利号获取专利id
+     * @param patentNo
+     * @return
+     * @throws IOException
+     */
+    public String selectPatentByPatentNo(String patentNo) throws IOException {
+        String id = "";
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("wxpatent");
+        Query q = QueryBuilders.term(i -> i.field("patent_no.keyword").value(patentNo));
+        builder.query(q);
+        builder.size(10);
+        SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+        List<Hit<Patent>> hits = response.hits().hits();
+        for (Hit<Patent> hit : hits) {
+            id = hit.id();
+        }
+        return id;
+    }
+
+    /**
+     * 判断该专利是否已经被收藏
+     * @param personProductId
+     * @return
+     * @throws IOException
+     */
+    public boolean selectPatentByProductId(Integer personProductId) throws IOException {
+        boolean flag = false;
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("wxpatent");
+        Query q = QueryBuilders.term(i -> i.field("product_id").value(personProductId));
+        Query query = QueryBuilders.hasChild(i -> i.type("product").query(q));
+        builder.query(query);
+        builder.size(10);
+        SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+        long count = response.hits().total().value();
+        if (count > 0) {
+            flag = true;
+        }
+//        List<Hit<Patent>> hits = response.hits().hits();
+//        int size = hits.size();
+        return flag;
+    }
+}

+ 14 - 0
src/main/java/com/example/xiaoshiweixinback/service/importPatent/EsService.java

@@ -71,6 +71,20 @@ public class EsService {
     }
 
     /**
+     * @param patent
+     * @throws Exception
+     */
+    public String addChildPatent(Patent patent, String id) throws Exception {
+        IndexResponse indexResponse = client.index(i -> i
+                .index("wxpatent")
+                .routing(id)
+                //传入user对象
+                .document(patent).refresh(Refresh.True).waitForActiveShards(WaitForActiveShards.of(t -> t.count(1)))
+        );
+        return indexResponse.id();
+    }
+
+    /**
      * 根据专利号获取专利id
      *
      * @param patentNo

+ 1 - 2
src/test/java/com/example/xiaoshiweixinback/XiaoshiWeixinbackApplicationTests.java

@@ -1,6 +1,6 @@
 package com.example.xiaoshiweixinback;
 
-import com.example.xiaoshiweixinback.service.common.EsDenseVectorService;
+import com.example.xiaoshiweixinback.service.importPatent.EsDenseVectorService;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
@@ -11,7 +11,6 @@ import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.Calendar;
 import java.util.Date;
-import java.util.List;
 
 
 @SpringBootTest