zero 1 rok pred
rodič
commit
e0a3929826

+ 2 - 0
src/main/java/cn/cslg/pas/common/vo/business/MergePersonIdVO.java

@@ -7,4 +7,6 @@ public class MergePersonIdVO {
 
     private Integer id;
 
+    private Integer type;
+
 }

+ 4 - 0
src/main/java/cn/cslg/pas/common/vo/business/MergePersonQueryVO.java

@@ -5,6 +5,10 @@ import lombok.Data;
 @Data
 public class MergePersonQueryVO {
 
+    private Integer type;
+
+    private Integer projectId;
+
     private String name;
 
     private String country;

+ 2 - 2
src/main/java/cn/cslg/pas/controller/PatentController.java

@@ -129,7 +129,7 @@ public class PatentController {
 
     @Operation(summary = "专利列表上编辑发明人/权利人/申请人合并")
     @PostMapping("/updateMergePerson")
-    public Response updateMergePerson(@RequestBody MergePersonVO personVO) {
+    public Response updateMergePerson(@RequestBody MergePersonVO personVO) throws Exception{
         Integer personId = mergePersonService.updateMergePerson(personVO);
         return Response.success(personId);
     }
@@ -150,7 +150,7 @@ public class PatentController {
 
     @Operation(summary = "发明人/权利人/申请人合并记录删除")
     @PostMapping("/delMergePerson")
-    public Response delMergePerson(@RequestBody MergePersonIdVO vo) {
+    public Response delMergePerson(@RequestBody MergePersonIdVO vo) throws Exception {
         Integer id = mergePersonService.delMergePerson(vo);
         return Response.success(id);
     }

+ 91 - 14
src/main/java/cn/cslg/pas/service/business/MergePersonService.java

@@ -93,10 +93,11 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
         }
         MergePerson person = new MergePerson();
         BeanUtils.copyProperties(vo, person);
+        person.setMergedName(JSONArray.toJSONString(mergedNames));
         person.setCreateId(personnelVO.getId());
         person.setCreateTime(new Date());
         person.insert();
-        //todo  关联相关专利
+
         SearchRequest.Builder builder = new SearchRequest.Builder();
         //设置查询索引
         builder.index("patent");
@@ -119,14 +120,13 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
         builder.query(query);
         SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
         List<Hit<Patent>> hits = response.hits().hits();
-        List<String> ids = new ArrayList<>();
         Map<String, Patent> map = new HashMap<>();
         for (Hit<Patent> hit : hits) {
             String id = hit.id();
             map.put(id, hit.source());
         }
 
-        if (!CollectionUtils.isEmpty(ids)) {
+        if (!CollectionUtils.isEmpty(map)) {
             List<PatentMergePerson> mergePersonList = new ArrayList<>();
             PatentMergePerson mergePerson = new PatentMergePerson();
             mergePerson.setName(vo.getName());
@@ -137,8 +137,9 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
 
             for (String id : map.keySet()) {
                 Patent patent = map.get(id);
-                List<PatentMergePerson> mergeApplicant = patent.getMergeApplicant();
-
+                List<PatentMergePerson> mergeApplicants = patent.getMergeApplicant();
+                List<String> Names = mergeApplicants.stream().map(PatentMergePerson::getName).collect(Collectors.toList());
+                mergePersonList.addAll(mergeApplicants);
                 patent.setMergeApplicant(mergePersonList);
                 patent.setMergeRightHolder(mergePersonList);
                 esService.updateMergePerson(patent, id);
@@ -148,21 +149,70 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
     }
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
-    public Integer updateMergePerson(MergePersonVO vo) {
+    public Integer updateMergePerson(MergePersonVO vo) throws IOException {
         //获取登陆人信息 用于设置创建人
         PersonnelVO personnelVO = new PersonnelVO();
+        Integer type = vo.getType();
         try {
             personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
         } catch (Exception e) {
             throw new UnLoginException("未登录");
         }
         MergePerson person = this.getById(vo.getId());
+        String mergedName = person.getMergedName();
+        String name = person.getName();
         if (ObjectUtil.isNotEmpty(person)) {
             BeanUtils.copyProperties(vo, person);
+            person.setMergedName(JSONArray.toJSONString(vo.getMergedName()));
             person.setCreateId(personnelVO.getId());
             person.setCreateTime(new Date());
             person.updateById();
-            //todo  关联相关专利
+
+            List<String> mergedNames = JSONArray.parseArray(mergedName, String.class);
+            SearchRequest.Builder builder = new SearchRequest.Builder();
+            //设置查询索引
+            builder.index("patent");
+
+            List<Query> queries = new ArrayList<>();
+            if (type == 0) {
+                for (String merged : mergedNames) {
+                    Query q = QueryBuilders.term(i -> i.field("applicant.name").value(merged));
+                    Query query = QueryBuilders.nested(i -> i.path("applicant").query(q));
+                    queries.add(query);
+                }
+            } else {
+                for (String merged : mergedNames) {
+                    Query q = QueryBuilders.term(i -> i.field("inventor.name").value(merged));
+                    Query query = QueryBuilders.nested(i -> i.path("inventor").query(q));
+                    queries.add(query);
+                }
+            }
+            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> mergeApplicants = patent.getMergeApplicant();
+                    if (!name.equals(vo.getName())) {
+                        for (PatentMergePerson mergeApplicant : mergeApplicants) {
+                            if (mergeApplicant.getName().equals(name)) {
+                                mergeApplicant.setName(vo.getName());
+                            }
+                        }
+                    }
+                    patent.setMergeApplicant(mergeApplicants);
+                    patent.setMergeRightHolder(mergeApplicants);
+                    esService.updateMergePerson(patent, id);
+                }
+            }
         } else {
             person = new MergePerson();
         }
@@ -173,6 +223,8 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
         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);
@@ -284,7 +336,7 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
             int size = applicantDTOS.size();
             records.setData(applicantDTOS.stream().limit(vo.getPageSize()).collect(Collectors.toList()));
             if (total >= size) {
-                records.setTotal((long)size);
+                records.setTotal((long) size);
             } else {
                 records.setTotal(total);
             }
@@ -292,7 +344,7 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
             int size = inventorDTOS.size();
             records.setData(inventorDTOS.stream().limit(vo.getPageSize()).collect(Collectors.toList()));
             if (total >= size) {
-                records.setTotal((long)size);
+                records.setTotal((long) size);
             } else {
                 records.setTotal(total);
             }
@@ -300,12 +352,37 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
         return records;
     }
 
-    public Integer delMergePerson(MergePersonIdVO vo) {
-        LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
-                .eq(BaseEntity::getId, vo.getId());
-        this.remove(wrapper);
+    public Integer delMergePerson(MergePersonIdVO vo) throws IOException {
+        Integer type = vo.getType();
+        MergePerson mergePerson = mergePersonMapper.selectById(vo.getId());
+        if (ObjectUtil.isNotEmpty(mergePerson)) {
+            LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
+                    .eq(BaseEntity::getId, vo.getId());
+            this.remove(wrapper);
+
+            //todo 删掉相关合并的名称
+            SearchRequest.Builder builder = new SearchRequest.Builder();
+            //设置查询索引
+            builder.index("patent");
 
-        //todo 删掉相关合并的名称
+            Query q = QueryBuilders.term(i -> i.field("merge_applicant.name").value(mergePerson.getName()));
+            Query query = QueryBuilders.nested(i -> i.path("merge_applicant").query(q));
+            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);
+                    esService.delMergePerson(patent, id, type,mergePerson.getName());
+                }
+            }
+        }
         return vo.getId();
     }
 }

+ 0 - 1
src/main/java/cn/cslg/pas/service/business/PDFExportFirstPageService.java

@@ -7,7 +7,6 @@ import cn.cslg.pas.common.utils.FormatUtil;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.service.business.es.EsService;
 import cn.cslg.pas.service.common.FileManagerService;
-import com.spire.pdf.PdfPageSize;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.pdfbox.multipdf.PDFMergerUtility;
 import org.apache.pdfbox.io.MemoryUsageSetting;

+ 40 - 9
src/main/java/cn/cslg/pas/service/business/es/EsService.java

@@ -37,6 +37,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
+import org.elasticsearch.client.RequestOptions;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
@@ -44,6 +45,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import java.io.IOException;
+import java.text.SimpleDateFormat;
 import java.util.*;
 
 
@@ -437,7 +439,7 @@ public class EsService {
     }
     }*/
     //更新子文档
