Kaynağa Gözat

Merge remote-tracking branch 'origin/master'

MarkHuang 4 yıl önce
ebeveyn
işleme
a02208b096

+ 5 - 2
src/main/java/com/diagbot/config/CacheDeleteInit.java

@@ -39,7 +39,10 @@ public class CacheDeleteInit implements CommandLineRunner {
         neoFacade.getDisSexCache();
         log.info("CDSS-CORE服务启动加载图谱疾病对应性别信息缓存成功!");
 
-//        neoFacade.getDisdistributionCache();
-//        log.info("CDSS-CORE服务启动加载图谱疾病对应发病率缓存成功!");
+        neoFacade.getDisAgeCache();
+        log.info("CDSS-CORE服务启动加载图谱疾病对应年龄信息缓存成功!");
+
+        neoFacade.getDisdistributionCache();
+        log.info("CDSS-CORE服务启动加载图谱疾病对应发病率缓存成功!");
     }
 }

+ 2 - 1
src/main/java/com/diagbot/enums/TypeEnum.java

@@ -18,7 +18,8 @@ public enum TypeEnum implements KeyedNamed {
     clinical(5, "临床表现"),
     operation(6, "手术"),
     vital(7, "查体"),
-    transfusion(8, "输血");
+    transfusion(8, "输血"),
+    age(9,"年龄");
 
     @Setter
     private int key;

+ 9 - 0
src/main/java/com/diagbot/facade/CommonFacade.java

@@ -7,6 +7,7 @@ import com.diagbot.dto.WordCrfDTO;
 import com.diagbot.enums.StandConvertEnum;
 import com.diagbot.model.ai.AIAnalyze;
 import com.diagbot.model.entity.BodyPart;
+import com.diagbot.model.entity.Modification;
 import com.diagbot.model.entity.Pacs;
 import com.diagbot.model.label.ChiefLabel;
 import com.diagbot.model.label.DiagLabel;
@@ -424,6 +425,14 @@ public class CommonFacade {
                     itemPart.setUniqueName(bodyPart.getStandName() + pacs.getStandName());
                     pacsResList.add(itemPart);
                 }
+
+                // 描述 + 修饰循环放入
+                for (Modification modification : pacs.getModification()) {
+                    Item itemModification = new Item();
+                    itemModification.setName(pacs.getName() + modification.getName());
+                    itemModification.setUniqueName(pacs.getStandName() + modification.getStandName());
+                    pacsResList.add(itemModification);
+                }
             }
         }
 

+ 54 - 1
src/main/java/com/diagbot/facade/HighRiskFacade.java

@@ -5,7 +5,6 @@ import com.diagbot.dto.HighRiskNeoDTO;
 import com.diagbot.dto.IndicationDTO;
 import com.diagbot.dto.WordCrfDTO;
 import com.diagbot.process.HighRiskProcess;
