Sfoglia il codice sorgente

Merge branch 'dev-1.2' of http://192.168.2.236:10080/louhr/qc into dev-1.2

louhr 5 anni fa
parent
commit
bc4cb0d0ff
28 ha cambiato i file con 374 aggiunte e 932 eliminazioni
  1. 4 1
      kernel/src/main/java/com/lantone/qc/kernel/analysis/QCAnalysis.java
  2. 139 106
      kernel/src/main/java/com/lantone/qc/kernel/util/CacheUtil.java
  3. 25 586
      kernel/src/main/java/com/lantone/qc/kernel/util/RedisUtil.java
  4. 1 1
      kernel/src/main/resources/application.yml
  5. 1 0
      kernel/src/main/resources/cache/1/module_mapping.json
  6. 2 0
      public/src/main/java/com/lantone/qc/pub/model/vo/QueryVo.java
  7. 2 0
      trans/src/main/java/com/lantone/qc/trans/TransDispatch.java
  8. 6 76
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxBeHospitalizedDocTrans.java
  9. 2 2
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxClinicBloodEffectDocTrans.java
  10. 2 2
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxClinicalBloodDocTrans.java
  11. 11 10
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxConsultationDocTrans.java
  12. 2 2
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxCrisisValueReportDocTrans.java
  13. 2 2
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxCriticallyIllNoticeDocTrans.java
  14. 2 2
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxDeathCaseDiscussDocTrans.java
  15. 2 2
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxDeathRecordDocTrans.java
  16. 15 33
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxDifficultCaseDiscussDocTrans.java
  17. 58 26
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxDocTrans.java
  18. 9 31
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxFirstCourseRecordDocTrans.java
  19. 2 2
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxLeaveHospitalDocTrans.java
  20. 12 12
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxOperationDocTrans.java
  21. 42 0
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxPathologyShipDocTrans.java
  22. 3 3
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxRescueDocTrans.java
  23. 2 2
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxStagesSummaryDocTrans.java
  24. 7 9
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxThreeLevelWardDocTrans.java
  25. 7 9
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxTransferRecordDocTrans.java
  26. 8 3
      trans/src/main/java/com/lantone/qc/trans/changx/util/CxXmlUtil.java
  27. 5 10
      trans/src/main/java/com/lantone/qc/trans/comsis/ModuleMappingUtil.java
  28. 1 0
      trans/src/main/java/com/lantone/qc/trans/comsis/OrdinaryAssistant.java

+ 4 - 1
kernel/src/main/java/com/lantone/qc/kernel/analysis/QCAnalysis.java

@@ -5,6 +5,7 @@ import com.lantone.qc.kernel.client.CRFServiceClient;
 import com.lantone.qc.kernel.client.SimilarityServiceClient;
 import com.lantone.qc.kernel.structure.ai.AIAnalyze;
 import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.kernel.util.RedisUtil;
 import com.lantone.qc.pub.exception.AIException;
 import com.lantone.qc.pub.exception.CatalogueException;
 import com.lantone.qc.pub.model.InputInfo;