-    public Integer updateByQuery(Patent patent, String id) {
+    public Integer updateByQuery(Patent patent, String id) throws IOException {
         ESCustomField customField = patent.getESCustomField();
         String valueField = "[";
         List<String> fieldValueList = customField.getFieldValue();
@@ -468,16 +470,18 @@ public class EsService {
             }
         }
         valueStats = valueStats + "]";
-
-        String projectId = "ctx._source.custom_field.project_id = " + customField.getProjectId() + ";" + "\n";
-        String field = "ctx._source.custom_field.field=" + customField.getField() + ";" + "\n";
-        String fieldType = "ctx._source.custom_field.field_type = " + customField.getFieldType() + ";" + "\n";
-        String personId = "ctx._source.custom_field.person_id = " + customField.getPersonId() + ";" + "\n";
-        String createTime = "ctx._source.custom_field.create_time = " + customField.getCreateTime().getTime() + ";" + "\n";
-        String fieldValue = "ctx._source.custom_field.field_value = " + valueField + ";" + "\n";
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        String s = format.format(customField.getCreateTime());
+        String dateStr = "\'" + s + "\'";
+        String projectId = "ctx._source.custom_field.project_id = " + customField.getProjectId() + ";";
+        String field = "ctx._source.custom_field.field=" + customField.getField() + ";";
+        String fieldType = "ctx._source.custom_field.field_type = " + customField.getFieldType() + ";";
+        String personId = "ctx._source.custom_field.person_id = " + customField.getPersonId() + ";";
+        String createTime = "ctx._source.custom_field.create_time = " + dateStr + ";";
+        String fieldValue = "ctx._source.custom_field.field_value = " + valueField + ";";
         String statsValue = "ctx._source.custom_field.stats_value = " + valueStats;
 
-        String source = "\"\"\"" + projectId + field + fieldType + personId + createTime + fieldValue + statsValue  + "\n" + "\"\"\"";
+        String source = projectId + field + fieldType + personId + createTime + fieldValue + statsValue;
         InlineScript inlineScript = InlineScript.of(i -> i.lang("painless").source(source));
         Script script = Script.of(i -> i.inline(inlineScript));
         Query query = QueryBuilders.term(i -> i.field("_id").value(id));
@@ -1070,6 +1074,33 @@ public class EsService {
             return -1;
         }
     }
