瀏覽代碼

Merge branch 'master' of http://192.168.2.236:10080/louhr/qc

louhr 5 年之前
父節點
當前提交
89005755e2

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0009.java

@@ -26,7 +26,7 @@ public class BEH0009 extends QCCatalogue {
 
         ChiefLabel chiefLabel = inputInfo.getBeHospitalizedDoc().getChiefLabel();
         String chief_text = chiefLabel.getText();
-        if(chief_text.contains("检查") || chief_text.contains("术后") || chief_text.contains("药物")){
+        if(chief_text.contains("检查") || chief_text.contains("术后") || chief_text.contains("药物")|| chief_text.contains("发现")){
             status.set("0");
         }else {
             List<Diag> diags = chiefLabel.getDiags();

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0571.java

@@ -24,7 +24,7 @@ public class CLI0571 extends QCCatalogue {
         if(clinicalBloodDocs != null && clinicalBloodDocs.size()>0){
             for (ClinicalBloodDoc cliB:clinicalBloodDocs) {
                 Map<String, String> cliBStructureMap = cliB.getStructureMap();
-                if(cliBStructureMap.containsKey("输注种类、血型、数量")){
+                if(cliBStructureMap != null && cliBStructureMap.containsKey("输注种类、血型、数量")){
                     if(!cliBStructureMap.get("输注种类、血型、数量").contains("Rh")){
                         status.set("-1");
                         break;

+ 490 - 0
kernel/src/test/java/com/lantone/qc/kernel/ChangxDataImportApiTest.java

@@ -0,0 +1,490 @@
+package com.lantone.qc.kernel;
+
+import com.lantone.qc.pub.jdbc.MysqlJdbc;
+import com.lantone.qc.pub.util.FastJsonUtils;
+import com.lantone.qc.pub.util.PropertiesUtil;
+import com.lantone.qc.trans.changx.util.CxXmlUtilTemp;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+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.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.zip.GZIPInputStream;
+
+/**
+ * @ClassName : TaizDataImportApiTest
+ * @Description :
+ * @Author : 楼辉荣
+ * @Date: 2020-03-31 19:34
+ */
+public class ChangxDataImportApiTest {
+    private static String hospitalId = "1";
+    private static String cid = "changx";
+
+    private Map<String,String> caseMap = new HashMap<>();
+    private List<String> deletePatient = new ArrayList<>();
+
+    private static Map<String, String> tableMap = new HashMap<>();
+
+    private static void initTableMap() {
+        if (cid.equals("changx")) {
+            tableMap.put("BR_INPATIENTINFO", "BR_INPATIENTINFO");//患者信息
+            tableMap.put("MR_MEDICALRECORDS", "MR_MEDICALRECORDS");//病案首页--手术
+            tableMap.put("AR_MEDIRECCLASS", "AR_MEDIRECCLASS");//病案首页--手术
+            tableMap.put("MR_MRCONTENT", "MR_MRCONTENT");//病案首页--手术
+            tableMap.put("GI_USERINFO", "GI_USERINFO"); //医生
+            tableMap.put("HI_DEPTINFO", "HI_DEPTINFO");//科室
+            tableMap.put("BR_RECHOME", "BR_RECHOME");//病案首页
+            tableMap.put("BR_RECDIAGNOSE", "BR_RECDIAGNOSE");//病案首页--出院诊断 门急诊诊断
+            tableMap.put("BR_DOCTADVICE", "BR_DOCTADVICE");//医嘱
+            tableMap.put("BR_RECOPERATION", "BR_RECOPERATION");//病案首页--手术
+        } else if (cid.equals("taizhou")) {
+            tableMap.put("BR_INPATIENTINFO", "BR_INPATIENTINFO_TZ");
+            tableMap.put("GI_USERINFO", "GI_USERINFO_TZ");
+            tableMap.put("HI_DEPTINFO", "HI_DEPTINFO_TZ");
+            tableMap.put("BR_RECHOME", "BR_RECHOME_TZ");
+            tableMap.put("BR_RECDIAGNOSE", "BR_RECDIAGNOSE_TZ");
+            tableMap.put("BR_DOCTADVICE", "BR_DOCTADVICE_TZ");
+            tableMap.put("BR_RECOPERATION", "BR_RECOPERATION_CX");
+        }
+    }
+
+    public static void main(String[] args) {
+        String patientId = "ZY010000659651";
+
+        ChangxDataImportApiTest test = new ChangxDataImportApiTest();
+        initTableMap();
+        //模块映射
+        test.loadModelHospital();
+        //患者信息
+        test.insertPatient(test.loadOraclePatients(tableMap.get("BR_INPATIENTINFO"), patientId));
+//        test.insertDoctor(test.loadOracleDoctorInfos(tableMap.get("GI_USERINFO"), tableMap.get("HI_DEPTINFO")));
+
+        //病人流水号获取    病历号--->id
+        Map<String, String> patientMap = test.loadPatients(hospitalId, patientId);
+        //model-->id
+        Map<String, String> modelMap = test.loadModel();
+        test.insertPatientText(patientMap, modelMap);
+    }
+
+    private void insertPatient(List<Patient> patients) {
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (Patient patient : patients) {
+            Map<String, Object> patientMap = new HashMap<>();
+            patientMap.put("case_number", patient.getBrzyid());
+            patientMap.put("hospital_id", hospitalId);
+            list.add(patientMap);
+        }
+        initMysqlJdbc().insert(list, "qc_cases_number", new String[]{"hospital_id", "case_number"});
+    }
+
+    private void insertDoctor(List<Doctor> doctors) {
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (Doctor doctor : doctors) {
+            Map<String, Object> doctorMap = new HashMap<>();
+            doctorMap.put("doctor_id", doctor.getDoctorId());
+            doctorMap.put("doctor_name", doctor.getDoctorName());
+            doctorMap.put("dept_id", doctor.getDeptId());
+            doctorMap.put("dept_name", doctor.getDeptName());
+            doctorMap.put("professor", doctor.getProfessor());
+            list.add(doctorMap);
+        }
+        initMysqlJdbc().insert(list, "qc_doctor_info", new String[]{"doctor_id", "doctor_name", "dept_id", "dept_name", "professor"});
+    }
+
+    private void insertPatientText(Map<String, String> patientMap, Map<String, String> modelMap) {
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (Map.Entry<String, String> entry : patientMap.entrySet()) {
+            List<PatientText> patientTexts = new ArrayList<>();
+            //病人的病案首页内容
+            List<Map<String, Object>> homePageList = DataTest.loadHomePage(tableMap.get("BR_RECHOME"), entry.getKey());
+            if (homePageList == null || homePageList.isEmpty()) { //没病案首页直接不导入
+                deletePatient.add(entry.getKey()); //没病案首页的患者也要删除
+                continue;
+            }
+            Map<String, Object> homePageMap = homePageList.get(0);
+            homePageMap.put("出院诊断", FastJsonUtils.getBeanToJson(DataTest.loadHomePageDiagnose(tableMap.get("BR_RECDIAGNOSE"),"2", entry.getKey())).replaceAll("\"", "'"));
+            homePageMap.put("损伤、中毒外部原因", FastJsonUtils.getBeanToJson(DataTest.loadHomePageDiagnose(tableMap.get("BR_RECDIAGNOSE"),"3", entry.getKey())).replaceAll("\"", "'"));
+            homePageMap.put("病理诊断", FastJsonUtils.getBeanToJson(DataTest.loadHomePageDiagnose(tableMap.get("BR_RECDIAGNOSE"), "4", entry.getKey())).replaceAll("\"", "'"));
+            homePageMap.put("手术信息", FastJsonUtils.getBeanToJson(DataTest.loadHomePageOperation(tableMap.get("BR_RECOPERATION"), tableMap.get("GI_USERINFO"), entry.getKey())).replaceAll("\"", "'"));
+
+            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_mode", "病案首页");
+            firstPageTextMap.put("origin_text", FastJsonUtils.getBeanToJson(homePageMap));
+            String pagetext = "";
+            for (Map.Entry<String, Object> 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 (patientTexts.size() == 0 || !wholePatientRecord(patientTexts, modelMap)) {
+                continue;
+            }
+            //数据完整后才放入病案首页
+            list.add(firstPageTextMap);
+
+            //病人医嘱信息
+            List<Map<String, Object>> docAdviceMap = DataTest.loadHomePage(tableMap.get("BR_DOCTADVICE"), entry.getKey());
+            for (Map<String, Object> docMap : docAdviceMap) {
+                Map<String, Object> docAdviceTextMap = new HashMap<>();
+                docAdviceTextMap.put("case_number", entry.getKey());
+                docAdviceTextMap.put("case_number_id", patientMap.get(entry.getKey()));
+                docAdviceTextMap.put("hospital_id", hospitalId);
+                docAdviceTextMap.put("mode_id", 8);
+                docAdviceTextMap.put("origin_mode", "医嘱信息");
+                docAdviceTextMap.put("origin_text", FastJsonUtils.getBeanToJson(docMap));
+                pagetext = "";
+                for (Map.Entry<String, Object> e : docMap.entrySet()) {
+                    pagetext = pagetext + "【" + e.getKey() + "】:" + e.getValue().toString() + "\n";
+                }
+                docAdviceTextMap.put("text", pagetext);
+                list.add(docAdviceTextMap);
+            }
+            //病人其他文书信息
+            for (PatientText patientText : patientTexts) {
+                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);
+                patientTextMap.put("mode_id", modelMap.get(caseMap.get(patientText.getBljlmc())));
+                patientTextMap.put("origin_mode", patientText.getBljlmc());
+                if (patientTextMap.get("mode_id") == null) {
+                    continue;
+                }
+                patientTextMap.put("origin_text", patientText.getBljlnr());
+
+                String text = "";
+                Map<String, String> textMap = new HashMap<>();
+                if ("changx".equals(cid)) {
+                    textMap = CxXmlUtilTemp.beHospitalizedXmlToMap(patientText.getBljlnr(), caseMap.get(patientText.getBljlmc()));
+                }
+                if ("taizhou".equals(cid)) {
+                    textMap = TzXmlUtil.getXmlToMapForTZ(patientText.getBljlnr());
+                }
+                for (Map.Entry<String, String> e : textMap.entrySet()) {
+                    text = text + "【" + e.getKey() + "】:" + e.getValue() + "\n";
+                }
+                patientTextMap.put("text", text);
+                list.add(patientTextMap);
+            }
+        }
+        initMysqlJdbc().insert(list, "qc_model_mapping", new String[]{"case_number", "case_number_id", "origin_text", "mode_id", "text", "origin_mode"});
+
+        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 || m.get("24") != null)) {
+            return true;
+        } else {
+            deletePatient.add(patientTexts.get(0).getBrzyid());
+        }
+        return false;
+    }
+
+    private List<Patient> loadOraclePatients(String tableName) {
+        return loadOraclePatients(tableName, "");
+    }
+
+    private List<Patient> loadOraclePatients(String tableName, String patientId) {
+        MysqlJdbc mysqlJdbc = initOracleJdbc();
+        Connection conn = mysqlJdbc.connect();
+        Statement st = null;
+        ResultSet rs = null;
+        String r1, r2;
+        List<Patient> patients = new ArrayList<>();
+        try {
+            st = conn.createStatement();
+            String sql = "";
+            if (StringUtils.isNotEmpty(patientId)) {
+                sql = "select BRZYID from " + tableName + " where BRZYID = '" + patientId + "'";
+            } else {
+                sql = "select BRZYID from " + tableName;
+            }
+            rs = st.executeQuery(sql);
+            while (rs.next()) {
+                r1 = rs.getString(1);
+                Patient patient = new Patient();
+                patient.setBrzyid(r1);
+                patients.add(patient);
+            }
+        } catch (SQLException sqle) {
+            sqle.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            mysqlJdbc.close(rs, st, conn);
+        }
+        return patients;
+    }
+
+    private List<Doctor> loadOracleDoctorInfos(String tableUser, String tableDept) {
+        MysqlJdbc mysqlJdbc = initOracleJdbc();
+        Connection conn = mysqlJdbc.connect();
+        Statement st = null;
+        ResultSet rs = null;
+        List<Doctor> doctors = new ArrayList<>();
+        try {
+            st = conn.createStatement();
+            String sql = "select u.yhrydm, u.yhrymc, u.yhryzc, dept.zzksid, dept.zzksmc from " + tableDept + " dept, " + tableUser + " u where u.zzksid = dept.zzksid";
+            rs = st.executeQuery(sql);
+            while (rs.next()) {
+                Doctor doctor = new Doctor();
+                doctor.setDoctorId(rs.getString(1));
+                doctor.setDoctorName(rs.getString(2));
+                doctor.setProfessor(rs.getString(3));
+                doctor.setDeptId(rs.getString(4));
+                doctor.setDeptName(rs.getString(5));
+                doctors.add(doctor);
+            }
+        } catch (SQLException sqle) {
+            sqle.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            mysqlJdbc.close(rs, st, conn);
+        }
+        return doctors;
+    }
+
+    private List<PatientText> loadTaizhouOraclePatientTexts(String brzyid) {
+        MysqlJdbc mysqlJdbc = initOracleJdbc();
+        Connection conn = mysqlJdbc.connect();
+        Statement st = null;
+        ResultSet rs = null;
+        String r1, r2, r3;
+        List<PatientText> patientTexts = new ArrayList<>();
+        try {
+            st = conn.createStatement();
+            String sql = "select brzyid,bljlmc,bljlnr from mr_medicalrecords_TZ a " +
+                    "left join mr_mrcontent_TZ b on a.bljlid=b.bljlid " +
+                    "where bljlnr is not null and brzyid = '" + brzyid + "' " +
+                    "order by brzyid";
+            rs = st.executeQuery(sql);
+            while (rs.next()) {
+                r1 = rs.getString(1);
+                r2 = rs.getString(2);
+                r3 = rs.getString(3);
+                PatientText patientText = new PatientText();
+                patientText.setBrzyid(r1);
+                patientText.setBljlmc(r2);
+                patientText.setBljlnr(r3);
+                patientTexts.add(patientText);
+            }
+        } catch (SQLException sqle) {
+            sqle.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            mysqlJdbc.close(rs, st, conn);
+        }
+        return patientTexts;
+    }
+    private List<PatientText> loadChangxOraclePatientTexts(String brzyid) {
+        MysqlJdbc mysqlJdbc = initOracleJdbc();
+        Connection conn = mysqlJdbc.connect();
+        Statement st = null;
+        ResultSet rs = null;
+        String r1, r2;
+        List<PatientText> patientTexts = new ArrayList<>();
+        try {
+            st = conn.createStatement();
+            String sql = "select a.brzyid,c.bllbmc,b.bljlnr from " + tableMap.get("MR_MEDICALRECORDS") + " a " +
+                    "left join " + tableMap.get("MR_MRCONTENT") + " b on a.bljlid=b.bljlid " +
+                    "left join " + tableMap.get("AR_MEDIRECCLASS") + " c on a.Bllbid = c.bllbid " +
+                    "where bljlnr is not null and brzyid = '" + brzyid + "' " +
+                    "order by brzyid";
+            rs = st.executeQuery(sql);
+            while (rs.next()) {
+                r1 = rs.getString(1);
+                r2 = rs.getString(2);
+                java.sql.Blob blob = rs.getBlob(3);
+
+                InputStream in = blob.getBinaryStream();
+
+                GZIPInputStream ginzip = new GZIPInputStream(in);
+
+                ByteArrayOutputStream out = new ByteArrayOutputStream();
+                byte[] buffer = new byte[1024];
+                int offset = -1;
+                while ((offset = ginzip.read(buffer)) != -1) {
+                    out.write(buffer, 0, offset);
+                }
+                String decompressed = out.toString();
+                in.close();
+                out.close();
+                ginzip.close();
+
+                PatientText patientText = new PatientText();
+                patientText.setBrzyid(r1);
+                patientText.setBljlmc(r2);
+                patientText.setBljlnr(decompressed);
+                patientTexts.add(patientText);
+            }
+        } catch (SQLException sqle) {
+            sqle.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            mysqlJdbc.close(rs, st, conn);
+        }
+        return patientTexts;
+    }
+
+    private Map<String, String> loadPatients(String hospitalId) {
+        return loadPatients(hospitalId, null);
+    }
+
+    private Map<String, String> loadPatients(String hospitalId, String patientId) {
+        MysqlJdbc mysqlJdbc = initMysqlJdbc();
+        Connection conn = mysqlJdbc.connect();
+        Statement st = null;
+        ResultSet rs = null;
+        String r1, r2;
+        Map<String, String> map = new HashMap<>();
+        try {
+            st = conn.createStatement();
+            String sql = "";
+            if (StringUtils.isNotEmpty(patientId)) {
+                sql = "select id, case_number from qc_cases_number where hospital_id = " + hospitalId + " and case_number = '" + patientId + "'";
+            } else {
+                sql = "select id, case_number from qc_cases_number where hospital_id = " + hospitalId;
+            }
+            rs = st.executeQuery(sql);
+            while (rs.next()) {
+                r1 = rs.getString(1);
+                r2 = rs.getString(2);
+                map.put(r2, r1);
+            }
+        } catch (SQLException sqle) {
+            sqle.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            mysqlJdbc.close(rs, st, conn);
+        }
+        return map;
+    }
+
+    private Map<String, String> loadModel() {
+        MysqlJdbc mysqlJdbc = initMysqlJdbc();
+        Connection conn = mysqlJdbc.connect();
+        Statement st = null;
+        ResultSet rs = null;
+        String r1, r2;
+        Map<String, String> map = new HashMap<>();
+        try {
+            st = conn.createStatement();
+            String sql = "select id, name from qc_mode";
+            rs = st.executeQuery(sql);
+            while (rs.next()) {
+                r1 = rs.getString(1);
+                r2 = rs.getString(2);
+                map.put(r2, r1);
+            }
+        } catch (SQLException sqle) {
+            sqle.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            mysqlJdbc.close(rs, st, conn);
+        }
+        return map;
+    }
+
+    private void loadModelHospital() {
+        MysqlJdbc mysqlJdbc = initMysqlJdbc();
+        Connection conn = mysqlJdbc.connect();
+        Statement st = null;
+        ResultSet rs = null;
+        String r1, r2;
+        try {
+            st = conn.createStatement();
+            String sql = "select hospital_model_name, stand_model_name from qc_model_hospital where stand_model_name is not null and hospital_id = " + hospitalId;
+            rs = st.executeQuery(sql);
+            while (rs.next()) {
+                r1 = rs.getString(1);
+                r2 = rs.getString(2);
+                caseMap.put(r1, r2);
+            }
+        } catch (SQLException sqle) {
+            sqle.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            mysqlJdbc.close(rs, st, conn);
+        }
+    }
+
+    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"),
+                propertiesUtil.getProperty("mysql.test.password"),
+                propertiesUtil.getProperty("mysql.test.url"));
+        return mysqlJdbc;
+    }
+
+    private MysqlJdbc initOracleJdbc() {
+        PropertiesUtil propertiesUtil = new PropertiesUtil("kernel.properties");
+        MysqlJdbc mysqlJdbc = new MysqlJdbc(propertiesUtil.getProperty("oracle.test.user"),
+                propertiesUtil.getProperty("oracle.test.password"),
+                propertiesUtil.getProperty("oracle.test.url"), propertiesUtil.getProperty("oracle.test.driver"));
+        return mysqlJdbc;
+    }
+}

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/taizhou/TaizhouDocTrans.java

@@ -36,7 +36,7 @@ public class TaizhouDocTrans extends DocTrans {
                     break;
                 case "入院记录":
                     TaiZhouBeHospitalizedDocTrans beHospitalizedDocTrans = new TaiZhouBeHospitalizedDocTrans();
-                    inputInfo.setBeHospitalizedDoc(beHospitalizedDocTrans.extract(i));
+                   /* inputInfo.setBeHospitalizedDoc(beHospitalizedDocTrans.extract(i));*/
                     break;
                 case "输血/血制品病程记录":
                     TaiZhouClinicalBloodDocTrans clinicalBloodDocTrans = new TaiZhouClinicalBloodDocTrans();