@@ -26,11 +27,13 @@ import java.util.Map;
 public class QCAnalysis {
     @Autowired
     CRFServiceClient crfServiceClient;
-
+    @Autowired
+    private RedisUtil redisUtil;
     @Autowired
     SimilarityServiceClient similarityServiceClient;
 
     public OutputInfo anlysis(QueryVo queryVo) throws AIException, CatalogueException, Exception {
+        redisUtil.getHospitalIdThreadLocal().set(queryVo.getHospitalId());
         OutputInfo outputInfo = new OutputInfo();
         InputInfo inputInfo = TransDispatch.trans(queryVo);
         inputInfo.setInputCatalogueMap(queryVo.getInputCatalogueMap());

+ 139 - 106
kernel/src/main/java/com/lantone/qc/kernel/util/CacheUtil.java

@@ -1,27 +1,23 @@
 package com.lantone.qc.kernel.util;
 
-
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 import com.lantone.qc.nlp.participle.cfg.Configuration;
 import com.lantone.qc.nlp.participle.cfg.DefaultConfig;
 import com.lantone.qc.pub.util.FastJsonUtils;
-import com.lantone.qc.pub.util.FileUtil;
+import com.lantone.qc.pub.util.StringUtil;
 import com.lantone.qc.trans.comsis.ModuleMappingUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.ApplicationArguments;
 import org.springframework.boot.ApplicationRunner;
 import org.springframework.stereotype.Component;
-import org.springframework.util.ResourceUtils;
 
 import java.io.File;
-import java.io.FileNotFoundException;
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -37,43 +33,51 @@ import java.util.Set;
  * @Author : 楼辉荣
  * @Date: 2020-03-11 11:42
  */
+@Slf4j
 @Component
 public class CacheUtil implements ApplicationRunner {
-    Logger logger = LoggerFactory.getLogger(DefaultConfig.class);
+    private Configuration configuration = new DefaultConfig();
     @Autowired
     private RedisUtil redisUtil;
-
     @Value("${qc.hospital_id}")
-    private String hospitalId;
+    private String hospitalIds;
 
     public void run(ApplicationArguments var1) {
-        try {
-            this.loadModuleMappingInfo();//加载页面模板映射信息
-            this.putConceptDiagPropertyMap();//疾病相关信息放入缓存 包括疾病是否是慢病、传染病、常见症状、同义词
-            this.putHospitalDiagMap();//医院疾病信息
-            this.putHospitalDiagHuaZMap();//医院华卓映射
-            this.putLantoneDiagHuaZMap();//朗通华卓映射
-            this.putClinicBodyPartMap();//症状需要部位描述词典放入redis缓存
-            this.putHospitalDoctorInfoMap();//症状需要部位描述词典放入redis缓存
-        } catch (Exception e) {
-            logger.error("缓存文件读取错误。。。");
+        if (StringUtil.isBlank(hospitalIds)) {
+            return;
         }
+        for (String i : hospitalIds.split(",")) {
+            if (StringUtil.isBlank(i)) {
+                continue;
+            }
+            redisUtil.getHospitalCache().put(i, Maps.newHashMap());
+            this.loadModuleMappingInfo(i);//加载页面模板映射信息
+            this.putConceptDiagPropertyMap(i);//疾病相关信息放入缓存 包括疾病是否是慢病、传染病、常见症状、同义词
+            this.putHospitalDiagMap(i);//医院疾病信息
+            this.putHospitalDiagHuaZMap(i);//医院华卓映射
+            this.putLantoneDiagHuaZMap(i);//朗通华卓映射
+            this.putClinicBodyPartMap(i);//症状需要部位描述词典放入redis缓存
+            this.putHospitalDoctorInfoMap(i);//症状需要部位描述词典放入redis缓存
+        }
+        log.info("缓存加载完成!");
     }
 
     /**
      * 加载页面模板映射信息
+     *
+     * @param hospitalId
      */
-    private void loadModuleMappingInfo() {
+    private void loadModuleMappingInfo(String hospitalId) {
         List<String> xmlDataTypeHospitalIds = Lists.newArrayList("1", "3");
         try {
             InputStream stream = getClass().getClassLoader().getResourceAsStream("cache/" + hospitalId + "/module_mapping.json");
-            File targetFile = new File("module_mapping.json");
+            File targetFile = new File("cache/" + hospitalId + "/module_mapping.json");
             FileUtils.copyInputStreamToFile(stream, targetFile);
             String mappingMsg = FileUtils.readFileToString(targetFile);
-//            logger.error("模板数据:"+mappingMsg);
+            //            logger.error("模板数据:"+mappingMsg);
 
-//            String path = ResourceUtils.getURL("classpath:").getPath() + "cache/" + hospitalId + "/module_mapping.json";
-//            String mappingMsg = FileUtil.fileRead(path);
+            //            String path = ResourceUtils.getURL("classpath:").getPath() + "cache/" + hospitalId + "/module_mapping.json";
+            //            String mappingMsg = FileUtil.fileRead(path);
             if (xmlDataTypeHospitalIds.contains(hospitalId)) {
                 Map<String, Long> mapKeysModuleInfoIdMap = (Map) FastJsonUtils.getJsonToMap(mappingMsg);
                 Map<Set<String>, String> xmlDataTypeModuleInfo = Maps.newHashMap();
@@ -88,131 +92,160 @@ public class CacheUtil implements ApplicationRunner {
                     });
                     xmlDataTypeModuleInfo.put(Sets.newLinkedHashSet(list), entry.getValue() + "");
                 }
-//                mapKeysModuleInfoIdMap.keySet().forEach(mapKeys -> {
-//                    xmlDataTypeModuleInfo.put(Sets.newLinkedHashSet(Arrays.asList(mapKeys.split(","))), mapKeysModuleInfoIdMap.get(mapKeys) + "");
-//                });
-                ModuleMappingUtil.xmlDataTypeModuleInfo = xmlDataTypeModuleInfo;
+                //                mapKeysModuleInfoIdMap.keySet().forEach(mapKeys -> {
+                //                    xmlDataTypeModuleInfo.put(Sets.newLinkedHashSet(Arrays.asList(mapKeys.split(","))), mapKeysModuleInfoIdMap.get(mapKeys) + "");
+                //                });
+                ModuleMappingUtil.xmlDataTypeModuleInfo.put(hospitalId, xmlDataTypeModuleInfo);
             }
         } catch (Exception e) {
-            e.printStackTrace();
+            log.error(e.getMessage(), e);
         }
     }
 
     /**
      * 疾病相关信息放入缓存
      * 包括疾病是否是慢病、传染病、常见症状、同义词
+     *
+     * @param hospitalId
      */
-    public void putConceptDiagPropertyMap() throws Exception {
-        Configuration configuration = new DefaultConfig();
-        List<String> lines = configuration.readTargetFileContents("cache/" + hospitalId + "/concept_diag_properties.dict");
-
-        Map<String, Map<String, Object>> diagMap = new HashMap<>();
-        for (String line : lines) {
-            String[] line_arr = line.split("\\|", -1);
-            if (line_arr.length == 5) {
-                List<String> synonymsList = new ArrayList<>();
-                List<String> symptomsList = new ArrayList<>();
-                if (StringUtils.isNotEmpty(line_arr[3])) {
-                    line_arr[3] = line_arr[3].trim();
-                    synonymsList = java.util.Arrays.asList(line_arr[3].split(","));
-                }
-                if (StringUtils.isNotEmpty(line_arr[4])) {
-                    line_arr[4] = line_arr[4].trim();
-                    symptomsList = java.util.Arrays.asList(line_arr[4].split(","));
+    public void putConceptDiagPropertyMap(String hospitalId) {
+        try {
+            List<String> lines = configuration.readTargetFileContents("cache/" + hospitalId + "/concept_diag_properties.dict");
+
+            Map<String, Map<String, Object>> diagMap = new HashMap<>();
+            for (String line : lines) {
+                String[] line_arr = line.split("\\|", -1);
+                if (line_arr.length == 5) {
+                    List<String> synonymsList = new ArrayList<>();
+                    List<String> symptomsList = new ArrayList<>();
+                    if (StringUtils.isNotEmpty(line_arr[3])) {
+                        line_arr[3] = line_arr[3].trim();
+                        synonymsList = java.util.Arrays.asList(line_arr[3].split(","));
+                    }
+                    if (StringUtils.isNotEmpty(line_arr[4])) {
+                        line_arr[4] = line_arr[4].trim();
+                        symptomsList = java.util.Arrays.asList(line_arr[4].split(","));
+                    }
+                    Map<String, Object> map = new HashMap<>();
+                    map.put("infectious", line_arr[2].trim());
+                    map.put("chronic", line_arr[1].trim());
+                    map.put("synonyms", synonymsList);
+                    map.put("symptoms", symptomsList);
+                    diagMap.put(line_arr[0], map);
                 }
-                Map<String, Object> map = new HashMap<>();
-                map.put("infectious", line_arr[2].trim());
-                map.put("chronic", line_arr[1].trim());
-                map.put("synonyms", synonymsList);
-                map.put("symptoms", symptomsList);
-                diagMap.put(line_arr[0], map);
             }
+            redisUtil.setValByHospitalId(hospitalId, KernelConstants.CONCEPT_DIAG_PROPERTY_MAP, diagMap);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
         }
-        redisUtil.setJsonStringValue(KernelConstants.CONCEPT_DIAG_PROPERTY_MAP, diagMap);
     }
 
     /**
      * 医院医生信息
      *
-     * @throws Exception
+     * @param hospitalId
      */
-    public void putHospitalDoctorInfoMap() throws Exception {
-        Configuration configuration = new DefaultConfig();
-        List<String> lines = configuration.readTargetFileContents("cache/" + hospitalId + "/hospital_doctor_info.dict");
-
-        Map<String, Map<String, Object>> hospitalDoctorMap = new HashMap<>();
-        for (String line : lines) {
-            String[] line_arr = line.split("\\|", -1);
-            if (line_arr.length == 4) {
-                Map<String, Object> map = new HashMap<>();
-                map.put("doctorName", line_arr[0]);
-                map.put("deptName", line_arr[1]);
-                map.put("professor", line_arr[2]);
-                map.put("occup", line_arr[3]);
-                hospitalDoctorMap.put(line_arr[0], map);
+    public void putHospitalDoctorInfoMap(String hospitalId) {
+        try {
+            List<String> lines = configuration.readTargetFileContents("cache/" + hospitalId + "/hospital_doctor_info.dict");
+
+            Map<String, Map<String, Object>> hospitalDoctorMap = new HashMap<>();
+            for (String line : lines) {
+                String[] line_arr = line.split("\\|", -1);
+                if (line_arr.length == 4) {
+                    Map<String, Object> map = new HashMap<>();
+                    map.put("doctorName", line_arr[0]);
+                    map.put("deptName", line_arr[1]);
+                    map.put("professor", line_arr[2]);
+                    map.put("occup", line_arr[3]);
+                    hospitalDoctorMap.put(line_arr[0], map);
+                }
             }
+            redisUtil.setValByHospitalId(hospitalId, KernelConstants.HOSPITAL_DOCTOR_MAP, hospitalDoctorMap);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
         }
-        redisUtil.setJsonStringValue(KernelConstants.HOSPITAL_DOCTOR_MAP, hospitalDoctorMap);
     }
 
     /**
      * 医院疾病信息放入redis缓存
+     *
+     * @param hospitalId
      */
-    public void putHospitalDiagMap() throws Exception {
-        Configuration configuration = new DefaultConfig();
-        List<String> lines = configuration.readTargetFileContents("cache/" + hospitalId + "/hospital_diag_info.dict");
-        Map<String, Map<String, String>> hospitalDiagMap = new HashMap<>();
-        for (String line : lines) {
-            Map<String, String> detail = new HashMap<>();
-            detail.put("name", line.trim());
-            detail.put("icd10", "A001");
-            hospitalDiagMap.put(line, detail);
+    public void putHospitalDiagMap(String hospitalId) {
+        try {
+            List<String> lines = configuration.readTargetFileContents("cache/" + hospitalId + "/hospital_diag_info.dict");
+            Map<String, Map<String, String>> hospitalDiagMap = new HashMap<>();
+            for (String line : lines) {
+                Map<String, String> detail = new HashMap<>();
+                detail.put("name", line.trim());
+                detail.put("icd10", "A001");
+                hospitalDiagMap.put(line, detail);
+            }
+            redisUtil.setValByHospitalId(hospitalId, KernelConstants.HOSPITAL_DIAG_MAP, hospitalDiagMap);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
         }
-        redisUtil.setJsonStringValue(KernelConstants.HOSPITAL_DIAG_MAP, hospitalDiagMap);
     }
 
     /**
      * 医院和华卓映射疾病信息放入redis缓存
+     *
+     * @param hospitalId
      */
-    public void putHospitalDiagHuaZMap() throws Exception {
-        Configuration configuration = new DefaultConfig();
-        List<String> lines = configuration.readTargetFileContents("cache/" + hospitalId + "/hospital_diag_info.dict");
-        Map<String, Map<String, String>> hospitalDiagMap = new HashMap<>();
-        for (String line : lines) {
-            Map<String, String> detail = new HashMap<>();
-            detail.put("name", line.trim());
-            detail.put("icd10", "A001");
-            hospitalDiagMap.put(line, detail);
+    public void putHospitalDiagHuaZMap(String hospitalId) {
+        try {
+            List<String> lines = configuration.readTargetFileContents("cache/" + hospitalId + "/hospital_diag_info.dict");
+            Map<String, Map<String, String>> hospitalDiagMap = new HashMap<>();
+            for (String line : lines) {
+                Map<String, String> detail = new HashMap<>();
+                detail.put("name", line.trim());
+                detail.put("icd10", "A001");
+                hospitalDiagMap.put(line, detail);
+            }
+            redisUtil.setValByHospitalId(hospitalId, KernelConstants.HOSPITAL_DIAG_HUAZ_MAP, hospitalDiagMap);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
         }
-        redisUtil.setJsonStringValue(KernelConstants.HOSPITAL_DIAG_HUAZ_MAP, hospitalDiagMap);
     }
 
     /**
      * 医院和华卓映射疾病信息放入redis缓存
+     *
+     * @param hospitalId
      */
-    public void putLantoneDiagHuaZMap() throws Exception {
-        Configuration configuration = new DefaultConfig();
-        List<String> lines = configuration.readTargetFileContents("cache/" + hospitalId + "/hospital_diag_info.dict");
-        Map<String, Map<String, String>> hospitalDiagMap = new HashMap<>();
-        for (String line : lines) {
-            Map<String, String> detail = new HashMap<>();
-            detail.put("name", line.trim());
-            detail.put("icd10", "A001");
-            hospitalDiagMap.put(line, detail);
+    public void putLantoneDiagHuaZMap(String hospitalId) {
+        try {
+            List<String> lines = configuration.readTargetFileContents("cache/" + hospitalId + "/hospital_diag_info.dict");
+            Map<String, Map<String, String>> hospitalDiagMap = new HashMap<>();
+            for (String line : lines) {
+                Map<String, String> detail = new HashMap<>();
+                detail.put("name", line.trim());
+                detail.put("icd10", "A001");
+                hospitalDiagMap.put(line, detail);
+            }
+            redisUtil.setValByHospitalId(hospitalId, KernelConstants.LANTONE_DIAG_HUAZ_MAP, hospitalDiagMap);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
         }
-        redisUtil.setJsonStringValue(KernelConstants.LANTONE_DIAG_HUAZ_MAP, hospitalDiagMap);
     }
 
     /**
      * 症状需要部位描述词典放入redis缓存
+     *
+     * @param hospitalId
      */
-    public void putClinicBodyPartMap() throws Exception {
-        Configuration configuration = new DefaultConfig();
-        List<String> lines = configuration.readTargetFileContents("cache/" + hospitalId + "/concept_clinic_bodypart_properties.dict");
-        List<String> clinicBodyPartList = new ArrayList<>();
-        for (String line : lines) {
-            clinicBodyPartList.add(line);
+    public void putClinicBodyPartMap(String hospitalId) {
+        try {
+            List<String> lines = configuration.readTargetFileContents("cache/" + hospitalId + "/concept_clinic_bodypart_properties.dict");
+            List<String> clinicBodyPartList = new ArrayList<>();
+            for (String line : lines) {
+                clinicBodyPartList.add(line);
+            }
+            redisUtil.setValByHospitalId(hospitalId, KernelConstants.CONCEPT_CLINIC_BODYPART_PROPERTIES_LIST, clinicBodyPartList);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
         }
-        redisUtil.setJsonStringValue(KernelConstants.CONCEPT_CLINIC_BODYPART_PROPERTIES_LIST, clinicBodyPartList);
     }
+
 }

+ 25 - 586
kernel/src/main/java/com/lantone/qc/kernel/util/RedisUtil.java

@@ -1,16 +1,10 @@
 package com.lantone.qc.kernel.util;
 
-import com.lantone.qc.pub.util.FastJsonUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.RedisTemplate;
+import com.google.common.collect.Maps;
+import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
-import org.springframework.util.CollectionUtils;
 
-import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
 
 /**
  * @Description:
@@ -19,600 +13,45 @@ import java.util.concurrent.TimeUnit;
  */
 @Component
 public final class RedisUtil {
+    private final Map<String, Map<String, Object>> hospitalCache = Maps.newHashMap();
+    private final ThreadLocal<String> hospitalIdThreadLocal = new ThreadLocal<>();
 
-    @Autowired
-    private RedisTemplate<String, Object> redisTemplate;
-
-    public static Map<String, Object> static_map = new HashMap<>();
-
-    // =============================common============================
-
-    /**
-     * 指定缓存失效时间
-     *
-     * @param key  键
-     * @param time 时间(秒)
-     * @return
-     */
-    private boolean expire(String key, long time) {
-        try {
-            if (time > 0) {
-                redisTemplate.expire(key, time, TimeUnit.SECONDS);
-            }
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 根据key 获取过期时间
-     *
-     * @param key 键 不能为null
-     * @return 时间(秒) 返回0代表为永久有效
-     */
-    private long getExpire(String key) {
-        return redisTemplate.getExpire(key, TimeUnit.SECONDS);
-    }
-
-    /**
-     * 判断key是否存在
-     *
-     * @param key 键
-     * @return true 存在 false不存在
-     */
-    private boolean hasKey(String key) {
-        try {
-            return redisTemplate.hasKey(key);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 删除缓存
-     *
-     * @param key 可以传一个值 或多个
-     */
-    @SuppressWarnings("unchecked")
-    private void del(String... key) {
-        if (key != null && key.length > 0) {
-            if (key.length == 1) {
-                redisTemplate.delete(key[0]);
-            } else {
-                redisTemplate.delete(CollectionUtils.arrayToList(key));
-            }
-        }
-    }
-
-    // ============================String=============================
-
-    /**
-     * 普通缓存获取
-     *
-     * @param key 键
-     * @return 值
-     */
-    public Object get(String key) {
-        return key == null ? null : redisTemplate.opsForValue().get(key);
-    }
-
-    /**
-     * 普通缓存放入
-     *
-     * @param key   键
-     * @param value 值
-     * @return true成功 false失败
-     */
-    public boolean set(String key, Object value) {
-        try {
-            redisTemplate.opsForValue().set(key, value);
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-
-    }
-
-    /**
-     * 普通缓存放入并设置时间
-     *
-     * @param key   键
-     * @param value 值
-     * @param time  时间(秒) time要大于0 如果time小于等于0 将设置无限期
-     * @return true成功 false 失败
-     */
-    public boolean set(String key, Object value, long time) {
-        try {
-            if (time > 0) {
-                redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
-            } else {
-                set(key, value);
-            }
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 递增
-     *
-     * @param key   键
-     * @param delta 要增加几(大于0)
-     * @return
-     */
-    private long incr(String key, long delta) {
-        if (delta < 0) {
-            throw new RuntimeException("递增因子必须大于0");
-        }
-        return redisTemplate.opsForValue().increment(key, delta);
-    }
-
-    /**
-     * 递减
-     *
-     * @param key   键
-     * @param delta 要减少几(小于0)
-     * @return
-     */
-    private long decr(String key, long delta) {
-        if (delta < 0) {
-            throw new RuntimeException("递减因子必须大于0");
-        }
-        return redisTemplate.opsForValue().increment(key, -delta);
-    }
-
-    // ================================Map=================================
-
-    /**
-     * HashGet
-     *
-     * @param key  键 不能为null
-     * @param item 项 不能为null
-     * @return 值
-     */
-    private Object hget(String key, String item) {
-        return redisTemplate.opsForHash().get(key, item);
-    }
-
-    /**
-     * 获取hashKey对应的所有键值
-     *
-     * @param key 键
-     * @return 对应的多个键值
-     */
-    private Map<Object, Object> hmget(String key) {
-        return redisTemplate.opsForHash().entries(key);
-    }
-
-    /**
-     * HashSet
-     *
-     * @param key 键
-     * @param map 对应多个键值
-     * @return true 成功 false 失败
-     */
-    private boolean hmset(String key, Map<String, Object> map) {
-        try {
-            redisTemplate.opsForHash().putAll(key, map);
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * HashSet 并设置时间
-     *
-     * @param key  键
-     * @param map  对应多个键值
-     * @param time 时间(秒)
-     * @return true成功 false失败
-     */
-    private boolean hmset(String key, Map<String, Object> map, long time) {
-        try {
-            redisTemplate.opsForHash().putAll(key, map);
-            if (time > 0) {
-                expire(key, time);
-            }
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 向一张hash表中放入数据,如果不存在将创建
-     *
-     * @param key   键
-     * @param item  项
-     * @param value 值
-     * @return true 成功 false失败
-     */
-    private boolean hset(String key, String item, Object value) {
-        try {
-            redisTemplate.opsForHash().put(key, item, value);
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 向一张hash表中放入数据,如果不存在将创建
-     *
-     * @param key   键
-     * @param item  项
-     * @param value 值
-     * @param time  时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间
-     * @return true 成功 false失败
-     */
-    private boolean hset(String key, String item, Object value, long time) {
-        try {
-            redisTemplate.opsForHash().put(key, item, value);
-            if (time > 0) {
-                expire(key, time);
-            }
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 删除hash表中的值
-     *
-     * @param key  键 不能为null
-     * @param item 项 可以使多个 不能为null
-     */
-    private void hdel(String key, Object... item) {
-        redisTemplate.opsForHash().delete(key, item);
-    }
-
-    /**
-     * 判断hash表中是否有该项的值
-     *
-     * @param key  键 不能为null
-     * @param item 项 不能为null
-     * @return true 存在 false不存在
-     */
-    private boolean hHasKey(String key, String item) {
-        return redisTemplate.opsForHash().hasKey(key, item);
-    }
-
-    /**
-     * hash递增 如果不存在,就会创建一个 并把新增后的值返回
-     *
-     * @param key  键
-     * @param item 项
-     * @param by   要增加几(大于0)
-     * @return
-     */
-    private double hincr(String key, String item, double by) {
-        return redisTemplate.opsForHash().increment(key, item, by);
-    }
-
-    /**
-     * hash递减
-     *
-     * @param key  键
-     * @param item 项
-     * @param by   要减少记(小于0)
-     * @return
-     */
-    private double hdecr(String key, String item, double by) {
-        return redisTemplate.opsForHash().increment(key, item, -by);
-    }
-
-    // ============================set=============================
-
-    /**
-     * 根据key获取Set中的所有值
-     *
-     * @param key 键
-     * @return
-     */
-    private Set<Object> sGet(String key) {
-        try {
-            return redisTemplate.opsForSet().members(key);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        }
-    }
-
-    /**
-     * 根据value从一个set中查询,是否存在
-     *
-     * @param key   键
-     * @param value 值
-     * @return true 存在 false不存在
-     */
-    private boolean sHasKey(String key, Object value) {
-        try {
-            return redisTemplate.opsForSet().isMember(key, value);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 将数据放入set缓存
-     *
-     * @param key    键
-     * @param values 值 可以是多个
-     * @return 成功个数
-     */
-    private long sSet(String key, Object... values) {
-        try {
-            return redisTemplate.opsForSet().add(key, values);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return 0;
-        }
-    }
-
-    /**
-     * 将set数据放入缓存
-     *
-     * @param key    键
-     * @param time   时间(秒)
-     * @param values 值 可以是多个
-     * @return 成功个数
-     */
-    private long sSetAndTime(String key, long time, Object... values) {
-        try {
-            Long count = redisTemplate.opsForSet().add(key, values);
-            if (time > 0) {
-                expire(key, time);
-            }
-            return count;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return 0;
-        }
-    }
-
-    /**
-     * 获取set缓存的长度
-     *
-     * @param key 键
-     * @return
-     */
-    private long sGetSetSize(String key) {
-        try {
-            return redisTemplate.opsForSet().size(key);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return 0;
-        }
-    }
-
-    /**
-     * 移除值为value的
-     *
-     * @param key    键
-     * @param values 值 可以是多个
-     * @return 移除的个数
-     */
-    private long setRemove(String key, Object... values) {
-        try {
-            Long count = redisTemplate.opsForSet().remove(key, values);
-            return count;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return 0;
-        }
+    public <T> T getJsonStringValue(String key) {
+        return getValByHospitalId(hospitalIdThreadLocal.get(), key);
     }
-    // ===============================list=================================
 
-    /**
-     * 获取list缓存的内容
-     *
-     * @param key   键
-     * @param start 开始
-     * @param end   结束 0 到 -1代表所有值
-     * @return
-     */
-    private List<Object> lGet(String key, long start, long end) {
-        try {
-            return redisTemplate.opsForList().range(key, start, end);
-        } catch (Exception e) {
-            e.printStackTrace();
+    public <T> T getValByHospitalId(String hospitalId, String key) {
+        if (StringUtil.isBlank(hospitalId)) {
             return null;
         }
-    }
-
-    /**
-     * 获取list缓存的长度
-     *
-     * @param key 键
-     * @return
-     */
-    private long lGetListSize(String key) {
-        try {
-            return redisTemplate.opsForList().size(key);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return 0;
-        }
-    }
-
-    /**
-     * 通过索引 获取list中的值
-     *
-     * @param key   键
-     * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推
-     * @return
-     */
-    private Object lGetIndex(String key, long index) {
-        try {
-            return redisTemplate.opsForList().index(key, index);
-        } catch (Exception e) {
-            e.printStackTrace();
+        Map<String, Object> map = hospitalCache.get(hospitalId);
+        if (map == null) {
             return null;
         }
+        return (T) map.get(key);
     }
 
-    /**
-     * 将list放入缓存
-     *
-     * @param key   键
-     * @param value 值
-     * @return
-     */
-    private boolean lSet(String key, Object value) {
-        try {
-            redisTemplate.opsForList().rightPush(key, value);
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 将list放入缓存
-     *
-     * @param key   键
-     * @param value 值
-     * @param time  时间(秒)
-     * @return
-     */
-    private boolean lSet(String key, Object value, long time) {
-        try {
-            redisTemplate.opsForList().rightPush(key, value);
-            if (time > 0) {
-                expire(key, time);
-            }
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 将list放入缓存
-     *
-     * @param key   键
-     * @param value 值
-     * @return
-     */
-    private boolean lSet(String key, List<Object> value) {
-        try {
-            redisTemplate.opsForList().rightPushAll(key, value);
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    /**
-     * 将list放入缓存
-     *
-     * @param key   键
-     * @param value 值
-     * @param time  时间(秒)
-     * @return
-     */
-    private boolean lSet(String key, List<Object> value, long time) {
-        try {
-            redisTemplate.opsForList().rightPushAll(key, value);
-            if (time > 0) {
-                expire(key, time);
-            }
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
+    public <T> void setJsonStringValue(String key, Object value) {
+        setValByHospitalId(hospitalIdThreadLocal.get(), key, value);
     }
 
-    /**
-     * 根据索引修改list中的某条数据
-     *
-     * @param key   键
-     * @param index 索引
-     * @param value 值
-     * @return
-     */
-    private boolean lUpdateIndex(String key, long index, Object value) {
-        try {
-            redisTemplate.opsForList().set(key, index, value);
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
+    public <T> void setValByHospitalId(String hospitalId, String key, Object value) {
+        if (StringUtil.isBlank(hospitalId)) {
+            return;
         }
-    }
-
-    /**
-     * 移除N个值为value
-     *
-     * @param key   键
-     * @param count 移除多少个
-     * @param value 值
-     * @return 移除的个数
-     */
-    private long lRemove(String key, long count, Object value) {
-        try {
-            Long remove = redisTemplate.opsForList().remove(key, count, value);
-            return remove;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return 0;
+        Map<String, Object> map = hospitalCache.get(hospitalId);
+        if (map == null) {
+            return;
         }
+        map.put(key, value);
     }
 
-    /**
-     * 获取---value为json字符串
-     *
-     * @param key
-     * @param <T>
-     * @return
-     */
-    public <T> T getJsonStringValue(String key) {
-        try {
-//            Object valObj = get(key);
-//            if (valObj != null && valObj.getClass().getName().indexOf("String") > -1) {
-//                return (T) FastJsonUtils.getJsonToBean(valObj.toString(), Object.class);
-//            }
-//            return null;
-            return (T)static_map.get(key);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        }
+    public ThreadLocal<String> getHospitalIdThreadLocal() {
+        return hospitalIdThreadLocal;
     }
 
-    /**
-     * 插入---value为json字符串
-     *
-     * @param key
-     * @param value
-     */
-    public <T> void setJsonStringValue(String key, Object value) {
-        try {
-            static_map.put(key, value);
-//            set(key, FastJsonUtils.getBeanToJson(value));
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
+    public Map<String, Map<String, Object>> getHospitalCache() {
+        return hospitalCache;
     }
 
-
-}
-
+}

+ 1 - 1
kernel/src/main/resources/application.yml

@@ -25,7 +25,7 @@ spring:
         max-idle: 8
 
 qc:
-  hospital_id: 3
+  hospital_id: 1,3
 
 CRF:
   url: http://192.168.2.234:3456/api/mr_info_ex/entity_predict

File diff suppressed because it is too large
+ 1 - 0
kernel/src/main/resources/cache/1/module_mapping.json


+ 2 - 0
public/src/main/java/com/lantone/qc/pub/model/vo/QueryVo.java

@@ -23,4 +23,6 @@ public class QueryVo extends TokenVO {
 
     private String cid;
 
+    private String hospitalId;
+
 }

+ 2 - 0
trans/src/main/java/com/lantone/qc/trans/TransDispatch.java

@@ -2,6 +2,7 @@ package com.lantone.qc.trans;
 
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.vo.QueryVo;
+import com.lantone.qc.trans.comsis.ModuleMappingUtil;
 import lombok.extern.slf4j.Slf4j;
 
 /**
@@ -14,6 +15,7 @@ public class TransDispatch {
 
     public static InputInfo trans(QueryVo queryVo) {
         try {
+            ModuleMappingUtil.hospitalIdThreadLocal.set(queryVo.getHospitalId());
             String classPath = "com.lantone.qc.trans."
                     + queryVo.getCid()
                     + "."

+ 6 - 76
trans/src/main/java/com/lantone/qc/trans/changx/ChangxBeHospitalizedDocTrans.java

@@ -3,6 +3,7 @@ package com.lantone.qc.trans.changx;
 import com.google.common.collect.Lists;
 import com.lantone.qc.pub.model.doc.BeHospitalizedDoc;
 import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.pub.util.StringUtil;
 import com.lantone.qc.trans.ModelDocTrans;
 import com.lantone.qc.trans.changx.util.CxXmlUtil;
 import com.lantone.qc.trans.comsis.ModelDocGenerate;
@@ -21,7 +22,7 @@ public class ChangxBeHospitalizedDocTrans extends ModelDocTrans {
     @Override
     public BeHospitalizedDoc extract(MedrecVo medrecVo) {
         String content = ((List<String>) medrecVo.getContent().get("content")).get(0);
-        Map<String, String> sourceMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent", content);
+        Map<String, String> sourceMap = CxXmlUtil.firstLevelNodeValue(content);
         String tgjc = sourceMap.get("一般情况") + "。"
                 + sourceMap.get("皮肤情况") + "。"
                 + sourceMap.get("淋巴") + "。"
@@ -37,95 +38,24 @@ public class ChangxBeHospitalizedDocTrans extends ModelDocTrans {
                 + sourceMap.get("四肢脊柱检查") + "。"
                 + sourceMap.get("神经系统检查") + "。"
                 + sourceMap.get("其他说明") + "。";
-        sourceMap.put("体格检查(二)", tgjc);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
+        if (StringUtil.isNotBlank(tgjc)) {
+            structureMap.put("专科体格检查", tgjc);
+        }
         BeHospitalizedDoc beHospitalizedDoc = ModelDocGenerate.beHospitalizedDocGen(structureMap);
         beHospitalizedDoc.setText(content);
-        beHospitalizedDoc.setPageData((Map) sourceMap);
+        beHospitalizedDoc.setPageData((Map) structureMap);
         return beHospitalizedDoc;
     }
 
     private List<String> keyContrasts = Lists.newArrayList(
             "姓名++++患者姓名=姓名",
-            "性别=",
-            "病区++++病区名称=",
-            "床号=",
-            "病案号++++住院号=",
-            "病人姓名++++患者姓名=",
-            "职业=",
-            "工作单位++++工作单位地址=",
-            "年龄=",
             "出生地++++出生地(住院)=出生地",
-            "出生日期=",
-            "户口地址=",
             "婚姻状况++++婚姻=婚姻",
             "联系电话=电话",
-            "民族=",
-            "入院日期=",
             "供史者++++病史叙述者=病史陈述者",
-            "记录日期=",
-            "主诉=",
-            "现病史=",
-            "既往史=",
-            "目前使用的药物=",
-            "成瘾药物=",
-            "个人史=",
-            "月经史=",
             "婚育史:=婚育史",
-            "家族史=",
-            "辅助检查=",
-            "体重指数++++体重指数(BMI)=",
-            "++++复选框=",
-            "营养风险评分=",
-            "请营养科会诊=",
-            "ADL评分分级=",
-            "康复科会诊++++康复科会诊1=",
-            "康复科会诊++++康复科会诊2=",
-            "++++心理评估1=",
-            "++++心理评估2=",
-            "++++心理卫生科会诊1=",
-            "++++心理卫生科会诊2=",
-            "Caprini评估++++=",
-            "出血风险=",
-            "初步诊断=",
-            "需求评估=",
-            "预期目标=",
-            "诊疗计划=",
-            "治疗监测计划=",
-            "签名++++=",
-            "签名时间=",
-            "补充诊断=",
-            "修正诊断=",
-            "签名时间++++补充诊断签名时间=",
-            "签名时间++++修正签名时间=",
-            "一般情况=",
-            "皮肤情况=",
-            "淋巴=",
-            "头部检查=",
-            "颈部=",
-            "胸部检查=",
-            "肺部检查=",
-            "心脏检查=",
-            "血管=",
-            "腹部检查=",
             "外生殖器++++外生殖器文本框=",
-            "直肠肛门=",
-            "四肢脊柱检查=",
-            "神经系统检查=",
-            "其他说明=",
-            "体格检查=",
-            "体格检查(二)=专科体格检查",
-            "++++复选框10=",
-            "小计++++=",
-            "++++复选框11=",
-            "其他风险因素=",
-            "++++复选框8=",
-            "类型++++VTE类型=",
-            "++++复选框9=",
-            "++++无需VTE预防=",
-            "其他++++抗凝药物禁忌其他=",
-            "++++物理预防复选框=",
-            "其他++++物理预防其他=",
             "职业++++首页职业新=职业"
     );
 

+ 2 - 2
trans/src/main/java/com/lantone/qc/trans/changx/ChangxClinicBloodEffectDocTrans.java

@@ -31,7 +31,7 @@ public class ChangxClinicBloodEffectDocTrans extends ModelDocTrans {
         return retList;
     }
     private ClinicBloodEffectDoc getClinicalBloodDoc(String content) {
-        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent/Region", content);
+        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, keyContrasts);
 
         String text = CxXmlUtil.getTextByNodePath(content, "//DocObjContent/Region/Content_Text");
@@ -44,7 +44,7 @@ public class ChangxClinicBloodEffectDocTrans extends ModelDocTrans {
 
         ClinicBloodEffectDoc clinicBloodEffectDoc = ModelDocGenerate.clinicBloodEffectDoc(cutWordMap);
         clinicBloodEffectDoc.setText(text);
-        clinicBloodEffectDoc.setPageData((Map) xmlNodeValueMap);
+        clinicBloodEffectDoc.setPageData((Map) cutWordMap);
 
         return clinicBloodEffectDoc;
     }

+ 2 - 2
trans/src/main/java/com/lantone/qc/trans/changx/ChangxClinicalBloodDocTrans.java

@@ -31,7 +31,7 @@ public class ChangxClinicalBloodDocTrans extends ModelDocTrans {
     }
 
     private ClinicalBloodDoc getClinicalBloodDoc(String content) {
-        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent/Region", content);
+        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, keyContrasts);
 
         String text = CxXmlUtil.getTextByNodePath(content, "//DocObjContent/Region/Content_Text");
@@ -44,7 +44,7 @@ public class ChangxClinicalBloodDocTrans extends ModelDocTrans {
 
         ClinicalBloodDoc clinicalBloodDoc = ModelDocGenerate.clinicalBloodDocGen(cutWordMap);
         clinicalBloodDoc.setText(text);
-        clinicalBloodDoc.setPageData((Map) xmlNodeValueMap);
+        clinicalBloodDoc.setPageData((Map) cutWordMap);
 
         return clinicalBloodDoc;
     }

+ 11 - 10
trans/src/main/java/com/lantone/qc/trans/changx/ChangxConsultationDocTrans.java

@@ -81,19 +81,20 @@ public class ChangxConsultationDocTrans extends ModelDocTrans {
     }
 
     private ConsultationRecordDoc getConsultationRecordDoc(String content) {
+        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue(content);
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, consultationRecord_keyContrasts);
+
         String text = CxXmlUtil.getTextByNodePath(content, "//DocObjContent/Region/Content_Text");
         if (StringUtil.isBlank(text)) {
             text = CxXmlUtil.getTextByNodePath(content, "//DocObjContent/Region");
         }
         Map<String, String> cutWordMap = Preproc.getCutWordMap(true, consultationRecord_sourceTitles, text);
-        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent//Region", content);
-        cutWordMap.putAll(xmlNodeValueMap);
-        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(cutWordMap, consultationRecord_keyContrasts);
-        MapUtil.keyAssig(structureMap, "记录医师", "签名");
+        cutWordMap.putAll(structureMap);
+        MapUtil.keyAssig(cutWordMap, "记录医师", "签名");
 
-        ConsultationRecordDoc consultationRecordDoc = ModelDocGenerate.consultationRecordDocGen(structureMap);
+        ConsultationRecordDoc consultationRecordDoc = ModelDocGenerate.consultationRecordDocGen(cutWordMap);
         consultationRecordDoc.setText(text);
-        consultationRecordDoc.setPageData((Map) xmlNodeValueMap);
+        consultationRecordDoc.setPageData((Map) cutWordMap);
 
         return consultationRecordDoc;
     }
@@ -132,7 +133,7 @@ public class ChangxConsultationDocTrans extends ModelDocTrans {
     }
 
     private ConsultationResultsDoc getConsultationResultsDoc(String content) {
-        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent", content);
+        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, consultationApplication_keyContrasts);
 
         String text = CxXmlUtil.getTextByNodePath(content, "//DocObjContent/Content_Text");
@@ -144,7 +145,7 @@ public class ChangxConsultationDocTrans extends ModelDocTrans {
 
         ConsultationResultsDoc consultationResultsDoc = ModelDocGenerate.consultationResultsDocGen(cutWordMap);
         consultationResultsDoc.setText(content);
-        consultationResultsDoc.setPageData((Map) xmlNodeValueMap);
+        consultationResultsDoc.setPageData((Map) cutWordMap);
         return consultationResultsDoc;
     }
 
@@ -185,7 +186,7 @@ public class ChangxConsultationDocTrans extends ModelDocTrans {
     }
 
     private ConsultationApplicationDoc getConsultationApplicationDoc(String content) {
-        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent", content);
+        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, consultationApplication_keyContrasts);
 
         String text = CxXmlUtil.getTextByNodePath(content, "//DocObjContent/Content_Text");
@@ -197,7 +198,7 @@ public class ChangxConsultationDocTrans extends ModelDocTrans {
 
         ConsultationApplicationDoc consultationApplicationDoc = ModelDocGenerate.consultationApplicationDocGen(cutWordMap);
         consultationApplicationDoc.setText(text);
-        consultationApplicationDoc.setPageData((Map) xmlNodeValueMap);
+        consultationApplicationDoc.setPageData((Map) cutWordMap);
 
         return consultationApplicationDoc;
     }

+ 2 - 2
trans/src/main/java/com/lantone/qc/trans/changx/ChangxCrisisValueReportDocTrans.java

@@ -31,7 +31,7 @@ public class ChangxCrisisValueReportDocTrans extends ModelDocTrans {
     }
 
     private CrisisValueReportDoc getCrisisValueReportDoc(String content) {
-        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent//Region", content);
+        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, keyContrasts);
         structureMap.put("医生姓名", structureMap.get("医生签名"));
 
@@ -44,7 +44,7 @@ public class ChangxCrisisValueReportDocTrans extends ModelDocTrans {
 
         CrisisValueReportDoc crisisValueReportDoc = ModelDocGenerate.crisisValueReportDocGen(cutWordMap);
         crisisValueReportDoc.setText(text);
-        crisisValueReportDoc.setPageData((Map) xmlNodeValueMap);
+        crisisValueReportDoc.setPageData((Map) cutWordMap);
 
         return crisisValueReportDoc;
     }

+ 2 - 2
trans/src/main/java/com/lantone/qc/trans/changx/ChangxCriticallyIllNoticeDocTrans.java

@@ -31,7 +31,7 @@ public class ChangxCriticallyIllNoticeDocTrans extends ModelDocTrans {
     }
 
     private CriticallyIllNoticeDoc getCriticallyIllNoticeDoc(String content) {
-        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent", content);
+        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, keyContrasts);
 
         String text = CxXmlUtil.getTextByNodePath(content, "//DocObjContent/Content_Text");
@@ -43,7 +43,7 @@ public class ChangxCriticallyIllNoticeDocTrans extends ModelDocTrans {
 
         CriticallyIllNoticeDoc criticallyIllNoticeDoc = ModelDocGenerate.criticallyIllNoticeDocGen(cutWordMap);
         criticallyIllNoticeDoc.setText(text);
-        criticallyIllNoticeDoc.setPageData((Map) xmlNodeValueMap);
+        criticallyIllNoticeDoc.setPageData((Map) cutWordMap);
 
         return criticallyIllNoticeDoc;
     }

+ 2 - 2
trans/src/main/java/com/lantone/qc/trans/changx/ChangxDeathCaseDiscussDocTrans.java

@@ -23,7 +23,7 @@ public class ChangxDeathCaseDiscussDocTrans extends ModelDocTrans {
     @Override
     public DeathCaseDiscussDoc extract(MedrecVo medrecVo) {
         String content = ((List<String>) medrecVo.getContent().get("content")).get(0);
-        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent//Region", content);
+        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, keyContrasts);
 
         String text = CxXmlUtil.getTextByNodePath(content, "//DocObjContent/Region/Content_Text");
@@ -35,7 +35,7 @@ public class ChangxDeathCaseDiscussDocTrans extends ModelDocTrans {
 
         DeathCaseDiscussDoc deathCaseDiscussDoc = ModelDocGenerate.deathCaseDiscussDocGen(cutWordMap);
         deathCaseDiscussDoc.setText(text);
-        deathCaseDiscussDoc.setPageData((Map) xmlNodeValueMap);
+        deathCaseDiscussDoc.setPageData((Map) cutWordMap);
 
         return deathCaseDiscussDoc;
     }

+ 2 - 2
trans/src/main/java/com/lantone/qc/trans/changx/ChangxDeathRecordDocTrans.java

@@ -24,7 +24,7 @@ public class ChangxDeathRecordDocTrans extends ModelDocTrans {
     public DeathRecordDoc extract(MedrecVo medrecVo) {
         String content = ((List<String>) medrecVo.getContent().get("content")).get(0);
 
-        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent", content);
+        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, keyContrasts);
 
         String text = CxXmlUtil.getTextByNodePath(content, "//DocObjContent/Content_Text");
@@ -36,7 +36,7 @@ public class ChangxDeathRecordDocTrans extends ModelDocTrans {
 
         DeathRecordDoc deathRecordDoc = ModelDocGenerate.deathRecordDocGen(cutWordMap);
         deathRecordDoc.setText(text);
-        deathRecordDoc.setPageData((Map) xmlNodeValueMap);
+        deathRecordDoc.setPageData((Map) cutWordMap);
 
         return deathRecordDoc;
     }

+ 15 - 33
trans/src/main/java/com/lantone/qc/trans/changx/ChangxDifficultCaseDiscussDocTrans.java

@@ -3,8 +3,11 @@ package com.lantone.qc.trans.changx;
 import com.google.common.collect.Lists;
 import com.lantone.qc.pub.model.doc.DifficultCaseDiscussDoc;
 import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.pub.util.StringUtil;
 import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.changx.util.CxXmlUtil;
 import com.lantone.qc.trans.comsis.ModelDocGenerate;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
 import com.lantone.qc.trans.comsis.Preproc;
 
 import java.util.List;
@@ -28,47 +31,24 @@ public class ChangxDifficultCaseDiscussDocTrans extends ModelDocTrans {
     }
 
     private DifficultCaseDiscussDoc getDifficultCaseDiscussDoc(String content) {
-        Map<String, String> pageData = Preproc.extract_doc_pub(true, pageDataTitles, content);
-        pageData.put("病程记录内容",
-                pageData.get("病程记录内容")
-                        .replace(pageData.get("病程记录时间"), "")
-                        .replace(pageData.get("病程记录名称"), "")
-        );
+        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue(content);
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, keyContrasts);
 
-        List<String> targetTitles = Lists.newArrayList();
-        sourceTitles.forEach(sourceTitle -> {
-            String targetTitle = "";
-            for (int index = 0; index < sourceTitle.length(); index++) {
-                if (index == sourceTitle.length() - 1) {
-                    targetTitle += sourceTitle.substring(index, index + 1);
-                } else {
-                    targetTitle += sourceTitle.substring(index, index + 1) + "[\\s\\p{Zs}]*";
-                }
-            }
-            targetTitles.add(targetTitle);
-        });
-
-        Map<String, String> sourceMap = Preproc.extract_doc_pub(true, targetTitles, content);
-        sourceMap.put("记录时间", sourceMap.get("病程记录时间"));
+        String text = CxXmlUtil.getTextByNodePath(content, "//DocObjContent/Region/Content_Text");
+        if (StringUtil.isBlank(text)) {
+            text = CxXmlUtil.getTextByNodePath(content, "//DocObjContent/Region");
+        }
+        Map<String, String> cutWordMap = Preproc.getCutWordMap(true, sourceTitles, text);
+        cutWordMap.putAll(structureMap);
 
-        DifficultCaseDiscussDoc difficultCaseDiscussDoc = ModelDocGenerate.difficultCaseDiscussDocGen(sourceMap);
+        DifficultCaseDiscussDoc difficultCaseDiscussDoc = ModelDocGenerate.difficultCaseDiscussDocGen(cutWordMap);
         difficultCaseDiscussDoc.setText(content);
-        difficultCaseDiscussDoc.setPageData((Map) pageData);
+        difficultCaseDiscussDoc.setPageData((Map) cutWordMap);
 
         return difficultCaseDiscussDoc;
     }
 
-    private List<String> pageDataTitles = Lists.newArrayList(
-            "病程记录时间",
-            "病程记录名称",
-            "病程记录内容",
-            "记录医师"
-    );
-
     private List<String> sourceTitles = Lists.newArrayList(
-            "病程记录时间",
-            "病程记录名称",
-            "病程记录内容",
             "记录时间",
             "记录医师",
             "入院时间",
@@ -82,4 +62,6 @@ public class ChangxDifficultCaseDiscussDocTrans extends ModelDocTrans {
             "结论"
     );
 
+    private List<String> keyContrasts = Lists.newArrayList();
+
 }

+ 58 - 26
trans/src/main/java/com/lantone/qc/trans/changx/ChangxDocTrans.java

@@ -21,7 +21,7 @@ public class ChangxDocTrans extends DocTrans {
     protected InputInfo extract(QueryVo queryVo) {
         InputInfo inputInfo = new InputInfo();
         for (MedrecVo i : queryVo.getMedrec()) {
-             if (i.getTitle().equals("会诊单")) {
+            if (i.getTitle().equals("会诊单")) {
                 ChangxConsultationDocTrans consultationDocTrans = new ChangxConsultationDocTrans();
                 inputInfo.setConsultationDocs(consultationDocTrans.extract(i));
             }
@@ -61,10 +61,10 @@ public class ChangxDocTrans extends DocTrans {
                 ChangxDeathRecordDocTrans deathRecordDocTrans = new ChangxDeathRecordDocTrans();
                 inputInfo.setDeathRecordDoc(deathRecordDocTrans.extract(i));
             }
-            //            if (i.getTitle().equals("疑难病例讨论记录")) {
-            //                ChangxDifficultCaseDiscussDocTrans difficultCaseDiscussDocTrans = new ChangxDifficultCaseDiscussDocTrans();
-            //                inputInfo.setDifficultCaseDiscussDocs(difficultCaseDiscussDocTrans.extract(i));
-            //            }
+            if (i.getTitle().equals("疑难病例讨论记录")) {
+                ChangxDifficultCaseDiscussDocTrans difficultCaseDiscussDocTrans = new ChangxDifficultCaseDiscussDocTrans();
+                inputInfo.setDifficultCaseDiscussDocs(difficultCaseDiscussDocTrans.extract(i));
+            }
             if (i.getTitle().equals("医嘱信息")) {
                 ChangxDoctorAdviceDocTrans doctorAdviceDocTrans = new ChangxDoctorAdviceDocTrans();
                 inputInfo.setDoctorAdviceDocs(doctorAdviceDocTrans.extract(i));
@@ -109,14 +109,18 @@ public class ChangxDocTrans extends DocTrans {
                 ChangxThreeLevelWardDocTrans threeLevelWardDocTrans = new ChangxThreeLevelWardDocTrans();
                 inputInfo.setThreeLevelWardDocs(threeLevelWardDocTrans.extract(i));
             }
-            if (i.getTitle().equals("知情同意书")) {
-                ChangxInformedConsentDocTrans informedConsentDocTrans = new ChangxInformedConsentDocTrans();
-                inputInfo.setInformedConsentDoc(informedConsentDocTrans.extract(i));
-            }
-            if (i.getTitle().equals("谈话告知书")) {
-                ChangxNoticeOfConversationDocTrans noticeOfConversationDocTrans = new ChangxNoticeOfConversationDocTrans();
-                inputInfo.setNoticeOfConversationDoc(noticeOfConversationDocTrans.extract(i));
+            if (i.getTitle().equals("病理检验送检单")) {
+                ChangxPathologyShipDocTrans pathologyShipDocTrans = new ChangxPathologyShipDocTrans();
+                inputInfo.setPathologyShipDocs(pathologyShipDocTrans.extract(i));
             }
+            //            if (i.getTitle().equals("知情同意书")) {
+            //                ChangxInformedConsentDocTrans informedConsentDocTrans = new ChangxInformedConsentDocTrans();
+            //                inputInfo.setInformedConsentDoc(informedConsentDocTrans.extract(i));
+            //            }
+            //            if (i.getTitle().equals("谈话告知书")) {
+            //                ChangxNoticeOfConversationDocTrans noticeOfConversationDocTrans = new ChangxNoticeOfConversationDocTrans();
+            //                inputInfo.setNoticeOfConversationDoc(noticeOfConversationDocTrans.extract(i));
+            //            }
         }
         pageDataHandle(inputInfo);
         return inputInfo;
@@ -148,18 +152,21 @@ public class ChangxDocTrans extends DocTrans {
         if (ListUtil.isNotEmpty(inputInfo.getClinicalBloodDocs())) {
             inputInfo.getPageData().put("输血/血制品病程记录", inputInfo.getClinicalBloodDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
         }
+        if (ListUtil.isNotEmpty(inputInfo.getClinicBloodEffectDocs())) {
+            inputInfo.getPageData().put("输血后效果评价", inputInfo.getClinicBloodEffectDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
+        }
         if (ListUtil.isNotEmpty(inputInfo.getCrisisValueReportDocs())) {
             inputInfo.getPageData().put("危急值记录", inputInfo.getCrisisValueReportDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
         }
         if (ListUtil.isNotEmpty(inputInfo.getCriticallyIllNoticeDocs())) {
             inputInfo.getPageData().put("病危通知书", inputInfo.getCriticallyIllNoticeDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
         }
-        //        if (ListUtil.isNotEmpty(inputInfo.getDifficultCaseDiscussDocs())) {
-        //            inputInfo.getPageData().put("疑难病例讨论记录", inputInfo.getDifficultCaseDiscussDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
-        //        }
-        if (ListUtil.isNotEmpty(inputInfo.getDoctorAdviceDocs())) {
-            inputInfo.getPageData().put("医嘱信息", inputInfo.getDoctorAdviceDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
+        if (ListUtil.isNotEmpty(inputInfo.getDifficultCaseDiscussDocs())) {
+            inputInfo.getPageData().put("疑难病例讨论记录", inputInfo.getDifficultCaseDiscussDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
         }
+        //        if (ListUtil.isNotEmpty(inputInfo.getDoctorAdviceDocs())) {
+        //            inputInfo.getPageData().put("医嘱信息", inputInfo.getDoctorAdviceDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
+        //        }
         //        if (ListUtil.isNotEmpty(inputInfo.getDutyShiftSystemDocs())) {
         //            inputInfo.getPageData().put("值班交接制度", inputInfo.getDutyShiftSystemDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
         //        }
@@ -173,7 +180,10 @@ public class ChangxDocTrans extends DocTrans {
             inputInfo.getPageData().put("阶段小结", inputInfo.getStagesSummaryDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
         }
         if (ListUtil.isNotEmpty(inputInfo.getThreeLevelWardDocs())) {
-            inputInfo.getPageData().put("查房记录", inputInfo.getThreeLevelWardDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
+            inputInfo.getPageData().put("查房记录", inputInfo.getThreeLevelWardDocs().get(0).getAllDoctorWradDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
+        }
+        if (ListUtil.isNotEmpty(inputInfo.getPathologyShipDocs())) {
+            inputInfo.getPageData().put("病理检验送检单", inputInfo.getPathologyShipDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
         }
 
         if (ListUtil.isNotEmpty(inputInfo.getConsultationDocs())) {
@@ -227,14 +237,14 @@ public class ChangxDocTrans extends DocTrans {
                             .map(operationDoc -> operationDoc.getPreoperativeDiscussionDoc().getPageData())
                             .collect(Collectors.toList())
             );
-            inputInfo.getPageData().put(
-                    "手术知情同意书",
-                    inputInfo.getOperationDocs()
-                            .stream()
-                            .filter(operationDoc -> operationDoc != null && operationDoc.getOperationInformedConsentDoc() != null)
-                            .map(operationDoc -> operationDoc.getOperationInformedConsentDoc().getPageData())
-                            .collect(Collectors.toList())
-            );
+            //            inputInfo.getPageData().put(
+            //                    "手术知情同意书",
+            //                    inputInfo.getOperationDocs()
+            //                            .stream()
+            //                            .filter(operationDoc -> operationDoc != null && operationDoc.getOperationInformedConsentDoc() != null)
+            //                            .map(operationDoc -> operationDoc.getOperationInformedConsentDoc().getPageData())
+            //                            .collect(Collectors.toList())
+            //            );
             inputInfo.getPageData().put(
                     "手术安全核查表",
                     inputInfo.getOperationDocs()
@@ -244,6 +254,28 @@ public class ChangxDocTrans extends DocTrans {
                             .collect(Collectors.toList())
             );
         }
+        if (inputInfo.getTransferRecordDocs() != null) {
+            if (ListUtil.isNotEmpty(inputInfo.getTransferRecordDocs().getTransferIntoDocs())) {
+                inputInfo.getPageData().put(
+                        "转入记录",
+                        inputInfo.getTransferRecordDocs().getTransferIntoDocs()
+                                .stream()
+                                .filter(i -> i != null)
+                                .map(i -> i.getPageData())
+                                .collect(Collectors.toList())
+                );
+            }
+            if (ListUtil.isNotEmpty(inputInfo.getTransferRecordDocs().getTransferOutDocs())) {
+                inputInfo.getPageData().put(
+                        "转出记录",
+                        inputInfo.getTransferRecordDocs().getTransferOutDocs()
+                                .stream()
+                                .filter(i -> i != null)
+                                .map(i -> i.getPageData())
+                                .collect(Collectors.toList())
+                );
+            }
+        }
     }
 
 }

+ 9 - 31
trans/src/main/java/com/lantone/qc/trans/changx/ChangxFirstCourseRecordDocTrans.java

@@ -8,6 +8,7 @@ import com.lantone.qc.pub.util.StringUtil;
 import com.lantone.qc.trans.ModelDocTrans;
 import com.lantone.qc.trans.changx.util.CxXmlUtil;
 import com.lantone.qc.trans.comsis.ModelDocGenerate;
+import com.lantone.qc.trans.comsis.ModuleMappingUtil;
 import com.lantone.qc.trans.comsis.OrdinaryAssistant;
 import com.lantone.qc.trans.comsis.Preproc;
 
@@ -24,17 +25,19 @@ public class ChangxFirstCourseRecordDocTrans extends ModelDocTrans {
     @Override
     public FirstCourseRecordDoc extract(MedrecVo medrecVo) {
         String content = ((List<String>) medrecVo.getContent().get("content")).get(0);
+        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue(content);
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, keyContrasts);
+
         String text = CxXmlUtil.getTextByNodePath(content, "//DocObjContent/Region/Content_Text");
         if (StringUtil.isBlank(text)) {
             text = CxXmlUtil.getTextByNodePath(content, "//DocObjContent/Region");
         }
         Map<String, String> cutWordMap = getCutWordMap(text);
-        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent//Region", content);
-        cutWordMap.putAll(xmlNodeValueMap);
-        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(cutWordMap, keyContrasts);
-        FirstCourseRecordDoc firstCourseRecordDoc = ModelDocGenerate.firstCourseRecordDocGen(structureMap);
+        cutWordMap.putAll(structureMap);
+
+        FirstCourseRecordDoc firstCourseRecordDoc = ModelDocGenerate.firstCourseRecordDocGen(cutWordMap);
         firstCourseRecordDoc.setText(text);
-        firstCourseRecordDoc.setPageData((Map) xmlNodeValueMap);
+        firstCourseRecordDoc.setPageData((Map) cutWordMap);
         return firstCourseRecordDoc;
     }
 
@@ -72,32 +75,7 @@ public class ChangxFirstCourseRecordDocTrans extends ModelDocTrans {
 
     private List<String> keyContrasts = Lists.newArrayList(
             "记录日期=记录时间",
-            "姓名++++患者姓名=",
-            "性别=",
-            "年龄=",
-            "职业=",
-            "主诉=",
-            "入院日期=",
-            "现病史=",
-            "既往史=",
-            "体格检查=",
-            "辅助检查++++检查=",
-            "初步诊断=",
-            "体温=",
-            "脉搏++++第一次脉搏=",
-            "呼吸++++第一次呼吸=",
-            "血压++++第一次血压=",
-            "专科检查=",
-            "辅助检查=",
-            "鉴别诊断=",
-            "需求评估=",
-            "预期目标=",
-            "诊疗计划=",
-            "治疗监测计划=",
-            "签名++++=记录医师",
-            "签名时间=",
-            "诊断依据=",
-            "病例特点="
+            "签名++++=记录医师"
     );
 
 }

+ 2 - 2
trans/src/main/java/com/lantone/qc/trans/changx/ChangxLeaveHospitalDocTrans.java

@@ -21,11 +21,11 @@ public class ChangxLeaveHospitalDocTrans extends ModelDocTrans {
     @Override
     public LeaveHospitalDoc extract(MedrecVo medrecVo) {
         String content = ((List<String>) medrecVo.getContent().get("content")).get(0);
-        Map<String, String> sourceMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent", content);
+        Map<String, String> sourceMap = CxXmlUtil.firstLevelNodeValue(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
         LeaveHospitalDoc leaveHospitalDoc = ModelDocGenerate.leaveHospitalDocGen(structureMap);
         leaveHospitalDoc.setText(content);
-        leaveHospitalDoc.setPageData((Map) sourceMap);
+        leaveHospitalDoc.setPageData((Map) structureMap);
         return leaveHospitalDoc;
     }
 

+ 12 - 12
trans/src/main/java/com/lantone/qc/trans/changx/ChangxOperationDocTrans.java

@@ -88,7 +88,7 @@ public class ChangxOperationDocTrans extends ModelDocTrans {
     }
 
     private OperationDiscussionDoc getOperationDiscussionDoc(String content) {
-        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent/Region", content);
+        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, operationDiscussion_keyContrasts);
         if (StringUtil.isNotBlank(structureMap.get("手术开始时间"))) {
             structureMap.put("手术时间", structureMap.get("手术开始时间"));
@@ -106,7 +106,7 @@ public class ChangxOperationDocTrans extends ModelDocTrans {
 
         OperationDiscussionDoc operationDiscussionDoc = ModelDocGenerate.operationDiscussionDocGen(cutWordMap);
         operationDiscussionDoc.setText(text);
-        operationDiscussionDoc.setPageData((Map) xmlNodeValueMap);
+        operationDiscussionDoc.setPageData((Map) cutWordMap);
 
         return operationDiscussionDoc;
     }
@@ -170,7 +170,7 @@ public class ChangxOperationDocTrans extends ModelDocTrans {
     }
 
     private OperationRecordDoc getOperationRecordDoc(String content) {
-        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent", content);
+        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, operationRecord_keyContrasts);
         if (StringUtil.isNotBlank(structureMap.get("签名"))) {
             structureMap.put("记录医师", structureMap.get("签名"));
@@ -185,7 +185,7 @@ public class ChangxOperationDocTrans extends ModelDocTrans {
 
         OperationRecordDoc operationRecordDoc = ModelDocGenerate.operationRecordDocGen(cutWordMap);
         operationRecordDoc.setText(text);
-        operationRecordDoc.setPageData((Map) xmlNodeValueMap);
+        operationRecordDoc.setPageData((Map) cutWordMap);
 
         return operationRecordDoc;
     }
@@ -259,7 +259,7 @@ public class ChangxOperationDocTrans extends ModelDocTrans {
     }
 
     private PreoperativeDiscussionDoc getPreoperativeDiscussionDoc(String content) {
-        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent//Region", content);
+        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, preoperativeDiscussion_keyContrasts);
         structureMap.put(
                 "术前准备内容",
@@ -275,7 +275,7 @@ public class ChangxOperationDocTrans extends ModelDocTrans {
         }
         if (StringUtil.isNotBlank(structureMap.get("拟行治疗指征及禁忌症"))) {
             structureMap.put("拟行术式", structureMap.get("拟行治疗指征及禁忌症"));
-        } else if (StringUtil.isNotBlank(structureMap.get("拟施手术方式"))){
+        } else if (StringUtil.isNotBlank(structureMap.get("拟施手术方式"))) {
             structureMap.put("拟行术式", structureMap.get("拟施手术方式"));
         }
 
@@ -289,7 +289,7 @@ public class ChangxOperationDocTrans extends ModelDocTrans {
 
         PreoperativeDiscussionDoc preoperativeDiscussionDoc = ModelDocGenerate.preoperativeDiscussionDocGen(cutWordMap);
         preoperativeDiscussionDoc.setText(text);
-        preoperativeDiscussionDoc.setPageData((Map) xmlNodeValueMap);
+        preoperativeDiscussionDoc.setPageData((Map) cutWordMap);
 
         return preoperativeDiscussionDoc;
     }
@@ -353,7 +353,7 @@ public class ChangxOperationDocTrans extends ModelDocTrans {
     }
 
     private OperationInformedConsentDoc getOperationInformedConsentDoc(String content) {
-        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent", content);
+        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, operationInformedConsent_keyContrasts);
 
         String text = CxXmlUtil.getTextByNodePath(content, "//DocObjContent/Content_Text");
@@ -365,7 +365,7 @@ public class ChangxOperationDocTrans extends ModelDocTrans {
 
         OperationInformedConsentDoc operationInformedConsentDoc = ModelDocGenerate.operationInformedConsentDocGen(cutWordMap);
         operationInformedConsentDoc.setText(text);
-        operationInformedConsentDoc.setPageData((Map) xmlNodeValueMap);
+        operationInformedConsentDoc.setPageData((Map) cutWordMap);
 
         return operationInformedConsentDoc;
     }
@@ -427,8 +427,8 @@ public class ChangxOperationDocTrans extends ModelDocTrans {
     }
 
     private OperationSafetyChecklistDoc getOperationSafetyChecklistDoc(String content) {
-        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent", content);
-        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap,    operationSafetyChecklist_keyContrasts);
+        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue(content);
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, operationSafetyChecklist_keyContrasts);
 
         String text = CxXmlUtil.getTextByNodePath(content, "//DocObjContent/Content_Text");
         if (StringUtil.isBlank(text)) {
@@ -439,7 +439,7 @@ public class ChangxOperationDocTrans extends ModelDocTrans {
 
         OperationSafetyChecklistDoc operationSafetyChecklistDoc = ModelDocGenerate.operationSafetyChecklistDocGen(cutWordMap);
         operationSafetyChecklistDoc.setText(text);
-        operationSafetyChecklistDoc.setPageData((Map) xmlNodeValueMap);
+        operationSafetyChecklistDoc.setPageData((Map) cutWordMap);
 
         return operationSafetyChecklistDoc;
     }

+ 42 - 0
trans/src/main/java/com/lantone/qc/trans/changx/ChangxPathologyShipDocTrans.java

@@ -0,0 +1,42 @@
+package com.lantone.qc.trans.changx;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.PathologyShipDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.changx.util.CxXmlUtil;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : PathologyShipDocTrans
+ * @Description : 病理检验送检单
+ * @Author : 楼辉荣
+ * @Date: 2020-04-19 17:49
+ */
+public class ChangxPathologyShipDocTrans extends ModelDocTrans {
+    @Override
+    public List<PathologyShipDoc> extract(MedrecVo medrecVo) {
+        List<PathologyShipDoc> retList = Lists.newArrayList();
+        List<String> contents = (List) medrecVo.getContent().get("content");
+        contents.forEach(content -> {
+            retList.add(getPathologyShipDoc(content));
+        });
+        return retList;
+    }
+
+    private PathologyShipDoc getPathologyShipDoc(String content) {
+        Map<String, String> sourceMap = CxXmlUtil.firstLevelNodeValue(content);
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
+
+        PathologyShipDoc pathologyShipDoc = new PathologyShipDoc();
+        pathologyShipDoc.setStructureMap(structureMap);
+        pathologyShipDoc.setPageData((Map) structureMap);
+        return pathologyShipDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList();
+
+}

+ 3 - 3
trans/src/main/java/com/lantone/qc/trans/changx/ChangxRescueDocTrans.java

@@ -31,7 +31,7 @@ public class ChangxRescueDocTrans extends ModelDocTrans {
     }
 
     private RescueDoc getRescueDoc(String content) {
-        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent//Region", content);
+        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, keyContrasts);
 
         String text = CxXmlUtil.getTextByNodePath(content, "//DocObjContent/Region/Content_Text");
@@ -43,7 +43,7 @@ public class ChangxRescueDocTrans extends ModelDocTrans {
 
         RescueDoc rescueDoc = ModelDocGenerate.rescueDocGen(cutWordMap);
         rescueDoc.setText(text);
-        rescueDoc.setPageData((Map) xmlNodeValueMap);
+        rescueDoc.setPageData((Map) cutWordMap);
 
         return rescueDoc;
     }
@@ -59,7 +59,7 @@ public class ChangxRescueDocTrans extends ModelDocTrans {
     private List<String> keyContrasts = Lists.newArrayList(
             "记录日期=记录时间",
             "病情变化情况=",
-            "抢救时间及措施++++抢救措施=抢救过程",
+            "抢救时间及措施++++抢救措施=",
             "参加抢救者的姓名及专业技术职称++++参加现场抢救的医师及护理人员=参与人员",
             "签名++++=记录医师",
             "签名时间=抢救时间"

+ 2 - 2
trans/src/main/java/com/lantone/qc/trans/changx/ChangxStagesSummaryDocTrans.java

@@ -31,7 +31,7 @@ public class ChangxStagesSummaryDocTrans extends ModelDocTrans {
     }
 
     private StagesSummaryDoc getStagesSummaryDoc(String content) {
-        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent//Region", content);
+        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, keyContrasts);
 
         String text = CxXmlUtil.getTextByNodePath(content, "//DocObjContent/Region/Content_Text");
@@ -43,7 +43,7 @@ public class ChangxStagesSummaryDocTrans extends ModelDocTrans {
 
         StagesSummaryDoc stagesSummaryDoc = ModelDocGenerate.stagesSummaryDocGen(cutWordMap);
         stagesSummaryDoc.setText(text);
-        stagesSummaryDoc.setPageData((Map) xmlNodeValueMap);
+        stagesSummaryDoc.setPageData((Map) cutWordMap);
 
         return stagesSummaryDoc;
     }

+ 7 - 9
trans/src/main/java/com/lantone/qc/trans/changx/ChangxThreeLevelWardDocTrans.java

@@ -39,7 +39,7 @@ public class ChangxThreeLevelWardDocTrans extends ModelDocTrans {
     }
 
     private void classifyThreeLevelWardDoc(ThreeLevelWardDoc threeLevelWardDoc, String content) {
-        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent//Region", content);
+        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, keyContrasts);
         structureMap.put("查房日期", structureMap.get("记录时间"));
 
@@ -51,7 +51,7 @@ public class ChangxThreeLevelWardDocTrans extends ModelDocTrans {
             }
             cutWordMap = Preproc.getCutWordMap(true, sourceTitles, text);
             if (StringUtil.isBlank(structureMap.get("记录医师"))) {
-                if(StringUtil.isNotEmpty(cutWordMap.get("医师签名"))){
+                if (StringUtil.isNotEmpty(cutWordMap.get("医师签名"))) {
                     Pattern p = Pattern.compile("^[^\\u4e00-\\u9fa5]+$");//分词结果如果不包含中文为日期,则不覆盖
                     Matcher m = p.matcher(cutWordMap.get("医师签名"));
                     if (!m.matches()) {
@@ -68,12 +68,12 @@ public class ChangxThreeLevelWardDocTrans extends ModelDocTrans {
         threeLevelWardDoc.addAllDoctorWradDoc(allDoctorWradDoc);
 
         //主任医师查房
-        DirectorDoctorWardDoc directorDoctorWardDoc = findDirectorDoctorWardDoc(xmlNodeValueMap, structureMap);
+        DirectorDoctorWardDoc directorDoctorWardDoc = findDirectorDoctorWardDoc(structureMap);
         if (directorDoctorWardDoc != null) {
-            threeLevelWardDoc.addDirectorDoctorWardDoc(findDirectorDoctorWardDoc(xmlNodeValueMap, structureMap));
+            threeLevelWardDoc.addDirectorDoctorWardDoc(findDirectorDoctorWardDoc(structureMap));
         }
         //主治医师查房
-        AttendingDoctorWardDoc attendingDoctorWardDoc = findAttendingDoctorWardDoc(xmlNodeValueMap, structureMap);
+        AttendingDoctorWardDoc attendingDoctorWardDoc = findAttendingDoctorWardDoc(structureMap);
         if (attendingDoctorWardDoc != null) {
             threeLevelWardDoc.addAttendingDoctorWardDoc(attendingDoctorWardDoc);
         }
@@ -89,10 +89,9 @@ public class ChangxThreeLevelWardDocTrans extends ModelDocTrans {
     /**
      * 主任医师查房
      *
-     * @param sourceMap
      * @param structureMap
      */
-    private DirectorDoctorWardDoc findDirectorDoctorWardDoc(Map<String, String> sourceMap, Map<String, String> structureMap) {
+    private DirectorDoctorWardDoc findDirectorDoctorWardDoc(Map<String, String> structureMap) {
         String title = structureMap.get("查房标题");
         title = subTitle(title);    //标题有代字
 
@@ -108,10 +107,9 @@ public class ChangxThreeLevelWardDocTrans extends ModelDocTrans {
     /**
      * 主治医师查房
      *
-     * @param sourceMap
      * @param structureMap
      */
-    private AttendingDoctorWardDoc findAttendingDoctorWardDoc(Map<String, String> sourceMap, Map<String, String> structureMap) {
+    private AttendingDoctorWardDoc findAttendingDoctorWardDoc(Map<String, String> structureMap) {
         String title = structureMap.get("查房标题");
         title = subTitle(title);    //标题有代字
         AttendingDoctorWardDoc attendingDoctorWardDoc = null;

+ 7 - 9
trans/src/main/java/com/lantone/qc/trans/changx/ChangxTransferRecordDocTrans.java

@@ -10,9 +10,7 @@ import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import com.lantone.qc.trans.ModelDocTrans;
 import com.lantone.qc.trans.changx.util.CxXmlUtil;
-import com.lantone.qc.trans.comsis.ModelDocGenerate;
 import com.lantone.qc.trans.comsis.OrdinaryAssistant;
-import com.lantone.qc.trans.comsis.Preproc;
 
 import java.util.ArrayList;
 import java.util.Comparator;
@@ -136,14 +134,14 @@ public class ChangxTransferRecordDocTrans extends ModelDocTrans {
     }
 
     private TransferIntoDoc getTransferIntoDoc(String content) {
-        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent//Region", content);
+        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, keyContrasts);
 
-//        sourceMap.put("记录时间", sourceMap.get("病程记录时间"));
+        //        sourceMap.put("记录时间", sourceMap.get("病程记录时间"));
         TransferIntoDoc transferIntoDoc = new TransferIntoDoc();
         transferIntoDoc.setText(content);
         transferIntoDoc.setStructureMap(structureMap);
-        transferIntoDoc.setPageData((Map)xmlNodeValueMap);
+        transferIntoDoc.setPageData((Map) structureMap);
 
         return transferIntoDoc;
     }
@@ -170,12 +168,12 @@ public class ChangxTransferRecordDocTrans extends ModelDocTrans {
     }
 
     private TransferRecordDoc getTransferAllDoc(String content) {
-        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent//Region", content);
+        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, keyContrasts);
         TransferRecordDoc transferAllDoc = new TransferRecordDoc();
         transferAllDoc.setText(content);
         transferAllDoc.setStructureMap(structureMap);
-        transferAllDoc.setPageData((Map) xmlNodeValueMap);
+        transferAllDoc.setPageData((Map) structureMap);
         return transferAllDoc;
     }
 
@@ -202,13 +200,13 @@ public class ChangxTransferRecordDocTrans extends ModelDocTrans {
     }
 
     private TransferOutDoc getTransferOutDoc(String content) {
-        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent//Region", content);
+        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue(content);
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, keyContrasts);
 
         TransferOutDoc transferOutDoc = new TransferOutDoc();
         transferOutDoc.setText(content);
         transferOutDoc.setStructureMap(structureMap);
-        transferOutDoc.setPageData((Map) xmlNodeValueMap);
+        transferOutDoc.setPageData((Map) structureMap);
 
         return transferOutDoc;
     }

+ 8 - 3
trans/src/main/java/com/lantone/qc/trans/changx/util/CxXmlUtil.java

@@ -17,13 +17,18 @@ import java.util.Map;
  */
 public class CxXmlUtil {
 
-    public static Map<String, String> firstLevelNodeValue(String nodePath, String content) {
+    public static Map<String, String> firstLevelNodeValue(String content) {
         Map<String, String> retMap = Maps.newLinkedHashMap();
         try {
             String helpTip, controlName, contentText, key;
             Element contentTextElement;
             Document doc = DocumentHelper.parseText(content);
-            Element rootElement = (Element) doc.selectNodes(nodePath).get(0);
+            Element rootElement = null;
+            if (doc.selectNodes("//DocObjContent//Region").size() == 0) {
+                rootElement = (Element) doc.selectNodes("//DocObjContent").get(0);
+            } else {
+                rootElement = (Element) doc.selectNodes("//DocObjContent//Region").get(0);
+            }
             List<Element> sonElements = rootElement.elements();
             for (Element sonElement : sonElements) {
                 helpTip = sonElement.attributeValue("HelpTip");
@@ -95,7 +100,7 @@ public class CxXmlUtil {
     public static void main(String[] args) {
         try {
             String context = FileUtil.fileRead("C:\\Users\\dell\\Desktop\\调试\\test1.txt");
-            Map<String, String> sourceMap = CxXmlUtil.firstLevelNodeValue("//DocObjContent/Region", context);
+            Map<String, String> sourceMap = CxXmlUtil.firstLevelNodeValue(context);
             for (String key : sourceMap.keySet()) {
                 System.out.println("\"" + key + "=\",");
             }

+ 5 - 10
trans/src/main/java/com/lantone/qc/trans/comsis/ModuleMappingUtil.java

@@ -17,10 +17,12 @@ import java.util.Set;
  */
 public class ModuleMappingUtil {
 
-    public static Map<Set<String>, String> xmlDataTypeModuleInfo = Maps.newLinkedHashMap();
+    public static final Map<String, Map<Set<String>, String>> xmlDataTypeModuleInfo = Maps.newHashMap();
+    public static final ThreadLocal<String> hospitalIdThreadLocal = new ThreadLocal<>();
 
     public static String getXmlDataTypeModuleId(Map<String, String> sourceMap) {
-        if (MapUtils.isEmpty(sourceMap)) {
+        if (MapUtils.isEmpty(sourceMap)
+                || MapUtils.isEmpty(xmlDataTypeModuleInfo.get(hospitalIdThreadLocal.get()))) {
             return null;
         }
         Set<String> set = sourceMap.keySet();
@@ -32,14 +34,7 @@ public class ModuleMappingUtil {
             }
         });
         set = Sets.newLinkedHashSet(list);
-        //                if (set.size() == 335) {
-        //                    System.out.println(" ");
-        //                    for (Map.Entry<Set<String>, String> entry : xmlDataTypeModuleInfo.entrySet()) {
-        //                        System.out.println(StringUtils.join(entry.getKey(), ","));
-        //                    }
-        //                    System.out.println(StringUtils.join(set, ","));
-        //                }
-        return xmlDataTypeModuleInfo.get(set);
+        return xmlDataTypeModuleInfo.get(hospitalIdThreadLocal.get()).get(set);
     }
 
 }

+ 1 - 0
trans/src/main/java/com/lantone/qc/trans/comsis/OrdinaryAssistant.java

@@ -21,6 +21,7 @@ public class OrdinaryAssistant {
         String modeId = ModuleMappingUtil.getXmlDataTypeModuleId(sourceMap);
         if (StringUtil.isNotBlank(modeId)) {
             retMap.put("mode_id", modeId);
+            sourceMap.put("mode_id", modeId);
         }
         Map<String, String> sourceMap_ = MapUtil.copyMap((Map) sourceMap);
         String[] arry = null;