+
+    /**
+     * 删除申请人/权利人/发明人合并名称
+     *
+     * @param patent
+     * @param id
+     * @return
+     */
+    public Integer delMergePerson(Patent patent, 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;
+        }
+    }
 }
 
 

+ 10 - 3
src/test/java/cn/cslg/pas/service/EventServiceTests.java

@@ -22,6 +22,7 @@ import cn.cslg.pas.common.vo.business.TempleByReportTypeVO;
 import cn.cslg.pas.controller.EventController;
 import cn.cslg.pas.controller.PatentController;
 import cn.cslg.pas.domain.es.FamilyPatent;
+import cn.cslg.pas.domain.es.Patent;
 import cn.cslg.pas.domain.es.PatentFamilyMessage;
 import cn.cslg.pas.service.business.ProductMarketDataService;
 import cn.cslg.pas.service.business.TempleService;
@@ -376,7 +377,7 @@ public class EventServiceTests {
 
     @Test
     public void aaaaa() throws Exception {
-        List<String> list = Arrays.asList("");
+        List<String> list = Arrays.asList("gh,ji");
         String str = "[";
         if (list.size() >= 1) {
             for (int i = 0; i < list.size(); i++) {
@@ -398,11 +399,17 @@ public class EventServiceTests {
         String personId = "ctx._source.custom_field.person_id = " + 1 + ";" + "\n";
         String createTime = "ctx._source.custom_field.create_time = " + new Date().getTime() + ";" + "\n";
         String fieldValue = "ctx._source.custom_field.field_value = " + str + ";" + "\n";
-        String statsValue = "ctx._source.custom_field.stats_value = " + list + ";";
+        String statsValue = "ctx._source.custom_field.stats_value = " + list;
 
-        String source = "\"\"" + projectId + field + fieldType + personId + createTime + fieldValue + statsValue + "\"\"";
+        String source = "\"" + projectId + field + fieldType + personId + createTime + fieldValue + statsValue + "\"";
 //        String source = "\"\"ctx._source.custom_field.project_id = " + 1 + ";" + "\n" +
 //                "ctx._source.custom_field.field=" + 2 + ";" + "\n" + "\"\"";
         System.out.println(source);
+
+        Patent patent = new Patent();
+        String id = "hy7ayIwB68vilgBjUWBz";
+        String name = "士大夫";
+        Integer type = 0;
+        esService.delMergePerson(patent, id, type, name);
     }
 }