|
@@ -10,9 +10,23 @@ import cn.cslg.pas.common.utils.LoginUtils;
|
|
|
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.TechnicalCaseMapper;
|
|
|
import cn.cslg.pas.service.common.FileManagerService;
|
|
|
+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.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;
|
|
@@ -40,6 +54,7 @@ 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;
|
|
@@ -54,9 +69,9 @@ public class TechnicalCaseService extends ServiceImpl<TechnicalCaseMapper, Techn
|
|
|
private TechnicalCaseMapper technicalCaseMapper;
|
|
|
|
|
|
@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 +87,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 +128,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 +137,7 @@ public class TechnicalCaseService extends ServiceImpl<TechnicalCaseMapper, Techn
|
|
|
assoTechnicalCaseFileService.saveBatch(assoTechnicalCaseFiles);
|
|
|
}
|
|
|
}
|
|
|
- return technicalCaseId;
|
|
|
+ return caseIdDTO;
|
|
|
}
|
|
|
|
|
|
public TechnicalCaseVO queryTechnicalCase(TechnicalCaseIdDTO vo) {
|
|
@@ -135,4 +171,40 @@ public class TechnicalCaseService extends ServiceImpl<TechnicalCaseMapper, Techn
|
|
|
|
|
|
this.removeById(vo.getTechnicalCaseId());
|
|
|
}
|
|
|
+
|
|
|
+ //查询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;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|