Sfoglia il codice sorgente

更新图谱实体及查询的输出

MarkHuang 4 anni fa
parent
commit
336b2b6207

+ 30 - 0
src/main/java/com/diagbot/dto/DrugBillNeoDTO.java

@@ -2,6 +2,8 @@ package com.diagbot.dto;
 
 import lombok.Data;
 
+import java.util.List;
+
 /**
  * @description: 药品开单合理性图谱数据
  * @author: Mark
@@ -9,5 +11,33 @@ import lombok.Data;
  */
 @Data
 public class DrugBillNeoDTO {
+    // 禁忌性别
+    private String gender;
+
+    // 年龄最小值
+    private Integer minage;
+
+    // 年龄最大值
+    private Integer maxage;
+
+    // 临床表现
+    private List<String> clinicfindings;
+
+    // 禁忌手术
+    private List<String> operations;
+
+    // 禁忌操作
+    private List<String> procedures;
+
+    // 禁忌辅助检查
+    private List<String> PACS;
+
+    // 禁忌疾病
+    private List<String> disease;
+
+    // 禁用人群
+    private List<String> group;
 
+    // 配伍禁忌
+    private List<String> meds;
 }

+ 4 - 4
src/main/java/com/diagbot/dto/LisBillNeoDTO.java

@@ -15,16 +15,16 @@ public class LisBillNeoDTO {
     private String gender;
 
     // 年龄最小值
-    private int minage;
+    private Integer minage;
 
     // 年龄最大值
-    private int maxage;
+    private Integer maxage;
 
     // 临床表现
     private List<String> clinicfindings;
 
     // 服用药品
-    private List<String> meds;
+    private List<String> prescribe;
 
     // 禁忌过敏药品
     private List<String> allergmeds;
@@ -36,7 +36,7 @@ public class LisBillNeoDTO {
     private List<String> procedures;
 
     // 禁忌辅助检查
-    private List<String> PACS;
+    private List<String> pacs;
 
     // 禁忌疾病
     private List<String> disease;

+ 34 - 0
src/main/java/com/diagbot/dto/PacsBillNeoDTO.java

@@ -2,6 +2,8 @@ package com.diagbot.dto;
 
 import lombok.Data;
 
+import java.util.List;
+
 /**
  * @description: 辅检开单合理性图谱数据
  * @author: Mark
@@ -9,5 +11,37 @@ import lombok.Data;
  */
 @Data
 public class PacsBillNeoDTO {
+    // 禁忌性别
+    private String gender;
+
+    // 年龄最小值
+    private Integer minage;
+
+    // 年龄最大值
+    private Integer maxage;
+
+    // 临床表现
+    private List<String> clinicfindings;
+
+    // 服用药品
+    private List<String> prescribe;
+
+    // 禁忌过敏药品
+    private List<String> allergmeds;
+
+    // 禁忌手术
+    private List<String> operations;
+
+    // 禁忌操作
+    private List<String> procedures;
+
+    // 禁忌实验室检查
+    private List<String> lis;
+
+    // 禁忌疾病
+    private List<String> disease;
+
+    // 禁用人群
+    private List<String> group;
 
 }

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

@@ -0,0 +1,20 @@
+package com.diagbot.entity.node;
+
+import lombok.Data;
+import com.diagbot.entity.node.base.BaseNode;
+import lombok.EqualsAndHashCode;
+import org.neo4j.ogm.annotation.Labels;
+import org.neo4j.ogm.annotation.NodeEntity;
+import org.neo4j.ogm.annotation.Relationship;
+
+import java.io.Serializable;
+import java.util.Set;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@NodeEntity(label = "年龄最大值")
+public class AgeMax extends BaseNode  {
+
+    @Relationship(type="药品通用名禁忌年龄最大值", direction = Relationship.INCOMING)
+    private Set<Medicine> medicines;
+}

+ 9 - 7
src/main/java/com/diagbot/entity/node/AgeMin.java

@@ -1,20 +1,22 @@
 package com.diagbot.entity.node;
 
-import lombok.Getter;
-import lombok.Setter;
+import com.diagbot.model.ai.model.Relation;
+import lombok.Data;
 import com.diagbot.entity.node.base.BaseNode;
+import lombok.EqualsAndHashCode;
 import org.neo4j.ogm.annotation.Labels;
 import org.neo4j.ogm.annotation.NodeEntity;
+import org.neo4j.ogm.annotation.Relationship;
 
 import java.io.Serializable;
 import java.util.Set;
 
-@Getter
-@Setter
+@Data
+@EqualsAndHashCode(callSuper = false)
 @NodeEntity(label = "年龄最小值")
-public class AgeMin extends BaseNode implements Serializable {
+public class AgeMin extends BaseNode {
 
-    @Labels
-    private Set<String> labels;
+    @Relationship(type="药品通用名禁忌年龄最小值", direction = Relationship.INCOMING)
+    private Set<Medicine> medicines;
 
 }

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

@@ -0,0 +1,20 @@
+package com.diagbot.entity.node;
+
+import lombok.Data;
+import com.diagbot.entity.node.base.BaseNode;
+import lombok.EqualsAndHashCode;
+import org.neo4j.ogm.annotation.Labels;
+import org.neo4j.ogm.annotation.NodeEntity;
+import org.neo4j.ogm.annotation.Relationship;
+
+import java.io.Serializable;
+import java.util.Set;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@NodeEntity(label = "过敏药品")
+public class AllergicMed extends BaseNode  {
+
+    @Relationship(type="药品通用名禁忌过敏药品", direction = Relationship.INCOMING)
+    private Set<Medicine> medicines;
+}

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

@@ -0,0 +1,20 @@
+package com.diagbot.entity.node;
+
+import lombok.Data;
+import com.diagbot.entity.node.base.BaseNode;
+import lombok.EqualsAndHashCode;
+import org.neo4j.ogm.annotation.Labels;
+import org.neo4j.ogm.annotation.NodeEntity;
+import org.neo4j.ogm.annotation.Relationship;
+
+import java.io.Serializable;
+import java.util.Set;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@NodeEntity(label = "临床表现")
+public class ClinicalFinding extends BaseNode  {
+
+    @Relationship(type="药品通用名禁忌临床表现", direction = Relationship.INCOMING)
+    private Set<Medicine> medicines;
+}

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

@@ -0,0 +1,20 @@
+package com.diagbot.entity.node;
+
+import lombok.Data;
+import com.diagbot.entity.node.base.BaseNode;
+import lombok.EqualsAndHashCode;
+import org.neo4j.ogm.annotation.Labels;
+import org.neo4j.ogm.annotation.NodeEntity;
+import org.neo4j.ogm.annotation.Relationship;
+
+import java.io.Serializable;
+import java.util.Set;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@NodeEntity(label = "配伍")
+public class Conflict extends BaseNode  {
+
+    @Relationship(type="药品通用名禁忌配伍", direction = Relationship.INCOMING)
+    private Set<Medicine> medicines;
+}

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

@@ -0,0 +1,20 @@
+package com.diagbot.entity.node;
+
+import lombok.Data;
+import com.diagbot.entity.node.base.BaseNode;
+import lombok.EqualsAndHashCode;
+import org.neo4j.ogm.annotation.Labels;
+import org.neo4j.ogm.annotation.NodeEntity;
+import org.neo4j.ogm.annotation.Relationship;
+
+import java.io.Serializable;
+import java.util.Set;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@NodeEntity(label = "疾病")
+public class Disease extends BaseNode  {
+
+    @Relationship(type="药品通用名禁忌疾病", direction = Relationship.INCOMING)
+    private Set<Medicine> medicines;
+}

+ 8 - 8
src/main/java/com/diagbot/entity/node/Gender.java

@@ -1,20 +1,20 @@
 package com.diagbot.entity.node;
 
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
 import com.diagbot.entity.node.base.BaseNode;
+import lombok.EqualsAndHashCode;
 import org.neo4j.ogm.annotation.Labels;
 import org.neo4j.ogm.annotation.NodeEntity;
+import org.neo4j.ogm.annotation.Relationship;
 
 import java.io.Serializable;
 import java.util.Set;
 
-@Getter
-@Setter
+@Data
+@EqualsAndHashCode(callSuper = false)
 @NodeEntity(label = "性别")
-public class Gender extends BaseNode implements Serializable {
-
-    @Labels
-    private Set<String> labels;
+public class Gender extends BaseNode  {
 
+    @Relationship(type="药品通用名禁忌性别", direction = Relationship.INCOMING)
+    private Set<Medicine> medicines;
 }

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

@@ -0,0 +1,20 @@
+package com.diagbot.entity.node;
+
+import lombok.Data;
+import com.diagbot.entity.node.base.BaseNode;
+import lombok.EqualsAndHashCode;
+import org.neo4j.ogm.annotation.Labels;
+import org.neo4j.ogm.annotation.NodeEntity;
+import org.neo4j.ogm.annotation.Relationship;
+
+import java.io.Serializable;
+import java.util.Set;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@NodeEntity(label = "人群")
+public class Group extends BaseNode  {
+
+    @Relationship(type="药品通用名禁忌人群", direction = Relationship.INCOMING)
+    private Set<Medicine> medicines;
+}

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

@@ -0,0 +1,20 @@
+package com.diagbot.entity.node;
+
+import lombok.Data;
+import com.diagbot.entity.node.base.BaseNode;
+import lombok.EqualsAndHashCode;
+import org.neo4j.ogm.annotation.Labels;
+import org.neo4j.ogm.annotation.NodeEntity;
+import org.neo4j.ogm.annotation.Relationship;
+
+import java.io.Serializable;
+import java.util.Set;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@NodeEntity(label = "实验室检查")
+public class LIS extends BaseNode  {
+
+    @Relationship(type="药品通用名禁忌实验室检查", direction = Relationship.INCOMING)
+    private Set<Medicine> medicines;
+}

+ 43 - 7
src/main/java/com/diagbot/entity/node/Medicine.java

@@ -1,20 +1,56 @@
 package com.diagbot.entity.node;
 
-import lombok.Getter;
-import lombok.Setter;
+import com.diagbot.entity.relationship.Medicine_AgeMin;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
 import com.diagbot.entity.node.base.BaseNode;
+import lombok.EqualsAndHashCode;
 import org.neo4j.ogm.annotation.Labels;
 import org.neo4j.ogm.annotation.NodeEntity;
+import org.neo4j.ogm.annotation.Relationship;
 
 import java.io.Serializable;
 import java.util.Set;
 
-@Getter
-@Setter
+@Data
+@EqualsAndHashCode(callSuper = false)
 @NodeEntity(label = "药品通用名")
 public class Medicine extends BaseNode implements Serializable {
 
-    @Labels
-    private Set<String> labels;
+    @Relationship(type = "药品通用名禁忌年龄最小值", direction = Relationship.OUTGOING)
+    private AgeMin ageMin;
 
-}
+    @Relationship(type = "药品通用名禁忌性别", direction = Relationship.OUTGOING)
+    private Gender gender;
+
+    @Relationship(type = "药品通用名禁忌年龄最大值", direction = Relationship.OUTGOING)
+    private AgeMax agemax;
+
+    @Relationship(type = "药品通用名禁忌临床表现", direction = Relationship.OUTGOING)
+    private ClinicalFinding clinicalfinding;
+
+    @Relationship(type = "药品通用名禁忌实验室检查", direction = Relationship.OUTGOING)
+    private LIS lis;
+
+    @Relationship(type = "药品通用名禁忌辅助检查", direction = Relationship.OUTGOING)
+    private PACS pacs;
+
+    @Relationship(type = "药品通用名禁忌过敏药品", direction = Relationship.OUTGOING)
+    private AllergicMed allergicmed;
+
+    @Relationship(type = "药品通用名禁忌手术", direction = Relationship.OUTGOING)
+    private Operation operation;
+
+    @Relationship(type = "药品通用名禁忌操作", direction = Relationship.OUTGOING)
+    private Procedure procedure;
+
+    @Relationship(type = "药品通用名禁忌疾病", direction = Relationship.OUTGOING)
+    private Disease disease;
+
+    @Relationship(type = "药品通用名禁忌人群", direction = Relationship.OUTGOING)
+    private Group group;
+
+    @Relationship(type = "药品通用名禁忌配伍", direction = Relationship.OUTGOING)
+    private Conflict conflict;
+
+}

+ 21 - 0
src/main/java/com/diagbot/entity/node/Medicinebk.java

@@ -0,0 +1,21 @@
+package com.diagbot.entity.node;
+
+import com.diagbot.entity.node.base.BaseNode;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.neo4j.ogm.annotation.NodeEntity;
+import org.neo4j.ogm.annotation.Relationship;
+
+import java.io.Serializable;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@NodeEntity(label = "药品通用名")
+public class Medicinebk extends BaseNode implements Serializable{
+
+    @Relationship(type="药品通用名禁忌年龄最小值", direction = Relationship.OUTGOING)
+    private AgeMin ageMin;
+
+    @Relationship(type="药品通用名禁忌性别", direction = Relationship.OUTGOING)
+    private Gender gender;
+}

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

@@ -0,0 +1,20 @@
+package com.diagbot.entity.node;
+
+import lombok.Data;
+import com.diagbot.entity.node.base.BaseNode;
+import lombok.EqualsAndHashCode;
+import org.neo4j.ogm.annotation.Labels;
+import org.neo4j.ogm.annotation.NodeEntity;
+import org.neo4j.ogm.annotation.Relationship;
+
+import java.io.Serializable;
+import java.util.Set;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@NodeEntity(label = "手术")
+public class Operation extends BaseNode  {
+
+    @Relationship(type="药品通用名禁忌手术", direction = Relationship.INCOMING)
+    private Set<Medicine> medicines;
+}

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

@@ -0,0 +1,20 @@
+package com.diagbot.entity.node;
+
+import lombok.Data;
+import com.diagbot.entity.node.base.BaseNode;
+import lombok.EqualsAndHashCode;
+import org.neo4j.ogm.annotation.Labels;
+import org.neo4j.ogm.annotation.NodeEntity;
+import org.neo4j.ogm.annotation.Relationship;
+
+import java.io.Serializable;
+import java.util.Set;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@NodeEntity(label = "辅助检查")
+public class PACS extends BaseNode  {
+
+    @Relationship(type="药品通用名禁忌辅助检查", direction = Relationship.INCOMING)
+    private Set<Medicine> medicines;
+}

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

@@ -0,0 +1,20 @@
+package com.diagbot.entity.node;
+
+import lombok.Data;
+import com.diagbot.entity.node.base.BaseNode;
+import lombok.EqualsAndHashCode;
+import org.neo4j.ogm.annotation.Labels;
+import org.neo4j.ogm.annotation.NodeEntity;
+import org.neo4j.ogm.annotation.Relationship;
+
+import java.io.Serializable;
+import java.util.Set;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@NodeEntity(label = "操作")
+public class Procedure extends BaseNode  {
+
+    @Relationship(type="药品通用名禁忌操作", direction = Relationship.INCOMING)
+    private Set<Medicine> medicines;
+}

+ 5 - 6
src/main/java/com/diagbot/entity/node/base/BaseNode.java

@@ -1,8 +1,7 @@
 package com.diagbot.entity.node.base;
 
 import jdk.nashorn.internal.objects.annotations.Property;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
 import org.neo4j.ogm.annotation.*;
 
 import java.io.Serializable;
@@ -15,16 +14,16 @@ import java.util.Set;
  * @author: MarkHuang
  * @time: 2020/3/23 15:30
  */
-@Getter
-@Setter
+@Data
 public class BaseNode implements Serializable {
     @Id
     @GeneratedValue
     private Long nodeId;
 
+    @Labels
+    private Set<String> labels;
+
     @Property(name = "name")
     private String name;
 
-//    @Labels
-//    private Set<String> labels;
 }

+ 18 - 1
src/main/java/com/diagbot/facade/BillFacade.java

@@ -9,6 +9,10 @@ import com.diagbot.vo.StandConvert;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import com.diagbot.biz.push.entity.Item;
+
+import java.util.List;
+
 import java.util.Map;
 
 /**
@@ -41,11 +45,24 @@ public class BillFacade {
         wordBillCrfDTO = commonFacade.dataTypeSet(wordBillCrfDTO, typeStand);
 
         // 图谱接口调用
-        BillNeoVO billNeoVO = new BillNeoVO();
+        BillNeoVO billNeoVO = fillBillNeo(indicationPushVO);
+
         BillNeoDTO billNeoDTO = neoFacade.getBillNeo(billNeoVO);
 
         // 规则开发 TODO
         neoFacade.getDrugCache();
         return null;
     }
+
+
+    public BillNeoVO fillBillNeo(IndicationPushVO indicationPushVO) {
+        BillNeoVO billNeoVO = new BillNeoVO();
+
+        List<Item> items = indicationPushVO.getDrug();
+        for (Item item : items) {
+            billNeoVO.getDrugList().add(item.getName());
+        }
+
+        return billNeoVO;
+    }
 }

+ 51 - 9
src/main/java/com/diagbot/facade/NeoFacade.java

@@ -1,8 +1,14 @@
 package com.diagbot.facade;
 
 import com.diagbot.dto.BillNeoDTO;
+import com.diagbot.dto.DrugBillNeoDTO;
+import com.diagbot.entity.node.Medicine;
+import com.diagbot.entity.relationship.Medicine_AgeMin;
+import com.diagbot.repository.MedicineNode;
+import com.diagbot.repository.MedicineRepository;
 import com.diagbot.vo.BillNeoVO;
 import com.diagbot.vo.StandConvert;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Component;
 
@@ -19,15 +25,8 @@ import java.util.Map;
 @Component
 public class NeoFacade {
 
-    /**
-     * 处理开单合理性图谱数据
-     * @param billNeoVO
-     * @return
-     */
-    public BillNeoDTO getBillNeo(BillNeoVO billNeoVO) {
-        // TODO 待处理业务
-        return null;
-    }
+    @Autowired
+    MedicineRepository medicineRepository;
 
     /**
      * 返回药品缓存信息
@@ -41,6 +40,49 @@ public class NeoFacade {
         return res;
     }
 
+
+
+    /**
+     * 处理开单合理性图谱数据
+     * @param billNeoVO
+     * @return
+     */
+    public BillNeoDTO getBillNeo(BillNeoVO billNeoVO) {
+
+        BillNeoDTO billNeoDTO = new BillNeoDTO();
+
+        billNeoDTO.setDrugBillNeoDTOList(getDrugBill(billNeoVO.getDrugList()));
+
+        return billNeoDTO;
+    }
+
+
+
+    /**
+     * 处理处方开单合理性
+     */
+    public List<DrugBillNeoDTO> getDrugBill(List<String> meds) {
+        List<DrugBillNeoDTO> drugBillNeoDTOS = new ArrayList<>();
+        DrugBillNeoDTO drugBillNeoDTO;
+
+        MedicineNode medicineNode = new MedicineNode();
+        Medicine medicine;
+
+        for (String medname : meds) {
+            medicine = medicineRepository.findByNameIs(medname);
+
+            if (medicine!=null) {
+//                System.out.println(medicine.toString());
+                drugBillNeoDTO = medicineNode.MedicinetoDrugDTO(medicine);
+                drugBillNeoDTOS.add(drugBillNeoDTO);
+            }
+            break;
+        }
+        return drugBillNeoDTOS;
+    }
+
+
+
     /**
      * 标准词转换
      *

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

@@ -0,0 +1,26 @@
+package com.diagbot.repository;
+
+import com.diagbot.dto.DrugBillNeoDTO;
+import com.diagbot.entity.node.AgeMin;
+import com.diagbot.entity.node.Gender;
+import com.diagbot.entity.node.Medicine;
+
+public class MedicineNode {
+
+    private String age_ch = "岁";
+    public DrugBillNeoDTO MedicinetoDrugDTO(Medicine medicine) {
+        DrugBillNeoDTO drugBillNeoDTO = new DrugBillNeoDTO();
+
+        AgeMin ageMin = medicine.getAgeMin();
+        String ageMin_val = (ageMin==null)?"":ageMin.getName();
+        ageMin_val = ageMin_val.replace(age_ch, "").trim();
+        drugBillNeoDTO.setMinage(Integer.parseInt(ageMin_val));
+
+
+        Gender gender = medicine.getGender();
+        String gender_val = (gender==null)?"":gender.getName();
+        drugBillNeoDTO.setGender(gender_val);
+
+        return drugBillNeoDTO;
+    }
+}

+ 11 - 0
src/main/java/com/diagbot/repository/MedicineRepository.java

@@ -0,0 +1,11 @@
+package com.diagbot.repository;
+
+import com.diagbot.entity.node.Medicine;
+import org.springframework.data.neo4j.repository.Neo4jRepository;
+
+
+public interface MedicineRepository extends Neo4jRepository<Medicine, Long> {
+
+    Medicine findByNameIs(String name);
+}
+

+ 4 - 3
src/main/java/com/diagbot/vo/BillNeoVO.java

@@ -2,17 +2,18 @@ package com.diagbot.vo;
 
 import lombok.Data;
 
+import java.util.ArrayList;
 import java.util.List;
 
 @Data
 public class BillNeoVO {
 
     // 化验入参
-    private List<String> lisList;
+    private List<String> lisList = new ArrayList<>();
 
     // 辅检入参
-    private List<String> pacsList;
+    private List<String> pacsList = new ArrayList<>();
 
     // 药品入参
-    private List<String> drugList;
+    private List<String> drugList = new ArrayList<>();
 }