lwhhszx пре 2 година
родитељ
комит
4870a42064

+ 3 - 1
PAS/src/main/java/cn/cslg/pas/service/PatentService.java

@@ -430,6 +430,8 @@ public class PatentService extends ServiceImpl<PatentMapper, Patent> {
         List<PatentSimpleFamilyLink> patentInpadocFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(dataPage.getRecords().stream().map(Patent::getInpadocFamily).collect(Collectors.toList()));
         List<PatentSimpleFamilyLink> patentPatSnapFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(dataPage.getRecords().stream().map(Patent::getPatSnapFamily).collect(Collectors.toList()));
         List<SystemDict> systemDictList = systemDictService.getSystemDictListByType(Arrays.asList(Constants.PATENT_TYPE, Constants.PATENT_SIMPLE_STATUS));
+        //获得所有的自定义字段信息
+        Map<Integer,List<PatentDTO.Field>> map =projectFieldService.getPatentFieldByPatentIdAndProjectId2(params.getProjectId(),patentIds);
         dataPage.getRecords().forEach(item -> {
             PatentDTO patentDTO = new PatentDTO();
             BeanUtils.copyProperties(item, patentDTO);
@@ -457,7 +459,7 @@ public class PatentService extends ServiceImpl<PatentMapper, Patent> {
             patentDTO.setFamily(patentFamily);
             patentDTO.setAgent(patentAgentList.stream().filter(patentAgent -> patentAgent.getPatentId().equals(item.getId())).collect(Collectors.toList()));
             // TODO 性能优化
-            patentDTO.setField(projectFieldService.getPatentFieldByPatentIdAndProjectId(params.getProjectId(), item.getId()));
+            patentDTO.setField(map.get(item.getId()));
             records.add(patentDTO);
         });
         pageList.setTotal(dataPage.getTotal());

+ 51 - 1
PAS/src/main/java/cn/cslg/pas/service/ProjectFieldService.java

@@ -80,7 +80,57 @@ public class ProjectFieldService extends ServiceImpl<ProjectFieldMapper, Project
         });
         return dataList;
     }
-
+    public Map<Integer,List<PatentDTO.Field>> getPatentFieldByPatentIdAndProjectId2(Integer projectId, List<Integer> patentIds) {
+        Map<Integer,List<PatentDTO.Field>> map =new HashMap<>();
+        //根据专利号和专题库id获得所有自定义字段关联数据
+        LambdaQueryWrapper<ProjectFieldPatentLink> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(ProjectFieldPatentLink::getPatentId, patentIds);
+        queryWrapper.eq(ProjectFieldPatentLink::getProjectId, projectId);
+        List<ProjectFieldPatentLink> linkList=projectFieldPatentLinkService.list(queryWrapper);
+        List<Integer> fieldIds = linkList.stream().map(ProjectFieldPatentLink::getFieldId).distinct().collect(Collectors.toList());
+        List<ProjectField> fieldList = this.getFieldListByIds(fieldIds);
+        List<ProjectFieldText> textList = projectFieldTextService.getProjectFieldTextByFieldIds(fieldIds);
+        List<ProjectFieldOption> optionList = projectFieldOptionService.getFieldOptionList(fieldIds);
+        List<ProjectFieldTree> treeList = projectFieldTreeService.getProjectFieldTreeOptionByFieldIds(fieldIds);
+        //遍历专利
+        for(Integer patentId :patentIds){
+            List<PatentDTO.Field> dataList = new ArrayList<>();
+            //获得当前专利的关联信息
+            List<ProjectFieldPatentLink> temLinkList =linkList.stream().filter(item->item.getPatentId().equals(patentId)).collect(Collectors.toList());
+            //过滤出当前专利的自定义栏位
+            List<Integer> temFieldIds =linkList.stream().filter(item->item.getPatentId().equals(patentId)).map(ProjectFieldPatentLink::getFieldId).distinct().collect(Collectors.toList());
+            List<ProjectField> temFieldList =fieldList.stream().filter(item->temFieldIds.contains(item.getId())).collect(Collectors.toList());
+            temFieldList.forEach(field -> {
+                List<Integer> valueIds =temLinkList.stream().filter(item->item.getFieldId().equals(field.getId())).map(ProjectFieldPatentLink::getOptionId).collect(Collectors.toList());
+                PatentDTO.Field data = new PatentDTO.Field();
+                data.setId(field.getId());
+                data.setName(field.getName());
+                data.setType(field.getType());
+                switch (field.getType()) {
+                    case 0:
+                    case 1:
+                    case 2:
+                        data.setSelected(textList.stream().filter(item -> item.getFieldId().equals(field.getId()) && valueIds.contains(item.getId())).map(ProjectFieldText::getText).distinct().collect(Collectors.toList()));
+                        break;
+                    case 3:
+                    case 4:
+                    case 5:
+                        data.setSelected(optionList.stream().filter(item -> item.getFieldId().equals(field.getId()) && valueIds.contains(item.getId())).map(ProjectFieldOption::getName).distinct().collect(Collectors.toList()));
+                        break;
+                    case 6:
+                        List<ProjectFieldTree> trees = treeList.stream().filter(item -> item.getFieldId().equals(field.getId())).collect(Collectors.toList());
+                        List<ProjectFieldTree> optionTree = trees.stream().filter(item -> valueIds.contains(item.getId())).collect(Collectors.toList());
+                        List<String> selected = new ArrayList<>();
+                        optionTree.forEach(item -> selected.add(PatentUtils.getTreeNodeFullName(trees, item.getPath())));
+                        data.setSelected(selected);
+                        break;
+                }
+                dataList.add(data);
+            });
+            map.put(patentId,dataList);
+        }
+        return map;
+    }
     public List<ProjectField> getProjectFieldByProjectId(Integer projectId) {
         LambdaQueryWrapper<ProjectField> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(ProjectField::getProjectId, projectId);