Browse Source

Merge branch 'highrisk' into develop

gaodm 4 years ago
parent
commit
e7d9bd226e

+ 8 - 30
src/main/java/com/diagbot/entity/GraphDiseaseCorresponding.java

@@ -2,6 +2,8 @@ package com.diagbot.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
 import java.io.Serializable;
 
 /**
@@ -12,6 +14,7 @@ import java.io.Serializable;
  * @author zhoutg
  * @since 2020-11-13
  */
+@Data
 public class GraphDiseaseCorresponding implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -29,34 +32,9 @@ public class GraphDiseaseCorresponding implements Serializable {
      */
     private String diagIcd;
 
-    public Integer getId() {
-        return id;
-    }
-
-    public void setId(Integer id) {
-        this.id = id;
-    }
-    public String getDiagPingan() {
-        return diagPingan;
-    }
-
-    public void setDiagPingan(String diagPingan) {
-        this.diagPingan = diagPingan;
-    }
-    public String getDiagIcd() {
-        return diagIcd;
-    }
-
-    public void setDiagIcd(String diagIcd) {
-        this.diagIcd = diagIcd;
-    }
-
-    @Override
-    public String toString() {
-        return "GraphDiseaseCorresponding{" +
-            "id=" + id +
-            ", diagPingan=" + diagPingan +
-            ", diagIcd=" + diagIcd +
-        "}";
-    }
+    /**
+     * 警惕标志
+     */
+    private Integer highRiskSign;
+
 }

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

