12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328 |
- package cn.cslg.pas.service.business;
- import cn.cslg.pas.common.dto.GetAllCountryDTO;
- import cn.cslg.pas.common.dto.GetAllPersonDTO;
- import cn.cslg.pas.common.dto.MergePersonQueryDTO;
- import cn.cslg.pas.common.dto.PatentColumnDTO;
- import cn.cslg.pas.common.dto.es.EsMergePersonDTO;
- import cn.cslg.pas.common.dto.patentCount.GetEsAllPersonDTO;
- import cn.cslg.pas.common.model.cronModel.PersonnelVO;
- import cn.cslg.pas.common.model.cronModel.Records;
- import cn.cslg.pas.common.utils.CacheUtils;
- import cn.cslg.pas.common.utils.LoginUtils;
- import cn.cslg.pas.common.utils.parseQueryToTree.expressManager;
- import cn.cslg.pas.common.utils.parseQueryToTree.operateNode;
- import cn.cslg.pas.common.utils.parseQueryToTree.treeNode;
- import cn.cslg.pas.common.vo.business.*;
- import cn.cslg.pas.domain.BaseEntity;
- import cn.cslg.pas.domain.business.FollowUp;
- import cn.cslg.pas.domain.business.MergePerson;
- import cn.cslg.pas.domain.business.SystemDict;
- import cn.cslg.pas.domain.es.*;
- import cn.cslg.pas.exception.UnLoginException;
- import cn.cslg.pas.exception.XiaoShiException;
- import cn.cslg.pas.mapper.MergePersonMapper;
- import cn.cslg.pas.mapper.SystemDictMapper;
- import cn.cslg.pas.service.business.es.EsPatentService;
- import cn.cslg.pas.service.business.es.EsService;
- import cn.cslg.pas.service.query.FormatQueryService;
- import cn.hutool.core.util.ObjectUtil;
- import cn.hutool.core.util.PageUtil;
- import co.elastic.clients.elasticsearch.ElasticsearchClient;
- import co.elastic.clients.elasticsearch._types.InlineScript;
- import co.elastic.clients.elasticsearch._types.Script;
- import co.elastic.clients.elasticsearch._types.aggregations.Aggregation;
- import co.elastic.clients.elasticsearch._types.aggregations.AggregationBuilders;
- import co.elastic.clients.elasticsearch._types.aggregations.NestedAggregation;
- import co.elastic.clients.elasticsearch._types.aggregations.TermsAggregation;
- 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.*;
- import co.elastic.clients.elasticsearch.core.search.Hit;
- import co.elastic.clients.json.JsonData;
- import com.alibaba.fastjson.JSONArray;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.core.metadata.IPage;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.github.pagehelper.PageHelper;
- import com.google.gson.JsonArray;
- 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;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Propagation;
- import org.springframework.transaction.annotation.Transactional;
- import org.springframework.util.CollectionUtils;
- import java.io.IOException;
- import java.util.*;
- import java.util.stream.Collectors;
- /**
- * @Author xiexiang
- * @Date 2024/01/02
- */
- @Slf4j
- @Service
- public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePerson> {
- @Autowired
- private ElasticsearchClient client;
- @Autowired
- private CacheUtils cacheUtils;
- @Autowired
- private LoginUtils loginUtils;
- @Autowired
- private MergePersonMapper mergePersonMapper;
- @Autowired
- private FormatQueryService formatQueryService;
- @Autowired
- private EsPatentService esPatentService;
- @Autowired
- private EsService esService;
- @Autowired
- private SystemDictMapper systemDictMapper;
- /**
- * 专利列表上新增发明人/权利人/申请人合并
- * @param vo
- * @return
- * @throws Exception
- */
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
- public Integer mergePerson(MergePersonVO vo) throws Exception {
- Integer type = vo.getType();
- List<String> mergedNames = vo.getMergedName();
- Integer projectId = vo.getProjectId();
- //获取登陆人信息 用于设置创建人
- PersonnelVO personnelVO = new PersonnelVO();
- try {
- personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
- } catch (Exception e) {
- throw new XiaoShiException("未登录");
- }
- //判断是否名称重复
- LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
- .eq(MergePerson::getProjectId, vo.getProjectId())
- .eq(MergePerson::getName, vo.getName());
- List<MergePerson> list = mergePersonMapper.selectList(wrapper);
- if (list.size() > 1) {
- throw new XiaoShiException("合并名称不可重复");
- }
- MergePerson person = new MergePerson();
- BeanUtils.copyProperties(vo, person);
- person.setMergedName(JSONArray.toJSONString(mergedNames));
- person.setCreateId(personnelVO.getId());
- person.setCreateTime(new Date());
- person.insert();
- SearchRequest.Builder builder = new SearchRequest.Builder();
- //设置查询索引
- builder.index("patent");
- List<Query> queries = new ArrayList<>();
- if (type == 0) {
- for (String mergedName : mergedNames) {
- //合并申请人
- Query idQ1 = QueryBuilders.term(i -> i.field("merge_applicant.project_id").value(projectId));
- Query q1 = QueryBuilders.term(i -> i.field("merge_applicant.name.raw").value(mergedName));
- Query bool = QueryBuilders.bool(i -> i.must(idQ1, q1));
- Query query1 = QueryBuilders.nested(i -> i.path("merge_applicant").query(bool));
- Query childQ1 = QueryBuilders.hasChild(i -> i.type("merge_applicat").query(query1));
- //合并权利人
- Query idQ2 = QueryBuilders.term(i -> i.field("merge_right_holder.project_id").value(projectId));
- Query q2 = QueryBuilders.term(i -> i.field("merge_right_holder.name.raw").value(mergedName));
- Query bool1 = QueryBuilders.bool(i -> i.must(idQ2, q2));
- Query query2 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(bool1));
- Query childQ2 = QueryBuilders.hasChild(i -> i.type("merge_right_holder").query(query2));
- queries.add(childQ1);
- queries.add(childQ2);
- }
- } else {
- for (String mergedName : mergedNames) {
- Query idQ = QueryBuilders.term(i -> i.field("merge_inventor.project_id").value(projectId));
- Query q = QueryBuilders.term(i -> i.field("merge_inventor.name.raw").value(mergedName));
- Query bool = QueryBuilders.bool(i -> i.must(idQ, q));
- Query query = QueryBuilders.nested(i -> i.path("merge_inventor").query(bool));
- Query childQ = QueryBuilders.hasChild(i -> i.type("merge_inventor").query(query));
- queries.add(childQ);
- }
- }
- Query query = QueryBuilders.bool(i -> i.should(queries));
- builder.query(query);
- SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
- List<Hit<Patent>> hits = response.hits().hits();
- Map<String, Patent> map = new HashMap<>();
- for (Hit<Patent> hit : hits) {
- String id = hit.id();
- map.put(id, hit.source());
- }
- if (!CollectionUtils.isEmpty(map)) {
- List<PatentMergePerson> mergePersonList = new ArrayList<>();
- PatentMergePerson mergePerson = new PatentMergePerson();
- mergePerson.setName(vo.getName());
- mergePerson.setProjectId(vo.getProjectId().toString());
- mergePerson.setType("1");
- mergePerson.setOrder(1);
- mergePersonList.add(mergePerson);
- for (String id : map.keySet()) {
- if (type == 0) {
- //申请人
- Map<String, List<PatentMergePerson>> appMap = this.getChildMergePerson(id, projectId, "merge_applicant");
- if (!CollectionUtils.isEmpty(appMap)) {
- for (String appId : appMap.keySet()) {
- List<PatentMergePerson> appMergeList = new ArrayList<>(mergePersonList);
- List<PatentMergePerson> appList = appMap.get(appId);
- List<String> collect = appList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
- if (!collect.contains(vo.getName())) {
- for (String mergedName : mergedNames) {
- appList.removeIf(i -> i.getName().equals(mergedName));
- }
- appMergeList.addAll(appList);
- //添加子文档
- Patent newPatent = new Patent();
- PatentJoin patentJoin = new PatentJoin();
- patentJoin.setParent(id);
- patentJoin.setName("merge_applicat");
- newPatent.setPatentJoin(patentJoin);
- newPatent.setMergeApplicant(appMergeList);
- String child = this.addChild(newPatent, id);
- if (StringUtils.isEmpty(child)) {
- throw new XiaoShiException("合并失败");
- } else {
- //删除原子文档
- this.delete(Arrays.asList(appId));
- }
- }
- }
- }
- //权利人
- Map<String, List<PatentMergePerson>> rightMap = this.getChildMergePerson(id, projectId, "merge_right_holder");
- if (!CollectionUtils.isEmpty(rightMap)) {
- for (String rightId : rightMap.keySet()) {
- List<PatentMergePerson> rightMergeList = new ArrayList<>(mergePersonList);
- List<PatentMergePerson> rightList = rightMap.get(rightId);
- List<String> collect = rightList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
- if (!collect.contains(vo.getName())) {
- for (String mergedName : mergedNames) {
- rightList.removeIf(i -> i.getName().equals(mergedName));
- }
- rightMergeList.addAll(rightList);
- //添加子文档
- Patent newPatent = new Patent();
- PatentJoin patentJoin = new PatentJoin();
- patentJoin.setParent(id);
- patentJoin.setName("merge_right_holder");
- newPatent.setPatentJoin(patentJoin);
- newPatent.setMergeInventor(rightMergeList);
- String child = this.addChild(newPatent, id);
- if (StringUtils.isEmpty(child)) {
- throw new XiaoShiException("合并失败");
- } else {
- //删除原子文档
- this.delete(Arrays.asList(rightId));
- }
- // for (String mergedName : mergedNames) {
- // this.delSingleMerge(rightId, type, mergedName);
- // }
- // Integer num = this.add(rightId, type, mergePersonList);
- // if (num < 0) {
- // throw new XiaoShiException("合并失败");
- // }
- }
- }
- }
- } else if (type == 2) {
- Map<String, List<PatentMergePerson>> inventorMap = this.getChildMergePerson(id, projectId, "merge_inventor");
- if (!CollectionUtils.isEmpty(inventorMap)) {
- for (String inventorId : inventorMap.keySet()) {
- List<PatentMergePerson> inventorMergeList = new ArrayList<>(mergePersonList);
- List<PatentMergePerson> inventorList = inventorMap.get(inventorId);
- List<String> collect = inventorList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
- if (!collect.contains(vo.getName())) {
- for (String mergedName : mergedNames) {
- inventorList.removeIf(i -> i.getName().equals(mergedName));
- }
- inventorMergeList.addAll(inventorList);
- //添加子文档
- Patent newPatent = new Patent();
- PatentJoin patentJoin = new PatentJoin();
- patentJoin.setParent(id);
- patentJoin.setName("merge_inventor");
- newPatent.setPatentJoin(patentJoin);
- newPatent.setMergeInventor(inventorMergeList);
- String child = this.addChild(newPatent, id);
- if (StringUtils.isEmpty(child)) {
- throw new XiaoShiException("合并失败");
- } else {
- //删除原子文档
- this.delete(Arrays.asList(inventorId));
- }
- }
- }
- }
- }
- }
- } else {
- throw new XiaoShiException("合并失败");
- }
- return person.getId();
- }
- public Map<String, List<PatentMergePerson>> getChildMergePerson(String id, Integer projectId, String mergeType) throws IOException {
- String path = mergeType + "." + "project_id";
- SearchRequest.Builder builder = new SearchRequest.Builder();
- //设置查询索引
- builder.index("patent");
- Query idQ = QueryBuilders.term(i -> i.field(path).value(projectId));
- Query query = QueryBuilders.nested(i -> i.path(mergeType).query(idQ));
- IdsQuery idsQuery = IdsQuery.of(n -> n.values(Arrays.asList(id)));
- Query q = QueryBuilders.hasParent(i -> i.parentType("patent").query(j -> j.ids(idsQuery)));
- Query bool = QueryBuilders.bool(i -> i.must(q, query));
- builder.query(bool);
- SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
- List<Hit<Patent>> hits = response.hits().hits();
- Map<String, List<PatentMergePerson>> map = new HashMap<>();
- for (Hit<Patent> hit : hits) {
- String id1 = hit.id();
- Patent patent = hit.source();
- if (mergeType.equals("merge_applicat")) {
- if (!CollectionUtils.isEmpty(patent.getMergeApplicant())) {
- map.put(id1, patent.getMergeApplicant());
- }
- } else if (mergeType.equals("merge_right_holder")) {
- if (!CollectionUtils.isEmpty(patent.getMergeRightHolder())) {
- map.put(id1, patent.getMergeRightHolder());
- }
- } else {
- if (!CollectionUtils.isEmpty(patent.getMergeInventor())) {
- map.put(id1, patent.getMergeInventor());
- }
- }
- }
- return map;
- }
- /**
- * 专利列表上再次新增发明人/权利人/申请人合并
- * @param vo
- * @return
- * @throws Exception
- */
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
- public Integer mergePersonAgain(MergePersonAgainVO vo) throws Exception {
- List<String> mergedNames = vo.getNeedMergedName();
- List<String> mergeName = vo.getMergedName();
- List<String> nameList = new ArrayList<>();
- if (!CollectionUtils.isEmpty(mergedNames)) {
- for (String mergedName : mergedNames) {
- MergePerson person = mergePersonMapper.selectOne(new LambdaQueryWrapper<MergePerson>()
- .eq(MergePerson::getProjectId, vo.getProjectId())
- .eq(MergePerson::getName, mergedName));
- String name = person.getMergedName();
- List<String> getNames = JSONArray.parseArray(name, String.class);
- nameList.addAll(getNames);
- MergePersonIdVO personIdVO = new MergePersonIdVO();
- personIdVO.setId(person.getId());
- personIdVO.setType(person.getType());
- this.delMergePerson(personIdVO);
- }
- }
- if (!CollectionUtils.isEmpty(mergeName)) {
- nameList.addAll(mergeName);
- }
- MergePersonVO personVO = new MergePersonVO();
- personVO.setProjectId(vo.getProjectId());
- personVO.setType(vo.getType());
- personVO.setName(vo.getName());
- personVO.setAbbreviation(vo.getAbbreviation());
- personVO.setCountry(vo.getCountry());
- personVO.setProvince(vo.getProvince());
- personVO.setAddress(vo.getAddress());
- personVO.setRemark(vo.getRemark());
- personVO.setMergedName(nameList);
- return this.mergePerson(personVO);
- }
- /**
- * 专利列表上编辑发明人/权利人/申请人合并
- * @param vo
- * @return
- * @throws Exception
- */
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
- public Integer updateMergePerson(MergePersonVO vo) throws Exception {
- //获取登陆人信息 用于设置创建人
- PersonnelVO personnelVO = new PersonnelVO();
- Integer type = vo.getType();
- try {
- personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
- } catch (Exception e) {
- throw new XiaoShiException("未登录");
- }
- //判断是否名称重复
- LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
- .eq(MergePerson::getProjectId, vo.getProjectId())
- .eq(MergePerson::getName, vo.getName());
- List<MergePerson> list = mergePersonMapper.selectList(wrapper);
- if (list.size() > 1) {
- throw new XiaoShiException("合并名称不可重复");
- }
- //获取老专利
- MergePerson person = this.getById(vo.getId());
- String name = person.getName();
- Integer projectId = person.getProjectId();
- if (ObjectUtil.isNotEmpty(person)) {
- BeanUtils.copyProperties(vo, person);
- person.setCreateId(personnelVO.getId());
- person.setCreateTime(new Date());
- person.updateById();
- if (!name.equals(vo.getName())) {
- SearchRequest.Builder builder = new SearchRequest.Builder();
- //设置查询索引
- builder.index("patent");
- List<Query> queries = new ArrayList<>();
- if (type == 0) {
- //合并申请人
- Query idQ1 = QueryBuilders.term(i -> i.field("merge_applicant.project_id").value(projectId));
- Query q1 = QueryBuilders.term(i -> i.field("merge_applicant.name.raw").value(name));
- Query bool = QueryBuilders.bool(i -> i.must(idQ1, q1));
- Query query1 = QueryBuilders.nested(i -> i.path("merge_applicant").query(bool));
- Query childQ1 = QueryBuilders.hasChild(i -> i.type("merge_applicat").query(query1));
- //合并权利人
- Query idQ2 = QueryBuilders.term(i -> i.field("merge_right_holder.project_id").value(projectId));
- Query q2 = QueryBuilders.term(i -> i.field("merge_right_holder.name.raw").value(name));
- Query bool1 = QueryBuilders.bool(i -> i.must(idQ2, q2));
- Query query2 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(bool1));
- Query childQ2 = QueryBuilders.hasChild(i -> i.type("merge_right_holder").query(query2));
- queries.add(childQ1);
- queries.add(childQ2);
- } else {
- Query idQ = QueryBuilders.term(i -> i.field("merge_inventor.project_id").value(projectId));
- Query q = QueryBuilders.term(i -> i.field("merge_inventor.name.raw").value(name));
- Query bool = QueryBuilders.bool(i -> i.must(idQ, q));
- Query query = QueryBuilders.nested(i -> i.path("merge_inventor").query(bool));
- Query childQ = QueryBuilders.hasChild(i -> i.type("merge_inventor").query(query));
- queries.add(childQ);
- }
- Query query = QueryBuilders.bool(i -> i.should(queries));
- builder.query(query);
- SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
- List<Hit<Patent>> hits = response.hits().hits();
- Map<String, Patent> map = new HashMap<>();
- for (Hit<Patent> hit : hits) {
- String id = hit.id();
- map.put(id, hit.source());
- }
- if (!CollectionUtils.isEmpty(map)) {
- for (String id : map.keySet()) {
- if (type == 0) {
- //申请人
- Map<String, List<PatentMergePerson>> appMap = this.getChildMergePerson(id, projectId, "merge_applicant");
- if (!CollectionUtils.isEmpty(appMap)) {
- for (String appId : appMap.keySet()) {
- this.edit(appId, type, name, vo.getName());
- }
- }
- //权利人
- Map<String, List<PatentMergePerson>> rightMap = this.getChildMergePerson(id, projectId, "merge_right_holder");
- if (!CollectionUtils.isEmpty(rightMap)) {
- for (String rightId : rightMap.keySet()) {
- this.edit(rightId, type, name, vo.getName());
- }
- }
- } else if (type == 2) {
- Map<String, List<PatentMergePerson>> inventorMap = this.getChildMergePerson(id, projectId, "merge_inventor");
- if (!CollectionUtils.isEmpty(inventorMap)) {
- for (String inventorId : inventorMap.keySet()) {
- this.edit(inventorId, type, name, vo.getName());
- }
- }
- }
- }
- } else {
- throw new XiaoShiException("编辑失败");
- }
- }
- } else {
- person = new MergePerson();
- }
- return person.getId();
- }
- /**
- * 发明人/权利人/申请人合并列表查询
- * @param vo
- * @return
- */
- public Records selectMergePersonList(MergePersonQueryVO vo) {
- List<MergePersonQueryDTO> list = new ArrayList<>();
- IPage<MergePerson> page = new Page<>(vo.getPageNum(), vo.getPageSize());
- LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
- .eq(MergePerson::getProjectId, vo.getProjectId())
- .eq(MergePerson::getType, vo.getType())
- .eq(StringUtils.isNotEmpty(vo.getCountry()), MergePerson::getCountry, vo.getCountry())
- .like(StringUtils.isNotEmpty(vo.getName()), MergePerson::getName, vo.getName());
- IPage<MergePerson> record = mergePersonMapper.selectPage(page, wrapper);
- for (MergePerson person : record.getRecords()) {
- MergePersonQueryDTO dto = new MergePersonQueryDTO();
- dto.setId(person.getId());
- dto.setProjectId(person.getProjectId());
- dto.setType(person.getType());
- dto.setName(person.getName());
- dto.setAddress(person.getAddress());
- dto.setCountry(person.getCountry());
- dto.setProvince(person.getProvince());
- dto.setRemark(person.getRemark());
- dto.setAbbreviation(person.getAbbreviation());
- dto.setCreateTime(person.getCreateTime());
- List<String> names = JSONArray.parseArray(person.getMergedName(), String.class);
- dto.setMergedName(names);
- list.add(dto);
- }
- Records records = new Records();
- records.setCurrent(record.getCurrent());
- records.setSize(record.getSize());
- records.setData(list);
- records.setTotal(record.getTotal());
- return records;
- }
- /**
- * 合并人员详情
- * @param vo
- * @return
- */
- public MergePersonQueryDTO selectMergePersonDetail(MergePersonIdVO vo) {
- MergePersonQueryDTO dto = new MergePersonQueryDTO();
- MergePerson person = mergePersonMapper.selectById(vo.getId());
- if (ObjectUtil.isNotEmpty(person)) {
- BeanUtils.copyProperties(person, dto);
- List<String> names = JSONArray.parseArray(person.getMergedName(), String.class);
- dto.setMergedName(names);
- }
- return dto;
- }
- /**
- * 获取所有发明人/权利人/申请人
- * @param vo
- * @return
- * @throws Exception
- */
- public Records getMergePerson(GetAllPersonVO vo) throws Exception {
- Integer projectId = vo.getProjectId();
- Long pageNum = vo.getPageNum();
- Long pageSize = vo.getPageSize();
- Integer type = vo.getType();
- String condition = vo.getSearchQuery();
- List<String> conditionList = new ArrayList<>();
- if (StringUtils.isNotEmpty(condition)) {
- String s = condition.substring(condition.indexOf("=") + 1);
- if (s.contains("or")) {
- String[] split = s.split("or");
- conditionList.addAll(Arrays.asList(split));
- } else {
- conditionList.add(s);
- }
- }
- List<GetEsAllPersonDTO> personDTOS = new ArrayList<>();
- SearchRequest.Builder builder = new SearchRequest.Builder();
- //设置查询索引
- builder.index("patent");
- if (!CollectionUtils.isEmpty(conditionList)) {
- for (String name : conditionList) {
- List<Query> queries = new ArrayList<>();
- if (type == 0) {
- //合并申请人
- Query idQ1 = QueryBuilders.term(i -> i.field("merge_applicant.project_id").value(projectId));
- Query q1 = QueryBuilders.term(i -> i.field("merge_applicant.name.raw").value(name));
- Query bool = QueryBuilders.bool(i -> i.must(idQ1, q1));
- Query query1 = QueryBuilders.nested(i -> i.path("merge_applicant").query(bool));
- Query childQ1 = QueryBuilders.hasChild(i -> i.type("merge_applicat").query(query1));
- //合并权利人
- Query idQ2 = QueryBuilders.term(i -> i.field("merge_right_holder.project_id").value(projectId));
- Query q2 = QueryBuilders.term(i -> i.field("merge_right_holder.name.raw").value(name));
- Query bool1 = QueryBuilders.bool(i -> i.must(idQ2, q2));
- Query query2 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(bool1));
- Query childQ2 = QueryBuilders.hasChild(i -> i.type("merge_right_holder").query(query2));
- queries.add(childQ1);
- queries.add(childQ2);
- } else {
- Query idQ = QueryBuilders.term(i -> i.field("merge_inventor.project_id").value(projectId));
- Query q = QueryBuilders.term(i -> i.field("merge_inventor.name.raw").value(name));
- Query bool = QueryBuilders.bool(i -> i.must(idQ, q));
- Query query = QueryBuilders.nested(i -> i.path("merge_inventor").query(bool));
- Query childQ = QueryBuilders.hasChild(i -> i.type("merge_inventor").query(query));
- queries.add(childQ);
- }
- Query bool = QueryBuilders.bool(i -> i.should(queries));
- builder.query(bool);
- //分页
- // if (pageNum > 0 && pageSize > 0) {
- // builder.from((pageNum.intValue() - 1) * pageSize.intValue()).size(pageSize.intValue());
- // }
- SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
- List<Hit<Patent>> hits = response.hits().hits();
- Map<String, Patent> map = new HashMap<>();
- for (Hit<Patent> hit : hits) {
- String id = hit.id();
- map.put(id, hit.source());
- }
- if (!CollectionUtils.isEmpty(map)) {
- for (String id : map.keySet()) {
- GetEsAllPersonDTO personDTO = new GetEsAllPersonDTO();
- if (type == 0) {
- //申请人
- Map<String, List<PatentMergePerson>> appMap = this.getChildMergePerson(id, projectId, "merge_applicant");
- if (!CollectionUtils.isEmpty(appMap)) {
- for (String appId : appMap.keySet()) {
- List<PatentMergePerson> appList = appMap.get(appId);
- List<String> collect = appList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
- personDTO.setMergeApplicant(collect);
- }
- }
- //权利人
- Map<String, List<PatentMergePerson>> rightMap = this.getChildMergePerson(id, projectId, "merge_right_holder");
- if (!CollectionUtils.isEmpty(rightMap)) {
- for (String rightId : rightMap.keySet()) {
- List<PatentMergePerson> rightList = rightMap.get(rightId);
- List<String> collect = rightList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
- personDTO.setMergeRightHolder(collect);
- }
- }
- } else {
- //发明人
- Map<String, List<PatentMergePerson>> inventorMap = this.getChildMergePerson(id, projectId, "merge_inventor");
- if (!CollectionUtils.isEmpty(inventorMap)) {
- for (String inventorId : inventorMap.keySet()) {
- List<PatentMergePerson> inventorList = inventorMap.get(inventorId);
- List<String> collect = inventorList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
- personDTO.setMergeInventor(collect);
- }
- }
- }
- personDTOS.add(personDTO);
- }
- }
- }
- } else {
- List<Query> queries = new ArrayList<>();
- if (type == 0) {
- Query q1 = QueryBuilders.term(i -> i.field("merge_applicant.project_id").value(projectId));
- Query query1 = QueryBuilders.nested(i -> i.path("merge_applicant").query(q1));
- Query childQ1 = QueryBuilders.hasChild(i -> i.type("merge_applicat").query(query1));
- queries.add(childQ1);
- Query q2 = QueryBuilders.term(i -> i.field("merge_right_holder.project_id").value(projectId));
- Query query2 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(q2));
- Query childQ2 = QueryBuilders.hasChild(i -> i.type("merge_right_holder").query(query2));
- queries.add(childQ2);
- } else {
- Query q = QueryBuilders.term(i -> i.field("merge_inventor.project_id").value(projectId));
- Query query = QueryBuilders.nested(i -> i.path("merge_inventor").query(q));
- Query childQ = QueryBuilders.hasChild(i -> i.type("merge_inventor").query(query));
- queries.add(childQ);
- }
- Query bool = QueryBuilders.bool(i -> i.should(queries));
- builder.query(bool);
- //分页
- // if (pageNum > 0 && pageSize > 0) {
- // builder.from((pageNum.intValue() - 1) * pageSize.intValue()).size(pageSize.intValue());
- // }
- SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
- List<Hit<Patent>> hits = response.hits().hits();
- Map<String, Patent> map = new HashMap<>();
- for (Hit<Patent> hit : hits) {
- String id = hit.id();
- map.put(id, hit.source());
- }
- if (!CollectionUtils.isEmpty(map)) {
- for (String id : map.keySet()) {
- GetEsAllPersonDTO personDTO = new GetEsAllPersonDTO();
- if (type == 0) {
- //申请人
- Map<String, List<PatentMergePerson>> appMap = this.getChildMergePerson(id, projectId, "merge_applicant");
- if (!CollectionUtils.isEmpty(appMap)) {
- for (String appId : appMap.keySet()) {
- List<PatentMergePerson> appList = appMap.get(appId);
- List<String> collect = appList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
- personDTO.setMergeApplicant(collect);
- }
- }
- //权利人
- Map<String, List<PatentMergePerson>> rightMap = this.getChildMergePerson(id, projectId, "merge_right_holder");
- if (!CollectionUtils.isEmpty(rightMap)) {
- for (String rightId : rightMap.keySet()) {
- List<PatentMergePerson> rightList = rightMap.get(rightId);
- List<String> collect = rightList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
- personDTO.setMergeRightHolder(collect);
- }
- }
- } else {
- //发明人
- Map<String, List<PatentMergePerson>> inventorMap = this.getChildMergePerson(id, projectId, "merge_inventor");
- if (!CollectionUtils.isEmpty(inventorMap)) {
- for (String inventorId : inventorMap.keySet()) {
- List<PatentMergePerson> inventorList = inventorMap.get(inventorId);
- List<String> collect = inventorList.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
- personDTO.setMergeInventor(collect);
- }
- }
- }
- personDTOS.add(personDTO);
- }
- }
- }
- //es申请人/权利人
- List<String> mergeList = new ArrayList<>();
- if (!CollectionUtils.isEmpty(personDTOS)) {
- if (type == 0) {
- for (GetEsAllPersonDTO personDTO : personDTOS) {
- List<String> appList = new ArrayList<>();
- if (!CollectionUtils.isEmpty(personDTO.getMergeApplicant())) {
- appList = personDTO.getMergeApplicant();
- mergeList.addAll(appList);
- }
- List<String> rightList = new ArrayList<>();
- if (!CollectionUtils.isEmpty(personDTO.getMergeRightHolder())) {
- rightList = personDTO.getMergeRightHolder();
- mergeList.addAll(rightList);
- }
- }
- } else {
- for (GetEsAllPersonDTO personDTO : personDTOS) {
- List<String> inventorList = new ArrayList<>();
- if (!CollectionUtils.isEmpty(personDTO.getMergeInventor())) {
- inventorList = personDTO.getMergeInventor();
- mergeList.addAll(inventorList);
- }
- }
- }
- }
- List<GetAllPersonDTO> personDTOList = new ArrayList<>();
- List<GetAllPersonDTO> mergePersonList = new ArrayList<>();
- List<GetAllPersonDTO> personList = new ArrayList<>();
- List<String> nameList = mergeList.stream().distinct().collect(Collectors.toList());
- for (String key : nameList) {
- MergePerson person = mergePersonMapper.selectOne(new LambdaQueryWrapper<MergePerson>()
- .eq(MergePerson::getName, key)
- .eq(MergePerson::getProjectId, projectId));
- if (ObjectUtils.isNotEmpty(person)) {
- GetAllPersonDTO dto = new GetAllPersonDTO();
- dto.setName(person.getName());
- dto.setMergeId(person.getId());
- dto.setType(person.getType());
- dto.setRemark(person.getRemark());
- dto.setAbbreviation(person.getAbbreviation());
- dto.setCountry(person.getCountry());
- dto.setProvince(person.getProvince());
- dto.setAddress(person.getAddress());
- mergePersonList.add(dto);
- } else {
- GetAllPersonDTO dto = new GetAllPersonDTO();
- dto.setName(key);
- personList.add(dto);
- }
- }
- if (!CollectionUtils.isEmpty(mergePersonList)) {
- List<GetAllPersonDTO> collect = mergePersonList.stream().sorted(Comparator.comparing(GetAllPersonDTO::getName)).collect(Collectors.toList());
- personDTOList.addAll(collect);
- }
- if (!CollectionUtils.isEmpty(personList)) {
- List<GetAllPersonDTO> collect = personList.stream().sorted(Comparator.comparing(GetAllPersonDTO::getName)).collect(Collectors.toList());
- personDTOList.addAll(collect);
- }
- List<GetAllPersonDTO> collect = personDTOList.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
- Records records = new Records();
- records.setCurrent(pageNum);
- records.setSize(pageSize);
- records.setData(collect);
- records.setTotal((long) personDTOList.size());
- return records;
- }
- /**
- * 发明人/权利人/申请人合并后的名称移除
- * @param vo
- * @return
- * @throws Exception
- */
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
- public Integer delMergedName(MergedNameVO vo) throws Exception {
- Integer type = vo.getType();
- //要移除的名字
- String delName = vo.getDelName();
- //合并后的名称
- String name = vo.getName();
- Integer projectId = vo.getProjectId();
- MergePerson mergePerson = mergePersonMapper.selectOne(new LambdaQueryWrapper<MergePerson>()
- .eq(MergePerson::getName, name)
- .eq(MergePerson::getProjectId, projectId));
- if (ObjectUtil.isNotEmpty(mergePerson)) {
- Integer personId = mergePerson.getId();
- String mergedName = mergePerson.getMergedName();
- List<String> list = JSONArray.parseArray(mergedName, String.class);
- list.remove(delName);
- MergePerson person = mergePersonMapper.selectById(personId);
- person.setMergedName(JSONArray.toJSONString(list));
- person.updateById();
- //移除后最后剩下的名称
- String finalMergedName = person.getMergedName();
- List<String> nameDatas = JSONArray.parseArray(finalMergedName, String.class);
- SearchRequest.Builder builder = new SearchRequest.Builder();
- //设置查询索引
- builder.index("patent");
- List<Query> queries = new ArrayList<>();
- if (type == 0) {
- //合并申请人
- Query idQ1 = QueryBuilders.term(i -> i.field("merge_applicant.project_id").value(projectId));
- Query q1 = QueryBuilders.term(i -> i.field("merge_applicant.name.raw").value(name));
- Query bool = QueryBuilders.bool(i -> i.must(idQ1, q1));
- Query query1 = QueryBuilders.nested(i -> i.path("merge_applicant").query(bool));
- Query childQ1 = QueryBuilders.hasChild(i -> i.type("merge_applicat").query(query1));
- //合并权利人
- Query idQ2 = QueryBuilders.term(i -> i.field("merge_right_holder.project_id").value(projectId));
- Query q2 = QueryBuilders.term(i -> i.field("merge_right_holder.name.raw").value(name));
- Query bool1 = QueryBuilders.bool(i -> i.must(idQ2, q2));
- Query query2 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(bool1));
- Query childQ2 = QueryBuilders.hasChild(i -> i.type("merge_right_holder").query(query2));
- queries.add(childQ1);
- queries.add(childQ2);
- } else {
- Query idQ = QueryBuilders.term(i -> i.field("merge_inventor.project_id").value(projectId));
- Query q = QueryBuilders.term(i -> i.field("merge_inventor.name.raw").value(name));
- Query bool = QueryBuilders.bool(i -> i.must(idQ, q));
- Query query = QueryBuilders.nested(i -> i.path("merge_inventor").query(bool));
- Query childQ = QueryBuilders.hasChild(i -> i.type("merge_inventor").query(query));
- queries.add(childQ);
- }
- Query query = QueryBuilders.bool(i -> i.should(queries));
- builder.query(query);
- SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
- List<Hit<Patent>> hits = response.hits().hits();
- Map<String, Patent> map = new HashMap<>();
- for (Hit<Patent> hit : hits) {
- String id = hit.id();
- map.put(id, hit.source());
- }
- if (!CollectionUtils.isEmpty(map)) {
- for (String id : map.keySet()) {
- Patent patent = map.get(id);
- List<PatentMergePerson> mergePersonList = new ArrayList<>();
- if (type == 0) {
- if (!CollectionUtils.isEmpty(patent.getApplicant())) {
- List<PatentPerson> applicant = patent.getApplicant();
- List<String> collect = applicant.stream().map(PatentPerson::getName).collect(Collectors.toList());
- if (collect.contains(delName)) {
- for (PatentPerson patentPerson : applicant) {
- if (delName.equals(patentPerson.getName())) {
- PatentMergePerson merge = new PatentMergePerson();
- merge.setName(delName);
- merge.setType(patentPerson.getType());
- merge.setOrder(patentPerson.getOrder());
- merge.setProjectId(String.valueOf(projectId));
- mergePersonList.add(merge);
- }
- }
- }
- }
- if (CollectionUtils.isEmpty(mergePersonList) && !CollectionUtils.isEmpty(patent.getRightHolder())) {
- List<PatentPerson> rightHolder = patent.getRightHolder();
- List<String> collect = rightHolder.stream().map(PatentPerson::getName).collect(Collectors.toList());
- if (collect.contains(delName)) {
- for (PatentPerson patentPerson : rightHolder) {
- if (delName.equals(patentPerson.getName())) {
- PatentMergePerson merge = new PatentMergePerson();
- merge.setName(delName);
- merge.setType(patentPerson.getType());
- merge.setOrder(patentPerson.getOrder());
- merge.setProjectId(String.valueOf(projectId));
- mergePersonList.add(merge);
- }
- }
- }
- }
- } else {
- if (!CollectionUtils.isEmpty(patent.getInventor())) {
- List<PatentPerson> inventor = patent.getInventor();
- List<String> collect = inventor.stream().map(PatentPerson::getName).collect(Collectors.toList());
- if (collect.contains(delName)) {
- for (PatentPerson patentPerson : inventor) {
- if (delName.equals(patentPerson.getName())) {
- PatentMergePerson merge = new PatentMergePerson();
- merge.setName(delName);
- merge.setType(patentPerson.getType());
- merge.setOrder(patentPerson.getOrder());
- merge.setProjectId(String.valueOf(projectId));
- mergePersonList.add(merge);
- }
- }
- }
- }
- }
- if (type == 0) {
- //申请人
- Map<String, List<PatentMergePerson>> appMap = this.getChildMergePerson(id, projectId, "merge_applicant");
- if (!CollectionUtils.isEmpty(appMap)) {
- for (String appId : appMap.keySet()) {
- if (CollectionUtils.isEmpty(nameDatas)) {
- this.delSingleMerge(appId, type, name);
- }
- List<PatentMergePerson> appMergeList = new ArrayList<>(mergePersonList);
- List<PatentMergePerson> appList = appMap.get(appId);
- appMergeList.addAll(appList);
- //添加子文档
- Patent newPatent = new Patent();
- PatentJoin patentJoin = new PatentJoin();
- patentJoin.setParent(id);
- patentJoin.setName("merge_applicat");
- newPatent.setPatentJoin(patentJoin);
- newPatent.setMergeApplicant(appMergeList);
- String child = this.addChild(newPatent, id);
- if (StringUtils.isEmpty(child)) {
- throw new XiaoShiException("移除失败");
- } else {
- //删除原子文档
- this.delete(Arrays.asList(appId));
- }
- }
- }
- //权利人
- Map<String, List<PatentMergePerson>> rightMap = this.getChildMergePerson(id, projectId, "merge_right_holder");
- if (!CollectionUtils.isEmpty(rightMap)) {
- for (String rightId : rightMap.keySet()) {
- if (CollectionUtils.isEmpty(nameDatas)) {
- this.delSingleMerge(rightId, type, name);
- }
- ArrayList<PatentMergePerson> rightMergeList = new ArrayList<>(mergePersonList);
- List<PatentMergePerson> rightList = rightMap.get(rightId);
- rightMergeList.addAll(rightList);
- //添加子文档
- Patent newPatent = new Patent();
- PatentJoin patentJoin = new PatentJoin();
- patentJoin.setParent(id);
- patentJoin.setName("merge_right_holder");
- newPatent.setPatentJoin(patentJoin);
- newPatent.setMergeRightHolder(rightMergeList);
- String child = this.addChild(newPatent, id);
- if (StringUtils.isEmpty(child)) {
- throw new XiaoShiException("移除失败");
- } else {
- //删除原子文档
- this.delete(Arrays.asList(rightId));
- }
- }
- }
- } else if (type == 2) {
- Map<String, List<PatentMergePerson>> inventorMap = this.getChildMergePerson(id, projectId, "merge_inventor");
- if (!CollectionUtils.isEmpty(inventorMap)) {
- for (String inventorId : inventorMap.keySet()) {
- if (CollectionUtils.isEmpty(nameDatas)) {
- this.delSingleMerge(inventorId, type, mergedName);
- }
- ArrayList<PatentMergePerson> inventorMergeList = new ArrayList<>(mergePersonList);
- List<PatentMergePerson> inventorList = inventorMap.get(inventorId);
- inventorMergeList.addAll(inventorList);
- //添加子文档
- Patent newPatent = new Patent();
- PatentJoin patentJoin = new PatentJoin();
- patentJoin.setParent(id);
- patentJoin.setName("merge_inventor");
- newPatent.setPatentJoin(patentJoin);
- newPatent.setMergeInventor(inventorMergeList);
- String child = this.addChild(newPatent, id);
- if (StringUtils.isEmpty(child)) {
- throw new XiaoShiException("移除失败");
- } else {
- //删除原子文档
- this.delete(Arrays.asList(inventorId));
- }
- }
- }
- }
- }
- } else {
- throw new XiaoShiException("移除失败");
- }
- }
- return mergePerson.getId();
- }
- /**
- * 发明人/权利人/申请人合并记录删除
- * @param vo
- * @return
- * @throws Exception
- */
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
- public Integer delMergePerson(MergePersonIdVO vo) throws Exception {
- Integer type = vo.getType();
- MergePerson mergePerson = mergePersonMapper.selectById(vo.getId());
- //合并后的名称
- String name = mergePerson.getName();
- //专题库id
- Integer projectId = mergePerson.getProjectId();
- //合并的名称
- String mergedName = mergePerson.getMergedName();
- if (ObjectUtil.isNotEmpty(mergePerson)) {
- LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
- .eq(BaseEntity::getId, vo.getId());
- this.remove(wrapper);
- List<String> list = JSONArray.parseArray(mergedName, String.class);
- if (!CollectionUtils.isEmpty(list)) {
- SearchRequest.Builder builder = new SearchRequest.Builder();
- //设置查询索引
- builder.index("patent");
- List<Query> queries = new ArrayList<>();
- if (type == 0) {
- //合并申请人
- Query idQ1 = QueryBuilders.term(i -> i.field("merge_applicant.project_id").value(projectId));
- Query q1 = QueryBuilders.term(i -> i.field("merge_applicant.name.raw").value(name));
- Query bool = QueryBuilders.bool(i -> i.must(idQ1, q1));
- Query query1 = QueryBuilders.nested(i -> i.path("merge_applicant").query(bool));
- Query childQ1 = QueryBuilders.hasChild(i -> i.type("merge_applicat").query(query1));
- //合并权利人
- Query idQ2 = QueryBuilders.term(i -> i.field("merge_right_holder.project_id").value(projectId));
- Query q2 = QueryBuilders.term(i -> i.field("merge_right_holder.name.raw").value(name));
- Query bool1 = QueryBuilders.bool(i -> i.must(idQ2, q2));
- Query query2 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(bool1));
- Query childQ2 = QueryBuilders.hasChild(i -> i.type("merge_right_holder").query(query2));
- queries.add(childQ1);
- queries.add(childQ2);
- } else {
- Query idQ = QueryBuilders.term(i -> i.field("merge_inventor.project_id").value(projectId));
- Query q = QueryBuilders.term(i -> i.field("merge_inventor.name.raw").value(name));
- Query bool = QueryBuilders.bool(i -> i.must(idQ, q));
- Query query = QueryBuilders.nested(i -> i.path("merge_inventor").query(bool));
- Query childQ = QueryBuilders.hasChild(i -> i.type("merge_inventor").query(query));
- queries.add(childQ);
- }
- Query query = QueryBuilders.bool(i -> i.should(queries));
- builder.query(query);
- SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
- List<Hit<Patent>> hits = response.hits().hits();
- Map<String, Patent> map = new HashMap<>();
- for (Hit<Patent> hit : hits) {
- String id = hit.id();
- map.put(id, hit.source());
- }
- if (!CollectionUtils.isEmpty(map)) {
- for (String id : map.keySet()) {
- Patent patent = map.get(id);
- List<PatentMergePerson> mergePersonList = new ArrayList<>();
- if (type == 0) {
- if (!CollectionUtils.isEmpty(patent.getApplicant())) {
- List<PatentPerson> applicant = patent.getApplicant();
- for (PatentPerson patentPerson : applicant) {
- if (list.contains(patentPerson.getName())) {
- PatentMergePerson merge = new PatentMergePerson();
- merge.setName(patentPerson.getName());
- merge.setType(patentPerson.getType());
- merge.setOrder(patentPerson.getOrder());
- merge.setProjectId(String.valueOf(projectId));
- mergePersonList.add(merge);
- }
- }
- }
- if (!CollectionUtils.isEmpty(patent.getRightHolder()) && list.size() != mergePersonList.size()) {
- List<PatentPerson> rightHolder = patent.getRightHolder();
- for (PatentPerson patentPerson : rightHolder) {
- if (list.contains(patentPerson.getName())) {
- PatentMergePerson merge = new PatentMergePerson();
- merge.setName(patentPerson.getName());
- merge.setType(patentPerson.getType());
- merge.setOrder(patentPerson.getOrder());
- merge.setProjectId(String.valueOf(projectId));
- mergePersonList.add(merge);
- }
- }
- }
- } else {
- if (!CollectionUtils.isEmpty(patent.getInventor())) {
- List<PatentPerson> inventor = patent.getInventor();
- for (PatentPerson patentPerson : inventor) {
- if (list.contains(patentPerson.getName())) {
- PatentMergePerson merge = new PatentMergePerson();
- merge.setName(patentPerson.getName());
- merge.setType(patentPerson.getType());
- merge.setOrder(patentPerson.getOrder());
- merge.setProjectId(String.valueOf(projectId));
- mergePersonList.add(merge);
- }
- }
- }
- }
- if (type == 0) {
- //申请人
- Map<String, List<PatentMergePerson>> appMap = this.getChildMergePerson(id, projectId, "merge_applicant");
- if (!CollectionUtils.isEmpty(appMap)) {
- for (String appId : appMap.keySet()) {
- List<PatentMergePerson> appMergeList = new ArrayList<>(mergePersonList);
- List<PatentMergePerson> appList = appMap.get(appId);
- appMergeList.addAll(appList);
- //添加子文档
- Patent newPatent = new Patent();
- PatentJoin patentJoin = new PatentJoin();
- patentJoin.setParent(id);
- patentJoin.setName("merge_applicat");
- newPatent.setPatentJoin(patentJoin);
- newPatent.setMergeApplicant(appMergeList);
- String child = this.addChild(newPatent, id);
- if (StringUtils.isEmpty(child)) {
- throw new XiaoShiException("删除失败");
- } else {
- //删除原子文档
- this.delete(Arrays.asList(appId));
- }
- }
- }
- //权利人
- Map<String, List<PatentMergePerson>> rightMap = this.getChildMergePerson(id, projectId, "merge_right_holder");
- if (!CollectionUtils.isEmpty(rightMap)) {
- for (String rightId : rightMap.keySet()) {
- ArrayList<PatentMergePerson> rightMergeList = new ArrayList<>(mergePersonList);
- List<PatentMergePerson> rightList = rightMap.get(rightId);
- rightMergeList.addAll(rightList);
- //添加子文档
- Patent newPatent = new Patent();
- PatentJoin patentJoin = new PatentJoin();
- patentJoin.setParent(id);
- patentJoin.setName("merge_right_holder");
- newPatent.setPatentJoin(patentJoin);
- newPatent.setMergeRightHolder(rightMergeList);
- String child = this.addChild(newPatent, id);
- if (StringUtils.isEmpty(child)) {
- throw new XiaoShiException("删除失败");
- } else {
- //删除原子文档
- this.delete(Arrays.asList(rightId));
- }
- }
- }
- } else if (type == 2) {
- Map<String, List<PatentMergePerson>> inventorMap = this.getChildMergePerson(id, projectId, "merge_inventor");
- if (!CollectionUtils.isEmpty(inventorMap)) {
- for (String inventorId : inventorMap.keySet()) {
- ArrayList<PatentMergePerson> inventorMergeList = new ArrayList<>(mergePersonList);
- List<PatentMergePerson> inventorList = inventorMap.get(inventorId);
- inventorMergeList.addAll(inventorList);
- //添加子文档
- Patent newPatent = new Patent();
- PatentJoin patentJoin = new PatentJoin();
- patentJoin.setParent(id);
- patentJoin.setName("merge_inventor");
- newPatent.setPatentJoin(patentJoin);
- newPatent.setMergeInventor(inventorMergeList);
- String child = this.addChild(newPatent, id);
- if (StringUtils.isEmpty(child)) {
- throw new XiaoShiException("删除失败");
- } else {
- //删除原子文档
- this.delete(Arrays.asList(inventorId));
- }
- }
- }
- }
- }
- } else {
- throw new XiaoShiException("删除失败");
- }
- }
- }
- return vo.getId();
- }
- /**
- * 获取所有国家列表查询
- * @return
- */
- public List<GetAllCountryDTO> getAllCountry() {
- List<GetAllCountryDTO> list = new ArrayList<>();
- List<SystemDict> countries = systemDictMapper.selectList(new LambdaQueryWrapper<SystemDict>()
- .eq(SystemDict::getType, "COUNTRIES"));
- if (!CollectionUtils.isEmpty(countries)) {
- countries.forEach(county -> {
- GetAllCountryDTO dto = new GetAllCountryDTO();
- dto.setLabel(county.getLabel());
- dto.setValue(county.getValue());
- dto.setType(county.getType());
- list.add(dto);
- });
- }
- return list;
- }
- /**
- * 获取国内省份列表查询
- * @return
- */
- public List<GetAllCountryDTO> getAllProvince() {
- List<GetAllCountryDTO> list = new ArrayList<>();
- List<SystemDict> countries = systemDictMapper.selectList(new LambdaQueryWrapper<SystemDict>()
- .eq(SystemDict::getType, "PROVINCE"));
- if (!CollectionUtils.isEmpty(countries)) {
- countries.forEach(county -> {
- GetAllCountryDTO dto = new GetAllCountryDTO();
- dto.setLabel(county.getLabel());
- dto.setValue(county.getValue());
- dto.setType(county.getType());
- list.add(dto);
- });
- }
- return list;
- }
- /**
- * @param patent
- * @throws Exception
- */
- public String addChild(Patent patent, String id) throws Exception {
- IndexResponse indexResponse = client.index(i -> i
- .index("patent")
- .routing(id)
- //传入user对象
- .document(patent)
- );
- return indexResponse.id();
- }
- public Integer delete(List<String> ids) {
- Query query = QueryBuilders.ids(n -> n.values(ids));
- DeleteByQueryRequest request = DeleteByQueryRequest.of(i -> i.index("patent").query(query));
- try {
- client.deleteByQuery(request);
- return 1;
- } catch (IOException e) {
- throw new XiaoShiException("删除失败");
- }
- }
- /**
- * 删除申请人/权利人/发明人合并名称
- *
- * @param id
- * @return
- */
- public Integer delSingleMerge(String id,Integer type, String name) {
- String source = "";
- if (type == 0) {
- source = "if (ctx._source.merge_applicant != null) { ctx._source.merge_applicant.removeIf(item -> item.name == params.name); } if (ctx._source.merge_right_holder != null) { ctx._source.merge_right_holder .removeIf(item -> item.name == params.name); }";
- } else {
- source = "if (ctx._source.merge_inventor != null) { ctx._source.merge_inventor.removeIf(item -> item.name == params.name); }";
- }
- String finalSource = source;
- InlineScript inlineScript = InlineScript.of(i -> i.lang("painless").params("name", JsonData.of(name)).source(finalSource));
- Script script = Script.of(i -> i.inline(inlineScript));
- Query query = QueryBuilders.term(i -> i.field("_id").value(id));
- UpdateByQueryRequest request = UpdateByQueryRequest.of(i -> i.index("patent").script(script).query(query));
- try {
- client.updateByQuery(request);
- return 1;
- } catch (IOException e) {
- return -1;
- }
- }
- public Integer add(String id,Integer type,List<PatentMergePerson> mergePersonList) {
- Integer flag = null;
- for (PatentMergePerson mergePerson : mergePersonList) {
- Map<String, JsonData> map = new HashMap<>();
- map.put("name", JsonData.of(mergePerson.getName()));
- map.put("project_id", JsonData.of(mergePerson.getProjectId()));
- map.put("type", JsonData.of(mergePerson.getType()));
- map.put("order", JsonData.of(mergePerson.getOrder()));
- String source = "";
- if (type == 0) {
- source = "if (ctx._source.merge_applicant != null) {ctx._source.merge_applicant.add(params.data)} else { List list = new ArrayList();list.add(params.data);ctx._source.merge_applicant = list;}" +
- "if (ctx._source.merge_right_holder != null) { ctx._source.merge_right_holder.add(params.data)} else { List list = new ArrayList();list.add(params.data);ctx._source.merge_right_holder = list;}";
- } else {
- source = "if (ctx._source.merge_inventor != null) {ctx._source.merge_inventor.add(params.data)} else { List list = new ArrayList();list.add(params.data);ctx._source.merge_inventor = list;}";
- }
- String finalSource = source;
- InlineScript inlineScript = InlineScript.of(i -> i.lang("painless").params("data", JsonData.of(map)).source(finalSource));
- Script script = Script.of(i -> i.inline(inlineScript));
- Query query = QueryBuilders.term(i -> i.field("_id").value(id));
- UpdateByQueryRequest request = UpdateByQueryRequest.of(i -> i.index("patent").script(script).query(query));
- try {
- client.updateByQuery(request);
- flag += 1;
- } catch (IOException e) {
- flag += -1;
- }
- }
- return flag;
- }
- public Integer edit(String id,Integer type,String oldName, String newName) {
- String source = "";
- if (type == 0) {
- source = "if (ctx._source.merge_applicant != null) {for (item in ctx._source.merge_applicant) {if(item['name']==params.oldName){item['name']=params.newName}}}" +
- "if (ctx._source.merge_right_holder != null) {for (item in ctx._source.merge_right_holder) {if(item['name']==params.oldName){item['name']=params.newName}}}";
- } else {
- source = "if (ctx._source.merge_inventor != null) {for (item in ctx._source.merge_inventor) {if(item['name']==params.oldName){item['name']=params.newName}}}";
- }
- String finalSource = source;
- Map<String, JsonData> map = new HashMap<>();
- map.put("oldName", JsonData.of(oldName));
- map.put("newName", JsonData.of(newName));
- InlineScript inlineScript = InlineScript.of(i -> i.lang("painless").params(map).source(finalSource));
- Script script = Script.of(i -> i.inline(inlineScript));
- Query query = QueryBuilders.term(i -> i.field("_id").value(id));
- UpdateByQueryRequest request = UpdateByQueryRequest.of(i -> i.index("patent").script(script).query(query));
- try {
- client.updateByQuery(request);
- return 1;
- } catch (IOException e) {
- return -1;
- }
- }
- }
|