| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- package cn.cslg.pas.service.project;
- import cn.cslg.pas.common.dto.PatentExport.PatentExportVO;
- import cn.cslg.pas.common.dto.business.PatentProjectDTO;
- import cn.cslg.pas.common.dto.business.ProjectEventDTO;
- import cn.cslg.pas.common.dto.business.ProjectTreesDTO;
- import cn.cslg.pas.common.dto.es.EsCustomFieldDTO;
- import cn.cslg.pas.common.dto.es.EsQueryPatentFieldsDTO;
- import cn.cslg.pas.common.dto.es.InnerFields;
- import cn.cslg.pas.common.model.addPatentToReport.PatentNoWithIdVO;
- import cn.cslg.pas.common.model.cronModel.SystemFile;
- import cn.cslg.pas.common.model.project.CopyProjectDTO;
- import cn.cslg.pas.common.vo.FieldValueVO;
- import cn.cslg.pas.common.vo.PatentWithIdVO;
- import cn.cslg.pas.common.vo.UploadParamsVO;
- import cn.cslg.pas.common.vo.business.AllCustomFieldVO;
- import cn.cslg.pas.common.vo.business.PatentProjectVO;
- import cn.cslg.pas.common.vo.es.EsPatentCommonVO;
- import cn.cslg.pas.common.vo.es.EsPatentFieldsVO;
- import cn.cslg.pas.common.vo.es.InnerPatentFieldsVO;
- import cn.cslg.pas.domain.es.Patent;
- import cn.cslg.pas.domain.es.PatentJoin;
- import cn.cslg.pas.domain.es.PatentMergePerson;
- import cn.cslg.pas.exception.ExceptionEnum;
- import cn.cslg.pas.exception.XiaoShiException;
- import cn.cslg.pas.mapper.PatentProjectMapper;
- import cn.cslg.pas.service.business.CustomFieldService;
- import cn.cslg.pas.service.business.PatentProjectService;
- import cn.cslg.pas.service.business.es.EsCustomFieldService;
- import cn.cslg.pas.service.business.es.EsMergePersonService;
- import cn.cslg.pas.service.business.es.EsPatentService;
- import cn.cslg.pas.service.business.es.EsService;
- import co.elastic.clients.elasticsearch.ElasticsearchClient;
- import co.elastic.clients.elasticsearch.core.SearchRequest;
- import co.elastic.clients.elasticsearch.core.SearchResponse;
- import co.elastic.clients.elasticsearch.core.search.Hit;
- import lombok.Data;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Lazy;
- import org.springframework.stereotype.Service;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- import java.util.stream.Collectors;
- @Service
- @Slf4j
- @RequiredArgsConstructor
- public class CopyProjectService {
- private final EsCustomFieldService esCustomFieldService;
- private final EsService esService;
- private final ElasticsearchClient client;
- private final EsPatentService esPatentService;
- private final CustomFieldService customFieldService;
- private final PatentProjectMapper patentProjectMapper;
- private final PatentProjectService patentProjectService;
- private final EsMergePersonService esMergePersonService;
- public void copyPatentProjectAll(CopyProjectDTO copyProjectDTO) {
- Integer projectId = copyProjectDTO.getProjectId();
- EsPatentCommonVO esPatentCommonVO = new EsPatentCommonVO();
- esPatentCommonVO.setProjectId(projectId);
- esPatentCommonVO.setSearchCondition("");
- esPatentCommonVO.setStartNum(1l);
- esPatentCommonVO.setEndNum(2l);
- esPatentCommonVO.setSemanteme("");
- Long total = 0l;
- Integer newProjectId = null;
- newProjectId = this.copyPatentProject(projectId);
- List<AllCustomFieldVO> customFieldVOS = customFieldService.getAllProjectCustomField(projectId);
- List<InnerFields> innerFields = this.transforToInner(customFieldVOS);
- EsQueryPatentFieldsDTO esQueryPatentFieldsDTO = new EsQueryPatentFieldsDTO();
- esQueryPatentFieldsDTO.setProjectId(projectId);
- esQueryPatentFieldsDTO.setInnerFields(innerFields);
- try {
- SearchRequest.Builder builder = esService.getCommonPatent(esPatentCommonVO);
- builder.trackTotalHits(i -> i.enabled(true));
- SearchResponse<Patent> response = null;
- response = client.search(builder.build(), Patent.class);
- List<Hit<Patent>> hits = response.hits().hits();
- total = response.hits().total().value();
- Long startIndex = 1l;
- Long endIndex = 100l;
- if (endIndex > total) {
- endIndex = total;
- }
- while (startIndex <= total) {
- esPatentCommonVO.setStartNum(startIndex);
- esPatentCommonVO.setEndNum(endIndex);
- builder = esService.getCommonPatent(esPatentCommonVO);
- response = client.search(builder.build(), Patent.class);
- hits = response.hits().hits();
- for (Hit<Patent> hit : hits) {
- String id = hit.id();
- String patentNo = hit.source().getPatentNo();
- PatentNoWithIdVO patentWithIdVO = new PatentNoWithIdVO();
- patentWithIdVO.setId(hit.id());
- patentWithIdVO.setPatentNo(hit.source().getPatentNo());
- //保存专利关联
- this.savePatentProject(id, newProjectId);
- this.saveCustomField(id, patentNo, esQueryPatentFieldsDTO, projectId, newProjectId, customFieldVOS);
- this.saveMergePerson(hit.source(), id, projectId, newProjectId);
- }
- startIndex += 100l;
- endIndex += 100l;
- if (endIndex > total) {
- endIndex = total;
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- private void saveMergePerson(Patent patent, String patentId, Integer projectId, Integer newProjectId) {
- try {
- // List<PatentMergePerson> applicants = esPatentService.getMergeApp2(projectId, patentId);
- // List<PatentMergePerson> rightHolders = esPatentService.getMergeRight2(projectId, patentId);
- // List<PatentMergePerson> inventors = esPatentService.getMergeInventor2(projectId, patentId);
- // esMergePersonService.addMergePersonToEs2(applicants, patentId, newProjectId, "merge_applicat");
- // esMergePersonService.addMergePersonToEs2(rightHolders, patentId, newProjectId, "merge_right_holder");
- // esMergePersonService.addMergePersonToEs2(inventors, patentId, newProjectId, "merge_inventor");
- esMergePersonService.addDefaultMergePerson(patent, patentId, newProjectId);
- } catch (Exception e) {
- throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "保存合并人员失败");
- }
- }
- public void transTo() {
- }
- private void savePatentProject(String patentId, Integer projectId) {
- Patent patentChild = new Patent();
- PatentJoin patentJoin = new PatentJoin();
- patentJoin.setParent(patentId);
- patentJoin.setName("project");
- patentChild.setPatentJoin(patentJoin);
- patentChild.setProjectId(projectId);
- try {
- esService.addChildPatent(patentChild, patentId);
- } catch (Exception e) {
- throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "保存专利错误");
- }
- }
- private void saveCustomField(String patentId, String patentNo, EsQueryPatentFieldsDTO esQueryPatentFieldsDTO, Integer projectId, Integer newProjectId, List<AllCustomFieldVO> customFieldVOS) {
- esQueryPatentFieldsDTO.setPatentNos(Arrays.asList(patentNo));
- try {
- List<EsPatentFieldsVO> esPatentFieldsVOS = esCustomFieldService.getPatentFields(esQueryPatentFieldsDTO);
- EsPatentFieldsVO esPatentFieldsVO = esPatentFieldsVOS.get(0);
- List<InnerPatentFieldsVO> innerClassFields = esPatentFieldsVO.getInnerClassFields();
- List<UploadParamsVO.Field> fields = new ArrayList<>();
- for (InnerPatentFieldsVO innerPatentFieldsVO : innerClassFields) {
- List<FieldValueVO> fieldValueVOS = innerPatentFieldsVO.getFieldValueVOS();
- if (fieldValueVOS != null && fieldValueVOS.size() > 0) {
- List<String> values = fieldValueVOS.stream().map(FieldValueVO::getValue).collect(Collectors.toList());
- String key = innerPatentFieldsVO.getField();
- AllCustomFieldVO customFieldVO = customFieldVOS.stream().filter(item -> item.getId().toString().equals(key)).findFirst().orElse(null);
- if (customFieldVO != null) {
- Integer type = innerPatentFieldsVO.getFieldType();
- if (type <= 6) {
- String finalKey = customFieldVO.getName() + ":" + type;
- UploadParamsVO.Field field = new UploadParamsVO.Field();
- field.setKey(finalKey);
- field.setFieldList(values);
- fields.add(field);
- }
- }
- }
- }
- if (fields.size() > 0) {
- List<EsCustomFieldDTO> esCustomFieldDTOList = customFieldService.getFieldDTOByStrings(fields, newProjectId, null);
- for (EsCustomFieldDTO esCustomFieldDTO : esCustomFieldDTOList) {
- esCustomFieldDTO.setPatentId(patentId);
- esCustomFieldDTO.setOptionType(2);
- esCustomFieldDTO.setPatentNo(patentNo);
- if (esCustomFieldDTO.getFieldType() == null) {
- System.out.println(1);
- }
- esCustomFieldService.addCustomField(esCustomFieldDTO);
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "保存自定义栏位错误");
- }
- }
- private List<InnerFields> transforToInner(List<AllCustomFieldVO> customFieldVOS) {
- List<InnerFields> innerFieldsList = new ArrayList<>();
- for (AllCustomFieldVO allCustomFieldVO : customFieldVOS) {
- InnerFields innerFields = new InnerFields();
- innerFields.setFieldId(allCustomFieldVO.getId().toString());
- innerFields.setFieldType(allCustomFieldVO.getType());
- innerFieldsList.add(innerFields);
- }
- return innerFieldsList;
- }
- private Integer copyPatentProject(Integer targetId) {
- List<String> sqls = new ArrayList<>();
- sqls.add("id=" + targetId);
- sqls.add("order by t.createTime desc");
- sqls.add("limit 0,10");
- List<PatentProjectVO> patentProjectVOS = patentProjectMapper.getPatentProject(sqls.get(0), sqls.get(1), sqls.get(2));
- if (patentProjectVOS == null || patentProjectVOS.size() == 0) {
- throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "未找到专题库");
- }
- try {
- patentProjectService.loadPatentProject(patentProjectVOS);
- } catch (Exception e) {
- e.printStackTrace();
- }
- PatentProjectVO patentProjectVO = patentProjectVOS.get(0);
- PatentProjectDTO patentProjectDTO = this.transformToPatentProjectDTO(patentProjectVO);
- Integer newProjectId = (Integer) patentProjectService.addMessage(patentProjectDTO);
- return newProjectId;
- }
- public PatentProjectDTO transformToPatentProjectDTO(PatentProjectVO patentProjectVO) {
- PatentProjectDTO patentProjectDTO = new PatentProjectDTO();
- patentProjectDTO.setIfUpdate(patentProjectVO.getIfUpdate());
- patentProjectDTO.setStatus(patentProjectVO.getStatus());
- patentProjectDTO.setName(patentProjectVO.getName() + "-副本");
- patentProjectDTO.setEntrustId(patentProjectVO.getEntrustId());
- patentProjectDTO.setHeadId(patentProjectVO.getHeadId());
- patentProjectDTO.setDepartmentId(patentProjectVO.getDepartmentId());
- patentProjectDTO.setContractNo(patentProjectVO.getContractNo());
- patentProjectDTO.setVolumeNumber(patentProjectVO.getVolumeNumber());
- patentProjectDTO.setCommissionCaseDay(patentProjectVO.getCommissionCaseDay());
- patentProjectDTO.setDescription(patentProjectVO.getDescription());
- patentProjectDTO.setScenarioIds(patentProjectVO.getScenarioIds());
- patentProjectDTO.setMatterIds(patentProjectVO.getMatterIds());
- patentProjectDTO.setCrons(patentProjectVO.getCrons());
- patentProjectDTO.setPersonId(patentProjectVO.getCreateId());
- patentProjectDTO.setUpdateCycle(patentProjectVO.getUpdateCycle());
- if (patentProjectVO.getSystemFileList() != null) {
- List<String> fileGuids = patentProjectVO.getSystemFileList().stream().map(SystemFile::getGuid).collect(Collectors.toList());
- patentProjectDTO.setFileGuids(fileGuids);
- }
- if (patentProjectVO.getEventIds() != null) {
- List<ProjectEventDTO> projectEventDTOS = new ArrayList<>();
- patentProjectVO.getEventIds().forEach(item -> {
- ProjectEventDTO projectEventDTO = new ProjectEventDTO();
- projectEventDTO.setEventId(item);
- projectEventDTOS.add(projectEventDTO);
- });
- patentProjectDTO.setEvents(projectEventDTOS);
- }
- List<ProjectTreesDTO> projectTreesDTOS = new ArrayList<>();
- if (patentProjectVO.getProductOrCategory() != null) {
- ProjectTreesDTO projectTreesDTO = new ProjectTreesDTO();
- projectTreesDTO.setTreeType(patentProjectVO.getProductOrCategory().getType());
- projectTreesDTO.setValueIds(patentProjectVO.getProductOrCategory().getValueIds());
- projectTreesDTO.setFieldId(patentProjectVO.getProductOrCategory().getId());
- projectTreesDTOS.add(projectTreesDTO);
- patentProjectDTO.setTrees(projectTreesDTOS);
- }
- return patentProjectDTO;
- }
- }
|