Browse Source

添加图谱化验危急值查询的方法

MarkHuang 4 năm trước cách đây
mục cha
commit
1106dc4b01

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

@@ -32,6 +32,9 @@ public class LIS extends BaseNode  {
     @Relationship(type="实验室检查项目相关套餐", direction = Relationship.OUTGOING)
     private Set<LISPack> lisPacks = new HashSet<>();
 
+    @Relationship(type="实验室检查相关实验室检查危急值", direction = Relationship.OUTGOING)
+    private Set<LISCritical> liscritial = new HashSet<>();
+
     @Relationship(type="实验室检查禁忌性别", direction = Relationship.OUTGOING)
     private Gender gender;
 

+ 36 - 0
src/main/java/com/diagbot/entity/node/LISCritical.java

@@ -0,0 +1,36 @@
+package com.diagbot.entity.node;
+
+import com.diagbot.entity.node.base.BaseNode;
+import lombok.Getter;
+import lombok.Setter;
+import org.neo4j.ogm.annotation.NodeEntity;
+import org.neo4j.ogm.annotation.Property;
+import org.neo4j.ogm.annotation.Relationship;
+
+import java.math.BigDecimal;
+import java.util.Set;
+
+@Setter
+@Getter
+//@EqualsAndHashCode(callSuper = false)
+@NodeEntity(label = "实验室检查危急值")
+public class LISCritical extends BaseNode  {
+
+    @Property(name = "高危急值")
+    private String maxval;
+
+    @Property(name = "低危急值")
+    private String minval;
+
+    @Property(name = "单位")
+    private String unit;
+
+    @Property(name = "年龄")
+    private String age;
+
+    @Relationship(type="实验室检查相关实验室检查危急值", direction = Relationship.INCOMING)
+    private LIS lis_related_liscritial;
+
+}
+
+

+ 17 - 1
src/main/java/com/diagbot/facade/CriticalFacade.java

@@ -4,6 +4,7 @@ import com.diagbot.dto.CriticalNeoDTO;
 import com.diagbot.dto.IndicationDTO;
 import com.diagbot.dto.WordCrfDTO;
 import com.diagbot.process.CriticalProcess;
+import com.diagbot.vo.CriticalNeoVO;
 import com.diagbot.vo.IndicationPushVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -32,10 +33,25 @@ public class CriticalFacade {
     public void criticalFac(IndicationPushVO indicationPushVO, WordCrfDTO wordCrfDTO, IndicationDTO res) {
         // 危急值图谱接口调用
         // TODO
-        List<CriticalNeoDTO> criticalNeoDTOList = new ArrayList<>();
+        CriticalNeoVO criticalNeoVOs = fillCriticalNeo(wordCrfDTO);
+        List<CriticalNeoDTO> criticalNeoDTOList = neoFacade.getCritialNeo(criticalNeoVOs);
 
         // 规则处理
         criticalProcess.process(criticalNeoDTOList, wordCrfDTO, res);
     }
 
+
+
+
+    public CriticalNeoVO fillCriticalNeo(WordCrfDTO wordCrfDTO) {
+        CriticalNeoVO criticalNeoVO = new CriticalNeoVO();
+
+        criticalNeoVO.setAge(wordCrfDTO.getAge());
+        criticalNeoVO.setSex(wordCrfDTO.getSex());
+        criticalNeoVO.setVitalLabel(wordCrfDTO.getVitalLabel());
+        criticalNeoVO.setLis(wordCrfDTO.getLisOrder());
+
+
+        return criticalNeoVO;
+    }
 }

+ 25 - 0
src/main/java/com/diagbot/facade/NeoFacade.java

@@ -165,6 +165,18 @@ public class NeoFacade {
     }
 
 
+    /**
+     * 获取危急值图谱数据
+     */
+    public List<CriticalNeoDTO> getCritialNeo(CriticalNeoVO criticalNeoVO) {
+        List<CriticalNeoDTO> criticalNeoDTOs = new ArrayList<>();
+
+        criticalNeoDTOs.addAll(getLisCritical(criticalNeoVO));
+
+        return criticalNeoDTOs;
+    }
+
+
 
     /**
      * 处理处方开单合理性
@@ -239,6 +251,19 @@ public class NeoFacade {
     }
 
 
+    /**
+     * 获取化验危急值
+     */
+    public List<CriticalNeoDTO> getLisCritical(CriticalNeoVO criticalNeoVO) {
+
+        LisNode lisNode = new LisNode();
+        List<CriticalNeoDTO> criticalNeoDTOs = lisNode.getLisCritialList(criticalNeoVO, lisRepository);
+
+        return criticalNeoDTOs;
+    }
+
+
+
     /**
      * 处理高危药品数据
      * @param drugs

+ 72 - 0
src/main/java/com/diagbot/repository/LisNode.java

@@ -1,8 +1,11 @@
 package com.diagbot.repository;
 
+import com.diagbot.biz.push.entity.Lis;
 import com.diagbot.dto.*;
 import com.diagbot.entity.node.*;
 import com.diagbot.util.NeoUtil;
+import com.diagbot.util.StringUtil;
+import com.diagbot.vo.CriticalNeoVO;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
@@ -162,5 +165,74 @@ public class LisNode {
 
 		return lislist;
 	}
+
+
+
+	/**
+	 * 获取化验细项危急值
+	 */
+	public List<CriticalNeoDTO> getLisCritialList(CriticalNeoVO criticalNeoVO, LisRepository lisRepository) {
+		String nodename;
+		Integer agemin, agemax;
+
+		List<CriticalNeoDTO> lislist = new ArrayList<>();
+		CriticalNeoDTO criticalNeoDTO;
+
+		Integer gender = criticalNeoVO.getSex();
+		Integer age = criticalNeoVO.getAge();
+		List<Lis> lisVO = criticalNeoVO.getLis();
+
+		try {
+			for (Lis lisvo : lisVO) {
+
+				String name = lisvo.getDetailName();
+
+				if (StringUtil.isNotBlank(name)) {
+					List<LIS> lislt = lisRepository.findByNameLike("*" + name + "*");
+
+					for (LIS lis : lislt) {
+						criticalNeoDTO = new CriticalNeoDTO();
+						nodename = lis.getName();
+						criticalNeoDTO.setName(nodename);
+						criticalNeoDTO.setStandname(nodename);
+						criticalNeoDTO.setType("化验");
+
+						List<LISCritical> lisCriticals = new ArrayList<>(lis.getLiscritial());
+
+						for (LISCritical lisCritical : lisCriticals) {
+							agemin = 0;
+							agemax = 0;
+							if (lisCritical.getAge().contains(":")) {
+								String[] agerange = lisCritical.getAge().split(":");
+								agemin = Integer.parseInt(agerange[0]);
+								agemax = Integer.parseInt(agerange[1]);
+							}
+
+							if (age>=agemin && age<=agemax) {
+								NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
+
+								BigDecimal min = (StringUtil.isNotBlank(lisCritical.getMinval()))
+										?(new BigDecimal(lisCritical.getMinval())):null;
+								BigDecimal max = (StringUtil.isNotBlank(lisCritical.getMaxval()))
+										?(new BigDecimal(lisCritical.getMaxval())):null;
+
+								nodeNeoDTO.setMin(min);
+								nodeNeoDTO.setMax(max);
+								nodeNeoDTO.setUnit(lisCritical.getUnit());
+								criticalNeoDTO.setCritical(nodeNeoDTO);
+
+								lislist.add(criticalNeoDTO);
+							}
+						}
+					}
+				}
+			}
+		}
+		catch (Exception ex) {
+			ex.printStackTrace();
+		}
+
+		return lislist;
+	}
 }
 

+ 27 - 0
src/main/java/com/diagbot/vo/CriticalNeoVO.java

@@ -0,0 +1,27 @@
+package com.diagbot.vo;
+
+import com.diagbot.biz.push.entity.Lis;
+import com.diagbot.model.label.VitalLabel;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class CriticalNeoVO {
+
+    // 年龄
+    private Integer age;
+
+    // 性别(1:男,2:女)
+    private Integer sex;
+
+    // 体征
+    private VitalLabel vitalLabel = new VitalLabel();
+
+    // 化验项目和结果
+    private List<Lis> lis = new ArrayList<>();
+
+}