Browse Source

标引/字段/权利要求

zero 1 year ago
parent
commit
67c67830ef

+ 4 - 4
src/main/java/cn/cslg/pas/common/config/WebSocketConfig.java

@@ -6,8 +6,8 @@ import org.springframework.web.socket.server.standard.ServerEndpointExporter;
 
 @Configuration
 public class WebSocketConfig {
-    @Bean
-    public ServerEndpointExporter serverEndpointExporter() {
-        return new ServerEndpointExporter();
-    }
+//    @Bean
+//    public ServerEndpointExporter serverEndpointExporter() {
+//        return new ServerEndpointExporter();
+//    }
 }

+ 5 - 0
src/main/java/cn/cslg/pas/common/dto/business/SelectClaimDTO.java

@@ -1,9 +1,14 @@
 package cn.cslg.pas.common.dto.business;
 
+import cn.cslg.pas.domain.es.Text;
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 public class SelectClaimDTO {
     //权利要求
     private String claim;
+    //统一格式的权利要求
+    private List<Text> claimContent;
 }

+ 0 - 1
src/main/java/cn/cslg/pas/common/dto/es/EsCustomFieldDTO.java

@@ -39,7 +39,6 @@ public class EsCustomFieldDTO {
     /**
      * 操作类型 0取消 1增加 2覆盖
      */
-
     Integer optionType;
 
     String patentNo;

+ 43 - 0
src/main/java/cn/cslg/pas/common/vo/es/EsCustomFieldBatchVO.java

@@ -0,0 +1,43 @@
+package cn.cslg.pas.common.vo.es;
+
+import cn.cslg.pas.common.dto.es.EsCustomFieldValueDTO;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class EsCustomFieldBatchVO {
+
+    private List<String> isAdd;
+
+    private List<String> isDel;
+
+    private Integer startNum;
+
+    private Integer endNum;
+
+    private String searchQuery;
+
+    private List<EsCustomFieldValueDTO> customFields;
+
+    //标引使用
+    private Integer projectId;
+
+    private Integer taskId;
+
+    private Integer fieldType;
+    /**
+     * 栏位
+     */
+    private String fieldId;
+    /**
+     * 栏位值
+     */
+    private List<String> fieldValue;
+    /**
+     * 操作类型 0取消 1增加 2覆盖
+     */
+    private Integer optionType;
+
+    private List<String> patentNoList;
+}

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

@@ -10,6 +10,7 @@ import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.model.request.StringRequest;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.common.vo.business.AllCustomFieldVO;
+import cn.cslg.pas.common.vo.es.EsCustomFieldBatchVO;
 import cn.cslg.pas.exception.ConditionException;
 import cn.cslg.pas.exception.UnLoginException;
 import cn.cslg.pas.exception.XiaoShiException;
@@ -138,7 +139,7 @@ public class CustomFieldController {
 
     @PostMapping("/batchAddCustomField")
     @Operation(summary = "标引/批量标引添加")
-    public Response batchAddCustomField(@RequestBody List<EsCustomFieldDTO> vo) throws Exception {
+    public Response batchAddCustomField(@RequestBody EsCustomFieldBatchVO vo) throws Exception {
         List<String> list = esCustomFieldService.batchAddCustomField(vo);
         Records records = new Records();
         records.setData(list);

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

@@ -6,6 +6,7 @@ import cn.cslg.pas.common.dto.PatentColumnDTO;
 import cn.cslg.pas.common.dto.PatentDetailDTO;
 import cn.cslg.pas.common.dto.PatentKinDTO;
 import cn.cslg.pas.common.dto.business.EsCountDTO;
+import cn.cslg.pas.common.dto.business.SelectClaimDTO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.model.request.StringRequest;
 import cn.cslg.pas.common.utils.Response;
@@ -110,6 +111,13 @@ public class PatentController {
 
     }
 
+    @Operation(summary = "根据专利号查询权利要求")
+    @GetMapping("/queryClaimByPatentNo")
+    public Response queryClaimByPatentNo(String patentNo) throws Exception {
+        SelectClaimDTO dto = esService.selectClaim(patentNo);
+        return Response.success(dto);
+    }
+
     //------------------------合并-----------------------------
     @Operation(summary = "专利列表上新增发明人/权利人/申请人合并")
     @PostMapping("/mergePerson")

+ 109 - 206
src/main/java/cn/cslg/pas/service/business/es/EsCustomFieldService.java

@@ -1,10 +1,15 @@
 package cn.cslg.pas.service.business.es;
 
 import cn.cslg.pas.common.dto.es.EsCustomFieldDTO;
+import cn.cslg.pas.common.dto.es.EsCustomFieldValueDTO;
 import cn.cslg.pas.common.dto.es.FieldHistoryDTO;
 import cn.cslg.pas.common.dto.es.QueryEsCustomFieldDTO;
 import cn.cslg.pas.common.utils.FormatUtil;
+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.PatentWithIdVO;
+import cn.cslg.pas.common.vo.es.EsCustomFieldBatchVO;
 import cn.cslg.pas.common.vo.es.FieldHistoryVO;
 import cn.cslg.pas.common.vo.es.QueryESCustomFieldVO;
 import cn.cslg.pas.domain.business.CustomField;
@@ -12,6 +17,7 @@ import cn.cslg.pas.domain.business.TreeNode;
 import cn.cslg.pas.domain.es.*;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.service.business.TreeNodeService;
+import cn.cslg.pas.service.query.FormatQueryService;
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
 import co.elastic.clients.elasticsearch._types.SortOrder;
 import co.elastic.clients.elasticsearch._types.aggregations.Aggregation;
@@ -27,13 +33,18 @@ import co.elastic.clients.json.JsonData;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.RequiredArgsConstructor;
 import lombok.Value;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import java.io.IOException;
 import java.lang.reflect.Array;
+import java.text.ParseException;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
@@ -42,6 +53,9 @@ public class EsCustomFieldService {
     private final EsService esService;
     private final TreeNodeService treeNodeService;
 
+    @Autowired
+    private FormatQueryService formatQueryService;
+
     //添加自定义栏位值
     public String addCustomField(EsCustomFieldDTO esCustomFieldDTO) throws Exception {
         ESCustomField esCustomField = new ESCustomField();
@@ -253,219 +267,108 @@ public class EsCustomFieldService {
         return id;
     }
 
-    //批量添加自定义栏位值
-    public List<String> batchAddCustomField(List<EsCustomFieldDTO> fieldDTOS) throws Exception {
+    /**
+     * 批量添加自定义栏位值
+     * @param vo
+     * @return
+     * @throws Exception
+     */
+    public List<String> batchAddCustomField(EsCustomFieldBatchVO vo) throws Exception {
+        Integer startNum = vo.getStartNum();
+        Integer endNum = vo.getEndNum();
+        List<String> isAdd = vo.getIsAdd();
+        List<String> isDel = vo.getIsDel();
         List<String> ids = new ArrayList<>();
-        for (EsCustomFieldDTO esCustomFieldDTO : fieldDTOS) {
-            ESCustomField esCustomField = new ESCustomField();
-            String id = "";
-            //判断类型
-            Integer fieldType = esCustomFieldDTO.getFieldType();
-            Integer taskId = esCustomFieldDTO.getTaskId();
-            Integer optionType = esCustomFieldDTO.getOptionType();
-            String patentNo = esCustomFieldDTO.getPatentNo();
-            String fieldId = esCustomFieldDTO.getFieldId();
-            String patentId = esCustomFieldDTO.getPatentId();
-            List<String> addValues = esCustomFieldDTO.getFieldValue();
-            Integer projectId = esCustomFieldDTO.getProjectId();
-            Date createDate = new Date();
-
-            if (optionType.equals(1) && (addValues == null || addValues.size() == 0)) {
-                throw new XiaoShiException("请填写值");
+        if (!CollectionUtils.isEmpty(isAdd) && startNum < 1 && endNum < 1) {
+            isAdd.removeAll(isDel);
+            for (String patentNo : isAdd) {
+                EsCustomFieldDTO fieldDTO = new EsCustomFieldDTO();
+                fieldDTO.setFieldId(vo.getFieldId());
+                fieldDTO.setFieldType(vo.getFieldType());
+                fieldDTO.setFieldValue(vo.getFieldValue());
+                fieldDTO.setPatentNo(patentNo);
+                fieldDTO.setOptionType(vo.getOptionType());
+                fieldDTO.setProjectId(vo.getProjectId());
+                fieldDTO.setTaskId(vo.getTaskId());
+                String field = this.addCustomField(fieldDTO);
+                ids.add(field);
             }
-
-
-            //根据专利号查询 是否专利关联过栏位
-            PatentWithIdVO patentWithIdVO = this.getEsCustomField(esCustomFieldDTO);
-            if (patentWithIdVO != null) {
-                esCustomField = patentWithIdVO.getPatent().getESCustomField();
-                id = patentWithIdVO.getId();
-            } else {
-                //设置栏位
-                esCustomField.setField(esCustomFieldDTO.getFieldId());
-                //设置专题库或报告
-                esCustomField.setProjectId(esCustomFieldDTO.getProjectId());
-                //设置创建时间
-                esCustomField.setCreateTime(createDate);
-                //设置创建人
-                esCustomField.setPersonId("1");
-                //设置类型
-                esCustomField.setFieldType(fieldType);
-                //设置任务id
-                esCustomField.setTaskId(taskId);
+        } else if (startNum > 0 && endNum > 0){
+            List<String> patentNos = this.getPatentNos(vo);
+            for (String patentNo : patentNos) {
+                EsCustomFieldDTO fieldDTO = new EsCustomFieldDTO();
+                fieldDTO.setFieldId(vo.getFieldId());
+                fieldDTO.setFieldType(vo.getFieldType());
+                fieldDTO.setFieldValue(vo.getFieldValue());
+                fieldDTO.setPatentNo(patentNo);
+                fieldDTO.setOptionType(vo.getOptionType());
+                fieldDTO.setProjectId(vo.getProjectId());
+                fieldDTO.setTaskId(vo.getTaskId());
+                String field = this.addCustomField(fieldDTO);
+                ids.add(field);
             }
-            List<String> values = esCustomField.getFieldValue();
-
-            //设置值
-            switch (fieldType) {
-                case 0:
-
-                    ;
-                case 1:
-
-                    ;
-                case 2:              //文本类型
-                    if (optionType.equals(1) || optionType.equals(2)) {
-                        if (addValues != null && addValues.size() == 1)
-                            esCustomField.setFieldValue(addValues);
-                        esCustomField.setStatsValue(addValues);
-                    } else if (optionType.equals(0)) {
-                        esCustomField.setFieldValue(new ArrayList<>());
-                        esCustomField.setStatsValue(new ArrayList<>());
-                    }
-                    break;
-                case 4:     //单选
-                    if (optionType.equals(1) || optionType.equals(2)) {
-                        if (addValues != null && addValues.size() == 1) {
-                            esCustomField.setFieldValue(addValues);
-                            esCustomField.setStatsValue(addValues);
-                        }
-                    } else if (optionType.equals(0)) {
-                        esCustomField.setFieldValue(new ArrayList<>());
-                        esCustomField.setStatsValue(new ArrayList<>());
-                    }
-                    break;
-                case 5:
-                    if (optionType.equals(1)) {
-                        List<String> orgValue = esCustomField.getFieldValue();
-
-                        if (orgValue == null) {
-                            orgValue = new ArrayList<>();
-                        }
-
-                        for (String item : addValues) {
-                            if (!orgValue.contains(item)) {
-                                orgValue.add(item);
-                            }
-                        }
-                        esCustomField.setFieldValue(orgValue);
-                        esCustomField.setStatsValue(orgValue);
-                    } else if (optionType.equals(2)) {
-                        if (addValues != null && addValues.size() > 0) {
-                            esCustomField.setFieldValue(addValues);
-                            esCustomField.setStatsValue(addValues);
-                        } else {
-                            esCustomField.setFieldValue(new ArrayList<>());
-                            esCustomField.setStatsValue(new ArrayList<>());
-                        }
-                    } else if (optionType.equals(0)) {
-                        List<String> orgValue = esCustomField.getFieldValue();
-
-                        if (orgValue == null) {
-                            orgValue = new ArrayList<>();
-                        }
-
-                        for (String item : addValues) {
-                            if (orgValue.contains(item)) {
-                                orgValue.remove(item);
-                            }
-                        }
-                        esCustomField.setFieldValue(orgValue);
-                        esCustomField.setStatsValue(orgValue);
-                    }
-                    break;
-                case 6:            //树类型
-
-                case 7:
-
-                case 8:
-
-                case 9:
-                    if (optionType.equals(1)) {
-                        //根据值获得树节点
-                        List<String> reValues = FormatUtil.getDistinctList(addValues, values);
-                        esCustomField.setFieldValue(reValues);
-                        //根据 reValues获得 reStateValues
-                        List<Integer> fieldIds = FormatUtil.StringTOIntegerList(reValues);
-                        //根据树节点id查询树节点
-                        LambdaQueryWrapper<TreeNode> queryWrapper = new LambdaQueryWrapper<>();
-                        queryWrapper.in(TreeNode::getId, fieldIds);
-                        List<TreeNode> treeNodes = treeNodeService.list(queryWrapper);
-                        //遍历节点
-                        List<String> reStateValues = new ArrayList<>(reValues);
-                        treeNodes.forEach(item -> {
-                            String path = item.getPath();
-                            if (path != null && path.trim() != "") {
-                                List<String> a = Arrays.asList(path.split("/"));
-                                reStateValues.addAll(a);
-                            }
-                        });
-
-                        List<String> disReStateValues = new ArrayList<>(new HashSet<>(reStateValues));
-                        esCustomField.setStatsValue(disReStateValues);
-                    } else if (optionType.equals(0)) {
-                        if (values != null && values.size() > 0 && addValues != null && addValues.size() > 0) {
-                            values.removeAll(addValues);
-                            esCustomField.setFieldValue(values);
-                            if (values.size() > 0) {
-                                //根据 reValues获得 reStateValues
-                                List<Integer> fieldIds = FormatUtil.StringTOIntegerList(values);
-                                //根据树节点id查询树节点
-                                LambdaQueryWrapper<TreeNode> queryWrapper = new LambdaQueryWrapper<>();
-                                queryWrapper.eq(TreeNode::getId, fieldIds);
-                                List<TreeNode> treeNodes = treeNodeService.list(queryWrapper);
-                                //遍历节点
-                                List<String> reStateValues = new ArrayList<>(values);
-                                treeNodes.forEach(item -> {
-                                    String path = item.getPath();
-                                    if (path != null && path.trim() != "") {
-                                        List<String> a = Arrays.asList(path.split("/"));
-                                        reStateValues.addAll(a);
-                                    }
-                                });
-                                List<String> disReStateValues = new ArrayList<>(new HashSet<>(reStateValues));
-                                esCustomField.setStatsValue(disReStateValues);
-                            }
-                        }
+        }
+        return ids;
+    }
 
-                    } else if (optionType.equals(2)) {
-                        esCustomField.setFieldValue(addValues);
-                        if (addValues == null || addValues.size() == 0) {
-                            esCustomField.setStatsValue(new ArrayList<>());
-                        } else {
-                            //根据 reValues获得 reStateValues
-                            List<Integer> fieldIds = FormatUtil.StringTOIntegerList(addValues);
-                            //根据树节点id查询树节点
-                            LambdaQueryWrapper<TreeNode> queryWrapper = new LambdaQueryWrapper<>();
-                            queryWrapper.eq(TreeNode::getId, fieldIds);
-                            List<TreeNode> treeNodes = treeNodeService.list(queryWrapper);
-                            //遍历节点
-                            List<String> reStateValues = new ArrayList<>(addValues);
-                            treeNodes.forEach(item -> {
-                                String path = item.getPath();
-                                if (path != null && path.trim() != "") {
-                                    List<String> a = Arrays.asList(path.split("/"));
-                                    reStateValues.addAll(a);
-                                }
-                            });
-                            List<String> disReStateValues = new ArrayList<>(new HashSet<>(reStateValues));
-                            esCustomField.setStatsValue(disReStateValues);
-                        }
-                    }
-                    break;
-            }
-            if (!id.trim().equals("")) {
-                Patent patent = patentWithIdVO.getPatent();
-                patent.setESCustomField(esCustomField);
-                esService.updatePatent(patent, patentWithIdVO.getId());
-                ESCustomFieldHistory esCustomFieldHistory = new ESCustomFieldHistory();
-                esCustomFieldHistory.setField(fieldId);
-                esCustomFieldHistory.setFieldType(fieldType);
-                esCustomFieldHistory.setCreateTime(createDate);
-                esCustomFieldHistory.setFieldValue(addValues);
-                esCustomFieldHistory.setSavedValue(esCustomField.getFieldValue());
-                esCustomFieldHistory.setHistoryType(optionType);
-                esCustomFieldHistory.setTaskId(taskId);
-                esCustomFieldHistory.setPersonId("1");
-                esCustomFieldHistory.setProjectId(projectId);
-                esCustomFieldHistory.setCustomFieldId(id);
-                this.addCustomFieldHistory(esCustomFieldHistory);
+    /**
+     * 获取专利号列表
+     * @param vo
+     * @return
+     * @throws Exception
+     */
+    public List<String> getPatentNos(EsCustomFieldBatchVO vo) throws Exception {
+        Integer taskId = vo.getTaskId();
+        Integer projectId = vo.getProjectId();
+        Integer startNum = vo.getStartNum();
+        Integer endNum = vo.getEndNum();
+        List<String> isAdd = vo.getIsAdd();
+        List<String> isDel = vo.getIsDel();
+        String searchCondition = "";
+        if (StringUtils.isNotEmpty(vo.getSearchQuery())) {
+            searchCondition = vo.getSearchQuery();
+        }
+        List<EsCustomFieldValueDTO> customFields = vo.getCustomFields();
+        if (!CollectionUtils.isEmpty(customFields)) {
+            searchCondition = esService.parseCustomField(customFields);
+        }
+        if (taskId != null) {
+            if (searchCondition != null && !"".equals(searchCondition.trim())) {
+                searchCondition = "taskId = " + taskId + " AND " + searchCondition;
             } else {
-                this.addEsCustomFieldToEs(esCustomField, patentNo, patentId);
+                searchCondition = "taskId = " + taskId;
+            }
+        } else {
+            if (projectId != null) {
+                if (searchCondition != null && !"".equals(searchCondition.trim())) {
+                    searchCondition = "projectId = " + projectId + " AND " + searchCondition;
+                } else {
+                    searchCondition = "projectId = " + projectId;
+                }
             }
-            ids.add(id);
         }
-        return ids;
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent");
+        //1. 解析检索条件
+        treeNode tree = expressManager.getInstance().Parse(searchCondition, false);
+        //格式化检索式
+        //3. 从es中检索数据
+        Query q = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
+        builder.query(q);
+        if (startNum > 0 && endNum > 0) {
+            builder.from(startNum-1).size(endNum);
+        }
+        SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+        List<Hit<Patent>> hits = response.hits().hits();
+        List<String> patentNos = new ArrayList<>();
+        for (Hit<Patent> hit : hits) {
+            Patent patent = hit.source();
+            patentNos.add(patent.getPatentNo());
+        }
+        patentNos.addAll(isAdd);
+        patentNos.removeAll(isDel);
+        return patentNos.stream().distinct().collect(Collectors.toList());
     }
 
 

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

@@ -921,6 +921,7 @@ public class EsService {
         for (Hit<Patent> hit : hits) {
             Patent esMess = hit.source();
             if (esMess != null) {
+                dto.setClaimContent(esMess.getClaim());
                 String claim = StringUtils.strip(JSON.toJSONString(esMess.getClaim()), "[]");
                 ContentDetailDTO contentDetailDTO = JSONObject.parseObject(claim, ContentDetailDTO.class);
                 if (contentDetailDTO.getIfOrigin()) {

+ 7 - 2
src/main/java/cn/cslg/pas/service/common/PatentStarApiService.java

@@ -102,7 +102,6 @@ public class PatentStarApiService {
         records.setCurrent(Long.parseLong(map.get("current").toString()));
         records.setSize(Long.parseLong(map.get("size").toString()));
         records.setData(this.loadPatent(starPatentVOS));
-//        records.setData(this.loadPatent(starPatentVOS));
         records.setTotal(Long.parseLong(map.get("total").toString()));
         return records;
     }
@@ -770,6 +769,12 @@ public class PatentStarApiService {
             text.setTextContent(item.getAbstractStr());
             abstractList.add(text);
             patentColumnDTO.setAbstractStr(abstractList);
+            //装载标题
+            List<Text> titleList = new ArrayList<>();
+            Text title = new Text();
+            title.setTextContent(item.getName());
+            titleList.add(title);
+            patentColumnDTO.setTitle(titleList);
             //装载专利号
             if (patentColumnDTO.getAppNo() != null) {
                 if (patentColumnDTO.getAppNo().trim().startsWith("CN")) {
@@ -797,7 +802,7 @@ public class PatentStarApiService {
             patentColumnDTO.setApplicantAddr(appAddress);
             //装载ipc分类号
             PatentClassify ipcClassify = new PatentClassify();
-            ipcClassify.setLevel5(item.getMainIpc());
+            ipcClassify.setLevel1(item.getMainIpc());
             patentColumnDTO.setMipc(ipcClassify);
             //装载公开日
             if (item.getPublicDate() != null && !item.getPublicDate().trim().equals("")) {

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

@@ -376,8 +376,20 @@ public class EventServiceTests {
 
 @Test
     public void aaaaa() throws Exception {
-        String searchCondition = "AD=[2008~201009]";
-        treeNode tree = expressManager.getInstance().Parse(searchCondition, false);
-System.out.println(tree);
+    List<String> a = new ArrayList<> ();
+    a.add("a");
+    a.add("b");
+    a.add("b");
+    a.add("d");
+    a.add("e");
+    List<String> b = new ArrayList<> ();
+    b.add("a");
+    b.add("b");
+
+    System.out.println(a);
+    a.removeAll(b);
+    boolean b1 = a.removeAll(b);
+    System.out.println(b1);
+    System.out.println(a);
     }
 }