Prechádzať zdrojové kódy

1、辅检术语检索
2、辅检静态知识检索
3、辅检术语校验

zhaops 4 rokov pred
rodič
commit
3d6f8af6d6

+ 17 - 0
src/main/java/com/diagbot/dto/PacsDTO.java

@@ -0,0 +1,17 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/10/15 14:26
+ */
+@Getter
+@Setter
+public class PacsDTO {
+    private String name;
+    //词性 5:辅检项目,7:辅检子项
+    private Integer type;
+}

+ 20 - 0
src/main/java/com/diagbot/entity/BaseNodeInfo.java

@@ -0,0 +1,20 @@
+package com.diagbot.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.data.neo4j.annotation.QueryResult;
+
+import java.util.Set;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/10/15 11:15
+ */
+@Getter
+@Setter
+@QueryResult
+public class BaseNodeInfo {
+    private Set<String> labels;
+    private String name;
+}

+ 2 - 1
src/main/java/com/diagbot/enums/StaticTypeEnum.java

@@ -16,7 +16,8 @@ public enum StaticTypeEnum implements KeyedNamed {
     LISSET(3, Constants.lissetname),
     LIS(4, Constants.lisname),
     PACS(5, Constants.pacsname),
-    OPT(6, Constants.yibaoopname);
+    OPT(6, Constants.yibaoopname),
+    PACSSUBNAME(7, Constants.pacssubname);
 
     @Setter
     private int key;

+ 2 - 1
src/main/java/com/diagbot/facade/ConceptFacade.java

@@ -1,5 +1,6 @@
 package com.diagbot.facade;
 
+import com.diagbot.entity.BaseNodeInfo;
 import com.diagbot.entity.node.Dept;
 import com.diagbot.entity.node.LisName;
 import com.diagbot.entity.node.LisSet;
@@ -82,7 +83,7 @@ public class ConceptFacade {
                 }
                 break;
             case 3:
-                List<PacsName> pacsNameList = pacsNameRepository.findByNameIn(conceptVO.getNames());
+                List<BaseNodeInfo> pacsNameList = pacsNameRepository.findByNameInIgnoreLabel(conceptVO.getNames());
                 if (ListUtil.isNotEmpty(pacsNameList)) {
                     retList = pacsNameList.stream()
                             .map(i -> i.getName())

+ 34 - 10
src/main/java/com/diagbot/facade/RetrievalFacade.java

@@ -6,14 +6,30 @@ import com.diagbot.dto.LisDetailDTO;
 import com.diagbot.dto.OperationInfoDTO;
 import com.diagbot.dto.RetrievalDTO;
 import com.diagbot.dto.StaticKnowledgeIndexDTO;
+import com.diagbot.entity.BaseNodeInfo;
 import com.diagbot.entity.node.LisName;
 import com.diagbot.entity.node.LisSet;
 import com.diagbot.entity.node.Medicine;
-import com.diagbot.entity.node.PacsName;
 import com.diagbot.entity.node.YiBaoDiseaseName;
 import com.diagbot.entity.node.YiBaoOperationName;
 import com.diagbot.enums.StaticTypeEnum;
-import com.diagbot.repository.*;
+import com.diagbot.repository.BaseNodeRepository;
+import com.diagbot.repository.DeptNode;
+import com.diagbot.repository.DeptRepository;
+import com.diagbot.repository.LisNameNode;
+import com.diagbot.repository.LisNameRepository;
+import com.diagbot.repository.LisSetNode;
+import com.diagbot.repository.LisSetRepository;
+import com.diagbot.repository.MedicineNode;
+import com.diagbot.repository.MedicineRepository;
+import com.diagbot.repository.PacsNameNode;
+import com.diagbot.repository.PacsNameRepository;
+import com.diagbot.repository.PacsSubNameRepository;
+import com.diagbot.repository.TransfusionRemindRepository;
+import com.diagbot.repository.YiBaoDiseaseNode;
+import com.diagbot.repository.YiBaoDiseaseRepository;
+import com.diagbot.repository.YiBaoOperationNameNode;
+import com.diagbot.repository.YiBaoOperationNameRepository;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.vo.RetrievalVO;
@@ -132,10 +148,7 @@ public class RetrievalFacade {
     public List<String> getPACSs(String info) {
 
         PacsNameNode pacsNode = new PacsNameNode();
-        List<String> pacslist = pacsNode.getPACSNameList(info, pacsRepository);
-
-        PacsSubNameNode pacsSubNode = new PacsSubNameNode();
-        pacslist.addAll(pacsSubNode.getPACSSubNameList(info, pacsSubNameRepository));
+        List<String> pacslist = pacsNode.getPACSNameAndPACSSubNameList(info, pacsRepository);
 
         return pacslist;
     }
@@ -282,14 +295,25 @@ public class RetrievalFacade {
             lisRetList.add(staticDTO);
         }
         //TODO 检查
-        List<PacsName> pacsList = pacsRepository.staticKnowledgeIndex(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, 100);
+        //List<PacsName> pacsList = pacsRepository.staticKnowledgeIndex(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, 100);
+        List<BaseNodeInfo> pacsList = pacsRepository.staticKnowledgeIndexIgnoreLabel(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, 100);
 
         List<StaticKnowledgeIndexDTO> pacsRetList = Lists.newLinkedList();
-        for (PacsName pacs : pacsList) {
+        for (BaseNodeInfo pacs : pacsList) {
             StaticKnowledgeIndexDTO staticDTO = new StaticKnowledgeIndexDTO();
             staticDTO.setName(pacs.getName());
-            staticDTO.setType(StaticTypeEnum.PACS.getKey());
-            staticDTO.setTypeName(StaticTypeEnum.PACS.getName());
+            if (pacs.getLabels() != null && pacs.getLabels().size() > 0) {
+                if (pacs.getLabels().contains(StaticTypeEnum.PACS.getName())) {
+                    staticDTO.setType(StaticTypeEnum.PACS.getKey());
+                    staticDTO.setTypeName(StaticTypeEnum.PACS.getName());
+                } else if (pacs.getLabels().contains(StaticTypeEnum.PACSSUBNAME.getName())) {
+                    staticDTO.setType(StaticTypeEnum.PACSSUBNAME.getKey());
+                    staticDTO.setTypeName(StaticTypeEnum.PACSSUBNAME.getName());
+                }
+            } else {
+                staticDTO.setType(StaticTypeEnum.PACS.getKey());
+                staticDTO.setTypeName(StaticTypeEnum.PACS.getName());
+            }
             pacsRetList.add(staticDTO);
         }
 

+ 19 - 2
src/main/java/com/diagbot/repository/PacsNameNode.java

@@ -1,8 +1,8 @@
 package com.diagbot.repository;
 
-import ch.qos.logback.core.util.StringCollectionUtil;
 import com.diagbot.dto.BillNeoDTO;
 import com.diagbot.dto.PacsBillNeoDTO;
+import com.diagbot.entity.BaseNodeInfo;
 import com.diagbot.entity.node.Allergen;
 import com.diagbot.entity.node.ClinicalFinding;
 import com.diagbot.entity.node.ConflictDevice;
@@ -15,7 +15,6 @@ import com.diagbot.entity.node.OralMedicine;
 import com.diagbot.entity.node.PacsDescribe;
 import com.diagbot.entity.node.PacsName;
 import com.diagbot.entity.node.Vital;
-import com.diagbot.util.CoreUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.NeoUtil;
 
@@ -23,6 +22,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 public class PacsNameNode {
 
@@ -216,6 +216,23 @@ public class PacsNameNode {
 
         return pacslist;
     }
+
+    /**
+     * 获取辅检名称列表
+     */
+    public List<String> getPACSNameAndPACSSubNameList(String name, PacsNameRepository pacsRepository) {
+
+        List<String> pacslist = new ArrayList<>();
+        List<BaseNodeInfo> pacslt = pacsRepository.indexIgnoreLabel(name, name, 100);
+
+        if (ListUtil.isNotEmpty(pacslt) && pacslt.size() > 100) {
+            pacslt = pacslt.subList(0, 100);
+        }
+
+        pacslist = pacslt.stream().map(i -> i.getName()).collect(Collectors.toList());
+
+        return pacslist;
+    }
 }
 
 

+ 43 - 0
src/main/java/com/diagbot/repository/PacsNameRepository.java

@@ -1,5 +1,6 @@
 package com.diagbot.repository;
 
+import com.diagbot.entity.BaseNodeInfo;
 import com.diagbot.entity.node.PacsName;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -49,4 +50,46 @@ public interface PacsNameRepository extends Neo4jRepository<PacsName, Long> {
             "WITH n SKIP 0 LIMIT $size\n" +
             "RETURN n,[ (n)-[r]->(m) | [ r, m ] ], ID(n)\n")
     List<PacsName> index(@Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
+
+    //检索不区分辅助检查名称和辅助检查子项目名称
+    @Query("MATCH (n) WHERE any(label in labels(n) WHERE label in ['辅助检查名称', '辅助检查子项目名称'])\n" +
+            "AND toLower(n.`name`) = toLower($name) \n" +
+            "OR toLower(n.`拼音编码`) = toLower($pycode)  \n" +
+            "RETURN labels(n) as labels,n.name as name\n" +
+            "union\n" +
+            "MATCH (n) WHERE any(label in labels(n) WHERE label in ['辅助检查名称', '辅助检查子项目名称'])\n" +
+            "AND toLower(n.`name`) starts with toLower($name) \n" +
+            "OR toLower(n.`拼音编码`) starts with toLower($pycode)  \n" +
+            "WITH n SKIP 0 LIMIT $size\n" +
+            "RETURN labels(n) as labels,n.name as name\n" +
+            "union\n" +
+            "MATCH (n) WHERE any(label in labels(n) WHERE label in ['辅助检查名称', '辅助检查子项目名称'])\n" +
+            "AND toLower(n.`name`) CONTAINS toLower($name) \n" +
+            "OR toLower(n.`拼音编码`) CONTAINS toLower($pycode)  \n" +
+            "WITH n SKIP 0 LIMIT $size\n" +
+            "RETURN labels(n) as labels,n.name as name\n")
+    List<BaseNodeInfo> indexIgnoreLabel(@Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
+
+    @Query("MATCH (n) WHERE any(label in labels(n) WHERE label in ['辅助检查名称', '辅助检查子项目名称'])\n" +
+            "n.`静态知识标识` = $isKL \n" +
+            "AND (toLower(n.`name`) = toLower($name)  OR  toLower(n.`拼音编码`) = toLower($pycode))\n" +
+            "RETURN labels(n) as labels,n.name as name\n" +
+            "UNION\n" +
+            "MATCH (n) WHERE any(label in labels(n) WHERE label in ['辅助检查名称', '辅助检查子项目名称'])\n" +
+            "n.`静态知识标识` = $isKL \n" +
+            "AND (toLower(n.`name`) STARTS WITH toLower($name) OR toLower(n.`拼音编码`) STARTS WITH toLower($pycode))\n" +
+            "WITH n SKIP 0 LIMIT $size\n" +
+            "RETURN labels(n) as labels,n.name as name\n" +
+            "UNION \n" +
+            "MATCH (n) WHERE any(label in labels(n) WHERE label in ['辅助检查名称', '辅助检查子项目名称'])\n" +
+            "n.`静态知识标识` = $isKL  \n" +
+            "AND (toLower(n.`name`) CONTAINS toLower($name) OR toLower(n.`拼音编码`) CONTAINS toLower($pycode))  \n" +
+            "WITH n SKIP 0 LIMIT $size\n" +
+            "RETURN labels(n) as labels,n.name as name\n")
+    List<BaseNodeInfo> staticKnowledgeIndexIgnoreLabel(@Param("isKL") Integer isKL, @Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
+
+    @Query("MATCH (n) WHERE any(label in labels(n) WHERE label in ['辅助检查名称', '辅助检查子项目名称'])\n" +
+            "and n.`name` IN  $names  \n" +
+            "RETURN labels(n) as labels,n.name as name\n")
+    List<BaseNodeInfo> findByNameInIgnoreLabel(@Param("names") List<String> names);
 }

+ 2 - 0
src/main/java/com/diagbot/repository/PacsSubNameRepository.java

@@ -14,6 +14,8 @@ public interface PacsSubNameRepository extends Neo4jRepository<PacsSubName, Long
 
     List<PacsSubName> findByNameContaining(String name);
 
+    List<PacsSubName> findByNameIn(List<String> names);
+
     @Query("MATCH (n:`辅助检查子项目名称`) WHERE toLower(n.`name`) = toLower($name) \n" +
             "OR toLower(n.`拼音编码`) = toLower($pycode)  \n" +
             "RETURN n,[ (n)-[r]->(m) | [ r, m ] ], ID(n)\n" +