1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474 |
- 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() > 0) {
- 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_applicant")) {
- 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();
- Integer type = vo.getType();
- Integer projectId = vo.getProjectId();
- 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);
- Map<String, Patent> map = this.getDelPatent(type, projectId, mergedName);
- if (!CollectionUtils.isEmpty(map)) {
- for (String id : map.keySet()) {
- Patent patent = map.get(id);
- List<PatentMergePerson> appPersonList = new ArrayList<>();
- List<PatentMergePerson> rightPersonList = new ArrayList<>();
- List<PatentMergePerson> inventorPersonList = new ArrayList<>();
- if (type == 0) {
- if (!CollectionUtils.isEmpty(patent.getApplicant())) {
- List<PatentPerson> applicant = patent.getApplicant();
- for (PatentPerson patentPerson : applicant) {
- PatentMergePerson merge = new PatentMergePerson();
- merge.setName(patentPerson.getName());
- merge.setType(patentPerson.getType());
- merge.setOrder(patentPerson.getOrder());
- merge.setProjectId(String.valueOf(projectId));
- appPersonList.add(merge);
- }
- }
- if (!CollectionUtils.isEmpty(patent.getRightHolder())) {
- List<PatentPerson> rightHolder = patent.getRightHolder();
- for (PatentPerson patentPerson : rightHolder) {
- PatentMergePerson merge = new PatentMergePerson();
- merge.setName(patentPerson.getName());
- merge.setType(patentPerson.getType());
- merge.setOrder(patentPerson.getOrder());
- merge.setProjectId(String.valueOf(projectId));
- rightPersonList.add(merge);
- }
- }
- } else {
- if (!CollectionUtils.isEmpty(patent.getInventor())) {
- List<PatentPerson> inventor = patent.getInventor();
- for (PatentPerson patentPerson : inventor) {
- PatentMergePerson merge = new PatentMergePerson();
- merge.setName(patentPerson.getName());
- merge.setType(patentPerson.getType());
- merge.setOrder(patentPerson.getOrder());
- merge.setProjectId(String.valueOf(projectId));
- inventorPersonList.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()) {
- //添加子文档
- Patent newPatent = new Patent();
- PatentJoin patentJoin = new PatentJoin();
- patentJoin.setParent(id);
- patentJoin.setName("merge_applicat");
- newPatent.setPatentJoin(patentJoin);
- newPatent.setMergeApplicant(appPersonList);
- 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()) {
- //添加子文档
- Patent newPatent = new Patent();
- PatentJoin patentJoin = new PatentJoin();
- patentJoin.setParent(id);
- patentJoin.setName("merge_right_holder");
- newPatent.setPatentJoin(patentJoin);
- newPatent.setMergeInventor(rightPersonList);
- String child = this.addChild(newPatent, id);
- if (StringUtils.isEmpty(child)) {
- throw new XiaoShiException("删除失败");
- } else {
- //删除原子文档
- this.delete(Arrays.asList(rightId));
- }
- }
- }
- } else {
- //发明人
- Map<String, List<PatentMergePerson>> inventorMap = this.getChildMergePerson(id, projectId, "merge_inventor");
- if (!CollectionUtils.isEmpty(inventorMap)) {
- for (String inventorId : inventorMap.keySet()) {
- //添加子文档
- Patent newPatent = new Patent();
- PatentJoin patentJoin = new PatentJoin();
- patentJoin.setParent(id);
- patentJoin.setName("merge_inventor");
- newPatent.setPatentJoin(patentJoin);
- newPatent.setMergeInventor(inventorPersonList);
- String child = this.addChild(newPatent, id);
- if (StringUtils.isEmpty(child)) {
- throw new XiaoShiException("删除失败");
- } else {
- //删除原子文档
- this.delete(Arrays.asList(inventorId));
- }
- }
- }
- }
- }
- mergePersonMapper.deleteById(person.getId());
- }
- }
- }
- if (!CollectionUtils.isEmpty(mergeName)) {
- nameList.addAll(mergeName);
- }
- MergePersonVO personVO = new MergePersonVO();
- personVO.setProjectId(projectId);
- personVO.setType(type);
- 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);
- Integer id = this.mergePerson(personVO);
- if (id < 0) {
- throw new XiaoShiException("再合并失败");
- }
- return id;
- }
- /**
- * 专利列表上编辑发明人/权利人/申请人合并
- * @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())
- .ne(BaseEntity::getId, vo.getId());
- List<MergePerson> list = mergePersonMapper.selectList(wrapper);
- if (list.size() > 0) {
- 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, name);
- }
- 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)) {
- Map<String, Patent> map = this.getDelPatent(type, projectId, name);
- 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()) {
- if (StringUtils.isNotEmpty(name)) {
- 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 (StringUtils.isNotEmpty(name)) {
- 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 (StringUtils.isNotEmpty(name)) {
- this.delSingleMerge(inventorId, type, name);
- }
- 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();
- }
- public Map<String, Patent> getDelPatent(Integer type, Integer projectId, String name) throws IOException {
- 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());
- }
- return map;
- }
- /**
- * 获取所有国家列表查询
- * @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();
- }
- //更新patent
- public Integer updateChild(Patent patent, String id, String routing) {
- UpdateRequest<Patent, Patent> req;
- req = UpdateRequest.of(
- b -> b.index("patent")
- .id(id)
- .routing(id)
- .doc(patent)
- );
- try {
- client.update(req, Patent.class);
- return 1;
- } catch (IOException e) {
- return -1;
- }
- }
- 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;
- }
- }
- }
|