MergePersonService.java 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. package cn.cslg.pas.service.business;
  2. import cn.cslg.pas.common.dto.GetAllPersonDTO;
  3. import cn.cslg.pas.common.dto.MergePersonQueryDTO;
  4. import cn.cslg.pas.common.dto.PatentColumnDTO;
  5. import cn.cslg.pas.common.dto.patentCount.GetEsAllPersonDTO;
  6. import cn.cslg.pas.common.model.cronModel.PersonnelVO;
  7. import cn.cslg.pas.common.model.cronModel.Records;
  8. import cn.cslg.pas.common.utils.CacheUtils;
  9. import cn.cslg.pas.common.utils.LoginUtils;
  10. import cn.cslg.pas.common.utils.parseQueryToTree.expressManager;
  11. import cn.cslg.pas.common.utils.parseQueryToTree.operateNode;
  12. import cn.cslg.pas.common.utils.parseQueryToTree.treeNode;
  13. import cn.cslg.pas.common.vo.business.GetAllPersonVO;
  14. import cn.cslg.pas.common.vo.business.MergePersonIdVO;
  15. import cn.cslg.pas.common.vo.business.MergePersonQueryVO;
  16. import cn.cslg.pas.common.vo.business.MergePersonVO;
  17. import cn.cslg.pas.domain.BaseEntity;
  18. import cn.cslg.pas.domain.business.FollowUp;
  19. import cn.cslg.pas.domain.business.MergePerson;
  20. import cn.cslg.pas.domain.es.Patent;
  21. import cn.cslg.pas.domain.es.PersonAddress;
  22. import cn.cslg.pas.exception.UnLoginException;
  23. import cn.cslg.pas.mapper.MergePersonMapper;
  24. import cn.cslg.pas.service.business.es.EsPatentService;
  25. import cn.cslg.pas.service.query.FormatQueryService;
  26. import cn.hutool.core.util.ObjectUtil;
  27. import cn.hutool.core.util.PageUtil;
  28. import co.elastic.clients.elasticsearch.ElasticsearchClient;
  29. import co.elastic.clients.elasticsearch._types.aggregations.Aggregation;
  30. import co.elastic.clients.elasticsearch._types.aggregations.AggregationBuilders;
  31. import co.elastic.clients.elasticsearch._types.aggregations.NestedAggregation;
  32. import co.elastic.clients.elasticsearch._types.aggregations.TermsAggregation;
  33. import co.elastic.clients.elasticsearch._types.query_dsl.Query;
  34. import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
  35. import co.elastic.clients.elasticsearch.core.SearchRequest;
  36. import co.elastic.clients.elasticsearch.core.SearchResponse;
  37. import co.elastic.clients.elasticsearch.core.search.Hit;
  38. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  39. import com.baomidou.mybatisplus.core.metadata.IPage;
  40. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  41. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  42. import com.github.pagehelper.PageHelper;
  43. import lombok.extern.slf4j.Slf4j;
  44. import org.apache.commons.lang3.StringUtils;
  45. import org.springframework.beans.BeanUtils;
  46. import org.springframework.beans.factory.annotation.Autowired;
  47. import org.springframework.stereotype.Service;
  48. import org.springframework.transaction.annotation.Propagation;
  49. import org.springframework.transaction.annotation.Transactional;
  50. import org.springframework.util.CollectionUtils;
  51. import java.util.ArrayList;
  52. import java.util.Date;
  53. import java.util.HashMap;
  54. import java.util.List;
  55. import java.util.stream.Collectors;
  56. /**
  57. * @Author xiexiang
  58. * @Date 2024/01/02
  59. */
  60. @Slf4j
  61. @Service
  62. public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePerson> {
  63. @Autowired
  64. private ElasticsearchClient client;
  65. @Autowired
  66. private CacheUtils cacheUtils;
  67. @Autowired
  68. private LoginUtils loginUtils;
  69. @Autowired
  70. private MergePersonMapper mergePersonMapper;
  71. @Autowired
  72. private FormatQueryService formatQueryService;
  73. @Autowired
  74. private EsPatentService esPatentService;
  75. @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
  76. public Integer mergePerson(MergePersonVO vo) {
  77. //获取登陆人信息 用于设置创建人
  78. PersonnelVO personnelVO = new PersonnelVO();
  79. try {
  80. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  81. } catch (Exception e) {
  82. throw new UnLoginException("未登录");
  83. }
  84. MergePerson person = new MergePerson();
  85. BeanUtils.copyProperties(vo, person);
  86. person.setCreateId(personnelVO.getId());
  87. person.setCreateTime(new Date());
  88. person.insert();
  89. //todo 关联相关专利
  90. return person.getId();
  91. }
  92. @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
  93. public Integer updateMergePerson(MergePersonVO vo) {
  94. //获取登陆人信息 用于设置创建人
  95. PersonnelVO personnelVO = new PersonnelVO();
  96. try {
  97. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  98. } catch (Exception e) {
  99. throw new UnLoginException("未登录");
  100. }
  101. MergePerson person = this.getById(vo.getId());
  102. if (ObjectUtil.isNotEmpty(person)) {
  103. BeanUtils.copyProperties(vo, person);
  104. person.setCreateId(personnelVO.getId());
  105. person.setCreateTime(new Date());
  106. person.updateById();
  107. //todo 关联相关专利
  108. } else {
  109. person = new MergePerson();
  110. }
  111. return person.getId();
  112. }
  113. public Records selectMergePersonList(MergePersonQueryVO vo) {
  114. List<MergePersonQueryDTO> list = new ArrayList<>();
  115. IPage<MergePerson> page = new Page<>(vo.getPageNum(), vo.getPageSize());
  116. LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
  117. .eq(StringUtils.isNotEmpty(vo.getCountry()), MergePerson::getCountry, vo.getCountry())
  118. .like(StringUtils.isNotEmpty(vo.getName()), MergePerson::getName, vo.getName());
  119. IPage<MergePerson> record = mergePersonMapper.selectPage(page, wrapper);
  120. for (MergePerson person : record.getRecords()) {
  121. MergePersonQueryDTO dto = new MergePersonQueryDTO();
  122. dto.setId(person.getId());
  123. dto.setName(person.getName());
  124. dto.setAddress(person.getAddress());
  125. dto.setCountry(person.getCountry());
  126. dto.setRemark(person.getRemark());
  127. dto.setCreateTime(person.getCreateTime());
  128. list.add(dto);
  129. }
  130. Records records = new Records();
  131. records.setCurrent(record.getCurrent());
  132. records.setSize(record.getSize());
  133. records.setData(list);
  134. records.setTotal(record.getTotal());
  135. return records;
  136. }
  137. public Records getMergePerson(GetAllPersonVO vo) throws Exception {
  138. String searchCondition = "";
  139. Integer projectId = vo.getProjectId();
  140. Integer taskId = vo.getTaskId();
  141. String name = vo.getName();
  142. String field = vo.getField();
  143. Integer pageNum = vo.getPageNum();
  144. Integer pageSize = vo.getPageSize();
  145. if (taskId != null) {
  146. searchCondition = "taskId = " + taskId;
  147. } else {
  148. if (projectId != null) {
  149. searchCondition = "projectId = " + projectId;
  150. }
  151. }
  152. SearchRequest.Builder builder = new SearchRequest.Builder();
  153. //设置查询索引
  154. builder.index("patent");
  155. //1. 解析检索条件
  156. treeNode tree = expressManager.getInstance().Parse(searchCondition, false);
  157. //格式化检索式
  158. //3. 从es中检索数据
  159. Query q = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
  160. //分页
  161. if (pageNum > 0 && pageSize > 0) {
  162. builder.from((pageNum - 1) * pageSize).size(pageSize);
  163. }
  164. builder.query(q);
  165. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  166. List<Hit<Patent>> hits = response.hits().hits();
  167. List<GetEsAllPersonDTO> personDTOS = new ArrayList<>();
  168. for (Hit<Patent> hit : hits) {
  169. Patent esMess = hit.source();
  170. PersonAddress applicantAddr = esMess.getApplicantAddr();
  171. GetEsAllPersonDTO personDTO = new GetEsAllPersonDTO();
  172. personDTO.setAddress(applicantAddr.getAddress());
  173. personDTO.setCountry(applicantAddr.getCountry());
  174. personDTO.setApplicant(esPatentService.loadName(esMess.getApplicant()));
  175. personDTO.setRightHolder(esPatentService.loadName(esMess.getRightHolder()));
  176. personDTO.setInventor(esPatentService.loadName(esMess.getInventor()));
  177. personDTOS.add(personDTO);
  178. }
  179. List<GetAllPersonDTO> allPersonDTOS = new ArrayList<>();
  180. List<String> applicants = new ArrayList<>();
  181. List<String> inventors = new ArrayList<>();
  182. for (GetEsAllPersonDTO personDTO : personDTOS) {
  183. applicants.addAll(personDTO.getApplicant());
  184. inventors.addAll(personDTO.getInventor());
  185. }
  186. List<String> applicantList = applicants.stream().distinct().collect(Collectors.toList());
  187. List<String> inventorList = inventors.stream().distinct().collect(Collectors.toList());
  188. for (String applicant : applicantList) {
  189. GetAllPersonDTO dto = new GetAllPersonDTO();
  190. dto.setName(applicant);
  191. dto.setType(0);
  192. allPersonDTOS.add(dto);
  193. }
  194. for (String inventor : inventorList) {
  195. GetAllPersonDTO dto = new GetAllPersonDTO();
  196. dto.setName(inventor);
  197. dto.setType(2);
  198. allPersonDTOS.add(dto);
  199. }
  200. // List<GetAllPersonDTO> list = allPersonDTOS.stream().distinct().collect(Collectors.toList());
  201. Records records = new Records();
  202. // records.setCurrent(queryRequest.getCurrent());
  203. // records.setSize(queryRequest.getSize());
  204. // records.setData(patentDTO.getPatents());
  205. // records.setTotal(patentDTO.getTotal());
  206. return records;
  207. }
  208. public Integer delMergePerson(MergePersonIdVO vo) {
  209. LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
  210. .eq(BaseEntity::getId, vo.getId());
  211. this.remove(wrapper);
  212. //todo 删掉相关合并的名称
  213. return vo.getId();
  214. }
  215. }