-import com.diagbot.vo.Drug;
 import com.diagbot.vo.HighRiskNeoVO;
 import com.diagbot.vo.IndicationPushVO;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -38,6 +37,60 @@ public class HighRiskFacade {
         HighRiskNeoVO highRiskNeoVO = fillHighRiskNeo(wordCrfDTO);
         List<HighRiskNeoDTO> highRiskNeoDTOList = neoFacade.getHighRiskNeo(highRiskNeoVO);
         // 规则处理
+        // TODO 测试数据开始
+        // HighRiskNeoDTO highRiskNeoDTO = new HighRiskNeoDTO();
+        // highRiskNeoDTO.setIsHighrisk(false);
+        // highRiskNeoDTO.setName("锁骨下动脉药物洗脱支架置入术");
+        // highRiskNeoDTO.setStandname("锁骨下动脉药物洗脱支架置入术");
+        // highRiskNeoDTO.setType("手术");
+        // List<NodeNeoDTO> factor = highRiskNeoDTO.getFactor();
+        // NodeNeoDTO nodeNeo = new NodeNeoDTO();
+        // nodeNeo.setTermtype("诊断");
+        // nodeNeo.setName("急性胰腺炎");
+        // factor.add(nodeNeo);
+        // NodeNeoDTO nodeLis = new NodeNeoDTO();
+        // nodeLis.setTermtype("化验");
+        // nodeLis.setName("白细胞计数");
+        // nodeLis.setMax(new BigDecimal(20));
+        // nodeLis.setMin(new BigDecimal(10));
+        // nodeLis.setValType(0);
+        // factor.add(nodeLis);
+        // NodeNeoDTO nodeLis1 = new NodeNeoDTO();
+        // nodeLis1.setTermtype("化验");
+        // nodeLis1.setName("红细胞压积");
+        // nodeLis1.setVal("阳性");
+        // factor.add(nodeLis1);
+        //
+        // NodeNeoDTO nodePass = new NodeNeoDTO();
+        // nodePass.setTermtype("辅检");
+        // nodePass.setName("胸部CT");
+        // nodePass.setVal("肺叶根治性切除标本");
+        // factor.add(nodePass);
+        // NodeNeoDTO vital = new NodeNeoDTO();
+        // vital.setName("体温");
+        // vital.setMax(new BigDecimal("39.1"));
+        // vital.setMin(new BigDecimal("35.1"));
+        // vital.setValType(1);
+        // vital.setTermtype("查体");
+        // factor.add(vital);
+        // //
+        // NodeNeoDTO vitalBp = new NodeNeoDTO();
+        // vitalBp.setName("意识模糊");
+        // vitalBp.setValType(1);
+        // vitalBp.setVal("意识模糊");
+        // vitalBp.setTermtype("查体");
+        // factor.add(vitalBp);
+        //
+        // NodeNeoDTO vitalBp2 = new NodeNeoDTO();
+        // vitalBp2.setName("年龄");
+        // vitalBp2.setMax(new BigDecimal("1"));
+        // vitalBp2.setMin(new BigDecimal("18"));
+        // vitalBp2.setValType(1);
+        // vitalBp2.setTermtype("年龄");
+        // factor.add(vitalBp2);
+        //
+        // highRiskNeoDTOList.add(highRiskNeoDTO);
+        // TODO 测试数据结束
         highRiskProcess.process(highRiskNeoDTOList, res,wordCrfDTO);
     }
 

+ 58 - 13
src/main/java/com/diagbot/facade/NeoFacade.java