@@ -12,7 +12,8 @@ import lombok.Setter;
 public enum DiseaseTypeEnum implements KeyedNamed {
 
     identify(1, "鉴别诊断"),
-    possibleDis(2, "可能诊断");
+    possibleDis(2, "可能诊断"),
+    highriskDis(3, "警惕");
 
     @Setter
     private int key;

+ 20 - 14
src/main/java/com/diagbot/facade/NeoFacade.java

@@ -220,7 +220,12 @@ public class NeoFacade {
         if (ListUtil.isNotEmpty(symptomFeatures)) {
             Map map = symptomFeatures.stream().collect(Collectors.toMap(
                     k -> RedisEnum.diseaseCorrespond.getName() + k.getDiagPingan(),
-                    v -> v.getDiagIcd(),
+                    v -> {
+                        Map<String, Object> desc = new HashMap<>();
+                        desc.put("diag_icd", v.getDiagIcd());
+                        desc.put("sign", v.getHighRiskSign());
+                        return desc;
+                    },
                     (v1, v2) -> (v2)
             ));
             redisTemplate.opsForValue().multiSet(map);
@@ -228,15 +233,15 @@ public class NeoFacade {
     }
 
     public void diseaseFilterCache() {
-        Map<String,Map> data = new HashMap<>();
+        Map<String, Map> data = new HashMap<>();
         QueryWrapper<TranHospitalFilter> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey());
         List<TranHospitalFilter> tranHospitalFilters = tranHospitalFilterMapper.selectList(queryWrapper);
         if (ListUtil.isNotEmpty(tranHospitalFilters)) {
             Map<Long, List<TranHospitalFilter>> longListMap = tranHospitalFilters.stream().collect(Collectors.groupingBy(TranHospitalFilter::getHospitalId));
-            longListMap.forEach((x,y)->{
+            longListMap.forEach((x, y) -> {
                 Map<String, Long> collect = y.stream().collect(Collectors.toMap(TranHospitalFilter::getUniqueName, TranHospitalFilter::getDocNum, (existing, replacement) -> replacement));
-                data.put(RedisEnum.diseaseFilter.getName() + x.toString(),collect);
+                data.put(RedisEnum.diseaseFilter.getName() + x.toString(), collect);
             });
             redisTemplate.opsForValue().multiSet(data);
         }
@@ -426,8 +431,8 @@ public class NeoFacade {
         pushSpeDis.removeAll(disByDiag);
         disByDiag.addAll(pushSpeDis);
 
-        Map diag_filters = (Map)redisUtil.get(RedisEnum.diseaseFilter.getName() + pushVO.getHospitalId().toString());
-        if(MapUtils.isNotEmpty(diag_filters)){
+        Map diag_filters = (Map) redisUtil.get(RedisEnum.diseaseFilter.getName() + pushVO.getHospitalId().toString());
+        if (MapUtils.isNotEmpty(diag_filters)) {
             Set set = diag_filters.keySet();
             disByDiag.retainAll(set);
         }
@@ -785,10 +790,10 @@ public class NeoFacade {
             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)).map(x -> x.get("name")).collect(Collectors.toList());
-            diseases.forEach(x ->{
+            diseases.forEach(x -> {
                 String name = x.get("name");
                 double clafy = Double.parseDouble(x.get("clafy"));
-                dis_fbl.put(name,clafy);
+                dis_fbl.put(name, clafy);
             });
         }
 
@@ -926,10 +931,11 @@ public class NeoFacade {
 
     /**
      * 根据选中的诊断推送药品和手术
+     *
      * @param disName
      */
-    public Map<String,List<String>> reverseInfoByDisName(String disName) {
-        Map<String,List<String>> type_contents = new HashMap<>();
+    public Map<String, List<String>> reverseInfoByDisName(String disName) {
+        Map<String, List<String>> type_contents = new HashMap<>();
         List<DiseaseInfo> diseaseInfo = nodeRepository.getDiseaseInfo(disName);
         if (ListUtil.isNotEmpty(diseaseInfo)) {
             diseaseInfo.forEach(disIf -> {
@@ -937,10 +943,10 @@ public class NeoFacade {
                 List<String> col = disIf.getCol();
                 switch (tp) {
                     case "医保疾病名称相关药物治疗":
-                        type_contents.put(StaticTypeEnum.DRUG.getName(),col);
+                        type_contents.put(StaticTypeEnum.DRUG.getName(), col);
                         break;
                     case "医保疾病名称相关医保手术和操作名称":
-                        type_contents.put(StaticTypeEnum.OPT.getName(),col);
+                        type_contents.put(StaticTypeEnum.OPT.getName(), col);
                         break;
                     default:
                         break;
@@ -1253,8 +1259,8 @@ public class NeoFacade {
     public NeoPushDTO getDiagInfo(NeoPushVO neoPushVO) {
         NeoPushDTO pushDTO = new NeoPushDTO();
         String term = neoPushVO.getDiagVo().getDiags().get(0).getName();
-        String o = (String)redisUtil.get(RedisEnum.diseaseCorrespond.getName() + term);
-        term = StringUtil.isNotBlank(o)?o:term;
+//        String o = (String) redisUtil.get(RedisEnum.diseaseCorrespond.getName() + term);
+//        term = StringUtil.isNotBlank(o) ? o : term;
         pushDTO = this.reverseInfo(term);
 
         return pushDTO;

+ 71 - 62
src/main/java/com/diagbot/process/PushProcess.java

@@ -15,7 +15,6 @@ import com.diagbot.facade.NeoFacade;
 import com.diagbot.facade.TranLisConfigIcssFacade;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.RedisUtil;
-import com.diagbot.util.StringUtil;
 import com.diagbot.vo.IcssVo;
 import com.diagbot.vo.NeoPushVO;
 import com.diagbot.vo.PushVO;
@@ -53,37 +52,49 @@ public class PushProcess {
     RedisUtil redisUtil;
 
 
-    public PushDTO processIcss(PushVO pushVo){
+    public PushDTO processIcss(PushVO pushVo) {
 
-        List<Item> diag1 = pushVo.getDiag();
         int length = pushVo.getLength();
         Map<String, List<String>> typeWords = Maps.newHashMap();
         List<String> ruleTypeList = Arrays.asList(pushVo.getFeatureType().split(","));
         List<String> pushDiags = Lists.newArrayList();
+        Map<String, Integer> diag_sign = new LinkedHashMap<>();
         PushDTO pushDTO = new PushDTO();
         IcssVo icssVo = pushVo2IcssVo(pushVo);
 //        String s = JSONObject.toJSONString(icssVo);
-        if((StringUtils.isNotBlank(icssVo.getChief()) && icssVo.getChief().trim().equals("呼吸困难"))
-                || (StringUtils.isNotBlank(icssVo.getSymptom()) && icssVo.getSymptom().trim().equals("呼吸困难"))){
+        if ((StringUtils.isNotBlank(icssVo.getChief()) && icssVo.getChief().trim().equals("呼吸困难"))
+                || (StringUtils.isNotBlank(icssVo.getSymptom()) && icssVo.getSymptom().trim().equals("呼吸困难"))) {
             icssVo.setChief("呼吸困难。");
         }
         Response<ResponseData> annotation = icssPushServiceClient.getAnnotation(icssVo);
-        if(annotation != null){
+        if (annotation != null) {
             ResponseData data = annotation.getData();
-            if(data != null){
+            if (data != null) {
                 Map<String, Map<String, String>> inputs = data.getInputs();
-                if(MapUtils.isNotEmpty(inputs)){
+                if (MapUtils.isNotEmpty(inputs)) {
                     List<String> words = new ArrayList<>(inputs.keySet());
-                    typeWords.put(StandConvertEnum.symptom.toString(),words);
-                    typeWords.put(StandConvertEnum.disease.toString(),words);
-                    typeWords.put(StandConvertEnum.pacs.toString(),words);
-                    typeWords.put(StandConvertEnum.lis.toString(),words);
-                    typeWords.put(StandConvertEnum.vital.toString(),words);
+                    typeWords.put(StandConvertEnum.symptom.toString(), words);
+                    typeWords.put(StandConvertEnum.disease.toString(), words);
+                    typeWords.put(StandConvertEnum.pacs.toString(), words);
+                    typeWords.put(StandConvertEnum.lis.toString(), words);
+                    typeWords.put(StandConvertEnum.vital.toString(), words);
                 }
                 List<FeatureRate> dis = data.getDis();
-                if(ListUtil.isNotEmpty(dis)){
+                if (ListUtil.isNotEmpty(dis)) {
                     pushDiags = dis.stream().filter(x -> x.getDesc() == null || x.getDesc().contains("确诊") || x.getDesc().contains("拟诊"))
-                            .map(x -> x.getFeatureName()).collect(Collectors.toList());
+                            .map(x -> {
+                                        String diag = x.getFeatureName();
+                                        Integer sign = 0;
+                                        Map<String, Object> diag_signs = (Map<String, Object>) redisUtil.get(RedisEnum.diseaseCorrespond.getName() + x.getFeatureName());
+                                        if (MapUtils.isNotEmpty(diag_signs)) {
+                                            diag = (String) diag_signs.get("diag_icd");
+                                            sign = (Integer) diag_signs.get("sign");
+                                        }
+                                        diag_sign.put(diag, sign);
+                                        return diag;
+                                    }
+                            )
+                            .collect(Collectors.toList());
                 }
             }
         }
@@ -94,34 +105,19 @@ public class PushProcess {
             TreatDTO treatDTO = new TreatDTO();
             treatDTO.setName(diaeaseName.getName());
             String uniqueName = diaeaseName.getUniqueName();
-            uniqueName = StringUtils.isNotBlank(uniqueName)?uniqueName:diaeaseName.getName();
+            uniqueName = StringUtils.isNotBlank(uniqueName) ? uniqueName : diaeaseName.getName();
             treatDTO.setUniqueName(uniqueName);
-            /*Map<String,List<String>> reverseInfoByDisName = neoFacade.reverseInfoByDisName(uniqueName);
-            if(reverseInfoByDisName.containsKey(StaticTypeEnum.DRUG.getName())){
-                treatDTO.setMedicineTreat(reverseInfoByDisName.get(StaticTypeEnum.DRUG.getName()).stream().map(x -> {
-                    PushBaseDTO pushBaseDTO = new PushBaseDTO();
-                    pushBaseDTO.setName(x);
-                    return pushBaseDTO;
-                }).collect(Collectors.toList()));
-            }
-            if(reverseInfoByDisName.containsKey(StaticTypeEnum.OPT.getName())){
-                treatDTO.setOperaterTreat(reverseInfoByDisName.get(StaticTypeEnum.OPT.getName()).stream().map(x -> {
-                    PushBaseDTO pushBaseDTO = new PushBaseDTO();
-                    pushBaseDTO.setName(x);
-                    return pushBaseDTO;
-                }).collect(Collectors.toList()));
-            }*/
             collect.add(treatDTO);
             pushDTO.setTreat(collect);
         }
-        Map<String,List<String>> reverseInfoByDisName = null;
+        Map<String, List<String>> reverseInfoByDisName = null;
         //推送治疗
-        if(diaeaseName != null){
+        if (diaeaseName != null) {
             String uniqueName = diaeaseName.getUniqueName();
-            uniqueName = StringUtils.isNotBlank(uniqueName)?uniqueName:diaeaseName.getName();
+            uniqueName = StringUtils.isNotBlank(uniqueName) ? uniqueName : diaeaseName.getName();
             reverseInfoByDisName = neoFacade.reverseInfoByDisName(uniqueName);
         }
-        if(reverseInfoByDisName != null){
+        if (reverseInfoByDisName != null) {
             if (ruleTypeList.contains("8") && reverseInfoByDisName.containsKey(StaticTypeEnum.DRUG.getName())) {
                 pushDTO.setMedicines(reverseInfoByDisName.get(StaticTypeEnum.DRUG.getName()).stream().map(x -> {
                     PushBaseDTO pushBaseDTO = new PushBaseDTO();
@@ -137,16 +133,16 @@ public class PushProcess {
                 }).collect(Collectors.toList()));
             }
         }
-        if(ListUtil.isNotEmpty(icssVo.getDiagOrder())){
+        if (ListUtil.isNotEmpty(icssVo.getDiagOrder())) {
             List<PreResult> diagOrder = icssVo.getDiagOrder();
             //把第一个推送出来的诊断set到diagOrder中,再反推
             NeoPushVO pushVO = new NeoPushVO();
             DiagVo diagVo = new DiagVo();
-            diagVo.setDiags(diagOrder.stream().map(x ->{
+            diagVo.setDiags(diagOrder.stream().map(x -> {
                 String name = x.getName();
                 Diag diag = new Diag();
-                String o = (String)redisUtil.get(RedisEnum.diseaseCorrespond.getName() + name);
-                name = StringUtil.isNotBlank(o)?o:name;
+                Map<String, Object> diag_signs = (Map<String, Object>) redisUtil.get(RedisEnum.diseaseCorrespond.getName() + name);
+                name = MapUtils.isNotEmpty(diag_signs)? (String) diag_signs.get("diag_icd"):name;
                 diag.setName(name);
                 return diag;
             }).collect(Collectors.toList()));
@@ -155,11 +151,25 @@ public class PushProcess {
         }
         try {
             boolean allFieldNull = isAllFieldNull(pushDTO);
-            if(allFieldNull){
+            if (allFieldNull) {
                 if (ListUtil.isNotEmpty(pushDiags)) {
                     //先把所有疾病推出来
                     if (ruleTypeList.contains("7")) {
-                        List<PushBaseDTO> diseeases =  pushDiags.stream().map(x -> {
+                        if(MapUtils.isNotEmpty(diag_sign)){
+                            Map.Entry<String, Integer> first = diag_sign.entrySet().stream().findFirst().get();
+                            if (first.getValue() == 1){
+                                List<String> firstdiag = Lists.newArrayList(first.getKey());
+                                List<PushBaseDTO> collect_highrisk = firstdiag.stream().map(x -> {
+                                    PushBaseDTO pushBaseDTO = new PushBaseDTO();
+                                    pushBaseDTO.setName(x);
+                                    return pushBaseDTO;
+                                }).collect(Collectors.toList());
+                                dis.put(DiseaseTypeEnum.highriskDis.getName(), collect_highrisk);
+                            }
+
+                        }
+
+                        List<PushBaseDTO> diseeases = pushDiags.stream().map(x -> {
                             PushBaseDTO pushBaseDTO = new PushBaseDTO();
                             pushBaseDTO.setName(x);
                             return pushBaseDTO;
@@ -172,7 +182,7 @@ public class PushProcess {
                     //把第一个推送出来的诊断set到diagOrder中,再反推
                     NeoPushVO pushVO = new NeoPushVO();
                     DiagVo diagVo = new DiagVo();
-                    diagVo.setDiags(pushDiags.stream().map(x ->{
+                    diagVo.setDiags(pushDiags.stream().map(x -> {
                         Diag diag = new Diag();
                         diag.setName(x);
                         return diag;
@@ -188,13 +198,11 @@ public class PushProcess {
         }
 
 
-
-
         return pushDTO;
     }
 
     //判断该对象是否: 返回ture表示所有属性为null  返回false表示不是所有属性都是null
-    public static boolean isAllFieldNull(Object obj) throws Exception{
+    public static boolean isAllFieldNull(Object obj) throws Exception {
         List<String> params = Lists.newArrayList("operations", "medicines", "treat");
         Class stuCla = (Class) obj.getClass();// 得到类对象
         Field[] fs = stuCla.getDeclaredFields();//得到属性集合
@@ -203,7 +211,7 @@ public class PushProcess {
             f.setAccessible(true); // 设置属性是可以访问的(私有的也可以)
             String name = f.getName();
             Object val = f.get(obj);// 得到此属性的值
-            if(val!=null && !params.contains(name)) {//只要有1个属性不为空,那么就不是所有的属性值都为空
+            if (val != null && !params.contains(name)) {//只要有1个属性不为空,那么就不是所有的属性值都为空
                 flag = false;
                 break;
             }
@@ -213,17 +221,18 @@ public class PushProcess {
 
     /**
      * pushVo转Icss入参
+     *
      * @param pushVo
      * @return
      */
-    public IcssVo pushVo2IcssVo(PushVO pushVo){
+    public IcssVo pushVo2IcssVo(PushVO pushVo) {
         IcssVo icssVo = new IcssVo();
         icssVo.setAge(new Double(pushVo.getAgeNum()).intValue());
         String sexs = "";
         Integer sex = pushVo.getSex();
-        if(sex == 1){
+        if (sex == 1) {
             sexs = "M";
-        }else if(sex == 2){
+        } else if (sex == 2) {
             sexs = "F";
         }
         icssVo.setSex(sexs);
@@ -232,32 +241,32 @@ public class PushProcess {
         icssVo.setVital(pushVo.getVital());
         icssVo.setPasts(pushVo.getPasts());
         icssVo.setPersonal(pushVo.getPersonal());
-        icssVo.setFeatureType(pushVo.getFeatureType()+",7");
+        icssVo.setFeatureType(pushVo.getFeatureType() + ",7");
 
         List<Lis> lis = pushVo.getLis();
         lis = tranLisConfigIcssFacade.addLisUniqueName(lis, "A001");
-        List<PreResult> lis_icss = lis.stream().map(x ->{
+        List<PreResult> lis_icss = lis.stream().map(x -> {
             PreResult instantiate = BeanUtils.instantiate(PreResult.class);
-            BeanUtils.copyProperties(x,instantiate);
-            instantiate.setValue(x.getValue()==null?"":x.getValue().toString());
-            instantiate.setMaxValue(x.getMaxValue()==null?"":x.getMaxValue().toString());
-            instantiate.setMinValue(x.getMinValue()==null?"":x.getMinValue().toString());
+            BeanUtils.copyProperties(x, instantiate);
+            instantiate.setValue(x.getValue() == null ? "" : x.getValue().toString());
+            instantiate.setMaxValue(x.getMaxValue() == null ? "" : x.getMaxValue().toString());
+            instantiate.setMinValue(x.getMinValue() == null ? "" : x.getMinValue().toString());
             return instantiate;
         }).collect(Collectors.toList());
         icssVo.setLis(lis_icss);
 
         List<Pacs> pacs = pushVo.getPacs();
-        if(ListUtil.isNotEmpty(pacs)){
-            List<PreResult> pacs_icss = pacs.stream().map(x ->{
+        if (ListUtil.isNotEmpty(pacs)) {
+            List<PreResult> pacs_icss = pacs.stream().map(x -> {
                 PreResult instantiate = new PreResult();
-                BeanUtils.copyProperties(x,instantiate);
+                BeanUtils.copyProperties(x, instantiate);
                 return instantiate;
             }).collect(Collectors.toList());
             icssVo.setPacs(pacs_icss);
         }
 
-        if(ListUtil.isNotEmpty(pushVo.getDiag())){
-            List<PreResult> diagOrder =  pushVo.getDiag().stream().map(x ->{
+        if (ListUtil.isNotEmpty(pushVo.getDiag())) {
+            List<PreResult> diagOrder = pushVo.getDiag().stream().map(x -> {
                 String name = x.getName();
                 PreResult preResult = new PreResult();
                 preResult.setName(name);
@@ -281,7 +290,7 @@ public class PushProcess {
         if (ListUtil.isNotEmpty(push)) {
             //先把所有疾病推出来
             if (ruleTypeList.contains("7")) {
-                List<PushBaseDTO> diseeases =  push.stream().map(x -> {
+                List<PushBaseDTO> diseeases = push.stream().map(x -> {
                     PushBaseDTO pushBaseDTO = new PushBaseDTO();
                     pushBaseDTO.setName(x);
                     return pushBaseDTO;
@@ -413,7 +422,7 @@ public class PushProcess {
     private List<PushBaseDTO> getPackagePushBaseDTO(Map<String, List<String>> typeWords, List<String> symptoms, StandConvertEnum symptom) {
         List<PushBaseDTO> symptomPush = symptoms.stream()
                 .map(x -> {
-                    x = ListUtil.isNotEmpty(typeWords.get(symptom.toString()))?!typeWords.get(symptom.toString()).contains(x)?x:"":x;
+                    x = ListUtil.isNotEmpty(typeWords.get(symptom.toString())) ? !typeWords.get(symptom.toString()).contains(x) ? x : "" : x;
                     return x;
                 }).filter(x -> StringUtils.isNotBlank(x)).map(x -> {
                     PushBaseDTO pushBaseDTO = new PushBaseDTO();

+ 1 - 0
src/main/resources/mapper/GraphDiseaseCorrespondingMapper.xml

@@ -7,6 +7,7 @@
         <id column="id" property="id" />
         <result column="diag_pingan" property="diagPingan" />
         <result column="diag_icd" property="diagIcd" />
+        <result column="high_risk_sign" property="highRiskSign" />
     </resultMap>
 
 </mapper>