Преглед на файлове

更新针对新图谱的术语检索查询的方法

MarkHuang преди 4 години
родител
ревизия
3093c333dd

+ 2 - 0
src/main/java/com/diagbot/entity/node/Medicine.java

@@ -15,6 +15,8 @@ import java.util.HashSet;
 @NodeEntity(label = "药品通用名称")
 public class Medicine extends BaseNode  {
 
+	@Property(name = "高危级别")
+	private String risklevel;
 
 	@Relationship(type = "药品相关药品通用名称", direction = Relationship.INCOMING)
 	private Set<MedCodeName> medcodenames = new HashSet<>();

+ 60 - 68
src/main/java/com/diagbot/facade/RetrievalFacade.java

@@ -5,26 +5,8 @@ import com.diagbot.dto.LisDetailDTO;
 import com.diagbot.dto.OperationInfoDTO;
 import com.diagbot.dto.RetrievalDTO;
 import com.diagbot.dto.StaticKnowledgeIndexDTO;
-import com.diagbot.entity.node.ICDDisease;
-import com.diagbot.entity.node.LIS;
-import com.diagbot.entity.node.LISPack;
-import com.diagbot.entity.node.Medicine;
-import com.diagbot.entity.node.Operation;
-import com.diagbot.entity.node.PACS;
-import com.diagbot.repository.DeptNode;
-import com.diagbot.repository.DeptRepository;
-import com.diagbot.repository.ICDDiseaseNode;
-import com.diagbot.repository.ICDDiseaseRepository;
-import com.diagbot.repository.LisNode;
-import com.diagbot.repository.LisPackNode;
-import com.diagbot.repository.LisPackRepository;
-import com.diagbot.repository.LisRepository;
-import com.diagbot.repository.MedicineNode;
-import com.diagbot.repository.MedicineRepository;
-import com.diagbot.repository.OperationNode;
-import com.diagbot.repository.OperationRepository;
-import com.diagbot.repository.PACSNode;
-import com.diagbot.repository.PacsRepository;
+import com.diagbot.entity.node.*;
+import com.diagbot.repository.*;
 import com.diagbot.util.ListUtil;
 import com.diagbot.vo.RetrievalVO;
 import com.diagbot.vo.StaticKnowledgeIndexVO;
@@ -43,25 +25,23 @@ import java.util.List;
 public class RetrievalFacade {
 
     @Autowired
-    LisPackRepository lisPackRepository;
+    LisSetRepository lisSetRepository;
 
     @Autowired
-    LisRepository lisRepository;
+    LisNameRepository lisRepository;
 
     @Autowired
-    ICDDiseaseRepository icdDiseaseRepository;
+    YiBaoDiseaseRepository icdDiseaseRepository;
 
     @Autowired
-    PacsRepository pacsRepository;
+    PacsNameRepository pacsRepository;
 
     @Autowired
     MedicineRepository medicineRepository;
 
     @Autowired
-    OperationRepository operationRepository;
+    YiBaoOperationNameRepository operationRepository;
 
-    @Autowired
-    DeptRepository deptRepository;
 
     /**
      * 检索
@@ -109,8 +89,8 @@ public class RetrievalFacade {
      */
     public List<String> getLisPacks(String name) {
 
-        LisPackNode lisPackNode = new LisPackNode();
-        List<String> lisPacklist = lisPackNode.getLISPackNameList(name, lisPackRepository);
+        LisSetNode lisPackNode = new LisSetNode();
+        List<String> lisPacklist = lisPackNode.getLISPackNameList(name, lisSetRepository);
 
         return lisPacklist;
     }
@@ -121,7 +101,7 @@ public class RetrievalFacade {
      */
     public List<LisDetailDTO> getLis(String name) {
 
-        LisNode lisNode = new LisNode();
+        LisNameNode lisNode = new LisNameNode();
         List<LisDetailDTO> lislist = lisNode.getLisDetailList(name, lisRepository);
 
         return lislist;
@@ -133,7 +113,7 @@ public class RetrievalFacade {
      */
     public List<String> getPACSs(String name) {
 
-        PACSNode pacsNode = new PACSNode();
+        PacsNameNode pacsNode = new PacsNameNode();
         List<String> pacslist = pacsNode.getPACSNameList(name, pacsRepository);
 
         return pacslist;
@@ -145,8 +125,8 @@ public class RetrievalFacade {
      */
     public List<String> getDiseases(String name) {
 
-        ICDDiseaseNode diseaseNode = new ICDDiseaseNode();
-        List<String> diseaselist = diseaseNode.getDiseaseNameList(name, icdDiseaseRepository);
+        YiBaoDiseaseNode yiBaoDiseaseNode = new YiBaoDiseaseNode();
+        List<String> diseaselist = yiBaoDiseaseNode.getDiseaseNameList(name, icdDiseaseRepository);
 
         return diseaselist;
     }
@@ -169,7 +149,7 @@ public class RetrievalFacade {
      */
     public List<OperationInfoDTO> getOperations(String name) {
 
-        OperationNode operationNode = new OperationNode();
+        YiBaoOperationNameNode operationNode = new YiBaoOperationNameNode();
         List<OperationInfoDTO> opslist = operationNode.getOperationList(name, operationRepository);
 
         return opslist;
@@ -178,7 +158,7 @@ public class RetrievalFacade {
 
     /*
      * 获取科室名称列表
-     */
+     *
     public List<String> getDepts(String name) {
 
         DeptNode deptNode = new DeptNode();
@@ -197,86 +177,98 @@ public class RetrievalFacade {
         List<StaticKnowledgeIndexDTO> retList = Lists.newLinkedList();
         String inputStr = staticKnowledgeIndexVO.getInputStr();
         List<Integer> types = staticKnowledgeIndexVO.getTypes();
-        List<ICDDisease> icdDiseaseList = icdDiseaseRepository.findByNameLike("*" + inputStr + "*");
-        List<Medicine> medicineList = medicineRepository.findByNameLike("*" + inputStr + "*");
-        List<LISPack> lisPackList = lisPackRepository.findByNameLike("*" + inputStr + "*");
-        List<LIS> lisList = lisRepository.findByNameLike("*" + inputStr + "*");
-        List<PACS> pacsList = pacsRepository.findByNameLike("*" + inputStr + "*");
-        List<Operation> operationList = operationRepository.findByNameLike("*" + inputStr + "*");
+
         //TODO 诊断
+        List<YiBaoDiseaseName> icdDiseaseList = icdDiseaseRepository.findByNameLike("*" + inputStr + "*");
         List<StaticKnowledgeIndexDTO> disRetList = Lists.newLinkedList();
-        for (ICDDisease icdDisease : icdDiseaseList) {
+        for (YiBaoDiseaseName icdDisease : icdDiseaseList) {
             StaticKnowledgeIndexDTO staticDTO = new StaticKnowledgeIndexDTO();
             staticDTO.setName(icdDisease.getName());
             staticDTO.setType(1);
-            staticDTO.setTypeName("医保ICD_10疾病");
+            staticDTO.setTypeName(Constants.icddisease);
             disRetList.add(staticDTO);
         }
         //TODO 药品
+        List<Medicine> medicineList = medicineRepository.findByNameLike("*" + inputStr + "*");
+
         List<StaticKnowledgeIndexDTO> drugRetList = Lists.newLinkedList();
         for (Medicine medicine : medicineList) {
             StaticKnowledgeIndexDTO staticDTO = new StaticKnowledgeIndexDTO();
             staticDTO.setName(medicine.getName());
             staticDTO.setType(2);
-            staticDTO.setTypeName("药品通用名");
+            staticDTO.setTypeName(Constants.medicine);
             drugRetList.add(staticDTO);
         }
         //TODO 检验套餐
-        List<StaticKnowledgeIndexDTO> lisPackRetList = Lists.newLinkedList();
-        for (LISPack lisPack : lisPackList) {
+        List<LisSet> lisSetList = lisSetRepository.findByNameLike("*" + inputStr + "*");
+
+        List<StaticKnowledgeIndexDTO> lisSetRetList = Lists.newLinkedList();
+        for (LisSet lisSet : lisSetList) {
             StaticKnowledgeIndexDTO staticDTO = new StaticKnowledgeIndexDTO();
-            staticDTO.setName(lisPack.getName());
+            staticDTO.setName(lisSet.getName());
             staticDTO.setType(3);
-            staticDTO.setTypeName("实验室检查套餐");
-            lisPackRetList.add(staticDTO);
+            staticDTO.setTypeName(Constants.lissetname);
+            lisSetRetList.add(staticDTO);
         }
         //TODO 检验明细关联出检验套餐
-        List<StaticKnowledgeIndexDTO> lisPackRelatecLisRetList = Lists.newLinkedList();
-        for (LIS lis : lisList) {
-            if (lis.getLisPacks_related_lis().size() > 0) {
-                for (LISPack lisPack : lis.getLisPacks_related_lis()) {
+        List<LisName> lisList = lisRepository.findByNameLike("*" + inputStr + "*");
+
+        List<StaticKnowledgeIndexDTO> lisSetRelatecLisRetList = Lists.newLinkedList();
+        for (LisName lis : lisList) {
+            if (lis.getLissets().size() > 0) {
+                for (LisSet lisSet : lis.getLissets()) {
                     StaticKnowledgeIndexDTO staticDTO = new StaticKnowledgeIndexDTO();
                     staticDTO.setRetrievalName(lis.getName());
-                    staticDTO.setName(lisPack.getName());
+                    staticDTO.setName(lisSet.getName());
                     staticDTO.setType(3);
-                    staticDTO.setTypeName("实验室检查套餐");
-                    lisPackRelatecLisRetList.add(staticDTO);
+                    staticDTO.setTypeName(Constants.lissetname);
+                    lisSetRelatecLisRetList.add(staticDTO);
                 }
             }
         }
         //TODO 检验明细
+        lisList = lisRepository.findByNameLike("*" + inputStr + "*");
+
         List<StaticKnowledgeIndexDTO> lisRetList = Lists.newLinkedList();
-        for (LIS lis : lisList) {
+        for (LisName lis : lisList) {
             StaticKnowledgeIndexDTO staticDTO = new StaticKnowledgeIndexDTO();
             staticDTO.setName(lis.getName());
-            staticDTO.setType(4);
-            staticDTO.setTypeName("实验室检查");
+            staticDTO.setType(3);
+            staticDTO.setTypeName(Constants.lisname);
             lisRetList.add(staticDTO);
         }
         //TODO 检查
+        List<PacsName> pacsList = pacsRepository.findByNameLike("*" + inputStr + "*");
+
         List<StaticKnowledgeIndexDTO> pacsRetList = Lists.newLinkedList();
-        for (PACS pacs : pacsList) {
+        for (PacsName pacs : pacsList) {
             StaticKnowledgeIndexDTO staticDTO = new StaticKnowledgeIndexDTO();
             staticDTO.setName(pacs.getName());
-            staticDTO.setType(5);
-            staticDTO.setTypeName("辅助检查");
+            staticDTO.setType(4);
+            staticDTO.setTypeName(Constants.pacsname);
             pacsRetList.add(staticDTO);
         }
+
+
         //TODO 手术和操作
+        List<YiBaoOperationName> operationList = operationRepository.findByNameLike("*" + inputStr + "*");
+
         List<StaticKnowledgeIndexDTO> operationRetList = Lists.newLinkedList();
-        for (Operation operation : operationList) {
+
+        for (YiBaoOperationName operation : operationList) {
             StaticKnowledgeIndexDTO staticDTO = new StaticKnowledgeIndexDTO();
             staticDTO.setName(operation.getName());
             staticDTO.setType(6);
-            staticDTO.setTypeName("手术和操作");
+            staticDTO.setTypeName(Constants.yibaoopname);
             operationRetList.add(staticDTO);
         }
+
         //0-全部、1-诊断、2-药品、3-检验套餐、4-检验明细、5-检查、6-手术和操作
         if (ListUtil.isEmpty(types) || types.contains(0)) {
             retList.addAll(disRetList);
             retList.addAll(drugRetList);
-            retList.addAll(lisPackRetList);
-            retList.addAll(lisPackRelatecLisRetList);
+            retList.addAll(lisSetRetList);
+            retList.addAll(lisSetRelatecLisRetList);
             retList.addAll(lisRetList);
             retList.addAll(pacsRetList);
             retList.addAll(operationRetList);
@@ -289,9 +281,9 @@ public class RetrievalFacade {
             }
             if (types.contains(3)) {
                 //检索的套餐
-                retList.addAll(lisPackRetList);
+                retList.addAll(lisSetRetList);
                 //明细关联出的套餐
-                retList.addAll(lisPackRelatecLisRetList);
+                retList.addAll(lisSetRelatecLisRetList);
                 //明细
                 retList.addAll(lisRetList);
             }

+ 71 - 70
src/main/java/com/diagbot/repository/Constants.java

@@ -1,75 +1,76 @@
 package com.diagbot.repository;
 
 public class Constants {
-    final static String age = "年龄";
-    final static String allergicmed = "过敏药品";
-//    final static String clinicalfinding = "临床表现";
-    final static String complication = "并发症";
-    final static String conflictmed = "配伍";
-//    final static String lis = "实验室检查";
-//    final static String gender = "性别";
-//    final static String oralmed = "服用药品";
-    final static String operation = "手术和操作";
-//    final static String pacs = "辅助检查";
-//    final static String disease = "疾病";
-//    final static String medicine = "药品通用名";
-    final static String symptom = "症状";
-//    final static String vital = "体征";
-    final static String lispack = "实验室检查套餐";
-//    final static String group = "人群";
-//    final static String pacsdesc = "辅助检查描述";
-    final static String icddisease = "医保ICD_10疾病";
-    final static String medcodename = "药品代码通用名";
-    final static String medanatomy = "药品解剖学类别";
-    final static String liscritical = "实验室检查危急值";
+    
+    public static String age = "年龄";
+    public static String allergicmed = "过敏药品";
+//    public static String clinicalfinding = "临床表现";
+    public static String complication = "并发症";
+    public static String conflictmed = "配伍";
+//    public static String lis = "实验室检查";
+//    public static String gender = "性别";
+//    public static String oralmed = "服用药品";
+    public static String operation = "手术和操作";
+//    public static String pacs = "辅助检查";
+//    public static String disease = "疾病";
+//    public static String medicine = "药品通用名";
+    public static String symptom = "症状";
+//    public static String vital = "体征";
+    public static String lisset = "实验室检查套餐";
+//    public static String group = "人群";
+//    public static String pacsdesc = "辅助检查描述";
+    public static String icddisease = "医保ICD_10疾病";
+    public static String medcodename = "药品代码通用名";
+    public static String medanatomy = "药品解剖学类别";
+    public static String liscritical = "实验室检查危急值";
 
-//    final static String "药品代码通用名";
-    final static String medcode = "药品代码";
-    final static String medjiepou = "药品解剖学类别";
-    final static String medzhiliao = "药品治疗学类别";
-    final static String medyaoli = "药品药理学类别";
-    final static String medhuaxue = "药品化学物质类别";
-    final static String medicine = "药品通用名称";
-    final static String medregname = "药品注册名称";
-    final static String medcate = "药品类别";
-    final static String medprodname = "药品商品名称";
-    final static String medyibaocate = "药品医保类别";
-    final static String pacs = "辅助检查";
-    final static String herbdeptcate = "中成药科室类别";
-    final static String herbzhiliaocate = "中成药治疗学类别";
-    final static String herbfangjiclass = "中成药方剂学大类";
-    final static String herbfangjicate = "中成药方剂学类别";
-    final static String regname = "注册名称";
-    final static String herbyibaocate = "中成药医保类别";
-    final static String prodname = "商品名称";
-    final static String lisname = "实验室检查名称";
-    final static String lisfirstclass = "实验室检查一级分类";
-    final static String lissecondclass = "实验室检查二级分类";
-    final static String lisalias = "实验室检查别名";
-    final static String lisset = "实验室检查套餐名";
-    final static String yibaodisease = "医保疾病名称";
-    final static String yibaoicd10code = "医保ICD_10代码";
-    final static String guolindisease = "国临疾病名称";
-    final static String guolinicd10code = "国临ICD_10代码";
-    final static String yibaoopname = "医保手术和操作名称";
-    final static String yibaoicd9code = "医保ICD_9_CM3代码";
-    final static String guolinopname = "国临手术和操作名称";
-    final static String guolinicd9code = "国临ICD_9_CM3代码";
-    final static String pacsname = "辅助检查名称";
-    final static String gender = "性别";
-    final static String group = "禁忌人群";
-    final static String lis = "实验室检查";
-    final static String disease = "疾病";
-    final static String oralmed = "服用药品";
-    final static String medallergen = "药物过敏原";
-    final static String clinicalfinding = "临床表现";
-    final static String vital = "体征";
-    final static String pacsnamesubname = "辅助检查名称子项目名称";
-    final static String pacssubname = "辅助检查子项目名称";
-    final static String liscode = "实验室检查代码";
-    final static String conflictdevice = "禁忌医疗器械及物品";
-    final static String pacsdesc = "辅助检查名称描述";
-    final static String combioperation = "联合项目";
-    final static String allergen = "过敏原";
-    final static String yibaooperation = "医保手术和操作";
+//    public static String "药品代码通用名";
+    public static String medcode = "药品代码";
+    public static String medjiepou = "药品解剖学类别";
+    public static String medzhiliao = "药品治疗学类别";
+    public static String medyaoli = "药品药理学类别";
+    public static String medhuaxue = "药品化学物质类别";
+    public static String medicine = "药品通用名称";
+    public static String medregname = "药品注册名称";
+    public static String medcate = "药品类别";
+    public static String medprodname = "药品商品名称";
+    public static String medyibaocate = "药品医保类别";
+    public static String pacs = "辅助检查";
+    public static String herbdeptcate = "中成药科室类别";
+    public static String herbzhiliaocate = "中成药治疗学类别";
+    public static String herbfangjiclass = "中成药方剂学大类";
+    public static String herbfangjicate = "中成药方剂学类别";
+    public static String regname = "注册名称";
+    public static String herbyibaocate = "中成药医保类别";
+    public static String prodname = "商品名称";
+    public static String lisname = "实验室检查名称";
+    public static String lisfirstclass = "实验室检查一级分类";
+    public static String lissecondclass = "实验室检查二级分类";
+    public static String lisalias = "实验室检查别名";
+    public static String lissetname = "实验室检查套餐名";
+    public static String yibaodisease = "医保疾病名称";
+    public static String yibaoicd10code = "医保ICD_10代码";
+    public static String guolindisease = "国临疾病名称";
+    public static String guolinicd10code = "国临ICD_10代码";
+    public static String yibaoopname = "医保手术和操作名称";
+    public static String yibaoicd9code = "医保ICD_9_CM3代码";
+    public static String guolinopname = "国临手术和操作名称";
+    public static String guolinicd9code = "国临ICD_9_CM3代码";
+    public static String pacsname = "辅助检查名称";
+    public static String gender = "性别";
+    public static String group = "禁忌人群";
+    public static String lis = "实验室检查";
+    public static String disease = "疾病";
+    public static String oralmed = "服用药品";
+    public static String medallergen = "药物过敏原";
+    public static String clinicalfinding = "临床表现";
+    public static String vital = "体征";
+    public static String pacsnamesubname = "辅助检查名称子项目名称";
+    public static String pacssubname = "辅助检查子项目名称";
+    public static String liscode = "实验室检查代码";
+    public static String conflictdevice = "禁忌医疗器械及物品";
+    public static String pacsdesc = "辅助检查名称描述";
+    public static String combioperation = "联合项目";
+    public static String allergen = "过敏原";
+    public static String yibaooperation = "医保手术和操作";
 }

+ 120 - 0
src/main/java/com/diagbot/repository/MedicineNode.java

@@ -0,0 +1,120 @@
+package com.diagbot.repository;
+
+import com.diagbot.dto.*;
+import com.diagbot.entity.node.*;
+import com.diagbot.util.NeoUtil;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public class MedicineNode {
+
+
+    public DrugBillNeoDTO MedicinetoDrugDTO(Medicine medicine) {
+        DrugBillNeoDTO drugBillNeoDTO = new DrugBillNeoDTO();
+        NodeInfo nodeInfo = new NodeInfo();
+
+        return drugBillNeoDTO;
+    }
+
+
+
+    /**
+     * 处理处方开单合理性
+     */
+    public List<BillNeoDTO> getDrugBill(Map<String, String> medsterm, MedicineRepository medicineRepository) {
+        List<BillNeoDTO> billNeoDTOs = new ArrayList<>();
+        BillNeoDTO billNeoDTO;
+
+        DrugBillNeoDTO drugBillNeoDTO;
+
+        List<Medicine> medicine;
+        String medname;
+
+        for (String term : medsterm.keySet()) {
+            billNeoDTO = new BillNeoDTO();
+            medname = medsterm.get(term);
+            billNeoDTO.setName(term);
+            billNeoDTO.setStandname(medname);
+
+            drugBillNeoDTO = new DrugBillNeoDTO();
+
+            medicine = medicineRepository.findByNameIs(medname);
+
+            if (medicine != null && medicine.size()>0) {
+                drugBillNeoDTO = MedicinetoDrugDTO(medicine.get(0));
+
+                billNeoDTO.setDrugBillNeoDTO(drugBillNeoDTO);
+
+                billNeoDTOs.add(billNeoDTO);
+            }
+        }
+
+
+        return billNeoDTOs;
+    }
+
+
+
+    /**
+     * 获取药品商品名称列表
+     */
+    public List<DrugInfoDTO> getMedicineList(String name, MedicineRepository medicineRepository) {
+        String nodename;
+
+        List<DrugInfoDTO> medslist = new ArrayList<>();
+        DrugInfoDTO drugInfoDTO;
+
+        List<Medicine> medicines = medicineRepository.findByNameLike("*"+name+"*");
+
+        for (Medicine med : medicines) {
+            drugInfoDTO = new DrugInfoDTO();
+            nodename = med.getName();
+
+            drugInfoDTO.setName(nodename);
+            medslist.add(drugInfoDTO);
+        }
+
+
+        return medslist;
+    }
+
+
+
+    /**
+     * 获取高危药品数据
+     */
+    public List<HighRiskNeoDTO> getHighRiskDrug(Map<String, String> drugsterm, MedicineRepository medicineRepository) {
+        List<HighRiskNeoDTO> highRiskNeoDTOS = new ArrayList<>();
+        HighRiskNeoDTO highRiskNeoDTO;
+        String drugname;
+        List<Medicine> medicine;
+        Medicine med;
+
+        for (String term : drugsterm.keySet()) {
+            highRiskNeoDTO = new HighRiskNeoDTO();
+
+            drugname = drugsterm.get(term);
+            highRiskNeoDTO.setName(term);
+            highRiskNeoDTO.setStandname(drugname);
+
+            medicine = medicineRepository.findByNameIs(drugname);
+
+            if (null != medicine && medicine.size()>0) {
+                med = medicine.get(0);
+
+                if (null!=med.getRisklevel() && med.getRisklevel().trim().length()>0) {
+                    highRiskNeoDTO.setIsHighrisk(true);
+                    highRiskNeoDTO.setType(Constants.medicine);
+                    highRiskNeoDTOS.add(highRiskNeoDTO);
+                }
+            }
+        }
+
+        return highRiskNeoDTOS;
+    }
+}
+

+ 22 - 0
src/main/java/com/diagbot/repository/YiBaoDiseaseNode.java

@@ -228,5 +228,27 @@ public class YiBaoDiseaseNode {
 
 		return match;
 	}
+
+
+	/**
+	 * 获取疾病名称列表
+	 */
+	public List<String> getDiseaseNameList(String name, YiBaoDiseaseRepository diseaseRepository) {
+		String icdname;
+
+		List<String> dislist = new ArrayList<>();
+
+		List<YiBaoDiseaseName> diseases = diseaseRepository.findByNameLike("*"+name+"*");
+
+		for (YiBaoDiseaseName dis : diseases) {
+			icdname = dis.getName();
+			if (!dislist.contains(icdname)) {
+				dislist.add(icdname);
+			}
+		}
+
+
+		return dislist;
+	}
 }
 

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

@@ -9,5 +9,7 @@ import java.util.List;
 public interface YiBaoDiseaseRepository extends Neo4jRepository<YiBaoDiseaseName, Long> {
 
     List<YiBaoDiseaseName> findByNameIs(String name);
+
+    List<YiBaoDiseaseName> findByNameLike(String name);
 }