Forráskód Böngészése

邵逸夫智能分诊

zhaops 5 éve
szülő
commit
570a5dab98

+ 40 - 6
triage-service/src/main/java/com/diagbot/facade/AIFacade.java

@@ -34,6 +34,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -244,7 +245,7 @@ public class AIFacade {
             }
             if (disFeatureMap.get("可能诊断") != null && ListUtil.isEmpty(items)) {
                 List<SYFFeatureDTO> featureRateList = disFeatureMap.get("可能诊断");
-                List<SYFDiseaseDeptDTO> mergeFeatureList = Lists.newLinkedList();
+                List<SYFDiseaseDeptDTO> syfDiseaseDeptList = Lists.newLinkedList();
                 Map<String, List<SYFFeatureDTO>> syfFeatureMap = new HashMap<>();
                 //根据阈值(0.05)过滤诊断
                 featureRateList = featureRateList
@@ -252,7 +253,28 @@ public class AIFacade {
                         .filter(i -> (i.getRate() != null && Double.valueOf(i.getRate()) > 0.05d))
                         .collect(Collectors.toList());
 
-                for (SYFFeatureDTO syfFeatureDTO : featureRateList) {
+                //对应后名称相同的项合并
+                Map<String, List<SYFFeatureDTO>> mergeSYFFeatureMap
+                        = EntityUtil.makeEntityListMap(featureRateList, "diseaseName");
+                List<SYFFeatureDTO> mergeDisDTO = Lists.newArrayList();
+                for (Map.Entry<String, List<SYFFeatureDTO>> entry : mergeSYFFeatureMap.entrySet()) {
+                    if (ListUtil.isEmpty(entry.getValue())) {
+                        continue;
+                    }
+                    SYFFeatureDTO syfFeatureDTO = new SYFFeatureDTO();
+                    BeanUtil.copyProperties(entry.getValue().get(0), syfFeatureDTO);
+                    Double rate = 0d;
+                    String conceptDisName = "";
+                    for (SYFFeatureDTO featureDTO : entry.getValue()) {
+                        rate += Double.valueOf(featureDTO.getRate());
+                        conceptDisName += featureDTO.getFeatureName() + ",";
+                    }
+                    syfFeatureDTO.setRate(rate.toString());
+                    syfFeatureDTO.setFeatureName(conceptDisName.substring(0, conceptDisName.length() - 1));
+                    mergeDisDTO.add(syfFeatureDTO);
+                }
+
+                for (SYFFeatureDTO syfFeatureDTO : mergeDisDTO) {
                     if (StringUtil.isNotBlank(syfFeatureDTO.getConcatDept())) {
                         List<SYFFeatureDTO> features = Lists.newLinkedList();
                         if (syfFeatureMap.containsKey(syfFeatureDTO.getConcatDept())) {
@@ -267,7 +289,7 @@ public class AIFacade {
                         List<SYFFeatureDTO> features = Lists.newLinkedList();
                         features.add(syfFeatureDTO);
                         syfDiseaseDeptDTO.setFeatures(features);
-                        mergeFeatureList.add(syfDiseaseDeptDTO);
+                        syfDiseaseDeptList.add(syfDiseaseDeptDTO);
                     }
                 }
                 if (syfFeatureMap != null) {
@@ -281,16 +303,16 @@ public class AIFacade {
                             rate += Double.valueOf(feature.getRate());
                         }
                         syfDiseaseDeptDTO.setRate(rate);
-                        mergeFeatureList.add(syfDiseaseDeptDTO);
+                        syfDiseaseDeptList.add(syfDiseaseDeptDTO);
                     }
                 }
-                Collections.sort(mergeFeatureList, new Comparator<SYFDiseaseDeptDTO>() {
+                Collections.sort(syfDiseaseDeptList, new Comparator<SYFDiseaseDeptDTO>() {
                     @Override
                     public int compare(SYFDiseaseDeptDTO o1, SYFDiseaseDeptDTO o2) {
                         return Double.compare(o2.getRate(), o1.getRate());
                     }
                 });
-                for (SYFDiseaseDeptDTO syfDiseaseDeptDTO : mergeFeatureList) {
+                for (SYFDiseaseDeptDTO syfDiseaseDeptDTO : syfDiseaseDeptList) {
                     if (items.size() < 2) {
                         items.add(syfDiseaseDeptDTO);
                     }
@@ -350,6 +372,18 @@ public class AIFacade {
         if (ListUtil.isEmpty(featureRateList)) {
             return items;
         }
+        //推送结果根据diseaseName去重
+        Iterator<SYFFeatureDTO> syfFeatureDTOIterator = featureRateList.iterator();
+        Map<String, SYFFeatureDTO> distinctMap = new HashMap<>();
+        while (syfFeatureDTOIterator.hasNext()) {
+            SYFFeatureDTO next = syfFeatureDTOIterator.next();
+            if (distinctMap.containsKey(next.getDiseaseName())) {
+                syfFeatureDTOIterator.remove();
+            } else {
+                distinctMap.put(next.getDiseaseName(), next);
+            }
+        }
+
         List<SYFDiseaseDeptDTO> mergeFeatureList = Lists.newLinkedList();
         Map<String, List<SYFFeatureDTO>> syfFeatureMap = new HashMap<>();
         for (SYFFeatureDTO syfFeatureDTO : featureRateList) {