Browse Source

3模块问题处理

chengyao 4 years ago
parent
commit
ae19bc5a92

+ 133 - 35
structure-center/src/main/java/com/lantone/structure/facade/tran/DeathCaseDiscussionTran.java

@@ -8,6 +8,7 @@ import com.lantone.structure.model.doc.DeathCaseDiscussDoc;
 
 import com.lantone.structure.util.MapUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.time.DateUtils;
 
 
 import java.util.*;
@@ -41,8 +42,7 @@ public class DeathCaseDiscussionTran extends TargetTran {
             "参加人员=参加讨论人员名单",
             "死亡诊断=死亡诊断名称",
             "讨论摘要=死亡讨论记录",
-            "主持人总结=主持人总结意见",
-            "讨论主持人=主治医师签名"
+            "主持人总结=主持人总结意见"
 
     );
     private Map<String, String> cutWord(String text) {
@@ -57,10 +57,7 @@ public class DeathCaseDiscussionTran extends TargetTran {
                 Lists.newArrayList("﹙副﹚主任医师","主治医师","医师","护士"),
                 text
         );
-       /* String stringDate =extractDate(text) ;
-        if(StringUtils.isNotEmpty(stringDate)){
-            sourceMap.put("讨论日期时间",stringDate);
-        }*/
+
         CommonAnalysisUtil.cutByTitles(text, titles, 0, sourceMap);
         CommonAnalysisUtil.cutByTitles(text, ftitles, 0, sourceMap);
         if(sourceMap.containsKey("性别")||sourceMap.containsKey("床号")||sourceMap.containsKey("汇报病史")||sourceMap.containsKey("护士")){
@@ -116,16 +113,10 @@ public class DeathCaseDiscussionTran extends TargetTran {
      * @return
      */
     public static String extractDate(String top) {
-        Pattern pattern = Pattern.compile("[0-9]{4}[-][0-9]{1,2}[-][0-9]{1,2}([ ][0-9]{1,2}[:][0-9]{1,2}([:][0-9]{1,2})?)?");
+        Pattern pattern = Pattern.compile("[0-9]{4}");
         Matcher matcher = pattern.matcher(top);
         if (matcher.find()) {
             return matcher.group(0);
-        } else {
-            Pattern p1 = Pattern.compile("[0-9]{4}年[0-9]+月[0-9]+日[0-9]+时[0-9]+分");
-            Matcher m1 = p1.matcher(top);
-            if (m1.find()) {
-                return m1.group(0);
-            }
         }
         return null;
     }
@@ -151,11 +142,25 @@ public class DeathCaseDiscussionTran extends TargetTran {
              }
          }
 
+            //主持人姓名去职称
+            List<String>titleStr = Lists.newArrayList("﹙副﹚主任医师","(副)主任医师","副主任医师", "主治医师","主任医师",
+                    "住院医师","医师", "护士");
+            for (String timeName : titleStr) {
+                String dirName = retMap.get("讨论主持人");
+                if (StringUtil.isNotEmpty(dirName)) {
+                    if (dirName.contains(timeName)) {
+                        retMap.put("讨论主持人", dirName.split(timeName)[0]);
+                        break;
+                    }
+                }
+            }
+
             //参加讨论人员名单
-         // "﹙副﹚主任医师","主治医师","医师"),
+
+         // 去掉最后无法识别的名字,例如 徐金印医师汇报病史    该名会出现在参加人员名单上排除法处理
             List<String> attendNames = new ArrayList<>();
-            String targetRet = "";
-                if(StringUtil.isNotEmpty(retMap.get("参加人员"))){
+            StringBuffer targetRet = new StringBuffer();
+            if(StringUtil.isNotEmpty(retMap.get("参加人员"))){
                     if(StringUtil.isNotEmpty(retMap.get("﹙副﹚主任医师"))) {
                         String rName = retMap.get("﹙副﹚主任医师");
                         transAdd(rName, attendNames);
@@ -164,22 +169,43 @@ public class DeathCaseDiscussionTran extends TargetTran {
                     if(StringUtil.isNotEmpty(retMap.get("主治医师"))) {
                         String rName = retMap.get("主治医师");
                         transAdd(rName, attendNames);
-                        retMap.remove("主治医师");
                     }
                     if(StringUtil.isNotEmpty(retMap.get("医师"))) {
                         String rName = retMap.get("医师");
                         transAdd(rName, attendNames);
-                        retMap.remove("医师");
                     }
                     String attendName = retMap.get("参加人员");
-                    String spiltString = attendName.substring(attendName.indexOf("护士"), attendName.lastIndexOf("医师"));
+                    String spiltString = attendName.substring(attendName.indexOf("护士")+2, attendName.lastIndexOf("医师"));
                     for (String name : attendNames) {
                         if(spiltString.contains(name)){
-                            targetRet = attendName.substring(0, attendName.lastIndexOf(name));
+                          String  retData = attendName.substring(0, attendName.lastIndexOf(name));
+                          String  replace = retData;
+                          //职称与姓名空格区分
+                           if( retData.contains("主治医师:")){
+                               retData = retData.substring(0,retData.indexOf("主治医师:"));
+                               if(StringUtil.isNotEmpty(retData)){
+                                   targetRet.append(retData+" ");
+                               }
+                               if(StringUtil.isNotEmpty(retMap.get("主治医师"))){
+                                   targetRet.append("主治医师:"+retMap.get("主治医师")+" ");
+                               }
+                               if(StringUtil.isNotEmpty(retMap.get("医师"))){
+                                   targetRet.append("医师:"+retMap.get("医师")+" ");
+                               }
+                               String rec = "";
+
+                               if( replace.contains("护士:")){
+                                    rec = replace.substring(replace.lastIndexOf("护士:"));
+                               }
+                               if(StringUtil.isNotEmpty(rec)){
+                                   targetRet.append(rec);
+                               }
+                           }
                         }
                     }
-
-                    retMap.put("参加人员",targetRet);
+                    retMap.remove("主治医师");
+                    retMap.remove("医师");
+                    retMap.put("参加人员",targetRet.toString());
                 }
 
 
@@ -199,21 +225,29 @@ public class DeathCaseDiscussionTran extends TargetTran {
             //主持人签名
             if(StringUtil.isNotEmpty(retMap.get("主持人总结"))){
                 String directSummary = retMap.get("主持人总结");
+
+                //签名日期时间
+                if(directSummary.contains("记录者(签名)")) {
+                    String sginTime= lastTime(directSummary);
+                    if(StringUtil.isNotEmpty(sginTime)){
+                        retMap.put("签名日期时间", sginTime);
+                    }
+
                 String trueRet = "";
-                String signDateTime = "";
                 if(directSummary.contains("主持人(签名)") && directSummary.contains("记录者(签名)")){
-                    trueRet = directSummary.substring( directSummary.indexOf("主持人(签名)")+7, directSummary.indexOf("记录者(签名)"));
+                    trueRet = directSummary.substring( directSummary.indexOf("主持人(签名)")+7, directSummary.indexOf("记录者(签名)")).trim();
                 }
+                if(directSummary.contains(" 记录者(签名)")){
+                    String signTimme = retMap.get("签名日期时间");
+                    if(StringUtil.isNotEmpty(signTimme)){
+                        String recordRet = directSummary.substring(directSummary.indexOf("记录者(签名)")+7,directSummary.indexOf( signTimme.split("年")[0])).trim();
+                        retMap.put("主治医师签名",recordRet);
+                    }
+                }
+
                 if(StringUtil.isNotEmpty(trueRet)){
                     retMap.put("主任医师签名",trueRet);
                 }
-
-                //签名日期时间
-                if(directSummary.contains("记录者(签名)")) {
-                    signDateTime = directSummary.substring(directSummary.indexOf("记录者(签名)") + 7);
-                    if (StringUtil.isNotEmpty(signDateTime)) {
-                        retMap.put("签名日期时间", signDateTime);
-                    }
                 }
             }
 
@@ -226,10 +260,47 @@ public class DeathCaseDiscussionTran extends TargetTran {
                 }
                 retMap.put("主持人总结",trueRet);
             }
+        }
 
+    }
 
+    /**
+     * 抽取文本中的最后时间
+     *
+     * @param top
+     * @return
+     */
+    public static String lastTime(String top) {
+        int length = top.trim().length();
+        String substring = top.trim().substring(length - 22, length);
+        String stringDate = "";
+        if( substring.contains("年")){
+           String[] time = substring.split("年");
+           String timeYear = time[0].trim();
+                  timeYear = extractDate(timeYear);
+            if( substring.contains("月")){
+               String[] timeLater = time[1].split("月");
+               String timeMouth = timeLater[0].trim();
+               if(substring.contains("日")){
+                   String[] timeLast = timeLater[1].split("日");
+                   String timeDate = timeLast[0].trim();
+                   if(StringUtil.isNotEmpty(timeYear) && StringUtil.isNotEmpty(timeMouth) && StringUtil.isNotEmpty(timeDate)){
+                       stringDate = timeYear + "年" + timeMouth + "月" + timeDate + "日" ;
+                   }
+               }
+           }
+       }
+        Date date = null;
+        try {
+            date = DateUtils.parseDate(stringDate, StringUtil.dateFormats);
+        } catch (Exception e) {
+            log.error(e.getMessage(),e);
+        }
+        if(date!= null){
+            return stringDate;
+        }else{
+            return "";
         }
-
     }
 
     private String resultHandle(String value) {
@@ -241,14 +312,41 @@ public class DeathCaseDiscussionTran extends TargetTran {
             }
         return value;
     }
+    //递归添加到集合
     public void transAdd(String name, List<String> attendName){
-          if(name.contains("、")){
-              String value = name.substring(name.lastIndexOf("、")+1);
+          if(name.contains("、") || name.contains(" ")){
+              String value = "";
+              if(name.contains("、")){
+                   value = name.substring(name.lastIndexOf("、")+1);
+                   name = name.substring(0,name.lastIndexOf("、"));
+              }
+              if(name.contains(" ")){
+                   value = name.substring(name.lastIndexOf(" ")+1);
+                   name = name.substring(0,name.lastIndexOf(" "));
+              }
               if(StringUtil.isNotEmpty(value)){
+                  if(value.contains("主任")){
+                      value = value.substring(0, value.indexOf("主任"));
+                  }
+                  if(value.contains("主治")) {
+                      value = value.substring(0, value.indexOf("主治"));
+                  }
+                  if(value.contains("医师")){
+                      value = value.substring(0,value.indexOf("医师"));
+                  }
                   attendName.add(value);
               }
-              transAdd(name.substring(0, name.lastIndexOf("、")), attendName);
+              transAdd(name, attendName);
           }else{
+              if(name.contains("主任")){
+                  name = name.substring(0, name.indexOf("主任"));
+              }
+              if(name.contains("主治")) {
+                  name = name.substring(0, name.indexOf("主治"));
+              }
+              if(name.contains("医师")){
+                  name = name.substring(0,name.indexOf("医师"));
+              }
               attendName.add(name);
           }
     }

+ 36 - 15
structure-center/src/main/java/com/lantone/structure/facade/tran/DeathRecordTran.java

@@ -45,18 +45,17 @@ public class DeathRecordTran extends TargetTran {
         List<String> titles = CommonAnalysisUtil.sortTitles(
                 //
                 Lists.newArrayList("姓名","性别","年龄","职业","入院日期","入院诊断", "死亡日期",
-                        "住院天数","死亡诊断","入院情况","诊疗经过", "抢救措施","死亡诊断","死亡原因(包括死亡讨论结果)"),
+                        "住院天数","死亡诊断","最后诊断","入院情况","诊疗经过", "治疗经过","抢救措施","死亡原因(包括死亡讨论结果)"),
                 text
         );
 
         CommonAnalysisUtil.cutByTitles(text, titles, 0, sourceMap);
         if(sourceMap.containsKey("性别")||sourceMap.containsKey("职业")||sourceMap.containsKey("住院天数")
-                ||sourceMap.containsKey("入院诊断")  ||sourceMap.containsKey("抢救措施")){
+                ||sourceMap.containsKey("入院诊断")  ){
             sourceMap.remove("性别");
             sourceMap.remove("职业");
             sourceMap.remove("住院天数");
             sourceMap.remove("入院诊断");
-            sourceMap.remove("抢救措施");
         }
         return sourceMap;
     }
@@ -98,7 +97,7 @@ public class DeathRecordTran extends TargetTran {
      */
     public static String lastTime(String top) {
         int length = top.trim().length();
-        String stringDate = top.trim().substring(length - 12, length);
+        String stringDate = top.trim().substring(length - 11, length);
         Date date = null;
         try {
              date = DateUtils.parseDate(stringDate, StringUtil.dateFormats);
@@ -128,20 +127,35 @@ public class DeathRecordTran extends TargetTran {
                 }
             }
 
+            //入院情况 =入院情况 +抢救措施
+            if (StringUtil.isNotEmpty(retMap.get("入院情况"))) {
+                if (StringUtil.isNotEmpty(retMap.get("抢救措施"))) {
+                    retMap.put("入院情况",retMap.get("入院情况")+" "+"抢救措施:"+retMap.get("抢救措施"));
+                    retMap.remove("抢救措施");
+                }
+            }
 
             //直接死亡原因名称
             if (StringUtil.isNotEmpty(retMap.get("死亡诊断"))) {
                 String deathDiagnosislName = retMap.get("死亡诊断");
-                String trueRet = "";
-                if (deathDiagnosislName.contains("2.")) {
-                    trueRet = deathDiagnosislName.substring(0, deathDiagnosislName.indexOf("2."));
-                    if (trueRet.contains("1.")) {
-                        trueRet = trueRet.substring(2);
-                    }
-                }
-                retMap.put("直接死亡原因名称", trueRet);
+                comatible(deathDiagnosislName,retMap);
             }
 
+            //死亡诊断名称兼容最后诊断
+            if (StringUtil.isNotEmpty(retMap.get("最后诊断"))) {
+                String deathDiagnosislName = retMap.get("最后诊断");
+                comatible(deathDiagnosislName,retMap);
+                retMap.put("死亡诊断名称",retMap.get("最后诊断"));
+                retMap.remove("最后诊断");
+            }
+
+            //如果诊疗经过为空则取治疗经过
+            if (StringUtil.isEmpty(retMap.get("诊疗经过"))) {
+                if (StringUtil.isNotEmpty(retMap.get("治疗经过"))) {
+                    retMap.put("诊疗过程描述",retMap.get("治疗经过"));
+                    retMap.remove("治疗经过");
+                }
+            }
 
             //签名日期时间
             if(StringUtil.isNotEmpty(retMap.get("死亡原因(包括死亡讨论结果)"))){
@@ -152,10 +166,17 @@ public class DeathRecordTran extends TargetTran {
                 }
                 retMap.remove("死亡原因(包括死亡讨论结果)");
             }
-
-
         }
     }
 
-
+    public static void comatible(String deathDiagnosislName,Map<String,String>retMap){
+        String trueRet = "";
+        if (deathDiagnosislName.contains("2.")) {
+            trueRet = deathDiagnosislName.substring(0, deathDiagnosislName.indexOf("2."));
+            if (trueRet.contains("1.")) {
+                trueRet = trueRet.substring(2);
+            }
+        }
+        retMap.put("直接死亡原因名称", trueRet);
+    }
 }

+ 21 - 2
structure-center/src/main/java/com/lantone/structure/facade/tran/LeaveHospitalTran.java

@@ -36,6 +36,7 @@ public class LeaveHospitalTran extends TargetTran {
             "出院日期=出院日期时间",
             "阳性结果=阳性辅助检查结果",
             "治疗经过=诊疗过程描述",
+            "诊疗经过=诊疗过程描述",
             "经治/主治医师=住院医师签名",
             "首席医师=上级医师签名",
             "填写日期=签名日期时间"
@@ -44,16 +45,17 @@ public class LeaveHospitalTran extends TargetTran {
         Map<String, String> sourceMap = Maps.newHashMap();
         List<String> titles = CommonAnalysisUtil.sortTitles(
                 //
-                Lists.newArrayList("入院日期","出院日期","入院诊断","入院情况","阳性结果","阴性结果","住院期间的辅助检查","治疗经过","出院情况","并发症","治疗效果","出院医嘱","出院注意事项","首席医师","经治/主治医师","填写日期"),
+                Lists.newArrayList("入院日期","出院日期","入院诊断","入院情况","主要阳性结果","主要阴性结果","阳性结果","阴性结果","住院期间的辅助检查","治疗经过","诊疗经过","出院情况","并发症","治疗效果","出院医嘱","出院注意事项","首席医师","经治/主治医师","填写日期"),
                 text
         );
 
         CommonAnalysisUtil.cutByTitles(text, titles, 0, sourceMap);
-        if(sourceMap.containsKey("入院诊断")||(sourceMap.containsKey("住院期间的辅助检查"))||(sourceMap.containsKey("出院注意事项"))||sourceMap.containsKey("阴性结果")){
+        if(sourceMap.containsKey("入院诊断")||(sourceMap.containsKey("住院期间的辅助检查"))||(sourceMap.containsKey("出院注意事项"))||sourceMap.containsKey("阴性结果")||sourceMap.containsKey("主要阴性结果")){
             sourceMap.remove("入院诊断");
             sourceMap.remove("住院期间的辅助检查");
             sourceMap.remove("出院注意事项");
             sourceMap.remove("阴性结果");
+            sourceMap.remove("主要阴性结果");
         }
         return sourceMap;
     }
@@ -106,6 +108,23 @@ public class LeaveHospitalTran extends TargetTran {
                 }
             }
 
+        if (StringUtil.isNotEmpty(retMap.get("出院医嘱"))) {
+            String doctorAdvice = retMap.get("出院医嘱");
+           if(doctorAdvice.contains("出院带药")){
+               doctorAdvice =  doctorAdvice.substring(doctorAdvice.indexOf("出院带药")+5);
+               retMap.put("出院医嘱", doctorAdvice);
+           }
+        }
+
+        //阳性辅助检查结果
+            if (StringUtil.isEmpty(retMap.get("阳性结果"))) {
+                if (StringUtil.isNotEmpty(retMap.get("主要阳性结果"))) {
+                    String manRes = retMap.get("主要阳性结果");
+                    retMap.put("阳性辅助检查结果", manRes);
+                    retMap.remove("主要阳性结果");
+                }
+            }
+
             if (StringUtil.isNotEmpty(retMap.get("出院情况"))) {
                 retMap.put("出院时症状与体征", retMap.get("出院情况"));
                 if (StringUtil.isNotEmpty(retMap.get("并发症"))) {