Ver código fonte

推送出来的疾病按照疾病对应的症状个数升序排序

kongwz 4 anos atrás
pai
commit
2e2ec694f5

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

@@ -181,7 +181,12 @@ public class NeoFacade {
         if (ListUtil.isNotEmpty(diseaseProperty)) {
             Map map = diseaseProperty.stream().collect(Collectors.toMap(
                     k -> RedisEnum.symptomNumType.getName() + k.getDisease(),
-                    v -> v.getNum(),
+                    v -> {
+                        Map<String, String> desc = new HashMap<>();
+                        desc.put("name", v.getDisease());
+                        desc.put("num", v.getNum().toString());
+                        return desc;
+                    },
                     (v1, v2) -> (v2)
             ));
             redisTemplate.opsForValue().multiSet(map);
@@ -466,15 +471,21 @@ public class NeoFacade {
     public void filterAndSort(List<String> dises, List<String> allDis, int gender_code, double age, PD pd, List<String> depts) {
         //推送出的所有疾病进行性别和年龄的过滤
         List<Map<String, String>> diseases = null;
-        Map<String, Double> dis_fbl = new HashMap<>();
+//        Map<String, Double> dis_fbl = new HashMap<>();
+        Map<String, Integer> dis_symptom_num = new HashMap<>();
         if (ListUtil.isNotEmpty(allDis)) {
-            //            diseases = redisUtil.get(allDis);
             diseases = redisUtil.geth(allDis);
             allDis = diseases.stream().filter(x -> NeoUtil.matchBasic(x, gender_code, age) && NeoUtil.matchPds(x.get("name"), pd)
-            && NeoUtil.matchDept(x,depts))
-                    //            allDis = diseases.stream().filter(x -> NeoUtil.matchBasic(x, gender_code, age))
-                    .map(x -> x.get("name")).collect(Collectors.toList());
-            diseases.forEach(x -> dis_fbl.put(x.get("name"), Double.parseDouble(x.get("fbl"))));
+            && NeoUtil.matchDept(x,depts)).map(x -> x.get("name")).collect(Collectors.toList());
+//            diseases.forEach(x -> dis_fbl.put(x.get("name"), Double.parseDouble(x.get("fbl"))));
+            List<Map<String, String>> symptomNumOfDis = redisUtil.getSymptomNumOfDis(allDis);
+            if(ListUtil.isNotEmpty(symptomNumOfDis)){
+                symptomNumOfDis.forEach(x -> {
+                    String name = x.get("name");
+                    Integer num = Integer.parseInt(x.get("num"));
+                    dis_symptom_num.put(name,num);
+                });
+            }
         }
 
         Map<Long, List<String>> numberDiseasesMap = disCountSort(allDis);
@@ -483,12 +494,18 @@ public class NeoFacade {
         Map<Long, Map<String, Double>> disPack = new LinkedHashMap<>();
         numberDiseasesMap.forEach((x, y) -> {
             Map<String, Double> collect = y.stream()
-                    .collect(Collectors.toMap(v -> v, v -> dis_fbl.get(v), (e1, e2) -> e2));
+//                    .collect(Collectors.toMap(v -> v, v -> dis_fbl.get(v), (e1, e2) -> e2));
+                    .collect(Collectors.toMap(v -> v, v -> Double.valueOf(dis_symptom_num.get(v)), (e1, e2) -> e2));
             disPack.put(x, collect);
         });
         disPack.forEach((x, y) -> {
-            Map<String, Double> collect = y.entrySet().stream()
+            //倒序排序
+            /*Map<String, Double> collect = y.entrySet().stream()
                     .sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
+                    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2, LinkedHashMap::new));*/
+            //正序排序
+            Map<String, Double> collect = y.entrySet().stream()
+                    .sorted(Map.Entry.comparingByValue())
                     .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2, LinkedHashMap::new));
             disPack.put(x, collect);
             collect.forEach((k, n) -> {

+ 6 - 0
src/main/java/com/diagbot/util/RedisUtil.java

@@ -108,6 +108,12 @@ public class RedisUtil {
         return list;
     }
 
+    public List<Map<String,String>> getSymptomNumOfDis(List<String> keys) {
+        keys = keys.stream().map(x ->RedisEnum.symptomNumType.getName()+x).collect(Collectors.toList());
+        List<Map<String,String>> list = redisTemplate.opsForValue().multiGet(keys);
+        return list;
+    }
+
     public List<String> getSv(List<String> keys) {
         keys = keys.stream().map(x ->RedisEnum.symptomVitalType.getName()+x).collect(Collectors.toList());
         List<String> list = redisTemplate.opsForValue().multiGet(keys);