Bläddra i källkod

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	trans/src/main/java/com/lantone/qc/trans/changx/util/CxXmlUtil.java
rengb 5 år sedan
förälder
incheckning
5cdd621096

+ 4 - 5
kernel/src/main/java/com/lantone/qc/kernel/util/CacheFileManager.java

@@ -42,9 +42,9 @@ public class CacheFileManager {
 //            user = encrypDES.decryptor(propertiesUtil.getProperty("mysql.redis.user"));
 //            password = encrypDES.decryptor(propertiesUtil.getProperty("mysql.redis.password"));
 //            url = encrypDES.decryptor(propertiesUtil.getProperty("mysql.redis.url"));
-            user = propertiesUtil.getProperty("mysql.redis.user");
-            password = propertiesUtil.getProperty("mysql.redis.password");
-            url = propertiesUtil.getProperty("mysql.redis.url");
+            user = propertiesUtil.getProperty("mysql.test.user");
+            password = propertiesUtil.getProperty("mysql.test.password");
+            url = propertiesUtil.getProperty("mysql.test.url");
         } catch (Exception e) {
             logger.info("数据库连接信息出错...." + e.getMessage());
         }
@@ -60,8 +60,7 @@ public class CacheFileManager {
             EncrypDES encrypDES = new EncrypDES();
             st = conn.createStatement();
             //疾病相關特征
-            String sql = "select kc.id, group_concat(feature) feature_name from kl_concept kc, kl_relevant_feature drf\n" +
-                    "where kc.id = drf.diagnose and kc.is_deleted = 'N' group by kc.id";
+            String sql = "select drf.diagnose, group_concat(feature) feature_name from kl_relevant_feature drf group by diagnose";
             Map<String, String> map = new HashMap<>();
             rs = st.executeQuery(sql);
             while (rs.next()) {

+ 26 - 21
kernel/src/main/java/com/lantone/qc/kernel/web/controller/QCTestController.java

@@ -6,6 +6,7 @@ import com.lantone.qc.kernel.util.CacheFileManager;
 import com.lantone.qc.kernel.util.KernelConstants;
 import com.lantone.qc.pub.jdbc.MysqlJdbc;
 import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.entity.Lis;
 import com.lantone.qc.pub.model.vo.MedrecVo;
 import com.lantone.qc.pub.model.vo.QueryVo;
 import com.lantone.qc.pub.res.Response;
@@ -155,6 +156,7 @@ public class QCTestController {
                 r2 = rs.getString(2);
                 r3 = rs.getString(3);
                 r4 = rs.getString(4);
+
                 if (!tempCaseNumber.equals(String.valueOf(r2)) && StringUtils.isNotEmpty(tempCaseNumber)) {
                     queryVo.setCid(cid);
                     queryVo.setMedrec(medrec);
@@ -164,35 +166,28 @@ public class QCTestController {
                     medrec = new ArrayList<>();
                     queryVo = new QueryVo();
                 }
-                if (r3.equals("入院记录") || r3.equals("首次病程录") || r3.equals("死亡病例讨论记录") || r3.equals("出院小结") || r3.equals("死亡记录") || r3.equals("病案首页")) {
+                if (!label.equals(String.valueOf(r3)) && StringUtils.isNotEmpty(label)) {
                     MedrecVo medrecVo = new MedrecVo();
-                    medrecVo.setTitle(r3);
+                    medrecVo.setTitle(label);
                     Map<String, Object> m = new HashMap<>();
-                    List<String> contentList = new ArrayList<>();
-                    contentList.add(r4);
-                    m.put("content", contentList);
+                    m.put("content", details);
                     medrecVo.setContent(m);
                     medrec.add(medrecVo);
-                } else if (r3.equals("查房记录") || r3.equals("会诊") || r3.equals("医嘱信息") || r3.equals("值班交接制度") || r3.equals("输血/血制品病程记录")
-                        || r3.equals("抢救记录") || r3.equals("危急值记录") || r3.equals("病危通知书") || r3.equals("阶段小结") || r3.equals("疑难病例讨论记录") || r3.equals("病重通知书")
-                        || r3.equals("术前讨论、术前小结") || r3.equals("麻醉记录") || r3.equals("麻醉知情同意书") || r3.equals("麻醉术前访视记录")
-                        || r3.equals("麻醉术后访视记录") || r3.equals("手术知情同意书") || r3.equals("手术记录") || r3.equals("术后首次病程及谈话记录")
-                        || r3.equals("手术风险评估表") || r3.equals("手术安全核查表") || r3.equals("转科记录(转入)") || r3.equals("转科记录(转出)")) {
-                    if (!label.equals(String.valueOf(r3)) && StringUtils.isNotEmpty(label)) {
-                        MedrecVo medrecVo = new MedrecVo();
-                        medrecVo.setTitle(label);
-                        Map<String, Object> m = new HashMap<>();
-                        m.put("content", details);
-                        medrecVo.setContent(m);
-                        medrec.add(medrecVo);
-                        details = new ArrayList<>();
-                    }
-                    details.add(r4);
+                    details = new ArrayList<>();
                 }
+                details.add(r4);
                 label = r3;
                 tempCaseNumber = r2;
             }
 
+            //最后一条记录
+            MedrecVo medrecVo = new MedrecVo();
+            medrecVo.setTitle(label);
+            Map<String, Object> m = new HashMap<>();
+            m.put("content", details);
+            medrecVo.setContent(m);
+            medrec.add(medrecVo);
+
             queryVo.setCid(cid);
             queryVo.setMedrec(medrec);
             queryVo.setInputCatalogueMap(inputCatalogueMap);
@@ -207,7 +202,17 @@ public class QCTestController {
         }
         return queryVoMap;
     }
-
+    public int number(List<String> labels,String lab){
+        int initNume = 0;
+        if(labels != null && labels.size()>0){
+            for (String label:labels) {
+                if(label.equals(lab)){
+                    initNume++;
+                }
+            }
+        }
+        return initNume;
+    }
     public Map<String, Map<String, String>> createInputCaseMapping(String hospitalId, String caseNumber) {
         Map<String, Map<String, String>> result = new HashMap<>();
         PropertiesUtil propertiesUtil = new PropertiesUtil("kernel.properties");

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 49381 - 785
kernel/src/main/resources/cache/concept_diag_properties.dict


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 49429 - 833
kernel/src/main/resources/cache/hospital_diag_info.dict


+ 101 - 0
kernel/src/test/java/com/lantone/qc/kernel/DataTest.java

@@ -0,0 +1,101 @@
+package com.lantone.qc.kernel;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONException;
+import com.alibaba.fastjson.JSONObject;
+import com.lantone.qc.pub.util.PropertiesUtil;
+
+import java.sql.*;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * @ClassName : DataTest
+ * @Description :
+ * @Author : 楼辉荣
+ * @Date: 2020-04-01 20:06
+ */
+public class DataTest {
+    public static void main(String[] args ) {
+
+    }
+
+    public static Map<String, String> loadHomePage(String patientId) {
+        Connection conn = null;
+        Statement stmt = null;
+        ResultSet rs = null;
+        Map<String, String> js = null;
+        try {
+            PropertiesUtil propertiesUtil = new PropertiesUtil("kernel.properties");
+            Class.forName(propertiesUtil.getProperty("oracle.test.driver"));
+
+            Properties props = new Properties();
+            String url = propertiesUtil.getProperty("oracle.test.url");
+            // 127.0.0.1是本机地址,1521是Oracle默认连接端口,DATABASE_NAME为实例名(SID)
+            String user = propertiesUtil.getProperty("oracle.test.user");// 用户系统默认的账户名
+            String password = propertiesUtil.getProperty("oracle.test.password");// 你安装时选设置的密码
+            props.put("user", user);
+            props.put("password", password);
+            props.put("defaultRowPrefetch", "15");
+            props.put("remarksReporting", "true");
+            //默认情况下不允许用dba身份连接数据库,通过property设置以实现dba连接
+            conn = DriverManager.getConnection(url, props);
+            System.out.println("connection succeed!");
+            stmt = conn.createStatement();
+
+            DatabaseMetaData dmd = conn.getMetaData();
+            ResultSet dmdRs = dmd.getColumns(null, null, "BR_RECHOME", null);
+
+            Map<String, String> colMap = new LinkedHashMap<>();
+            while(dmdRs.next()){
+                colMap.put(dmdRs.getString(4), dmdRs.getString("REMARKS"));
+            }
+            dmdRs.close();
+
+            rs = stmt.executeQuery("select * from br_rechome where brzyid = '" + patientId + "'");
+            js = resultSetToJson(rs, colMap);
+        } catch (SQLException ex) {
+            ex.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (rs != null) {
+                    rs.close();
+                    rs = null;
+                }
+                if (stmt != null) {
+                    stmt.close();
+                    stmt = null;
+                }
+                if (conn != null) {
+                    conn.close();
+                    conn = null;
+                }
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+        }
+        return js;
+    }
+
+    public static Map<String, String> resultSetToJson(ResultSet rs, Map<String, String> map) throws SQLException, JSONException {
+        // 获取列数
+        ResultSetMetaData metaData = (ResultSetMetaData) rs.getMetaData();
+        int columnCount = metaData.getColumnCount();
+        // 遍历ResultSet中的每条数据
+        Map<String, String> result = new LinkedHashMap<>();
+        while (rs.next()) {
+            // 遍历每一列
+            for (int i = 1; i <= columnCount; i++) {
+                String columnName = metaData.getColumnLabel(i);
+                String value = rs.getString(columnName) == null ? "" : rs.getString(columnName);
+                result.put(map.get(columnName), value);
+            }
+        }
+        return result;
+    }
+
+}

+ 87 - 12
kernel/src/test/java/com/lantone/qc/kernel/TaizDataImportApiTest.java

@@ -1,5 +1,8 @@
 package com.lantone.qc.kernel;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.JsonObject;
 import com.lantone.qc.pub.jdbc.MysqlJdbc;
 import com.lantone.qc.pub.util.FastJsonUtils;
 import com.lantone.qc.pub.util.PropertiesUtil;
@@ -10,10 +13,7 @@ import org.apache.commons.lang3.StringUtils;
 
 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
+import java.sql.*;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -32,20 +32,23 @@ public class TaizDataImportApiTest {
 
     private Map<String,String> caseMap = new HashMap<>();
 
+    private List<String> deletePatient = new ArrayList<>();
+
     public static void main(String[] args) {
         TaizDataImportApiTest test = new TaizDataImportApiTest();
         //模块映射
         test.loadModelHospital();
         //长兴患者信息
         if (cid.equals("changx")) {
-            test.insertPatient(test.loadOraclePatients("BR_INPATIENTINFO_CX20200327"));
+            test.insertPatient(test.loadOraclePatients("BR_INPATIENTINFO_CX"));
         }
         //台州患者信息
         if (cid.equals("taizhou")) {
             test.insertPatient(test.loadOraclePatients("BR_INPATIENTINFO_TZ20200330"));
         }
-        //病人流水号获取
+        //病人流水号获取    病历号--->id
         Map<String, String> patientMap = test.loadPatients(hospitalId);
+        //model-->id
         Map<String, String> modelMap = test.loadModel();
         test.insertPatientText(patientMap, modelMap);
     }
@@ -66,19 +69,42 @@ public class TaizDataImportApiTest {
 
         for (Map.Entry<String, String> entry : patientMap.entrySet()) {
             List<PatientText> patientTexts = new ArrayList<>();
+            //病人的病案首页内容
+            Map<String, String> homePageMap = DataTest.loadHomePage(entry.getKey());
+            if (homePageMap == null || homePageMap.isEmpty()) { //没病案首页直接不导入
+                deletePatient.add(entry.getKey()); //没病案首页的患者也要删除
+                continue;
+            }
+            Map<String, Object> firstPageTextMap = new HashMap<>();
+            firstPageTextMap.put("case_number", entry.getKey());
+            firstPageTextMap.put("case_number_id", patientMap.get(entry.getKey()));
+            firstPageTextMap.put("hospital_id", hospitalId);
+            firstPageTextMap.put("mode_id", 6);
+            firstPageTextMap.put("origin_text", FastJsonUtils.getBeanToJson(homePageMap));
+            String pagetext = "";
+            for (Map.Entry<String, String> e : homePageMap.entrySet()) {
+                pagetext = pagetext + "【" + e.getKey() + "】:" + e.getValue().toString() + "\n";
+            }
+            firstPageTextMap.put("text", pagetext);
+
             if ("changx".equals(cid)) {
                 patientTexts = loadChangxOraclePatientTexts(entry.getKey());
             }
             if ("taizhou".equals(cid)) {
                 patientTexts = loadTaizhouOraclePatientTexts(entry.getKey());
             }
+            if (!wholePatientRecord(patientTexts, modelMap) || patientTexts.size() == 0) {
+                continue;
+            }
+            //数据完整后才放入病案首页
+            list.add(firstPageTextMap);
             for (PatientText patientText : patientTexts) {
-System.out.println(patientText.getBrzyid() + "  " + patientText.getBljlmc());
+//System.out.println(patientText.getBrzyid() + "  " + patientText.getBljlmc());
                 Map<String, Object> patientTextMap = new HashMap<>();
                 patientTextMap.put("case_number", patientText.getBrzyid());
                 patientTextMap.put("case_number_id", patientMap.get(patientText.getBrzyid()));
                 patientTextMap.put("hospital_id", hospitalId);
-System.out.println("******" + patientText.getBljlmc() + "**" + caseMap.get(patientText.getBljlmc()));
+//System.out.println("******" + patientText.getBljlmc() + "**" + caseMap.get(patientText.getBljlmc()));
                 patientTextMap.put("mode_id", modelMap.get(caseMap.get(patientText.getBljlmc())));
 
                 if (patientTextMap.get("mode_id") == null) {
@@ -89,7 +115,7 @@ System.out.println("******" + patientText.getBljlmc() + "**" + caseMap.get(patie
                 String text = "";
                 Map<String, String> textMap = new HashMap<>();
                 if ("changx".equals(cid)) {
-
+                    textMap = CxXmlUtil.beHospitalizedXmlToMap(patientText.getBljlnr(), caseMap.get(patientText.getBljlmc()));
                 }
                 if ("taizhou".equals(cid)) {
                     textMap = TzXmlUtil.getXmlToMapForTZ(patientText.getBljlnr());
@@ -102,6 +128,35 @@ System.out.println("******" + patientText.getBljlmc() + "**" + caseMap.get(patie
             }
         }
         initMysqlJdbc().insert(list, "qc_model_mapping", new String[]{"case_number", "case_number_id", "origin_text", "mode_id", "text"});
+
+        deletePatientInfos(deletePatient);
+    }
+
+    /**
+     * 验证数据完整性
+     * @param patientTexts
+     * @param modelMap
+     * @return
+     */
+    private boolean wholePatientRecord(List<PatientText> patientTexts, Map<String, String> modelMap) {
+        Map<String, String> m = new HashMap<>();
+        for (PatientText patientText : patientTexts) {
+            String modelId = modelMap.get(caseMap.get(patientText.getBljlmc()));
+            if (StringUtils.isEmpty(modelId)) {
+                continue;
+            }
+            if (modelId.equals("1") && patientText.getBljlnr().indexOf("<") != 0) {
+                deletePatient.add(patientTexts.get(0).getBrzyid());
+                return false;
+            }
+            m.put(modelId, modelId);
+        }
+        if (m.get("1") != null && m.get("2") != null && m.get("4") != null && m.get("5") != null) {
+            return true;
+        } else {
+            deletePatient.add(patientTexts.get(0).getBrzyid());
+        }
+        return false;
     }
 
     private List<Patient> loadOraclePatients(String tableName) {
@@ -164,7 +219,6 @@ System.out.println("******" + patientText.getBljlmc() + "**" + caseMap.get(patie
         }
         return patientTexts;
     }
-
     private List<PatientText> loadChangxOraclePatientTexts(String brzyid) {
         MysqlJdbc mysqlJdbc = initOracleJdbc();
         Connection conn = mysqlJdbc.connect();
@@ -174,8 +228,8 @@ System.out.println("******" + patientText.getBljlmc() + "**" + caseMap.get(patie
         List<PatientText> patientTexts = new ArrayList<>();
         try {
             st = conn.createStatement();
-            String sql = "select brzyid,bljlmc,bljlnr from MR_MEDICALRECORDS_CX20200327 a " +
-                    "left join MR_MRCONTENT_CX20200327 b on a.bljlid=b.bljlid " +
+            String sql = "select brzyid,bllbid,bljlnr from MR_MEDICALRECORDS_CX a " +
+                    "left join MR_MRCONTENT_CX b on a.bljlid=b.bljlid " +
                     "where bljlnr is not null and brzyid = '" + brzyid + "' " +
                     "order by brzyid";
             rs = st.executeQuery(sql);
@@ -304,6 +358,27 @@ System.out.println("******" + patientText.getBljlmc() + "**" + caseMap.get(patie
         }
     }
 
+    private void deletePatientInfos(List<String> caseNumbers) {
+        MysqlJdbc mysqlJdbc = initMysqlJdbc();
+        Connection conn = mysqlJdbc.connect();
+        Statement st = null;
+        ResultSet rs = null;
+        String r1, r2;
+        try {
+            st = conn.createStatement();
+            for (String caseNumber : caseNumbers) {
+                String sql = "delete from qc_cases_number where case_number = '" + caseNumber + "'";
+                st.execute(sql);
+            }
+        } catch (SQLException sqle) {
+            sqle.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            mysqlJdbc.close(rs, st, conn);
+        }
+    }
+
     private MysqlJdbc initMysqlJdbc() {
         PropertiesUtil propertiesUtil = new PropertiesUtil("kernel.properties");
         MysqlJdbc mysqlJdbc = new MysqlJdbc(propertiesUtil.getProperty("mysql.test.user"),