zero il y a 1 an
Parent
commit
6103174252

+ 19 - 0
src/main/java/cn/cslg/pas/common/vo/QueryInventionPointVO.java

@@ -0,0 +1,19 @@
+package cn.cslg.pas.common.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class QueryInventionPointVO {
+
+    private Integer projectId;
+
+    private String inventionPoint;
+
+    private String createId;
+
+    private String createName;
+
+    private Date createTime;
+}

+ 16 - 0
src/main/java/cn/cslg/pas/controller/NoveltyProjectController.java

@@ -6,6 +6,7 @@ import cn.cslg.pas.common.dto.NoveltyProjectDTO.QueryTemplateDTO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.common.vo.NoveltyProjectVO.QueryTemplateVO;
+import cn.cslg.pas.common.vo.QueryInventionPointVO;
 import cn.cslg.pas.common.vo.QueryNoveltyProjectVO;
 import cn.cslg.pas.common.vo.TechnicalCaseVO;
 import cn.cslg.pas.factorys.businessFactory.Business;
@@ -18,6 +19,9 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @RequestMapping(Constants.API_XiaoSHI + "/noveltyProject")
 @RestController
 public class NoveltyProjectController {
@@ -110,6 +114,18 @@ public class NoveltyProjectController {
         return Response.success("删除成功");
     }
 
+    @Operation(summary = "查询技术方案相似发明点")
+    @PostMapping("/querySimilarInventionPoint")
+    public Response querySimilarInventionPoint(@RequestBody String content) throws Exception {
+        List<QueryInventionPointVO> inventionPointVOS = new ArrayList<>();
+        try {
+            inventionPointVOS = technicalCaseService.querySimilarInventionPoint(content);
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
+        }
+        return Response.success(inventionPointVOS);
+    }
+
     @Operation(summary = "查询查新检索报告模板")
     @PostMapping("/queryTemplate")
     public Response queryTemplate(@RequestBody QueryTemplateDTO queryTemplateDTO) {

+ 60 - 0
src/main/java/cn/cslg/pas/service/business/TechnicalCaseService.java

@@ -3,10 +3,12 @@ package cn.cslg.pas.service.business;
 import cn.cslg.pas.common.dto.AddNoveltyProjectDTO;
 import cn.cslg.pas.common.dto.AddTechnicalCaseDTO;
 import cn.cslg.pas.common.dto.TechnicalCaseIdDTO;
+import cn.cslg.pas.common.model.cronModel.Personnel;
 import cn.cslg.pas.common.model.cronModel.PersonnelVO;
 import cn.cslg.pas.common.model.cronModel.SystemFile;
 import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.LoginUtils;
+import cn.cslg.pas.common.vo.QueryInventionPointVO;
 import cn.cslg.pas.common.vo.TechnicalCaseVO;
 import cn.cslg.pas.domain.BaseEntity;
 import cn.cslg.pas.domain.business.*;
@@ -14,12 +16,15 @@ import cn.cslg.pas.domain.es.Patent;
 import cn.cslg.pas.domain.es.TechnicalCasePatent;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.mapper.AssoTechnicalCaseFileMapper;
+import cn.cslg.pas.mapper.ProjectMapper;
 import cn.cslg.pas.mapper.TechnicalCaseMapper;
 import cn.cslg.pas.service.common.FileManagerService;
+import cn.cslg.pas.service.permissions.PermissionService;
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
 import co.elastic.clients.elasticsearch._types.SortOptions;
 import co.elastic.clients.elasticsearch._types.SortOrder;
 import co.elastic.clients.elasticsearch._types.query_dsl.IdsQuery;
+import co.elastic.clients.elasticsearch._types.query_dsl.Like;
 import co.elastic.clients.elasticsearch._types.query_dsl.Query;
 import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
 import co.elastic.clients.elasticsearch.core.IndexResponse;
@@ -33,6 +38,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -60,6 +66,9 @@ public class TechnicalCaseService extends ServiceImpl<TechnicalCaseMapper, Techn
     private FileManagerService fileManagerService;
 
     @Autowired
+    private PermissionService permissionService;
+
+    @Autowired
     private AssoTechnicalCaseFileMapper assoTechnicalCaseFileMapper;
 
     @Autowired
@@ -68,6 +77,9 @@ public class TechnicalCaseService extends ServiceImpl<TechnicalCaseMapper, Techn
     @Autowired
     private TechnicalCaseMapper technicalCaseMapper;
 
+    @Autowired
+    private ProjectMapper projectMapper;
+
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
     public TechnicalCaseIdDTO addOrUpdateTechnicalCase(AddTechnicalCaseDTO vo) throws Exception {
         PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
@@ -172,6 +184,54 @@ public class TechnicalCaseService extends ServiceImpl<TechnicalCaseMapper, Techn
         this.removeById(vo.getTechnicalCaseId());
     }
 
+    public List<QueryInventionPointVO> querySimilarInventionPoint(String content) throws IOException {
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("technical_case_patent");
+        Like likeContent = Like.of(i -> i.text(content));
+        Query query = QueryBuilders.moreLikeThis(i -> i.fields("invention_point").like(likeContent)
+                .minTermFreq(1).maxQueryTerms(12));
+        builder.query(query);
+//        builder.from(0).size(200);
+        //解除最大条数限制
+        builder.trackTotalHits(i -> i.enabled(true));
+        SearchResponse<TechnicalCasePatent> response = client.search(builder.build(), TechnicalCasePatent.class);
+        List<Hit<TechnicalCasePatent>> hits = response.hits().hits();
+        List<QueryInventionPointVO> inventionPointVOS = new ArrayList<>();
+        for (Hit<TechnicalCasePatent> hit : hits) {
+            TechnicalCasePatent casePatent = hit.source();
+            QueryInventionPointVO inventionPointVO = new QueryInventionPointVO();
+            inventionPointVO.setProjectId(casePatent.getProjectId());
+            inventionPointVO.setInventionPoint(casePatent.getInventionPoint());
+            inventionPointVOS.add(inventionPointVO);
+        }
+        List<Personnel> personnels = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(inventionPointVOS)) {
+            List<Integer> projectIds = inventionPointVOS.stream().map(QueryInventionPointVO::getProjectId).collect(Collectors.toList());
+            List<Project> projects = projectMapper.selectBatchIds(projectIds);
+            List<String> createIds = projects.stream().map(Project::getCreateId).collect(Collectors.toList());
+            //查询创建人名称
+            if (!CollectionUtils.isEmpty(createIds)) {
+                String res = permissionService.getPersonnelByIdsFromPCS(createIds);
+                JSONObject jsonObject = com.alibaba.fastjson.JSON.parseObject(res);
+                personnels = JSON.parseArray(jsonObject.getString("data"), Personnel.class);
+            }
+            for (QueryInventionPointVO pointVO : inventionPointVOS) {
+                Project project = projects.stream().filter(i -> i.getId().equals(pointVO.getProjectId())).findFirst().orElse(null);
+                if (ObjectUtils.isNotEmpty(project)) {
+                    pointVO.setCreateId(project.getCreateId());
+                    pointVO.setCreateTime(project.getCreateTime());
+                    //装载人员信息
+                    Personnel personnel = personnels.stream().filter(item -> item.getId().equals(pointVO.getCreateId())).findFirst().orElse(null);
+                    if (personnel != null) {
+                        pointVO.setCreateName(personnel.getPersonnelName());
+                    }
+                }
+            }
+        }
+        return inventionPointVOS;
+    }
+
     //查询TechnicalCasePatent
     public String selectTechnicalCasePatent(Integer projectId) throws Exception {
         SearchRequest.Builder builder = new SearchRequest.Builder();