CopyProjectService.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. package cn.cslg.pas.service.project;
  2. import cn.cslg.pas.common.dto.PatentExport.PatentExportVO;
  3. import cn.cslg.pas.common.dto.business.PatentProjectDTO;
  4. import cn.cslg.pas.common.dto.business.ProjectEventDTO;
  5. import cn.cslg.pas.common.dto.business.ProjectTreesDTO;
  6. import cn.cslg.pas.common.dto.es.EsCustomFieldDTO;
  7. import cn.cslg.pas.common.dto.es.EsQueryPatentFieldsDTO;
  8. import cn.cslg.pas.common.dto.es.InnerFields;
  9. import cn.cslg.pas.common.model.addPatentToReport.PatentNoWithIdVO;
  10. import cn.cslg.pas.common.model.cronModel.SystemFile;
  11. import cn.cslg.pas.common.model.project.CopyProjectDTO;
  12. import cn.cslg.pas.common.vo.FieldValueVO;
  13. import cn.cslg.pas.common.vo.PatentWithIdVO;
  14. import cn.cslg.pas.common.vo.UploadParamsVO;
  15. import cn.cslg.pas.common.vo.business.AllCustomFieldVO;
  16. import cn.cslg.pas.common.vo.business.PatentProjectVO;
  17. import cn.cslg.pas.common.vo.es.EsPatentCommonVO;
  18. import cn.cslg.pas.common.vo.es.EsPatentFieldsVO;
  19. import cn.cslg.pas.common.vo.es.InnerPatentFieldsVO;
  20. import cn.cslg.pas.domain.es.Patent;
  21. import cn.cslg.pas.domain.es.PatentJoin;
  22. import cn.cslg.pas.domain.es.PatentMergePerson;
  23. import cn.cslg.pas.exception.ExceptionEnum;
  24. import cn.cslg.pas.exception.XiaoShiException;
  25. import cn.cslg.pas.mapper.PatentProjectMapper;
  26. import cn.cslg.pas.service.business.CustomFieldService;
  27. import cn.cslg.pas.service.business.PatentProjectService;
  28. import cn.cslg.pas.service.business.es.EsCustomFieldService;
  29. import cn.cslg.pas.service.business.es.EsMergePersonService;
  30. import cn.cslg.pas.service.business.es.EsPatentService;
  31. import cn.cslg.pas.service.business.es.EsService;
  32. import co.elastic.clients.elasticsearch.ElasticsearchClient;
  33. import co.elastic.clients.elasticsearch.core.SearchRequest;
  34. import co.elastic.clients.elasticsearch.core.SearchResponse;
  35. import co.elastic.clients.elasticsearch.core.search.Hit;
  36. import lombok.Data;
  37. import lombok.RequiredArgsConstructor;
  38. import lombok.extern.slf4j.Slf4j;
  39. import org.springframework.beans.factory.annotation.Autowired;
  40. import org.springframework.context.annotation.Lazy;
  41. import org.springframework.stereotype.Service;
  42. import java.util.ArrayList;
  43. import java.util.Arrays;
  44. import java.util.List;
  45. import java.util.stream.Collectors;
  46. @Service
  47. @Slf4j
  48. @RequiredArgsConstructor
  49. public class CopyProjectService {
  50. private final EsCustomFieldService esCustomFieldService;
  51. private final EsService esService;
  52. private final ElasticsearchClient client;
  53. private final EsPatentService esPatentService;
  54. private final CustomFieldService customFieldService;
  55. private final PatentProjectMapper patentProjectMapper;
  56. private final PatentProjectService patentProjectService;
  57. private final EsMergePersonService esMergePersonService;
  58. public void copyPatentProjectAll(CopyProjectDTO copyProjectDTO) {
  59. Integer projectId = copyProjectDTO.getProjectId();
  60. EsPatentCommonVO esPatentCommonVO = new EsPatentCommonVO();
  61. esPatentCommonVO.setProjectId(projectId);
  62. esPatentCommonVO.setSearchCondition("");
  63. esPatentCommonVO.setStartNum(1l);
  64. esPatentCommonVO.setEndNum(2l);
  65. esPatentCommonVO.setSemanteme("");
  66. Long total = 0l;
  67. Integer newProjectId = null;
  68. newProjectId = this.copyPatentProject(projectId);
  69. List<AllCustomFieldVO> customFieldVOS = customFieldService.getAllProjectCustomField(projectId);
  70. List<InnerFields> innerFields = this.transforToInner(customFieldVOS);
  71. EsQueryPatentFieldsDTO esQueryPatentFieldsDTO = new EsQueryPatentFieldsDTO();
  72. esQueryPatentFieldsDTO.setProjectId(projectId);
  73. esQueryPatentFieldsDTO.setInnerFields(innerFields);
  74. try {
  75. SearchRequest.Builder builder = esService.getCommonPatent(esPatentCommonVO);
  76. builder.trackTotalHits(i -> i.enabled(true));
  77. SearchResponse<Patent> response = null;
  78. response = client.search(builder.build(), Patent.class);
  79. List<Hit<Patent>> hits = response.hits().hits();
  80. total = response.hits().total().value();
  81. Long startIndex = 1l;
  82. Long endIndex = 100l;
  83. if (endIndex > total) {
  84. endIndex = total;
  85. }
  86. while (startIndex <= total) {
  87. esPatentCommonVO.setStartNum(startIndex);
  88. esPatentCommonVO.setEndNum(endIndex);
  89. builder = esService.getCommonPatent(esPatentCommonVO);
  90. response = client.search(builder.build(), Patent.class);
  91. hits = response.hits().hits();
  92. for (Hit<Patent> hit : hits) {
  93. String id = hit.id();
  94. String patentNo = hit.source().getPatentNo();
  95. PatentNoWithIdVO patentWithIdVO = new PatentNoWithIdVO();
  96. patentWithIdVO.setId(hit.id());
  97. patentWithIdVO.setPatentNo(hit.source().getPatentNo());
  98. //保存专利关联
  99. this.savePatentProject(id, newProjectId);
  100. this.saveCustomField(id, patentNo, esQueryPatentFieldsDTO, projectId, newProjectId, customFieldVOS);
  101. this.saveMergePerson(hit.source(), id, projectId, newProjectId);
  102. }
  103. startIndex += 100l;
  104. endIndex += 100l;
  105. if (endIndex > total) {
  106. endIndex = total;
  107. }
  108. }
  109. } catch (Exception e) {
  110. e.printStackTrace();
  111. }
  112. }
  113. private void saveMergePerson(Patent patent, String patentId, Integer projectId, Integer newProjectId) {
  114. try {
  115. // List<PatentMergePerson> applicants = esPatentService.getMergeApp2(projectId, patentId);
  116. // List<PatentMergePerson> rightHolders = esPatentService.getMergeRight2(projectId, patentId);
  117. // List<PatentMergePerson> inventors = esPatentService.getMergeInventor2(projectId, patentId);
  118. // esMergePersonService.addMergePersonToEs2(applicants, patentId, newProjectId, "merge_applicat");
  119. // esMergePersonService.addMergePersonToEs2(rightHolders, patentId, newProjectId, "merge_right_holder");
  120. // esMergePersonService.addMergePersonToEs2(inventors, patentId, newProjectId, "merge_inventor");
  121. esMergePersonService.addDefaultMergePerson(patent, patentId, newProjectId);
  122. } catch (Exception e) {
  123. throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "保存合并人员失败");
  124. }
  125. }
  126. public void transTo() {
  127. }
  128. private void savePatentProject(String patentId, Integer projectId) {
  129. Patent patentChild = new Patent();
  130. PatentJoin patentJoin = new PatentJoin();
  131. patentJoin.setParent(patentId);
  132. patentJoin.setName("project");
  133. patentChild.setPatentJoin(patentJoin);
  134. patentChild.setProjectId(projectId);
  135. try {
  136. esService.addChildPatent(patentChild, patentId);
  137. } catch (Exception e) {
  138. throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "保存专利错误");
  139. }
  140. }
  141. private void saveCustomField(String patentId, String patentNo, EsQueryPatentFieldsDTO esQueryPatentFieldsDTO, Integer projectId, Integer newProjectId, List<AllCustomFieldVO> customFieldVOS) {
  142. esQueryPatentFieldsDTO.setPatentNos(Arrays.asList(patentNo));
  143. try {
  144. List<EsPatentFieldsVO> esPatentFieldsVOS = esCustomFieldService.getPatentFields(esQueryPatentFieldsDTO);
  145. EsPatentFieldsVO esPatentFieldsVO = esPatentFieldsVOS.get(0);
  146. List<InnerPatentFieldsVO> innerClassFields = esPatentFieldsVO.getInnerClassFields();
  147. List<UploadParamsVO.Field> fields = new ArrayList<>();
  148. for (InnerPatentFieldsVO innerPatentFieldsVO : innerClassFields) {
  149. List<FieldValueVO> fieldValueVOS = innerPatentFieldsVO.getFieldValueVOS();
  150. if (fieldValueVOS != null && fieldValueVOS.size() > 0) {
  151. List<String> values = fieldValueVOS.stream().map(FieldValueVO::getValue).collect(Collectors.toList());
  152. String key = innerPatentFieldsVO.getField();
  153. AllCustomFieldVO customFieldVO = customFieldVOS.stream().filter(item -> item.getId().toString().equals(key)).findFirst().orElse(null);
  154. if (customFieldVO != null) {
  155. Integer type = innerPatentFieldsVO.getFieldType();
  156. if (type <= 6) {
  157. String finalKey = customFieldVO.getName() + ":" + type;
  158. UploadParamsVO.Field field = new UploadParamsVO.Field();
  159. field.setKey(finalKey);
  160. field.setFieldList(values);
  161. fields.add(field);
  162. }
  163. }
  164. }
  165. }
  166. if (fields.size() > 0) {
  167. List<EsCustomFieldDTO> esCustomFieldDTOList = customFieldService.getFieldDTOByStrings(fields, newProjectId, null);
  168. for (EsCustomFieldDTO esCustomFieldDTO : esCustomFieldDTOList) {
  169. esCustomFieldDTO.setPatentId(patentId);
  170. esCustomFieldDTO.setOptionType(2);
  171. esCustomFieldDTO.setPatentNo(patentNo);
  172. if (esCustomFieldDTO.getFieldType() == null) {
  173. System.out.println(1);
  174. }
  175. esCustomFieldService.addCustomField(esCustomFieldDTO);
  176. }
  177. }
  178. } catch (Exception e) {
  179. e.printStackTrace();
  180. throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "保存自定义栏位错误");
  181. }
  182. }
  183. private List<InnerFields> transforToInner(List<AllCustomFieldVO> customFieldVOS) {
  184. List<InnerFields> innerFieldsList = new ArrayList<>();
  185. for (AllCustomFieldVO allCustomFieldVO : customFieldVOS) {
  186. InnerFields innerFields = new InnerFields();
  187. innerFields.setFieldId(allCustomFieldVO.getId().toString());
  188. innerFields.setFieldType(allCustomFieldVO.getType());
  189. innerFieldsList.add(innerFields);
  190. }
  191. return innerFieldsList;
  192. }
  193. private Integer copyPatentProject(Integer targetId) {
  194. List<String> sqls = new ArrayList<>();
  195. sqls.add("id=" + targetId);
  196. sqls.add("order by t.createTime desc");
  197. sqls.add("limit 0,10");
  198. List<PatentProjectVO> patentProjectVOS = patentProjectMapper.getPatentProject(sqls.get(0), sqls.get(1), sqls.get(2));
  199. if (patentProjectVOS == null || patentProjectVOS.size() == 0) {
  200. throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "未找到专题库");
  201. }
  202. try {
  203. patentProjectService.loadPatentProject(patentProjectVOS);
  204. } catch (Exception e) {
  205. e.printStackTrace();
  206. }
  207. PatentProjectVO patentProjectVO = patentProjectVOS.get(0);
  208. PatentProjectDTO patentProjectDTO = this.transformToPatentProjectDTO(patentProjectVO);
  209. Integer newProjectId = (Integer) patentProjectService.addMessage(patentProjectDTO);
  210. return newProjectId;
  211. }
  212. public PatentProjectDTO transformToPatentProjectDTO(PatentProjectVO patentProjectVO) {
  213. PatentProjectDTO patentProjectDTO = new PatentProjectDTO();
  214. patentProjectDTO.setIfUpdate(patentProjectVO.getIfUpdate());
  215. patentProjectDTO.setStatus(patentProjectVO.getStatus());
  216. patentProjectDTO.setName(patentProjectVO.getName() + "-副本");
  217. patentProjectDTO.setEntrustId(patentProjectVO.getEntrustId());
  218. patentProjectDTO.setHeadId(patentProjectVO.getHeadId());
  219. patentProjectDTO.setDepartmentId(patentProjectVO.getDepartmentId());
  220. patentProjectDTO.setContractNo(patentProjectVO.getContractNo());
  221. patentProjectDTO.setVolumeNumber(patentProjectVO.getVolumeNumber());
  222. patentProjectDTO.setCommissionCaseDay(patentProjectVO.getCommissionCaseDay());
  223. patentProjectDTO.setDescription(patentProjectVO.getDescription());
  224. patentProjectDTO.setScenarioIds(patentProjectVO.getScenarioIds());
  225. patentProjectDTO.setMatterIds(patentProjectVO.getMatterIds());
  226. patentProjectDTO.setCrons(patentProjectVO.getCrons());
  227. patentProjectDTO.setPersonId(patentProjectVO.getCreateId());
  228. patentProjectDTO.setUpdateCycle(patentProjectVO.getUpdateCycle());
  229. if (patentProjectVO.getSystemFileList() != null) {
  230. List<String> fileGuids = patentProjectVO.getSystemFileList().stream().map(SystemFile::getGuid).collect(Collectors.toList());
  231. patentProjectDTO.setFileGuids(fileGuids);
  232. }
  233. if (patentProjectVO.getEventIds() != null) {
  234. List<ProjectEventDTO> projectEventDTOS = new ArrayList<>();
  235. patentProjectVO.getEventIds().forEach(item -> {
  236. ProjectEventDTO projectEventDTO = new ProjectEventDTO();
  237. projectEventDTO.setEventId(item);
  238. projectEventDTOS.add(projectEventDTO);
  239. });
  240. patentProjectDTO.setEvents(projectEventDTOS);
  241. }
  242. List<ProjectTreesDTO> projectTreesDTOS = new ArrayList<>();
  243. if (patentProjectVO.getProductOrCategory() != null) {
  244. ProjectTreesDTO projectTreesDTO = new ProjectTreesDTO();
  245. projectTreesDTO.setTreeType(patentProjectVO.getProductOrCategory().getType());
  246. projectTreesDTO.setValueIds(patentProjectVO.getProductOrCategory().getValueIds());
  247. projectTreesDTO.setFieldId(patentProjectVO.getProductOrCategory().getId());
  248. projectTreesDTOS.add(projectTreesDTO);
  249. patentProjectDTO.setTrees(projectTreesDTOS);
  250. }
  251. return patentProjectDTO;
  252. }
  253. }