@@ -21,6 +21,7 @@ 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 com.google.common.collect.Maps;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
@@ -30,6 +31,7 @@ import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
+import java.text.DecimalFormat;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -140,7 +142,14 @@ public class NeoFacade {
      */
     @Cacheable(value = "cache", key = "'disSexCache'")
     public Map<String,String> getDisSexCache() {
-        Map<String, String> disSexClass = nodeRepository.getDisSexClass();
+        Map<String, String> disSexClass = Maps.newHashMap();
+        List<String> disSex = nodeRepository.getDisSexClass();
+        if (ListUtil.isNotEmpty(disSex)) {
+            disSex.parallelStream().forEach(x -> {
+                String[] splits = x.split("&");
+                disSexClass.put(splits[0], splits[1]);
+            });
+        }
         return disSexClass;
     }
     /**
@@ -150,7 +159,14 @@ public class NeoFacade {
      */
     @Cacheable(value = "cache", key = "'disAgeCache'")
     public Map<String,String> getDisAgeCache() {
-        Map<String, String> disAgeClass = nodeRepository.getDisAgeClass();
+        Map<String, String> disAgeClass = Maps.newHashMap();
+        List<String> ageClass = nodeRepository.getDisAgeClass();
+        if(ListUtil.isNotEmpty(ageClass)){
+            ageClass.parallelStream().forEach(x ->{
+                String[] splits = x.split("&");
+                disAgeClass.put(splits[0],splits[1]);
+            });
+        }
         return disAgeClass;
     }
     /**
@@ -159,14 +175,18 @@ public class NeoFacade {
      * @return
      */
     @Cacheable(value = "cache", key = "'disdistributionCache'")
-    public Map<String,Float> getDisdistributionCache() {
-        Map<String,Float> disdistribution = new HashMap<>();
-        /*Map<String, String> disdistributionClass = nodeRepository.getDisdistributionClass();
-        disdistributionClass.forEach((x,y) ->{
-            disdistribution.put(x,Float.parseFloat(y));
-        });
-        return disdistribution;*/
-        return null;
+    public Map<String,Double> getDisdistributionCache() {
+        DecimalFormat df = new DecimalFormat("0.######");
+        Map<String,Double> disdistribution = new HashMap<>();
+        List<String> disdistributionClass = nodeRepository.getDisdistributionClass();
+        if(ListUtil.isNotEmpty(disdistributionClass)){
+            disdistributionClass.parallelStream().forEach(x ->{
+                String[] splits = x.split("&");
+                disdistribution.put(splits[0],Double.parseDouble(splits[1]));
+            });
+        }
+        return disdistribution;
+
     }
     /**
      * 图谱反推的数据
@@ -248,12 +268,37 @@ public class NeoFacade {
 
         Map<Long,List<String>> numberDiseasesMap = disCountSort(allDis);
         //根据发病率排序
-        Map<String, Float> disdistributionCache = getDisdistributionCache();
-        numberDiseasesMap.forEach((x,y) ->{
+        Map<String, Double> disdistributionCache = self.getDisdistributionCache();
+        numberDiseasesMap.forEach((x,y)->{
+            y.forEach(z ->{
+                if(disdistributionCache.containsKey(z)){
+                    disdistributionCache.put(z,disdistributionCache.get(z));
+                }else {
+                    disdistributionCache.put(z,0.0);
+                }
+            });
+        });
+        Map<Long,Map<String,Double>> disPack = new LinkedHashMap<>();
+        numberDiseasesMap.forEach((x,y)->{
+            Map<String,Double> dis_dbt = new HashMap<>();
+            y.forEach(dis -> dis_dbt.put(dis,disdistributionCache.get(dis)));
+            disPack.put(x,dis_dbt);
+        });
+        Map<Long,List<String>> num_sortDiseases = new HashMap<>();
+
+        disPack.forEach((x,y)->{
+            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));
+            disPack.put(x,collect);
+            collect.forEach((k,n)->{
+                NeoPushDTO neoPushDTO = new NeoPushDTO();
+                PushBaseDTO pushBaseDTO = new PushBaseDTO();
+                pushBaseDTO.setName(k);
+                neoPushDTO.setDisease(pushBaseDTO);
+                neoPushDTOS.add(neoPushDTO);
+            });
 
         });
 
-//      String dis_first = dis_count.entrySet().stream().map(x -> x.getKey()).collect(Collectors.toList()).get(0);
 
         return neoPushDTOS;
     }

+ 30 - 39
src/main/java/com/diagbot/model/ai/process/EntityProcessPacs.java

@@ -5,80 +5,71 @@ import com.diagbot.biz.push.entity.Item;
 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.Modification;
 import com.diagbot.model.entity.Pacs;
 import com.diagbot.model.label.PacsLabel;
 import com.diagbot.util.ListUtil;
 import com.google.common.collect.Lists;
 
 import java.util.ArrayList;
-import java.util.LinkedHashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Collectors;
 
 public class EntityProcessPacs extends EntityProcess {
 
     public void extractEntity(JSONObject aiOut, PacsLabel pacsLabel) {
-        // 获取描述和部位的关系
-        Map<String, List<BodyPart>> bodyMap = new LinkedHashMap<>();
+        // 获取描述和部位、修饰的关系
+        List<Pacs> pacsResults = new ArrayList<>(); // 辅检提取的描述信息
         List<Lemma> pacsLemmas = createEntityTree(aiOut, EntityEnum.AUXILIARY_DESCRIPT.toString());
         for (Lemma lemma : pacsLemmas) {
+            Pacs pacs = new Pacs();
             List<BodyPart> bodyPartList = new ArrayList<>();
+            List<Modification> modificationList = new ArrayList<>();
             if (lemma.isHaveChildren()) {
                 for (Lemma relationLemma : lemma.getRelationLemmas()) {
-                    if (relationLemma.getProperty().equals(EntityEnum.BODY.toString())) {
+                    if (relationLemma.getProperty().equals(EntityEnum.BODY.toString())) { // 部位
                         BodyPart bodyPart = new BodyPart();
                         bodyPart.setName(relationLemma.getText());
                         bodyPart.setStandName(relationLemma.getText());
                         bodyPartList.add(bodyPart);
+                    } else if (EntityEnum.MODIFICATION.toString().equals(relationLemma.getProperty())) { // 修饰
+                        Modification modification = new Modification();
+                        modification.setName(relationLemma.getText());
+                        modification.setStandName(relationLemma.getText());
+                        modificationList.add(modification);
                     }
                 }
-                bodyMap.put(lemma.getText(), bodyPartList);
             }
+            pacs.setBodyPartList(bodyPartList);
+            pacs.setModification(modificationList);
+            pacs.setName(lemma.getText());
+            pacs.setStandName(lemma.getText());
+            pacsResults.add(pacs);
         }
+        pacsLabel.setPacsResults(pacsResults);
 
-        //辅助检查
+        // 辅检项目
         List<Lemma> pacsAll = createEntityTree(aiOut, EntityEnum.AUXILIARY_EXAMINATION.toString());
-        List<Pacs> disList = new ArrayList<>();
-        for (Lemma lemma : pacsAll) {
-            if (lemma.isHaveChildren()) {
-                for (Lemma relationLemma : lemma.getRelationLemmas()) {
-                    if (relationLemma.getProperty().equals(EntityEnum.DIEASE.toString())) {
-                        // 辅检诊断信息
-                        Pacs dis = new Pacs();
-                        dis.setName(relationLemma.getText());
-                        dis.setStandName(relationLemma.getText());
-                        disList.add(dis);
-                    }
-                }
-            }
-        }
-        //所有项目
         List<Item> collect = Lists.newArrayList();
-        if(ListUtil.isNotEmpty(pacsAll)){
-                collect = pacsAll.stream().map(x -> {
+        if(ListUtil.isNotEmpty(pacsAll)) {
+            collect = pacsAll.stream().map(x -> {
                 Item item = new Item();
                 item.setName(x.getText());
                 item.setUniqueName(x.getText());
                 return item;
             }).collect(Collectors.toList());
         }
-        //描述和部位的关系
-        List<Pacs> pacsResults = Lists.newArrayList();
-        if(bodyMap != null && bodyMap.size() > 0){
-            bodyMap.forEach((x,y) -> {
-                Pacs pacs = new Pacs();
-                pacs.setName(x);
-                pacs.setStandName(x);
-                pacs.setBodyPartList(y);
-                pacsResults.add(pacs);
-            });
-        }
-
-        pacsLabel.setDisease(disList);
         pacsLabel.setItem(collect);
-        pacsLabel.setPacsResults(pacsResults);
 
+        // 辅检诊断
+        List<Lemma> pacsDisease = createEntityTree(aiOut, EntityEnum.DIEASE.toString());
+        List<Pacs> disList = new ArrayList<>();
+        for (Lemma lemma : pacsDisease) {
+            Pacs dis = new Pacs();
+            dis.setName(lemma.getText());
+            dis.setStandName(lemma.getText());
+            disList.add(dis);
+        }
+        pacsLabel.setDisease(disList);
     }
-
 }

+ 1 - 0
src/main/java/com/diagbot/model/entity/Pacs.java

@@ -19,6 +19,7 @@ public class Pacs extends General{
     private PacsValue pacsValues;
     private BodyPart bodyPart;
     private List<BodyPart> bodyPartList; // 部位列表
+    private List<Modification> modification; // 修饰,例如:重度
     private List<Diag> disease;//辅检提的诊断
     private OuterCourtyard outerCourtyard; //外院
 }

+ 64 - 84
src/main/java/com/diagbot/process/HighRiskProcess.java

@@ -8,13 +8,16 @@ import com.diagbot.dto.IndicationDTO;
 import com.diagbot.dto.NodeNeoDTO;
 import com.diagbot.dto.WordCrfDTO;
 import com.diagbot.enums.TypeEnum;
+import com.diagbot.model.entity.Vital;
 import com.diagbot.model.label.PacsLabel;
+import com.diagbot.model.label.VitalLabel;
+import com.diagbot.rule.AgeRule;
 import com.diagbot.util.CoreUtil;
+import com.diagbot.util.ListUtil;
 import com.diagbot.util.MsgUtil;
 import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -34,97 +37,74 @@ public class HighRiskProcess {
      */
     public void process(List<HighRiskNeoDTO> highRiskNeoDTOList, IndicationDTO res, WordCrfDTO wordCrfDTO) {
         for (HighRiskNeoDTO highRiskNeoDTO : highRiskNeoDTOList) {
-            BillMsg billMsg = new BillMsg();
-            String type = highRiskNeoDTO.getType();
-            if (TypeEnum.operation.getName().equals(type)) {
-                billMsg.setMsg(highRiskNeoDTO.getName() + "为高风险手术,请留意");
-            } else if (TypeEnum.drug.getName().equals(type)) {
-                billMsg.setMsg(highRiskNeoDTO.getName() + "为" + highRiskNeoDTO.getHighLevel() + "药品,请留意");
-            }
-
-            billMsg.setOrderName(highRiskNeoDTO.getName());
-            billMsg.setOrderStandName(highRiskNeoDTO.getStandname());
-            billMsg.setType(type);
-            res.getHighRiskList().add(billMsg);
             System.out.println(highRiskNeoDTO);
-        }
-        // TODO 测试数据开始
-        HighRiskNeoDTO highRiskNeoDTO = new HighRiskNeoDTO();
-        highRiskNeoDTO.setName("锁骨下动脉药物洗脱支架置入术");
-        highRiskNeoDTO.setStandname("锁骨下动脉药物洗脱支架置入术");
-        highRiskNeoDTO.setType("手术");
-        List<NodeNeoDTO> factor = highRiskNeoDTO.getFactor();
-        NodeNeoDTO nodeNeo = new NodeNeoDTO();
-        nodeNeo.setTermtype("诊断");
-        nodeNeo.setName("急性胰腺炎");
-        factor.add(nodeNeo);
-        NodeNeoDTO nodeLis = new NodeNeoDTO();
-        nodeLis.setTermtype("化验");
-        nodeLis.setName("白细胞计数");
-        nodeLis.setMax(new BigDecimal(20));
-        nodeLis.setMin(new BigDecimal(10));
-        nodeLis.setValType(0);
-        factor.add(nodeLis);
-        NodeNeoDTO nodeLis1 = new NodeNeoDTO();
-        nodeLis1.setTermtype("化验");
-        nodeLis1.setName("红细胞压积");
-        nodeLis1.setVal("阳性");
-        factor.add(nodeLis1);
+            String type = highRiskNeoDTO.getType();
+            if (highRiskNeoDTO.getIsHighrisk()) {
+                BillMsg billMsg = new BillMsg();
+                if (TypeEnum.operation.getName().equals(type)) {
+                    billMsg.setMsg(highRiskNeoDTO.getName() + "为高风险手术,请留意");
+                } else if (TypeEnum.drug.getName().equals(type)) {
+                    billMsg.setMsg(highRiskNeoDTO.getName() + "为" + highRiskNeoDTO.getHighLevel() + "药品,请留意");
+                }
 
-        NodeNeoDTO nodePass = new NodeNeoDTO();
-        nodePass.setTermtype("辅检");
-        nodePass.setName("胸部CT");
-        nodePass.setVal("肺叶根治性切除标本");
-        factor.add(nodePass);
-        highRiskNeoDTOList.add(highRiskNeoDTO);
-        // TODO 测试数据结束
-        proceSurgery(highRiskNeoDTOList, res, wordCrfDTO);
-    }
+                billMsg.setOrderName(highRiskNeoDTO.getName());
+                billMsg.setOrderStandName(highRiskNeoDTO.getStandname());
+                billMsg.setType(type);
+                res.getHighRiskList().add(billMsg);
+            } else {
 
-    public void proceSurgery(List<HighRiskNeoDTO> highRiskNeoDTOList, IndicationDTO res, WordCrfDTO wordCrfDTO) {
-        for (HighRiskNeoDTO highRiskNeoDTO : highRiskNeoDTOList) {
-            String type = highRiskNeoDTO.getType();
-            List<Item> diag = wordCrfDTO.getDiag();
-            List<Lis> lisList = wordCrfDTO.getLis();
-            PacsLabel pacsLabel = wordCrfDTO.getPacsLabel();
-            //diagLabel 诊断
-            if (TypeEnum.operation.getName().equals(type)) {
-                List<NodeNeoDTO> factor = highRiskNeoDTO.getFactor();
-                for (NodeNeoDTO nodeNeoDTO : factor) {
-                    if (TypeEnum.disease.getName().equals(nodeNeoDTO.getTermtype())) {
-                        String name = nodeNeoDTO.getName();
-                        for (Item item : diag) {
-                            if (item.getUniqueName().equals(name)) {
-                                BillMsg billMsg = MsgUtil.getComplexOperationMsg("高风险手术", item.getName(), nodeNeoDTO.getTermtype());
-                                res.getHighRiskList().add(billMsg);
-                            }
-                        }
-                    } else if (TypeEnum.lis.getName().equals(nodeNeoDTO.getTermtype())) {
-                        for (Lis lis : lisList) {
-                            if (lis.getUniqueName().equals(nodeNeoDTO.getName())) {
-                                Map<String, Object> map = CoreUtil.compareLis(nodeNeoDTO, lis);
-                                if ((Boolean) map.get("flag") == true) {
-                                    BillMsg billMsg = MsgUtil.getComplexOperationMsg("高风险手术", (String)map.get("msg"), nodeNeoDTO.getTermtype());
+                List<Item> diag = wordCrfDTO.getDiag();
+                List<Lis> lisList = wordCrfDTO.getLis();
+                PacsLabel pacsLabel = wordCrfDTO.getPacsLabel();
+                VitalLabel vitalLabel = wordCrfDTO.getVitalLabel();
+                Integer age1 = wordCrfDTO.getAge();
+                // 复杂情况高危手术
+                if (TypeEnum.operation.getName().equals(type)) {
+                    List<NodeNeoDTO> factor = highRiskNeoDTO.getFactor();
+                    for (NodeNeoDTO nodeNeoDTO : factor) {
+                        if (TypeEnum.disease.getName().equals(nodeNeoDTO.getTermtype())) {
+                            String name = nodeNeoDTO.getName();
+                            for (Item item : diag) {
+                                if (item.getUniqueName().equals(name)) {
+                                    BillMsg billMsg = MsgUtil.getComplexOperationMsg( item.getName(), highRiskNeoDTO.getName(),nodeNeoDTO.getTermtype());
                                     res.getHighRiskList().add(billMsg);
                                 }
                             }
-                        }
-                    } else if (TypeEnum.pacs.getName().equals(nodeNeoDTO.getTermtype())) {
-                        //辅助检查描述
-                        List<Item> pacsDescList = new ArrayList<>();
-                        pacsLabel.getRes().stream().forEach(
-                                x -> {
-                                    Item item = new Item();
-                                    item.setName(x.getName());
-                                    item.setUniqueName(x.getUniqueName());
-                                    pacsDescList.add(item);
+                        } else if (TypeEnum.lis.getName().equals(nodeNeoDTO.getTermtype())) {
+                            for (Lis lis : lisList) {
+                                if (lis.getUniqueName().equals(nodeNeoDTO.getName())) {
+                                    Map<String, Object> map = CoreUtil.compareLis(nodeNeoDTO, lis);
+                                    if ((Boolean) map.get("flag") == true) {
+                                        BillMsg billMsg = MsgUtil.getComplexOperationMsg((String)map.get("msg"), highRiskNeoDTO.getName(), nodeNeoDTO.getTermtype());
+                                        res.getHighRiskList().add(billMsg);
+                                    }
                                 }
-                        );
+                            }
+                        } else if (TypeEnum.pacs.getName().equals(nodeNeoDTO.getTermtype())) {
+                            List<Item> pacsDescList = pacsLabel.getRes();
+                            //辅检匹配结果
+                            for (Item item : pacsDescList) {
+                                if (item.getUniqueName().equals(nodeNeoDTO.getVal())) {
+                                    BillMsg billMsg = MsgUtil.getComplexOperationMsg(item.getName(), highRiskNeoDTO.getName(), nodeNeoDTO.getTermtype());
+                                    res.getHighRiskList().add(billMsg);
+                                }
+                            }
+                        } else if (TypeEnum.vital.getName().equals(nodeNeoDTO.getTermtype())){
+                            Map<String, Object> map = CoreUtil.compareVital(nodeNeoDTO, vitalLabel);
+                            if ((Boolean) map.get("flag") == true) {
+                                BillMsg commonBillMsg = MsgUtil.getComplexOperationMsg((String)map.get("msg"),highRiskNeoDTO.getName(), nodeNeoDTO.getTermtype());
+                                res.getHighRiskList().add(commonBillMsg);
+                            }
 
-                        //辅检匹配结果
-                        for (Item item : pacsDescList) {
-                            if (item.getUniqueName().equals(nodeNeoDTO.getVal())) {
-                                BillMsg billMsg = MsgUtil.getComplexOperationMsg("高风险手术", item.getName(), nodeNeoDTO.getTermtype());
+                        }else if(TypeEnum.age.getName().equals(nodeNeoDTO.getTermtype())){
+                            Boolean flag = false;
+                            if(nodeNeoDTO != null && wordCrfDTO.getAge() != null) {
+                                Integer age = wordCrfDTO.getAge();
+                                flag = CoreUtil.compareNum(nodeNeoDTO, age);
+                            }
+                            if (flag) {
+                                String message = "年龄" + wordCrfDTO.getAge();
+                                BillMsg billMsg = MsgUtil.getComplexOperationMsg(message, highRiskNeoDTO.getName(), nodeNeoDTO.getTermtype());
                                 res.getHighRiskList().add(billMsg);
                             }
                         }

+ 3 - 3
src/main/java/com/diagbot/process/OtherTipProcess.java

@@ -29,7 +29,7 @@ import java.util.stream.Collectors;
 public class OtherTipProcess {
 
     /**
-     * 处理业务
+     * 处理业务——化验
      *
      * @param otherTipNeoDTOList
      * @param wordCrfDTO
@@ -53,7 +53,7 @@ public class OtherTipProcess {
                         if (StringUtil.isNotBlank(otherTipNeoDTO.getOtherValue())) {
                             content += otherTipNeoDTO.getOtherValue();
                         } else {
-                            content += otherTipNeoDTO.getValue();
+                            content += CoreUtil.subZeroAndDot(otherTipNeoDTO.getValue().toString());
                         }
                         BillMsg billMsg = MsgUtil.getCommonOtherTipLisMsg(content, nodeNeoDTO.getName(), nodeNeoDTO.getTermtype());
                         res.getOtherList().add(billMsg);
@@ -81,7 +81,7 @@ public class OtherTipProcess {
     }
 
     /**
-     * 处理业务——输
+     * 处理业务——输
      *
      * @param otherTipTransfusionNeoDTOList
      * @param res

+ 0 - 4
src/main/java/com/diagbot/process/PushProcess.java

@@ -42,10 +42,6 @@ public class PushProcess {
         if(pushVO.getDiagVo() != null && pushVO.getDiagVo().getDiags().size() > 0){
             reversePushPackage(length, pushDTO, ruleTypeList, typeWords, pushVO,dis,wordCrfDTO.getDiag());
         }else {
-//            List<String> symptoms = new ArrayList<>();
-//            symptoms.add("嗜睡");
-//            symptoms.add("恶心");
-//            neoFacade.getDisBySymptom(symptoms);
             //正推
             List<NeoPushDTO> push = neoFacade.getPush(pushVO);
             if(ListUtil.isNotEmpty(push) && push.size() >0){

+ 6 - 7
src/main/java/com/diagbot/repository/BaseNodeRepository.java

@@ -6,7 +6,6 @@ import org.springframework.data.neo4j.annotation.Query;
 import org.springframework.data.neo4j.repository.Neo4jRepository;
 
 import java.util.List;
-import java.util.Map;
 
 public interface BaseNodeRepository extends Neo4jRepository<BaseNode, Long> {
 
@@ -22,12 +21,12 @@ public interface BaseNodeRepository extends Neo4jRepository<BaseNode, Long> {
     @Query("match(s:症状) return distinct s.name")
     List<String> getSymptomClass();
 
-    @Query("match(d:医保疾病名称)-[r:医保疾病名称相关性别]->(h) return d.name,h.name")
-    Map<String,String> getDisSexClass();
+    @Query("match(d:医保疾病名称)-[r:医保疾病名称相关性别]->(h) return DISTINCT d.name+'&'+h.name")
+    List<String> getDisSexClass();
 
-    @Query("match(d:医保疾病名称)-[r:医保疾病名称相关年龄]->(h) return d.name,h.name")
-    Map<String,String> getDisAgeClass();
+    @Query("match(d:医保疾病名称)-[r:医保疾病名称相关年龄]->(h) return DISTINCT d.name+'&'+h.name")
+    List<String> getDisAgeClass();
 
-    @Query("match(d:医保疾病名称)-[r:医保疾病名称相关发病率]->(h) return d.name,h.name")
-    Map<String,String> getDisdistributionClass();
+    @Query("match(d:医保疾病名称)-[r:医保疾病名称相关发病率]->(h) return DISTINCT d.name+'&'+h.name")
+    List<String> getDisdistributionClass();
 }

+ 1 - 1
src/main/java/com/diagbot/util/CoreUtil.java

@@ -610,7 +610,7 @@ public class CoreUtil {
         if (lis == null) {
             return "";
         }
-        return StringUtil.isNotBlank(lis.getOtherValue()) ? lis.getOtherValue() : lis.getValue().toString();
+        return StringUtil.isNotBlank(lis.getOtherValue()) ? lis.getOtherValue() : subZeroAndDot(lis.getValue().toString());
     }
 
     /**

+ 52 - 0
src/main/java/com/diagbot/util/MapSortUtil.java

@@ -0,0 +1,52 @@
+package com.diagbot.util;
+
+import com.google.common.collect.Maps;
+
+import java.util.Map;
+
+/**
+ * @author kwz
+ * @date 2020/9/17
+ * @time 14:47
+ */
+public class MapSortUtil {
+    /**
+     * 根据map的key排序
+     *
+     * @param map 待排序的map
+     * @param isDesc 是否降序,true:降序,false:升序
+     * @return 排序好的map
+     * @author kwz
+     */
+    public static <K extends Comparable<? super K>, V> Map<K, V> sortByKey(Map<K, V> map, boolean isDesc) {
+        Map<K, V> result = Maps.newLinkedHashMap();
+        if (isDesc) {
+            map.entrySet().stream().sorted(Map.Entry.<K, V>comparingByKey().reversed())
+                    .forEachOrdered(e -> result.put(e.getKey(), e.getValue()));
+        } else {
+            map.entrySet().stream().sorted(Map.Entry.<K, V>comparingByKey())
+                    .forEachOrdered(e -> result.put(e.getKey(), e.getValue()));
+        }
+        return result;
+    }
+
+    /**
+     * 根据map的value排序
+     *
+     * @param map 待排序的map
+     * @param isDesc 是否降序,true:降序,false:升序
+     * @return 排序好的map
+     * @author kwz
+     */
+    public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map, boolean isDesc) {
+        Map<K, V> result = Maps.newLinkedHashMap();
+        if (isDesc) {
+            map.entrySet().stream().sorted(Map.Entry.<K, V>comparingByValue().reversed())
+                    .forEachOrdered(e -> result.put(e.getKey(), e.getValue()));
+        } else {
+            map.entrySet().stream().sorted(Map.Entry.<K, V>comparingByValue())
+                    .forEachOrdered(e -> result.put(e.getKey(), e.getValue()));
+        }
+        return result;
+    }
+}

+ 1 - 1
src/main/java/com/diagbot/util/MsgUtil.java

@@ -80,7 +80,7 @@ public class MsgUtil {
      */
     public static BillMsg getComplexOperationMsg(String name, String content, String type) {
         BillMsg billMsg = new BillMsg();
-        String msg = String.format("%s:%s,请留意", name, content);
+        String msg = String.format("该患者%s,%s为高风险手术,请留意", name, content);
         billMsg.setMsg(msg);
         billMsg.setContent(content);
         billMsg.setType(type);