Explorar o código

Merge remote-tracking branch 'origin/push-5.4.3security' into push-debug

louhr %!s(int64=5) %!d(string=hai) anos
pai
achega
c3e90673ba

+ 26 - 13
common-push/src/main/java/org/diagbot/common/push/cache/CacheFileManager.java

@@ -1,5 +1,6 @@
 package org.diagbot.common.push.cache;
 
+import org.diagbot.common.push.util.CryptUtil;
 import org.diagbot.pub.jdbc.MysqlJdbc;
 import org.diagbot.pub.utils.PropertiesUtil;
 import org.diagbot.pub.utils.security.EncrypDES;
@@ -87,9 +88,11 @@ public class CacheFileManager {
             String r2;
             String r3;
             while (rs.next()) {
-                r1 = rs.getString(1);
+//                r1 = rs.getString(1);
+                r1 = CryptUtil.decrypt_char(rs.getString(1));
                 r2 = rs.getString(2);
-                r3 = rs.getString(4);
+                r3 = CryptUtil.decrypt_char(rs.getString(4));
+//                r3 = rs.getString(4);
                 if (idMap.get(r1) == null) {
                     idMap.put(r1, r2);
                     nameMap.put(r1, r3);
@@ -121,8 +124,10 @@ public class CacheFileManager {
 
             fw = new FileWriter(path + "synonym.dict");
             while (rs.next()) {
-                r1 = rs.getString(1);
-                r2 = rs.getString(2);
+//                r1 = rs.getString(1);
+//                r2 = rs.getString(2);
+                r1 = CryptUtil.decrypt_char(rs.getString(1));
+                r2 = CryptUtil.decrypt_char(StringUtils.isEmpty(rs.getString(2))?"":rs.getString(2));
                 r3 = rs.getString(3);
                 fw.write(encrypDES.encrytor(r1 + "|" + r2 + "|" + r3));
                 fw.write("\n");
@@ -205,7 +210,8 @@ public class CacheFileManager {
             FileWriter fw = new FileWriter(path + "graph_diag_classify.dict");
             String r2, r3;
             while (rs.next()) {
-                r2 = rs.getString(1);//疾病名称
+//                r2 = rs.getString(1);//疾病名称
+                r2 = CryptUtil.decrypt_char(rs.getString(1));//疾病名称
                 r3 = rs.getString(2);//疾病类别
                 fw.write(encrypDES.encrytor(r2 + "|" + r3));
                 fw.write("\n");
@@ -221,7 +227,8 @@ public class CacheFileManager {
             fw = new FileWriter(path + "graph_sex_age_filter.dict");
             String r1, r4, r5;
             while (rs.next()) {
-                r1 = rs.getString(1);//术语名称
+//                r1 = rs.getString(1);//术语名称
+                r1 = CryptUtil.decrypt_char(rs.getString(1));//术语名称
                 r2 = rs.getString(3);//sexType 1:男 2:女 3:都可以
                 r3 = rs.getString(4);//min_age
                 r4 = rs.getString(5);//max_age
@@ -242,8 +249,10 @@ public class CacheFileManager {
             rs = st.executeQuery(sql);
             fw = new FileWriter(path + "graph_vital_convert.dict");
             while (rs.next()) {
-                r1 = rs.getString(1);//体征结果
-                r2 = rs.getString(2);//体征指标
+//                r1 = rs.getString(1);//体征结果
+//                r2 = rs.getString(2);//体征指标
+                r1 = CryptUtil.decrypt_char(rs.getString(1));//体征结果
+                r2 = CryptUtil.decrypt_char(rs.getString(2));//体征指标
                 fw.write(encrypDES.encrytor(r1 + "|" + r2));
                 fw.write("\n");
             }
@@ -318,7 +327,8 @@ public class CacheFileManager {
 
             String r1, r2, r3, r4, r5;
             while (rs.next()) {
-                r1 = rs.getString(1);
+//                r1 = rs.getString(1);
+                r1 = CryptUtil.decrypt_char(rs.getString(1));
                 r2 = rs.getString(2);
                 r3 = rs.getString(3);
                 r4 = rs.getString(4);
@@ -337,7 +347,7 @@ public class CacheFileManager {
 
             fw = new FileWriter(path + "bigdata_value_analyze.dict");
             while (rs.next()) {
-                fw.write(encrypDES.encrytor(rs.getString(1)));
+                fw.write(encrypDES.encrytor(CryptUtil.decrypt_char(rs.getString(1))));
                 fw.write("\n");
             }
             fw.close();
@@ -458,7 +468,8 @@ public class CacheFileManager {
             rs = st.executeQuery(sql);
             fw = new FileWriter(path + "bigdata_lpv_sex_age_filter.dict");//化验辅检体征相关文件
             while (rs.next()) {
-                r1 = rs.getString(1);
+//                r1 = rs.getString(1);
+                r1 = CryptUtil.decrypt_char(rs.getString(1));
                 r2 = rs.getString(2);
                 r3 = rs.getString(3);
                 r4 = rs.getString(4);
@@ -520,8 +531,10 @@ public class CacheFileManager {
         String r2 = "";
         Map<String, String> libraryMap = new HashMap<>(10);
         while (rs.next()) {
-            r1 = rs.getString(1);
-            r2 = rs.getString(2);
+//            r1 = rs.getString(1);
+//            r2 = rs.getString(2);
+            r1 = CryptUtil.decrypt_char(rs.getString(1));
+            r2 = CryptUtil.decrypt_char(rs.getString(2));
             if (libraryMap.get(r1) == null) {
                 libraryMap.put(r1, r2);
             } else if (isJoin && libraryMap.get(r1) != null) {

+ 80 - 0
common-push/src/main/java/org/diagbot/common/push/filter/rule/CalcFormula.java

@@ -0,0 +1,80 @@
+package org.diagbot.common.push.filter.rule;
+
+import org.apache.commons.lang3.StringUtils;
+import org.diagbot.common.push.bean.SearchData;
+import org.diagbot.nlp.rule.module.PreResult;
+
+import java.util.List;
+
+/**
+ * @Description: 需要走规则的计算公式
+ * @Author: HUJING
+ * @Date: 2019/12/31 14:10
+ */
+public class CalcFormula {
+    public String gfrCalcMethod(SearchData searchData) {
+        String text = "";
+        List<PreResult> lis = searchData.getLis();
+        String crValue = "";
+        String units = "";
+        boolean hasCr = false;
+        for (PreResult preResult : lis) {
+            if ("肌酐(Cr)".equals(preResult.getDetailName()) && StringUtils.isNotEmpty(preResult.getValue())) {
+                crValue = preResult.getValue();
+                units = preResult.getUnits();
+                hasCr = true;
+            }
+        }
+        if (!hasCr) {
+            return text;
+        }
+
+        int age = searchData.getAge();
+        double scr = 0d;
+        float k = 0f;
+        double a = 0d;
+        double denger = 0d;
+
+        if ("umol/L".equals(units)) {
+            scr = Double.parseDouble(crValue) / 88.41;
+        } else if ("mg/dL".equals(units)) {
+            scr = Double.parseDouble(crValue);
+        }
+
+        String sex = searchData.getSex();
+        if ("1".equals(sex) || "M".equals(sex)) {
+            k = 0.9f;
+            denger = 1d;
+            if (scr <= 0.90) {
+                a = -0.411;
+            } else {
+                a = -1.209;
+            }
+        } else if ("2".equals(sex) || "F".equals(sex)) {
+            k = 0.7f;
+            denger = 1.018;
+            if (scr <= 0.70) {
+                a = -0.329;
+            } else {
+                a = -1.209;
+            }
+        }
+
+        double eGFR3 = 141 * Math.pow((scr / k), a) * Math.pow(0.993, age) * denger;
+
+        if (eGFR3 <= 0 || Double.POSITIVE_INFINITY == eGFR3) {
+            return text;
+        }
+
+        if (eGFR3 > 0 && eGFR3 <= 29) {
+            text = "重度肾功能不全";
+        } else if (eGFR3 > 29 && eGFR3 < 60) {
+            text = "中度肾功能不全";
+        } else if (eGFR3 >= 60 && eGFR3 <= 89) {
+            text = "轻度肾功能不全";
+        } else if (eGFR3 > 89) {
+            text = "肾功能正常";
+        }
+        return text;
+    }
+}

+ 15 - 0
common-push/src/main/java/org/diagbot/common/push/filter/rule/PretreatmentRule.java

@@ -182,6 +182,18 @@ public class PretreatmentRule {
 //                System.out.println("id:" + rule.getId() + "; pub_name: " + rule.getPub_name());
 //            }
 //        }
+        if (searchData.getLis() != null && searchData.getLis().size() > 0) {
+            //计算GFR值
+            CalcFormula calcFormula = new CalcFormula();
+            String gfrResult = calcFormula.gfrCalcMethod(searchData);
+            if (!StringUtils.isEmpty(gfrResult)) {
+                PreResult preResult = new PreResult();
+                preResult.setValue(gfrResult);
+                preResult.setUniqueName("检查--");
+                searchData.getPacs().add(preResult);
+                searchData.setPacsString(add2PreResultList(searchData.getPacs(), searchData.getPacsString(), "pacs", searchData));
+            }
+        }
     }
 
     private String add2PreResultList(Pretreatment pretreatment, String content, String inputType, SearchData searchData) throws java.io.IOException {
@@ -205,6 +217,9 @@ public class PretreatmentRule {
                     for (Rule rule : rules) {
                         boolean isSuit = suitRule(result, rule, content);
                         if (isSuit) {
+                            if (!StringUtils.isEmpty(rule.getOriginText())) {
+                                rule.setOriginText("");
+                            }
                             if (!StringUtils.isEmpty(result.getDateValue())) {
                                 rule.setOriginText(result.getDateValue());
                             }

+ 101 - 0
common-push/src/main/java/org/diagbot/common/push/util/CryptUtil.java

@@ -0,0 +1,101 @@
+package org.diagbot.common.push.util;
+
+import java.util.List;
+
+/**
+ * @Description: 加解密工具类
+ * @author: gaodm
+ * @time: 2019/12/30 11:09
+ */
+public class CryptUtil {
+
+    private final static char EN_MAX = '\u0080';//128
+    private final static int MOVE_NUM = 2;
+    private final static char DE_MAX = EN_MAX + MOVE_NUM;
+
+    /**
+     * 加密,把一个字符串在原有的基础上+2
+     *
+     * @param data 需要解密的原字符串
+     * @return 返回解密后的新字符串
+     */
+    public static String encrypt_char(String data) {
+        char[] chars = data.toCharArray();
+        for (int i = 0; i < chars.length; i++) {
+            if (EN_MAX < chars[i]) {
+                chars[i] += MOVE_NUM;
+            }
+        }
+        return new String(chars);
+    }
+
+    /**
+     * 解密:把一个加密后的字符串在原有基础上-2
+     *
+     * @param data 加密后的字符串
+     * @return 返回解密后的新字符串
+     */
+    public static String decrypt_char(String data) {
+        char[] chars = data.toCharArray();
+        for (int i = 0; i < chars.length; i++) {
+            if (DE_MAX < chars[i]) {
+                chars[i] -= MOVE_NUM;
+            }
+        }
+        return new String(chars);
+    }
+
+
+    /**
+     * 对List<String>进行加密
+     *
+     * @param list 加密前的list
+     * @return 加密后的list
+     */
+    public static void encryptList(List<String> list) {
+        if (ListUtil.isNotEmpty(list)) {
+            for (int i = 0; i < list.size(); i++) {
+                list.set(i, CryptUtil.encrypt_char(list.get(i)));
+            }
+        }
+    }
+
+    /**
+     * 对List<String>进行解密
+     * @param list 解密前的list
+     * @return 解密后的list
+     */
+    public static void decryptList(List<String> list) {
+        if (ListUtil.isNotEmpty(list)) {
+            for (int i = 0; i < list.size(); i++) {
+                list.set(i, CryptUtil.decrypt_char(list.get(i)));
+            }
+        }
+    }
+
+
+
+    public static void main(String[] args) {
+        //加密英文
+        String data = "解密后:�dsfaa2132159-4331}~\u007F";
+        String charResult = encrypt_char(data);
+        System.out.println("加密后:" + charResult);
+        //解密
+        String charStr = decrypt_char(charResult);
+        System.out.println("解密后:" + charStr);
+
+
+        //加密中文
+        data = "跳梁小豆tlxd666,z";
+        String result = encrypt_char(data);
+        System.out.println("加密后:" + result);
+        String str1 = decrypt_char(result);
+        System.out.println("解密后:" + str1);
+
+//        int num = 32;
+//        while (num <= 128) {
+//            System.out.println((char) num + "  (Unicode编码对应的数字为:) " + num);
+//            num++;
+//        }
+    }
+}

+ 88 - 0
common-push/src/main/java/org/diagbot/common/push/util/ListUtil.java

@@ -0,0 +1,88 @@
+package org.diagbot.common.push.util;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @Description: List 工具类
+ * @author: gaodm
+ * @date: 2017/12/28 15:36
+ * @version: V1.0
+ */
+public class ListUtil {
+    /**
+     * list的第一行
+     */
+    public static final int FIRST = 0;
+
+    private ListUtil() {
+
+    }
+
+    /**
+     * 创建List对象
+     *
+     * @param <E> 泛型,
+     * @return
+     */
+    public static <E> ArrayList<E> newArrayList() {
+        return new ArrayList<>();
+    }
+
+    /**
+     * 判断List是否为空
+     *
+     * @param list
+     * @return
+     */
+    public static boolean isEmpty(List list) {
+        if (null == list) {
+            return Boolean.TRUE;
+        }
+        if (list.isEmpty()) {
+            return Boolean.TRUE;
+        }
+        if (list.size() < 1) {
+            return Boolean.TRUE;
+        }
+        return Boolean.FALSE;
+    }
+
+    /**
+     * 判断List是否为非空
+     *
+     * @param list
+     * @return
+     */
+    public static boolean isNotEmpty(List list) {
+        return !isEmpty(list);
+    }
+
+    /**
+     * 获取List集合中第一个对象,前提是自己先判断这个list不会为空
+     *
+     * @param list
+     * @param <E>
+     * @return
+     */
+    public static <E> E firstEntity(List<E> list) {
+        if (isEmpty(list)) {
+            return null;
+        }
+        return list.get(FIRST);
+    }
+
+    public static <E> ArrayList<E> arrayToList(E[] strArray) {
+        ArrayList<E> arrayList = new ArrayList<>(strArray.length);
+        Collections.addAll(arrayList, strArray);
+        return arrayList;
+    }
+
+    public static void main(String[] args) throws Exception {
+        String[] i ={"A","B"};
+        List<String> o = arrayToList(i);
+        System.out.println("输入参数:"+ i);
+        System.out.println("输出参数:"+ o);
+    }
+}

+ 22 - 3
graph-web/src/main/java/org/diagbot/graphWeb/work/GraphCalculate.java

@@ -59,7 +59,7 @@ public class GraphCalculate {
         logger.info("前端传来的年龄为 :"+age+" 前端传来的性别为 :"+sex);
         Map<String, Map<String, String>> sexAgeCache = CacheUtil.getSexAgeCache();
         Map<String, Map<String, String>> inputs = searchData.getGraphInputs();
-        List<String> exculdDiagFilds = this.exculdDiagFilds(inputs);
+
         //从大数据解析分词
         Set<String> ss = processParticiple(inputs);
         logger.info("从分词系统接收到的词 :" + ss);
@@ -85,6 +85,7 @@ public class GraphCalculate {
 
         logger.info("页面诊断为 :"+webDiag);
         String[] webDiagList = webDiag.split(",|,|、|;|:|;");
+        List<String> exculdDiagFilds = this.exculdDiagFilds(inputs,webDiagList,diseaseName);
         //处理血肌酐
         List<PreResult> lisArr = searchData.getLis();
         String serumCreatinine = processSerumcreatinine(lisArr);
@@ -341,10 +342,11 @@ public class GraphCalculate {
         }
         return sc;
     }
-    private List<String> exculdDiagFilds(Map<String, Map<String, String>> inputs){
+    private List<String> exculdDiagFilds(Map<String, Map<String, String>> inputs,String[] webDiagList,String disName){
         List<String> exculdDiagFilds = new ArrayList<>();
+        String fildName ="";
         if(inputs != null && inputs.size()>0){
-            String fildName ="";
+
             for (Map.Entry<String, Map<String, String>> fild:inputs.entrySet()) {
                 fildName = fild.getKey();
                 Map<String, String> value = fild.getValue();
@@ -360,6 +362,23 @@ public class GraphCalculate {
                 }
             }
         }
+        try{
+            if(webDiagList!=null && webDiagList.length>0){
+                for (String wd:webDiagList) {
+                    if(wd != null && !disName.equals(wd)){
+                        fildName = "'"+wd+"'";
+                        if(!exculdDiagFilds.contains(fildName)){
+                            exculdDiagFilds.add(fildName);
+                        }
+                    }
+
+                }
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+
         return exculdDiagFilds;
     }
 }
+

+ 88 - 80
graph-web/src/main/java/org/diagbot/graphWeb/work/ScaleCalculate.java

@@ -158,92 +158,100 @@ public class ScaleCalculate {
         JSONObject valueResult = new JSONObject();
         JSONObject nameResult = new JSONObject();
         int type = (int) data.get("type");
-        if (type == 2) {
-            Map<String, Object> content = (Map<String, Object>) data.get("content");
-            List<Map<String, Object>> mapList = (List<Map<String, Object>>) content.get("details");
-            if ("肾小球滤过率".equals(content.get("name"))) {
-                int age = 0;
-                double scr = 0.00;
-                float k = 0.0f;
-                double a = 0.00;
-                double denger = 0.00;
-                for (int i = 0; i < mapList.size(); i++) {
-                    Map<String, Object> detailSub = mapList.get(i);
-                    if ("年龄".equals(detailSub.get("name"))) {
-                        if (StringUtils.isEmpty(detailSub.get("value").toString())) {
-                            break;
-                        } else {
-                            age = Integer.valueOf(detailSub.get("value").toString());
-                        }
-                    } else if ("血肌酐".equals(detailSub.get("name"))) {
-                        if ("".equals(detailSub.get("value"))) {
-                            break;
-                        } else {
-                            if ("umol/L".equals(detailSub.get("uint"))) {
-                                scr = Double.valueOf(detailSub.get("value").toString()) / 88.41;
-                            } else if ("mg/dL".equals(detailSub.get("uint"))) {
-                                scr = Double.valueOf(detailSub.get("value").toString());
-                            }
-                        }
-                    } else if ("性别".equals(detailSub.get("name"))) {
-                        List<Map<String, Object>> genderDetails = (List<Map<String, Object>>) detailSub.get("details");
-                        for (int j = 0; j < genderDetails.size(); j++) {
-                            Map<String, Object> genderDetail = genderDetails.get(j);
-                            //返回的数据结构性别暂时是写死(默认女性)
-                            if ((int) genderDetail.get("state") == 1) {
-                                if ("男".equals(genderDetail.get("detailName"))) {
-                                    k = 0.9f;
-                                    denger = Double.valueOf(genderDetail.get("value").toString());
-                                    if (scr <= 0.90) {
-                                        a = -0.411;
-                                    } else {
-                                        a = -1.209;
-                                    }
-                                } else if ("女".equals(genderDetail.get("detailName"))) {
-                                    k = 0.7f;
-                                    denger = Double.valueOf(genderDetail.get("value").toString());
-                                    if (scr <= 0.70) {
-                                        a = -0.329;
-                                    } else {
-                                        a = -1.209;
-                                    }
-                                }
-                            }
-                        }
-                    }
+        if (type != 2) {
+            return scaleCalcResult;
+        }
+        Map<String, Object> content = (Map<String, Object>) data.get("content");
+        List<Map<String, Object>> mapList = (List<Map<String, Object>>) content.get("details");
+        if (!"肾小球滤过率".equals(content.get("name"))) {
+            return scaleCalcResult;
+        }
+        int age = 0;
+        double scr = 0d;
+        float k = 0f;
+        double a = 0d;
+        double denger = 0d;
+        int sex = 0; //1:男性 2:女性
+        for (int i = 0; i < mapList.size(); i++) {
+            Map<String, Object> detailSub = mapList.get(i);
+            if ("年龄".equals(detailSub.get("name"))) {
+                if (StringUtils.isEmpty(detailSub.get("value").toString())) {
+                    break;
+                } else {
+                    age = Integer.valueOf(detailSub.get("value").toString());
                 }
-                double eGFR3 = 141 * Math.pow((scr / k), a) * Math.pow(0.993, age) * denger;
-                String unit = "min•1.73㎡";
-                String text = "";
-                if (eGFR3 > 0 && eGFR3 <= 29) {
-                    text = "重度肾功能不全";
-                } else if (eGFR3 > 29 && eGFR3 < 60) {
-                    text = "中度肾功能不全";
-                } else if (eGFR3 >= 60 && eGFR3 <= 89) {
-                    text = "轻度肾功能不全";
-                } else if (eGFR3 > 89) {
-                    text = "肾功能正常";
+            } else if ("血肌酐".equals(detailSub.get("name"))) {
+                if ("".equals(detailSub.get("value"))) {
+                    break;
+                } else {
+                    if ("umol/L".equals(detailSub.get("uint"))) {
+                        scr = Double.parseDouble(detailSub.get("value").toString()) / 88.41;
+                    } else if ("mg/dL".equals(detailSub.get("uint"))) {
+                        scr = Double.parseDouble(detailSub.get("value").toString());
+                    }
                 }
 
-                valueResult.put("name", "GFR值");
-                nameResult.put("name", "评估结论");
-                if (eGFR3 <= 0 || Double.POSITIVE_INFINITY == eGFR3){
-                    valueResult.put("text", "");
-                    nameResult.put("text", "");
-                } else {
-                    valueResult.put("text", new DecimalFormat("0.00").format(eGFR3) + " " + unit);
-                    nameResult.put("text", text);
+            } else if ("性别".equals(detailSub.get("name"))) {
+                List<Map<String, Object>> genderDetails = (List<Map<String, Object>>) detailSub.get("details");
+                for (int j = 0; j < genderDetails.size(); j++) {
+                    Map<String, Object> genderDetail = genderDetails.get(j);
+                    //返回的数据结构性别暂时是写死(默认女性)
+                    if ((int) genderDetail.get("state") == 1) {
+                        if ("男".equals(genderDetail.get("detailName"))) {
+                            k = 0.9f;
+                            denger = Double.parseDouble(genderDetail.get("value").toString());
+                            sex = 1;
+
+                        } else if ("女".equals(genderDetail.get("detailName"))) {
+                            k = 0.7f;
+                            denger = Double.parseDouble(genderDetail.get("value").toString());
+                            sex = 2;
+                        }
+                    }
                 }
-                //                scaleCalcResult.put("text", text);
-                //                scaleCalcResult.put("unit", unit);
-                //                scaleCalcResult.put("value", new DecimalFormat("#.00").format(eGFR3));
-                JSONArray result = new JSONArray();
-                result.add(valueResult);
-                result.add(nameResult);
-                scaleCalcResult.put("result", result);
-                System.out.println("text:" + text + "\tunit:" + unit + "\tvalue:" + eGFR3);
             }
         }
+
+        if (sex == 1){
+            if (scr <= 0.90) {
+                a = -0.411;
+            } else {
+                a = -1.209;
+            }
+        } else if (sex == 2){
+            if (scr <= 0.70) {
+                a = -0.329;
+            } else {
+                a = -1.209;
+            }
+        }
+
+        double eGFR3 = 141 * Math.pow((scr / k), a) * Math.pow(0.993, age) * denger;
+        String unit = "min•1.73㎡";
+        String text = "";
+        if (eGFR3 > 0 && eGFR3 <= 29) {
+            text = "重度肾功能不全";
+        } else if (eGFR3 > 29 && eGFR3 < 60) {
+            text = "中度肾功能不全";
+        } else if (eGFR3 >= 60 && eGFR3 <= 89) {
+            text = "轻度肾功能不全";
+        } else if (eGFR3 > 89) {
+            text = "肾功能正常";
+        }
+
+        valueResult.put("name", "GFR值");
+        nameResult.put("name", "评估结论");
+        if (eGFR3 <= 0 || Double.POSITIVE_INFINITY == eGFR3) {
+            valueResult.put("text", "");
+            nameResult.put("text", "");
+        } else {
+            valueResult.put("text", new DecimalFormat("0.00").format(eGFR3) + " " + unit);
+            nameResult.put("text", text);
+        }
+        JSONArray result = new JSONArray();
+        result.add(valueResult);
+        result.add(nameResult);
+        scaleCalcResult.put("result", result);
         return scaleCalcResult;
     }
 }

+ 8 - 8
graph/src/main/java/org/diagbot/graph/medicationProcess/PushTreat.java

@@ -129,11 +129,11 @@ public class PushTreat {
                 if(title.contains("及其")){
                     startTitle = title.substring(0,title.indexOf("及其"));
                     subTitle = title.substring(startTitle.length()+2,title.length());
-                    subTitle = subTitle.substring(0,subTitle.indexOf("治疗方案"));
+                    subTitle = subTitle.substring(0,subTitle.indexOf("建议用药"));
                     disList.add(startTitle);
                     disList.add(subTitle);
                 }else {
-                    startTitle = title.substring(0,title.indexOf("治疗方案"));
+                    startTitle = title.substring(0,title.indexOf("建议用药"));
                     disList.add(startTitle);
                 }
                 LinkedHashMap<String,List<Drugs>> kk = new LinkedHashMap<>();
@@ -285,7 +285,7 @@ public class PushTreat {
                 List<String> key = jfd.getKey();
                 LinkedHashMap<String, List<Drugs>> value = jfd.getValue();
                 String title="";
-                title =  key.toString().replace("[","").replace("]","")+"治疗方案";
+                title =  key.toString().replace("[","").replace("]","")+"建议用药";
                 List<MeditionDetail> dda = new ArrayList<>();
                 if(value.size()>0){
                     for (Map.Entry<String, List<Drugs>> ds:value.entrySet()) {
@@ -390,7 +390,7 @@ public class PushTreat {
         meditionDetail.setTreatment(dList);
         mList.add(meditionDetail);
 
-        treatDetail.setTitle(disName+"治疗方案");
+        treatDetail.setTitle(disName+"建议用药");
         treatDetail.setMeditionDetails(mList);
         disTreatDetailList.add(treatDetail);
         return disTreatDetailList;
@@ -601,7 +601,7 @@ public class PushTreat {
                         List<MeditionDetail> meditionDetails = new ArrayList<>();
                         int main = cateList.indexOf("主症");
                         String mainDis = disList.get(main);
-                        treatDetail.setTitle(mainDis+"治疗方案");//糖尿病及其2型糖尿病治疗方案
+                        treatDetail.setTitle(mainDis+"建议用药");//糖尿病及其2型糖尿病建议用药
                         Integer da = conditionDesign.get(key);
                         String s = switchType(da);
                         MeditionDetail meditionDetail_main = new MeditionDetail();//主诊断的
@@ -627,7 +627,7 @@ public class PushTreat {
                                 dds.add(s);
                             }
                         }
-                        treatDetail.setTitle(mainDis+"及其"+String.join("、",dds)+"治疗方案");//糖尿病及其2型糖尿病治疗方案
+                        treatDetail.setTitle(mainDis+"及其"+String.join("、",dds)+"建议用药");//糖尿病及其2型糖尿病建议用药
                         Integer da = conditionDesign.get(key);
                         String s = switchType(da);
                         MeditionDetail meditionDetail_main = new MeditionDetail();//主诊断的
@@ -684,7 +684,7 @@ public class PushTreat {
                                 dds.add(s);
                             }
                         }
-                        treatDetail.setTitle(mainDis+"及其"+String.join("、",dds)+"治疗方案");//糖尿病及其2型糖尿病治疗方案
+                        treatDetail.setTitle(mainDis+"及其"+String.join("、",dds)+"建议用药");//糖尿病及其2型糖尿病建议用药
                         Integer da = conditionDesign.get(key);
                         String s = switchType(da);
                         MeditionDetail meditionDetail_main = new MeditionDetail();//主诊断的
@@ -719,7 +719,7 @@ public class PushTreat {
                         List<MeditionDetail> meditionDetails = new ArrayList<>();
                         int main = cateList.indexOf("主症");
                         String mainDis = disList.get(main);
-                        treatDetail.setTitle(mainDis+"治疗方案");//糖尿病及其2型糖尿病治疗方案
+                        treatDetail.setTitle(mainDis+"建议用药");//糖尿病及其2型糖尿病建议用药
                         Integer da = conditionDesign.get(key);
                         String s = switchType(da);
                         MeditionDetail meditionDetail_main = new MeditionDetail();//主诊断的

+ 74 - 0
graphdb/src/main/java/org/diagbot/pub/CryptUtil.java

@@ -0,0 +1,74 @@
+package org.diagbot.pub;
+
+import java.util.List;
+
+/**
+ * @Description: 加解密工具类
+ * @author: gaodm
+ * @time: 2019/12/30 11:09
+ */
+public class CryptUtil {
+
+    private final static char EN_MAX = '\u0080';//128
+    private final static int MOVE_NUM = 2;
+    private final static char DE_MAX = EN_MAX + MOVE_NUM;
+
+    /**
+     * 加密,把一个字符串在原有的基础上+2
+     *
+     * @param data 需要解密的原字符串
+     * @return 返回解密后的新字符串
+     */
+    public static String encrypt_char(String data) {
+        char[] chars = data.toCharArray();
+        for (int i = 0; i < chars.length; i++) {
+            if (EN_MAX < chars[i]) {
+                chars[i] += MOVE_NUM;
+            }
+        }
+        return new String(chars);
+    }
+
+    /**
+     * 解密:把一个加密后的字符串在原有基础上-2
+     *
+     * @param data 加密后的字符串
+     * @return 返回解密后的新字符串
+     */
+    public static String decrypt_char(String data) {
+        char[] chars = data.toCharArray();
+        for (int i = 0; i < chars.length; i++) {
+            if (DE_MAX < chars[i]) {
+                chars[i] -= MOVE_NUM;
+            }
+        }
+        return new String(chars);
+    }
+
+
+
+
+    public static void main(String[] args) {
+        //加密英文
+        String data = "解密后:�dsfaa2132159-4331}~\u007F";
+        String charResult = encrypt_char(data);
+        System.out.println("加密后:" + charResult);
+        //解密
+        String charStr = decrypt_char(charResult);
+        System.out.println("解密后:" + charStr);
+
+
+        //加密中文
+        data = "B趃弓寺三田犴腸刅剰弍穽券洹梾";
+        String result = encrypt_char(data);
+        System.out.println("加密后:" +encrypt_char(result) );
+//        String str1 = decrypt_char(data);
+//        System.out.println("解密后:" + str1);
+
+//        int num = 32;
+//        while (num <= 128) {
+//            System.out.println((char) num + "  (Unicode编码对应的数字为:) " + num);
+//            num++;
+//        }
+    }
+}

+ 4 - 2
graphdb/src/main/java/org/diagbot/service/impl/KnowledgeServiceImpl.java

@@ -7,7 +7,7 @@ import org.diagbot.entity.node.LIS;
 import org.diagbot.entity.node.Symptom;
 import org.diagbot.mapper.KnowledgeMapper;
 import org.diagbot.pub.Ciku;
-import org.diagbot.pub.Label;
+import org.diagbot.pub.CryptUtil;
 import org.diagbot.pub.Type;
 import org.diagbot.pub.jdbc.MysqlJdbc;
 import org.diagbot.service.KnowledgeService;
@@ -33,6 +33,7 @@ import java.text.NumberFormat;
 import java.util.*;
 
 
+
 @Service
 public class    KnowledgeServiceImpl implements KnowledgeService {
     Logger logger = LoggerFactory.getLogger(KnowledgeServiceImpl.class);
@@ -1577,9 +1578,10 @@ public class    KnowledgeServiceImpl implements KnowledgeService {
             Map<String,String> detail =null;
             while (rs.next()) {
                 tongName = rs.getString(1);
+                tongName = CryptUtil.decrypt_char(tongName);
                 type = rs.getString(2);
                 isConcept = rs.getString(3);
-                stand = rs.getString(4);
+                stand = CryptUtil.decrypt_char(rs.getString(4));
                 detail = new HashMap<>();
                 detail.put("isConcept",isConcept);
                 detail.put("stand",stand);

+ 17 - 3
nlp/src/main/java/org/diagbot/nlp/rule/pretreat/PretreatmentVital.java

@@ -41,9 +41,10 @@ public class PretreatmentVital extends Pretreatment {
                         position++;
                         continue;
                     }
-                    String[] digits = l.getText().split("/");
+                    String[] digits = l.getText().split("/",-1);
                     if (digits.length == 2) {
-                        if (!NlpUtil.isNumberString(digits[0])){
+                        if (!NlpUtil.isNumberString(digits[0])) {
+                            position++;
                             continue;
                         }
                         PreResult result = new PreResult();
@@ -52,7 +53,8 @@ public class PretreatmentVital extends Pretreatment {
                         result.setValue(digits[0]);
                         result.setUnits("mmHg");
                         preResults.add(result);
-                        if (!NlpUtil.isNumberString(digits[1])){
+                        if (!NlpUtil.isNumberString(digits[1])) {
+                            position++;
                             continue;
                         }
                         result = new PreResult();
@@ -65,6 +67,18 @@ public class PretreatmentVital extends Pretreatment {
                     }
                     position++;
                 }
+            } else if ("/".equals(l.getText())) { //针对血压/91mmHg情况
+                int position = i + 1;
+                if (!NlpUtil.isNumberString(lexemes.get(position).getText())
+                        || !"mmHg".equals(lexemes.get(position + 1).getText())) {
+                    continue;
+                }
+                PreResult result = new PreResult();
+                result.setUniqueName("体征--舒张压");
+                result.setDetailName("舒张压");
+                result.setValue(lexemes.get(position).getText());
+                result.setUnits("mmHg");
+                preResults.add(result);
             }
         }
         return preResults;

+ 7 - 5
nlp/src/main/java/org/diagbot/nlp/util/NlpCache.java

@@ -55,12 +55,14 @@ public class NlpCache {
         standard_info_synonym_map = new HashMap<>();
         for (String line : lines) {
             line_arr = org.apache.commons.lang3.StringUtils.split(line, "\\|");
-            map = standard_info_synonym_map.get(line_arr[2]);
-            if (map == null) {
-                map = new HashMap<>();
+            if (line_arr.length > 2) {
+                map = standard_info_synonym_map.get(line_arr[2]);
+                if (map == null) {
+                    map = new HashMap<>();
+                }
+                map.put(line_arr[0], line_arr[1]);
+                standard_info_synonym_map.put(line_arr[2], map);
             }
-            map.put(line_arr[0], line_arr[1]);
-            standard_info_synonym_map.put(line_arr[2], map);
         }
     }