Selaa lähdekoodia

Merge remote-tracking branch 'origin/master_novelty' into master_novelty

# Conflicts:
#	src/main/java/cn/cslg/pas/controller/NoveltyProjectController.java
xiexiang 1 vuosi sitten
vanhempi
commit
f9b4496b65

+ 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;
+}

+ 4 - 2
src/main/java/cn/cslg/pas/common/vo/QueryNoveltyProjectVO.java

@@ -44,6 +44,10 @@ public class QueryNoveltyProjectVO {
 
     private String applicationRemark;
 
+    private String replenishMeans;
+
+    private String writeAdvice;
+
     private String ipc;
 
     private String solvedProblem;
@@ -52,8 +56,6 @@ public class QueryNoveltyProjectVO {
 
     private String remark;
 
-    private String picture;
-
     private String inventionPoint;
 
     private List<SystemFile> systemFileList;

+ 19 - 3
src/main/java/cn/cslg/pas/controller/NoveltyProjectController.java

@@ -7,6 +7,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;
@@ -21,6 +22,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;
+
 import java.io.IOException;
 import java.util.List;
 
@@ -90,13 +94,13 @@ public class NoveltyProjectController {
     @Operation(summary = "添加或更新技术方案信息")
     @PostMapping("/addOrUpdateTechnicalCase")
     public Response addOrUpdateTechnicalCase(@RequestBody AddTechnicalCaseDTO caseDTO) throws Exception {
-        Integer noveltyProjectId = null;
+        TechnicalCaseIdDTO caseIdDTO = new TechnicalCaseIdDTO();
         try {
-            noveltyProjectId = technicalCaseService.addOrUpdateTechnicalCase(caseDTO);
+            caseIdDTO = technicalCaseService.addOrUpdateTechnicalCase(caseDTO);
         } catch (Exception e) {
             return Response.error(e.getMessage());
         }
-        return Response.success(noveltyProjectId);
+        return Response.success(caseIdDTO);
     }
 
     @Operation(summary = "查询技术方案信息")
@@ -122,6 +126,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) throws IOException {

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

@@ -71,9 +71,9 @@ public class NoveltyProject extends BaseEntity<NoveltyProject> {
 
     //需要补充资料
     @TableField(value = "replenish_means")
-    private Integer replenishMeans;
+    private String replenishMeans;
 
     //撰写要点建议
     @TableField(value = "write_advice")
-    private Integer writeAdvice;
+    private String writeAdvice;
 }

+ 27 - 0
src/main/java/cn/cslg/pas/domain/es/TechnicalCasePatent.java

@@ -0,0 +1,27 @@
+package cn.cslg.pas.domain.es;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.stereotype.Component;
+
+@Component
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class TechnicalCasePatent {
+
+    /**
+     * 查新报告id
+     */
+    @JsonProperty("project_id")
+    private Integer projectId;
+
+    /**
+     * 发明点
+     */
+    @JsonProperty("invention_point")
+    private String inventionPoint;
+
+}

+ 28 - 6
src/main/java/cn/cslg/pas/service/business/NoveltyProjectService.java

@@ -10,9 +10,11 @@ import cn.cslg.pas.common.utils.LoginUtils;
 import cn.cslg.pas.common.vo.DepartmentVO;
 import cn.cslg.pas.common.vo.QueryNoveltyProjectVO;
 import cn.cslg.pas.domain.business.AssoProjectFile;
+import cn.cslg.pas.domain.business.AssoTechnicalCaseFile;
 import cn.cslg.pas.domain.business.NoveltyProject;
 import cn.cslg.pas.domain.business.Project;
 import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.mapper.AssoTechnicalCaseFileMapper;
 import cn.cslg.pas.mapper.NoveltyProjectMapper;
 import cn.cslg.pas.mapper.ProjectMapper;
 import cn.cslg.pas.service.common.FileManagerService;
@@ -36,6 +38,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 @Service
@@ -57,6 +60,9 @@ public class NoveltyProjectService extends ServiceImpl<NoveltyProjectMapper, Nov
     @Autowired
     private NoveltyProjectMapper noveltyProjectMapper;
 
+    @Autowired
+    private AssoTechnicalCaseFileMapper assoTechnicalCaseFileMapper;
+
 
     public Records queryNoveltyProject(QueryNoveltyProjectDTO vo) throws IOException {
         vo.setCurrent(vo.getCurrent() - 1);
@@ -78,6 +84,7 @@ public class NoveltyProjectService extends ServiceImpl<NoveltyProjectMapper, Nov
             List<String> createIds = new ArrayList<>();
             List<String> departmentIds = new ArrayList<>();
             List<Integer> clientIds = new ArrayList<>();
+            List<Integer> technicalCaseIds = new ArrayList<>();
             List<DepartmentVO> departmentVOS = new ArrayList<>();
             List<Personnel> personnels = new ArrayList<>();
             List<Client> clients = new ArrayList<>();
@@ -86,6 +93,10 @@ public class NoveltyProjectService extends ServiceImpl<NoveltyProjectMapper, Nov
                     createIds.add(item.getCreateId());
                 }
 
+                if (item.getTechnicalCaseId() != null) {
+                    technicalCaseIds.add(item.getTechnicalCaseId());
+                }
+
                 if (item.getHeadId() != null) {
                     createIds.add(item.getHeadId());
                 }
@@ -124,8 +135,17 @@ public class NoveltyProjectService extends ServiceImpl<NoveltyProjectMapper, Nov
             }
 
             List<SystemFile> systemFiles = new ArrayList<>();
-            List<String> guids = noveltyProjectVOS.stream().map(QueryNoveltyProjectVO::getPicture).collect(Collectors.toList());
+            List<String> guids = new ArrayList<>();
+            List<AssoTechnicalCaseFile> caseFileList = new ArrayList<>();
             //查询文件
+            if (!CollectionUtils.isEmpty(technicalCaseIds)) {
+                caseFileList = assoTechnicalCaseFileMapper.selectList(new LambdaQueryWrapper<AssoTechnicalCaseFile>()
+                        .in(AssoTechnicalCaseFile::getTechnicalCaseId, technicalCaseIds));
+                if (!CollectionUtils.isEmpty(caseFileList)) {
+                    guids = caseFileList.stream().map(AssoTechnicalCaseFile::getFileGuid).collect(Collectors.toList());
+                }
+            }
+
             if (!CollectionUtils.isEmpty(guids)) {
                 String res = fileManagerService.getSystemFileFromFMS(guids);
                 systemFiles = JSON.parseArray(res, SystemFile.class);
@@ -167,11 +187,13 @@ public class NoveltyProjectService extends ServiceImpl<NoveltyProjectMapper, Nov
                     }
                 }
                 //装载文件信息
-                if (StringUtils.isNotEmpty(noveltyProjectVO.getPicture())) {
-                    SystemFile systemFile = systemFiles.stream().filter(i -> i.getGuid().equals(noveltyProjectVO.getPicture())).findFirst().orElse(null);
-                    List<SystemFile> systemFileList = new ArrayList<>();
-                    systemFileList.add(systemFile);
-                    noveltyProjectVO.setSystemFileList(systemFileList);
+                List<AssoTechnicalCaseFile> caseFiles = caseFileList.stream().filter(i -> i.getTechnicalCaseId().equals(noveltyProjectVO.getTechnicalCaseId())).collect(Collectors.toList());
+                if (!CollectionUtils.isEmpty(caseFiles)) {
+                    List<String> guidList = caseFiles.stream().map(AssoTechnicalCaseFile::getFileGuid).collect(Collectors.toList());
+                    if (!CollectionUtils.isEmpty(guidList) && !CollectionUtils.isEmpty(systemFiles)) {
+                        List<SystemFile> systemFileList = systemFiles.stream().filter(i -> guidList.contains(i.getGuid())).collect(Collectors.toList());
+                        noveltyProjectVO.setSystemFileList(systemFileList);
+                    }
                 }
             }
         }

