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