浏览代码

更新药品开单合理性

MarkHuang 4 年之前
父节点
当前提交
3c5cb3f988

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

@@ -18,6 +18,9 @@ public class DrugBillNeoDTO {
     // 禁忌年龄
     private NodeNeoDTO ageNeoDTO;
 
+    // 禁忌给药途径
+    private NodeNeoDTO geiyaoNeoDTO;
+
     // 临床表现
     private List<NodeNeoDTO> clinicfindings = new ArrayList<>();
 

+ 3 - 0
src/main/java/com/diagbot/entity/node/Age.java

@@ -31,4 +31,7 @@ public class Age extends BaseNode  {
 	@Relationship(type = "药品通用名称禁忌年龄", direction = Relationship.INCOMING)
 	private Set<Medicine> medicines = new HashSet<>();
 
+	@Relationship(type = "药品注册名称禁忌年龄", direction = Relationship.INCOMING)
+	private Set<MedRegName> medRegNames = new HashSet<>();
+
 }

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

@@ -34,4 +34,6 @@ public class MedAllergen extends BaseNode  {
 	@Relationship(type = "药品通用名称禁忌药物过敏原", direction = Relationship.INCOMING)
 	private Set<Medicine> medicines = new HashSet<>();
 
+	@Relationship(type = "药品注册名称禁忌药物过敏原", direction = Relationship.INCOMING)
+	private Set<MedRegName> medRegNames = new HashSet<>();
 }

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

@@ -18,8 +18,28 @@ public class MedRegName extends BaseNode  {
 	@Property(name = "药品高危级别")
 	private String risklevel;
 
+	@Property(name = "禁忌性别")
+	private String conflict_gender;
+
+	@Property(name = "禁忌给药途径")
+	private String conflict_geiyao;
+
+	@Relationship(type = "药品注册名称禁忌年龄", direction = Relationship.OUTGOING)
+	private Set<Age> age = new HashSet<>();
+
+	@Relationship(type = "药品通用名称禁忌禁忌人群", direction = Relationship.OUTGOING)
+	private Set<Group> group = new HashSet<>();
+
+	@Relationship(type = "药品注册名称禁忌药物过敏原", direction = Relationship.OUTGOING)
+	private Set<MedAllergen> medAllergens = new HashSet<>();
+
+	@Relationship(type = "药品注册名称禁忌药品注册名称", direction = Relationship.OUTGOING)
+	private Set<MedRegName> medregnames_out = new HashSet<>();
+
 	@Relationship(type = "药品相关药品注册名称", direction = Relationship.INCOMING)
 	private Set<MedCodeName> medcodenames = new HashSet<>();
 
+	@Relationship(type = "药品注册名称禁忌药品注册名称", direction = Relationship.INCOMING)
+	private Set<MedRegName> medregnames_in = new HashSet<>();
 
 }

+ 3 - 1
src/main/java/com/diagbot/facade/NeoFacade.java

@@ -63,6 +63,8 @@ public class NeoFacade {
     @Autowired
     MedicineCodeRepository medicineCodeRepository;
     @Autowired
+    MedRegNameRepository medRegNameRepository;
+    @Autowired
     PacsCriticalRepository pacsCriticalRepository;
     @Autowired
     YiBaoDiseaseRepository yiBaoDiseaseRepository;
@@ -570,7 +572,7 @@ public class NeoFacade {
     public List<BillNeoDTO> getDrugBill(Map<String, String> medsterm) {
 
         MedicineNode medicineNode = new MedicineNode();
-        List<BillNeoDTO> billNeoDTOs = medicineNode.getMedicineBill(medsterm, medicineRepository);
+        List<BillNeoDTO> billNeoDTOs = medicineNode.getMedicineBill(medsterm, medicineRepository, medRegNameRepository);
 
         return billNeoDTOs;
     }

+ 1 - 1
src/main/java/com/diagbot/repository/Constants.java

@@ -12,7 +12,7 @@ public class Constants {
     public static String conflict = "禁忌";
     public static String age = "年龄";
     public static String allergicmed = "过敏药品";
-//    public static String clinicalfinding = "临床表现";
+    public static String geiyao = "给药途径";
     public static String complication = "并发症";
     public static String conflictmed = "配伍";
 //    public static String lis = "实验室检查";

+ 47 - 0
src/main/java/com/diagbot/repository/MedRegNameNode.java

@@ -5,6 +5,7 @@ import com.diagbot.dto.DrugBillNeoDTO;
 import com.diagbot.dto.HighRiskNeoDTO;
 import com.diagbot.dto.NodeNeoDTO;
 import com.diagbot.entity.node.*;
+import com.diagbot.util.NeoUtil;
 import com.diagbot.vo.Drug;
 
 import java.math.BigDecimal;
@@ -74,5 +75,51 @@ public class MedRegNameNode {
     }
 
 
+    public DrugBillNeoDTO MedRegNametoDrugDTO(MedRegName medRegName, DrugBillNeoDTO drugBillNeoDTO) {
+
+        Set<Age> ages = medRegName.getAge();
+        for (Age age : ages) {
+            NodeNeoDTO nodeNeoDTO = NeoUtil.fillNodeNeoDTO(age);
+            drugBillNeoDTO.setAgeNeoDTO(nodeNeoDTO);
+        }
+
+        Set<Group> groups = medRegName.getGroup();
+        for (Group group : groups) {
+            NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
+            nodeNeoDTO.setName(group.getName());
+            nodeNeoDTO.setTermtype(Constants.group);
+            drugBillNeoDTO.getGroup().add(nodeNeoDTO);
+        }
+
+
+        Set<MedAllergen> medAllergens = medRegName.getMedAllergens();
+        for (MedAllergen medAllergen : medAllergens) {
+            NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
+            nodeNeoDTO.setName(medAllergen.getName());
+            nodeNeoDTO.setTermtype(Constants.yaoping);
+            drugBillNeoDTO.getAllergicmeds().add(nodeNeoDTO);
+        }
+
+
+        String conflict_gender = medRegName.getConflict_gender();
+        if (null!=conflict_gender) {
+            NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
+            nodeNeoDTO.setName(conflict_gender);
+            nodeNeoDTO.setTermtype(Constants.gender);
+            drugBillNeoDTO.setGender(nodeNeoDTO);
+        }
+
+
+        String conflict_geiyao = medRegName.getConflict_geiyao();
+        if (null!=conflict_geiyao) {
+            NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
+            nodeNeoDTO.setName(conflict_geiyao);
+            nodeNeoDTO.setTermtype(Constants.geiyao);
+            drugBillNeoDTO.setGeiyaoNeoDTO(nodeNeoDTO);
+        }
+
+
+        return drugBillNeoDTO;
+    }
 }
 

+ 22 - 16
src/main/java/com/diagbot/repository/MedicineNode.java

@@ -4,12 +4,9 @@ import com.diagbot.dto.BillNeoDTO;
 import com.diagbot.dto.DrugBillNeoDTO;
 import com.diagbot.dto.DrugInfoDTO;
 import com.diagbot.dto.NodeNeoDTO;
-import com.diagbot.entity.node.Age;
-import com.diagbot.entity.node.Disease;
-import com.diagbot.entity.node.Group;
-import com.diagbot.entity.node.MedAllergen;
-import com.diagbot.entity.node.Medicine;
+import com.diagbot.entity.node.*;
 import com.diagbot.util.ListUtil;
+import com.diagbot.util.NeoUtil;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
@@ -25,7 +22,7 @@ public class MedicineNode {
 
         Set<Age> ages = medicine.getAge();
         for (Age age : ages) {
-            NodeNeoDTO nodeNeoDTO = fillNodeNeoDTO(age);
+            NodeNeoDTO nodeNeoDTO = NeoUtil.fillNodeNeoDTO(age);
             drugBillNeoDTO.setAgeNeoDTO(nodeNeoDTO);
         }
 
@@ -58,7 +55,7 @@ public class MedicineNode {
         return drugBillNeoDTO;
     }
 
-
+/*
     public NodeNeoDTO fillNodeNeoDTO(Age age) {
         NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
         Integer range;
@@ -79,19 +76,20 @@ public class MedicineNode {
 
         return nodeNeoDTO;
     }
-
+*/
 
 
     /**
      * 处理处方开单合理性
      */
-    public List<BillNeoDTO> getMedicineBill(Map<String, String> medsterm, MedicineRepository medicineRepository) {
+    public List<BillNeoDTO> getMedicineBill(Map<String, String> medsterm, MedicineRepository medicineRepository,
+                                            MedRegNameRepository medRegNameRepository) {
         List<BillNeoDTO> billNeoDTOs = new ArrayList<>();
         BillNeoDTO billNeoDTO;
 
         DrugBillNeoDTO drugBillNeoDTO;
 
-        List<Medicine> medicine;
+        List<MedRegName> medRegNames;
         String medname;
 
         for (String term : medsterm.keySet()) {
@@ -102,15 +100,23 @@ public class MedicineNode {
 
             drugBillNeoDTO = new DrugBillNeoDTO();
 
-            medicine = medicineRepository.findByNameIs(medname);
-
-            if (medicine != null && medicine.size() > 0) {
-                drugBillNeoDTO = MedicinetoDrugDTO(medicine.get(0));
+            List<String> medRegNamels = medicineRepository.findMedRegNamebyMedicine(medname);
 
-                billNeoDTO.setDrugBillNeoDTO(drugBillNeoDTO);
+            for (String mrnames : medRegNamels) {
+                medRegNames = medRegNameRepository.findByNameIs(mrnames);
 
-                billNeoDTOs.add(billNeoDTO);
+                if (medRegNames != null && medRegNames.size() > 0) {
+                    MedRegNameNode medRegNameNode = new MedRegNameNode();
+                    for (MedRegName medrn : medRegNames) {
+                        drugBillNeoDTO = medRegNameNode.MedRegNametoDrugDTO(medrn, drugBillNeoDTO);
+                    }
+                }
             }
+
+            billNeoDTO.setDrugBillNeoDTO(drugBillNeoDTO);
+
+            billNeoDTOs.add(billNeoDTO);
+
         }
 
 

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

@@ -1,7 +1,10 @@
 package com.diagbot.repository;
 
+import com.diagbot.entity.node.MedRegName;
 import com.diagbot.entity.node.Medicine;
+import org.springframework.data.neo4j.annotation.Query;
 import org.springframework.data.neo4j.repository.Neo4jRepository;
+import org.springframework.data.repository.query.Param;
 
 import java.util.List;
 
@@ -15,5 +18,8 @@ public interface MedicineRepository extends Neo4jRepository<Medicine, Long> {
     List<Medicine> findByNameIn(List<String> names);
 
     List<Medicine> findByNameContainingOrPycodeContaining(String name, String pycode);
+
+    @Query("match (n:药品通用名称)<-[r1:药品相关药品通用名称]-(m:药品代码通用名)-[r2:药品相关药品注册名称]->(o:药品注册名称) where n.name={name} return distinct o.name")
+    List<String> findMedRegNamebyMedicine(@Param("name") String name);
 }
 

+ 23 - 0
src/main/java/com/diagbot/util/NeoUtil.java

@@ -3,6 +3,7 @@ package com.diagbot.util;
 import com.alibaba.fastjson.JSONObject;
 import com.diagbot.dto.NodeNeoDTO;
 import com.diagbot.dto.PushBaseDTO;
+import com.diagbot.entity.node.Age;
 import com.diagbot.repository.Constants;
 import com.diagbot.repository.NodeInfo;
 import com.diagbot.repository.datautil;
@@ -121,4 +122,26 @@ public class NeoUtil {
 
         return medtype;
     }
+
+
+    public static NodeNeoDTO fillNodeNeoDTO(Age age) {
+        NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
+        Integer range;
+        BigDecimal max, min;
+
+        nodeNeoDTO.setName(age.getName());
+
+        max = (age.getMaxval()==null)?null:new BigDecimal(age.getMaxval());
+        nodeNeoDTO.setMax(max);
+
+        min = (age.getMinval()==null)?null:new BigDecimal(age.getMinval());
+        nodeNeoDTO.setMin(min);
+
+        range = (age.getRange()==null)?0:age.getRange();
+        nodeNeoDTO.setValType(range);
+
+        nodeNeoDTO.setName(age.getTermname());
+
+        return nodeNeoDTO;
+    }
 }