Bläddra i källkod

Merge remote-tracking branch 'origin/master'

MarkHuang 4 år sedan
förälder
incheckning
8390b044a0

+ 23 - 0
src/main/java/com/diagbot/dto/DiseaseInfoDTO.java

@@ -0,0 +1,23 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/9/15 10:07
+ */
+@Getter
+@Setter
+public class DiseaseInfoDTO {
+    /**
+     * 疾病名称
+     */
+    private String name;
+
+    /**
+     * ICD10编码
+     */
+    private String icd10Code;
+}

+ 1 - 1
src/main/java/com/diagbot/dto/RetrievalDTO.java

@@ -28,7 +28,7 @@ public class RetrievalDTO {
     /**
      * 诊断
      */
-    private List<String> diseaseNames;
+    private List<DiseaseInfoDTO> diseaseNames;
     /**
      * 药品
      */

+ 1 - 1
src/main/java/com/diagbot/entity/node/YiBaoDiseaseName.java

@@ -30,7 +30,7 @@ public class YiBaoDiseaseName extends BaseNode  {
 	@Relationship(type = "医保疾病名称相关临床路径名称", direction = Relationship.OUTGOING)
 	private Set<PathwayName> pathwaynames = new HashSet<>();
 
-	@Relationship(type = "症状相关医保疾病名称", direction = Relationship.OUTGOING)
+	@Relationship(type = "医保疾病名称相关症状", direction = Relationship.OUTGOING)
 	private Set<Symptom> symptoms = new HashSet<>();
 
 	@Relationship(type = "体征相关医保疾病名称", direction = Relationship.INCOMING)

+ 62 - 15
src/main/java/com/diagbot/facade/NeoFacade.java

@@ -20,6 +20,7 @@ import com.diagbot.vo.*;
 import com.diagbot.vo.neoPushEntity.ChiefPushVo;
 import com.diagbot.vo.neoPushEntity.Diag;
 import com.diagbot.vo.neoPushEntity.PresentPushVo;
+import com.google.common.collect.Lists;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
@@ -179,8 +180,10 @@ public class NeoFacade {
      * @return
      */
     public List<NeoPushDTO> getPush(NeoPushVO pushVO) {
+        Integer age = pushVO.getAge();
+        Integer sex = pushVO.getSex();
         List<NeoPushDTO> neoPushDTOS = new ArrayList<>();
-
+        List<String> allDis = Lists.newArrayList();
         // 如果没有诊断名称,则通过其它信息推送诊断
         ChiefPushVo chiefPushVo = pushVO.getChiefPushVo();
         PresentPushVo presentPushVo = pushVO.getPresentPushVo();
@@ -199,17 +202,57 @@ public class NeoFacade {
         }
         symptoms = Stream.of(symptom_chief,symptom_present).flatMap(Collection::stream).distinct().collect(Collectors.toList());
         //症状推疾病
-        getDisBySymptom(symptoms);
+        List<String> allDis_bySymptom = getDisBySymptom(symptoms);
+        allDis.addAll(allDis_bySymptom);
+        //体征推出的疾病
+        //化验推出的疾病辅检
+        //辅检推出的疾病
+        //推送出的所有疾病进行性别和年龄的过滤
+        Map<String, String> disSexCache = getDisSexCache();
+        Map<String, String> disAgeCache = getDisAgeCache();
+        Iterator<String> iterator_dis = allDis.iterator();
+        while (iterator_dis.hasNext()){
+            String disease = iterator_dis.next();
+            if(disSexCache.containsKey(disease)){
+                if((disSexCache.get(disease) == "男" && sex != 1) ||
+                        (disSexCache.get(disease) == "女" && sex != 2)){
+                    iterator_dis.remove();
+                    continue;
+                }
+            }
+            if(disAgeCache.containsKey(disease)){
+                String[] betweenAge = disAgeCache.get(disease).split("-");
+                if(betweenAge.length == 2 && (age < Integer.parseInt(betweenAge[0])
+                        || age > Integer.parseInt(betweenAge[1]))){
+                    iterator_dis.remove();
+                }
+            }
+        }
 
+        Map<String, Long> disCountSortMap = disCountSort(allDis);
+//      String dis_first = dis_count.entrySet().stream().map(x -> x.getKey()).collect(Collectors.toList()).get(0);
 
         return neoPushDTOS;
     }
 
-    public void getDisBySymptom(List<String> symptoms){
+    public List<String> getDisBySymptom(List<String> symptoms){
         List<String> symptomCache = getSymptomCache();
         //取交集
         symptoms.retainAll(symptomCache);
-        List<String> allDis = new ArrayList<>();
+        List<String> allDis_bySymptom = pushDis(symptomNameRepository, symptoms);
+        return allDis_bySymptom;
+        }
+
+
+
+    /**
+     * 症状、体征、化验、辅检等其他推送疾病
+     * @param symptomNameRepository
+     * @param symptoms
+     * @return
+     */
+    public List<String> pushDis(SymptomNameRepository symptomNameRepository,List<String> symptoms){
+        List<String> allDis = Lists.newArrayList();
         if(ListUtil.isNotEmpty(symptoms)){
             symptoms.forEach(x ->{
                 List<Symptom> byNameIs = symptomNameRepository.findByNameIs(x);
@@ -221,28 +264,32 @@ public class NeoFacade {
                 }
             });
         }
+        return allDis;
+    }
 
+    /**
+     * 推送的疾病计数排序
+     * @param allDis
+     * @return
+     */
+    public Map<String, Long> disCountSort(List<String> allDis) {
         Map<String, Long> dis_count = allDis.stream().collect(
+
                 Collectors.groupingBy(Function.identity(), Collectors.counting())
         );
-        if(dis_count != null && dis_count.size() > 0){
-            dis_count = dis_count.entrySet().stream().sorted((o1,o2)->o2.getValue().compareTo(o1.getValue()))
+        if (dis_count != null && dis_count.size() > 0) {
+            dis_count = dis_count.entrySet().stream().sorted((o1, o2) -> o2.getValue().compareTo(o1.getValue()))
                     .map(entry -> {
                         Map<String, Long> result = new LinkedHashMap();
-                        result.put(entry.getKey(),entry.getValue());
+                        result.put(entry.getKey(), entry.getValue());
                         return result;
-                    }).reduce((map1,map2) ->{
-                        map2.entrySet().forEach(entry ->map1.put(entry.getKey(),entry.getValue()));
+                    }).reduce((map1, map2) -> {
+                        map2.entrySet().forEach(entry -> map1.put(entry.getKey(), entry.getValue()));
                         return map1;
                     }).get();
-            System.out.println();
-
-//            String dis_first = dis_count.entrySet().stream().map(x -> x.getKey()).collect(Collectors.toList()).get(0);
 
         }
-
-
-
+        return dis_count;
     }
 
     /**

+ 3 - 2
src/main/java/com/diagbot/facade/RetrievalFacade.java

@@ -1,5 +1,6 @@
 package com.diagbot.facade;
 
+import com.diagbot.dto.DiseaseInfoDTO;
 import com.diagbot.dto.DrugInfoDTO;
 import com.diagbot.dto.LisDetailDTO;
 import com.diagbot.dto.OperationInfoDTO;
@@ -128,10 +129,10 @@ public class RetrievalFacade {
     /*
      * 获取疾病名称列表
      */
-    public List<String> getDiseases(String name) {
+    public List<DiseaseInfoDTO> getDiseases(String name) {
 
         YiBaoDiseaseNode yiBaoDiseaseNode = new YiBaoDiseaseNode();
-        List<String> diseaselist = yiBaoDiseaseNode.getDiseaseNameList(name, icdDiseaseRepository);
+        List<DiseaseInfoDTO> diseaselist = yiBaoDiseaseNode.getDiseaseNameList(name, icdDiseaseRepository);
 
         return diseaselist;
     }

+ 13 - 0
src/main/java/com/diagbot/model/ai/process/EntityProcess.java

@@ -8,6 +8,7 @@ import com.diagbot.model.ai.model.Relation;
 import com.diagbot.model.entity.Negative;
 import com.diagbot.model.entity.PD;
 import com.diagbot.util.CatalogueUtil;
+import com.diagbot.util.StringUtil;
 import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
@@ -392,4 +393,16 @@ public class EntityProcess {
         }
         return res;
     }
+
+    public PD getPd(String text) {
+        PD pd = new PD();
+        String[] val_unit = new String[2];
+        if (StringUtil.isNotBlank(text)) {
+            val_unit = extract_digit_new(text);
+            pd.setName(text);
+            pd.setValue(val_unit[0]);
+            pd.setUnit(val_unit[1]);
+        }
+        return pd;
+    }
 }

+ 13 - 2
src/main/java/com/diagbot/model/ai/process/EntityProcessPacsNew.java

@@ -4,9 +4,9 @@ import com.alibaba.fastjson.JSONObject;
 import com.diagbot.model.ai.model.EntityEnum;
 import com.diagbot.model.ai.model.Lemma;
 import com.diagbot.model.entity.BodyPart;
+import com.diagbot.model.entity.PD;
 import com.diagbot.model.entity.Pacs;
 import com.diagbot.model.entity.PacsNew;
-import com.diagbot.model.label.PacsLabel;
 import com.diagbot.util.ListUtil;
 
 import java.util.ArrayList;
@@ -40,7 +40,7 @@ public class EntityProcessPacsNew extends EntityProcess {
             }
         }
 
-        //辅检描述情况
+        //辅助检查
         List<Lemma> pacsAll = createEntityTree(aiOut, EntityEnum.AUXILIARY_EXAMINATION.toString());
 
         Map<String, PacsNew> map = new HashMap<>();
@@ -57,6 +57,17 @@ public class EntityProcessPacsNew extends EntityProcess {
                         if (ListUtil.isNotEmpty(bodyMap.get(relationLemma.getText()))) {
                             desc.setBodyPartList(bodyMap.get(relationLemma.getText()));
                         }
+                        // 指标值暂不用
+                        if (relationLemma.isHaveChildren()) {
+                            for (Lemma re : relationLemma.getRelationLemmas()) {
+                                if (re.getProperty().equals(EntityEnum.INDEX_VALUE.toString())) {
+                                    EntityProcess entityProcess = new EntityProcess();
+                                    PD pd = entityProcess.getPd(re.getText());
+                                    desc.setPd(pd);
+                                    break;
+                                }
+                            }
+                        }
                         descList.add(desc);
                     } else if (relationLemma.getProperty().equals(EntityEnum.DIEASE.toString())) {
                         // 辅检诊断信息

+ 1 - 1
src/main/java/com/diagbot/process/PushProcess.java

@@ -97,7 +97,7 @@ public class PushProcess {
         if(ListUtil.isNotEmpty(reversePush)){
             // 症状
             if (ruleTypeList.contains("1")) {
-                List<String> symptoms = new ArrayList<>();
+                 List<String> symptoms = new ArrayList<>();
                 reversePush.stream().filter(x -> ListUtil.isNotEmpty(x.getSymptoms())).forEach(x -> {
                     List<String> symptomList = x.getSymptoms().stream().map(y -> y.getName()).collect(Collectors.toList());
                     symptoms.removeAll(symptomList);

+ 9 - 3
src/main/java/com/diagbot/repository/YiBaoDiseaseNode.java

@@ -240,10 +240,11 @@ public class YiBaoDiseaseNode {
 	/**
 	 * 获取疾病名称列表
 	 */
-	public List<String> getDiseaseNameList(String name, YiBaoDiseaseRepository diseaseRepository) {
+	public List<DiseaseInfoDTO> getDiseaseNameList(String name, YiBaoDiseaseRepository diseaseRepository) {
 		String icdname;
 
 		List<String> dislist = new ArrayList<>();
+		List<DiseaseInfoDTO> diseaseInfoDTOList = new ArrayList<>();
 
 		List<YiBaoDiseaseName> diseases = diseaseRepository.findByNameContaining(name);
 
@@ -251,11 +252,16 @@ public class YiBaoDiseaseNode {
 			icdname = dis.getName();
 			if (!dislist.contains(icdname)) {
 				dislist.add(icdname);
+				DiseaseInfoDTO diseaseInfoDTO = new DiseaseInfoDTO();
+				diseaseInfoDTO.setName(icdname);
+				if (!dis.getYibaoicd_10codes().isEmpty()){
+					diseaseInfoDTO.setIcd10Code(dis.getYibaoicd_10codes().iterator().next().getName());
+				}
+				diseaseInfoDTOList.add(diseaseInfoDTO);
 			}
 		}
 
-
-		return dislist;
+		return diseaseInfoDTOList;
 	}
 }