+ 139 - 7
src/main/java/cn/cslg/pas/service/business/TechnicalCaseService.java

@@ -3,22 +3,42 @@ 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.*;
+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;
+import co.elastic.clients.elasticsearch.core.SearchRequest;
+import co.elastic.clients.elasticsearch.core.SearchResponse;
+import co.elastic.clients.elasticsearch.core.UpdateRequest;
+import co.elastic.clients.elasticsearch.core.search.Hit;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson2.JSON;
 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;
@@ -40,11 +60,15 @@ import java.util.stream.Collectors;
 public class TechnicalCaseService extends ServiceImpl<TechnicalCaseMapper, TechnicalCase> {
     private final CacheUtils cacheUtils;
     private final LoginUtils loginUtils;
+    private final ElasticsearchClient client;
 
     @Autowired
     private FileManagerService fileManagerService;
 
     @Autowired
+    private PermissionService permissionService;
+
+    @Autowired
     private AssoTechnicalCaseFileMapper assoTechnicalCaseFileMapper;
 
     @Autowired
@@ -53,10 +77,13 @@ public class TechnicalCaseService extends ServiceImpl<TechnicalCaseMapper, Techn
     @Autowired
     private TechnicalCaseMapper technicalCaseMapper;
 
+    @Autowired
+    private ProjectMapper projectMapper;
+
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
-    public Integer addOrUpdateTechnicalCase(AddTechnicalCaseDTO vo) {
+    public TechnicalCaseIdDTO addOrUpdateTechnicalCase(AddTechnicalCaseDTO vo) throws Exception {
         PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
-        Integer technicalCaseId = null;
+        TechnicalCaseIdDTO caseIdDTO = new TechnicalCaseIdDTO();
         if (vo.getTechnicalCaseId() == null) {
             if (vo.getProjectId() == null) {
                 Project project = new Project();
@@ -72,16 +99,37 @@ public class TechnicalCaseService extends ServiceImpl<TechnicalCaseMapper, Techn
             TechnicalCase technicalCase = new TechnicalCase();
             BeanUtils.copyProperties(vo, technicalCase);
             technicalCase.insert();
-            technicalCaseId = technicalCase.getId();
+            caseIdDTO.setProjectId(vo.getProjectId());
+            caseIdDTO.setTechnicalCaseId(technicalCase.getId());
+
+            //保存es
+            TechnicalCasePatent casePatent = new TechnicalCasePatent();
+            casePatent.setProjectId(vo.getProjectId());
+            casePatent.setInventionPoint(technicalCase.getInventionPoint());
+            String technicalCasePatentId = this.addTechnicalCasePatent(casePatent);
+            if (StringUtils.isEmpty(technicalCasePatentId)) {
+                throw new XiaoShiException("发明点保存Es失败");
+            }
         } else {
             TechnicalCase technicalCase = technicalCaseMapper.selectById(vo.getTechnicalCaseId());
             BeanUtils.copyProperties(vo, technicalCase);
             technicalCase.updateById();
-            technicalCaseId = technicalCase.getId();
+            caseIdDTO.setTechnicalCaseId(technicalCase.getId());
+            caseIdDTO.setProjectId(technicalCase.getProjectId());
+
+            //保存es
+            String technicalCasePatentId = this.selectTechnicalCasePatent(technicalCase.getProjectId());
+            TechnicalCasePatent casePatent = new TechnicalCasePatent();
+            casePatent.setProjectId(vo.getProjectId());
+            casePatent.setInventionPoint(technicalCase.getInventionPoint());
+            Integer count = this.updateTechnicalCasePatent(casePatent, technicalCasePatentId);
+            if (count > 0) {
+                throw new XiaoShiException("发明点更新Es失败");
+            }
         }
 
         List<AssoTechnicalCaseFile> technicalCaseFiles = assoTechnicalCaseFileMapper.selectList(new LambdaQueryWrapper<AssoTechnicalCaseFile>()
-                .eq(AssoTechnicalCaseFile::getTechnicalCaseId, technicalCaseId));
+                .eq(AssoTechnicalCaseFile::getTechnicalCaseId, caseIdDTO.getTechnicalCaseId()));
         if (!CollectionUtils.isEmpty(technicalCaseFiles)) {
             List<Integer> collect = technicalCaseFiles.stream().map(BaseEntity::getId).collect(Collectors.toList());
             assoTechnicalCaseFileMapper.deleteBatchIds(collect);
@@ -92,7 +140,7 @@ public class TechnicalCaseService extends ServiceImpl<TechnicalCaseMapper, Techn
         if (!CollectionUtils.isEmpty(fileGuids)) {
             for (String fileGuid : fileGuids) {
                 AssoTechnicalCaseFile assoTechnicalCaseFile = new AssoTechnicalCaseFile();
-                assoTechnicalCaseFile.setTechnicalCaseId(technicalCaseId);
+                assoTechnicalCaseFile.setTechnicalCaseId(caseIdDTO.getTechnicalCaseId());
                 assoTechnicalCaseFile.setFileGuid(fileGuid);
                 assoTechnicalCaseFile.setCreateId(personnelVO.getId());
                 assoTechnicalCaseFiles.add(assoTechnicalCaseFile);
@@ -101,7 +149,7 @@ public class TechnicalCaseService extends ServiceImpl<TechnicalCaseMapper, Techn
                 assoTechnicalCaseFileService.saveBatch(assoTechnicalCaseFiles);
             }
         }
-        return technicalCaseId;
+        return caseIdDTO;
     }
 
     public TechnicalCaseVO queryTechnicalCase(TechnicalCaseIdDTO vo) {
@@ -135,4 +183,88 @@ 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();
+        //设置查询索引
+        builder.index("technical_case_patent");
+        Query query = QueryBuilders.term(i -> i.field("project_id").value(projectId));
+        builder.query(query);
+        SearchResponse<TechnicalCasePatent> response = client.search(builder.build(), TechnicalCasePatent.class);
+        List<Hit<TechnicalCasePatent>> hits = response.hits().hits();
+        return hits.get(0).id();
+    }
+
+    //添加TechnicalCasePatent
+    public String addTechnicalCasePatent(TechnicalCasePatent casePatent) throws Exception {
+        IndexResponse indexResponse = client.index(i -> i
+                .index("technical_case_patent")
+                //传入user对象
+                .document(casePatent)
+        );
+        return indexResponse.id();
+    }
+
+    //更新TechnicalCasePatent
+    public Integer updateTechnicalCasePatent(TechnicalCasePatent patent, String id) {
+        UpdateRequest<TechnicalCasePatent, TechnicalCasePatent> req;
+        req = UpdateRequest.of(
+                b -> b.index("technical_case_patent").id(id)
+                        .doc(patent));
+        try {
+            client.update(req, TechnicalCasePatent.class);
+            return 1;
+        } catch (IOException e) {
+            return -1;
+        }
+    }
 }

+ 2 - 1
src/main/resources/mapper/NoveltyProjectMapper.xml

@@ -27,11 +27,12 @@
         np.if_patentability,
         np.application_advice,
         np.application_remark,
+        np.replenish_means,
+        np.write_advice,
         tc.ipc,
         tc.solved_problem,
         tc.technical_field,
         tc.remark,
-        tc.picture,
         tc.invention_point
         from novelty_project np
         left join project p on p.id = np.project_id