Explorar el Código

Merge remote-tracking branch 'origin/dev' into dev

rengb hace 5 años
padre
commit
eb6270636c

+ 9 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0508.java

@@ -1,8 +1,8 @@
 package com.lantone.qc.kernel.catalogue.leavehospital;
 
-import com.lantone.qc.kernel.catalogue.QCCatalogue;
 import com.lantone.qc.dbanaly.util.KernelConstants;
 import com.lantone.qc.dbanaly.util.SpecialStorageUtil;
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.LeaveHospitalDoc;
@@ -34,16 +34,20 @@ public class LEA0508 extends QCCatalogue {
             status.set("0");
             return;
         }
+
         SpecialStorageUtil specialStorageUtil = SpringContextUtil.getBean("specialStorageUtil");
         Map<String, Object> surgeon = specialStorageUtil.getJsonStringValue(KernelConstants.HOSPITAL_DOCTOR_MAP);
         if (surgeon == null) {
             status.set("0");
             return;
         }
-        Map<String, String> doctor = (Map) surgeon.get(doctorName);
-        String occup = doctor.get("occup");
-        if (StringUtils.isNotEmpty(occup) && "1".equals(occup)) {
-            status.set("0");
+        for (String doctorNameSplit : doctorName.split("\\s+")) {
+            Map<String, String> doctor = (Map) surgeon.get(doctorNameSplit);
+            String occup = doctor.get("occup");
+            if (StringUtils.isNotEmpty(occup) && "1".equals(occup)) {
+                status.set("0");
+                return;
+            }
         }
     }
 }

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0323.java

@@ -37,7 +37,7 @@ public class OPE0323 extends QCCatalogue {
                         boolean flag = false;
                         if (operationDoc.getOperationRecordDoc() != null) {
                             String surgeon = operationDoc.getOperationRecordDoc().getStructureMap().get("手术医师");
-                            String assist1 = operationDoc.getOperationRecordDoc().getStructureMap().get("助手I");
+                            String assist1 = operationDoc.getOperationRecordDoc().getStructureMap().get("助");
                             String signature = operationDoc.getOperationRecordDoc().getStructureMap().get("主刀医师签名");
                             if (StringUtil.isNotBlank(surgeon) && StringUtil.isNotBlank(assist1)) {
                                 String operator = surgeon + ", " + assist1;

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0637.java

@@ -33,7 +33,7 @@ public class OPE0637 extends QCCatalogue {
             long count = operationDocs.stream().filter(operationDoc -> {
                 boolean flag = false;
                 if (operationDoc.getOperationRecordDoc() != null
-                        && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("助"))
+                        && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("助"))
                         && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("助手II"))) {
                     flag = true;
                 }

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0648.java

@@ -34,7 +34,7 @@ public class OPE0648 extends QCCatalogue {
                     boolean flag = false;
                     if (operationDoc.getOperationRecordDoc() != null) {
                         String surgeon = operationDoc.getOperationRecordDoc().getStructureMap().get("手术医师");
-                        String assist1 = operationDoc.getOperationRecordDoc().getStructureMap().get("助手I");
+                        String assist1 = operationDoc.getOperationRecordDoc().getStructureMap().get("助");
                         String asssit2 = operationDoc.getOperationRecordDoc().getStructureMap().get("助手II");
                         String signature = operationDoc.getOperationRecordDoc().getStructureMap().get("主刀医师签名");
 

+ 31 - 23
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0144.java

@@ -16,7 +16,7 @@ import java.util.Map;
 
 /**
  * @ClassName : THR0144
- * @Description : 患者出院前无主治医师/副主任医师/主任医师/科主任同意出院的病程记录
+ * @Description : 患者出院前无上级医师(主治及以上)同意出院的病程记录
  * @Author : 胡敬
  * @Date: 2020-03-19 17:20
  */
@@ -29,7 +29,7 @@ public class THR0144 extends QCCatalogue {
         }
         DeathRecordDoc deathRecordDoc = inputInfo.getDeathRecordDoc();
         DeathCaseDiscussDoc deathCaseDiscussDoc = inputInfo.getDeathCaseDiscussDoc();
-        if (deathRecordDoc != null || deathCaseDiscussDoc != null){
+        if (deathRecordDoc != null || deathCaseDiscussDoc != null) {
             status.set("0");
             return;
         }
@@ -38,27 +38,35 @@ public class THR0144 extends QCCatalogue {
             status.set("0");
             return;
         }
-        ThreeLevelWardDoc lastWardDoc = allDoctorWradDocs.get(allDoctorWradDocs.size() - 1);
-        Map<String, String> structureMap = lastWardDoc.getStructureMap();
-        String conditionRecord = structureMap.get("病情记录");
-        String treatmentPlan = structureMap.get("治疗计划和措施");
-        String title = structureMap.get("查房标题");
-        conditionRecord = StringUtil.isBlank(conditionRecord) ? "" : conditionRecord;
-        treatmentPlan = StringUtil.isBlank(treatmentPlan) ? "" : treatmentPlan;
-        //主任或主治查房 标题需要包含“主任”或“主治”,内容需要包含“出院”
-        if ((conditionRecord.contains("出院") || treatmentPlan.contains("出院") || conditionRecord.contains("转上级医院"))
-                && StringUtil.isNotBlank(title)
-                && (CatalogueUtil.subTitle(title).contains(Content.attend)
-                || CatalogueUtil.subTitle(title).contains(Content.director)
-                || CatalogueUtil.subTitle(title).contains("主刀"))) {
-            status.set("0");
-        }
-        //普通查房 内容需要包含“上级”和“出院”
-        if (StringUtil.isBlank(title)
-                || (title.contains("日常查房记录") || title.contains("普通查房记录") || title.contains("日常病程记录"))
-                && conditionRecord.contains("上级")
-                && (conditionRecord.contains("出院") || treatmentPlan.contains("出院"))) {
-            status.set("0");
+        int j = 0; //最后两次查房记录
+        for (int i = allDoctorWradDocs.size() - 1; i > 0 && j < 2; i--) {
+            j++;
+            ThreeLevelWardDoc lastWardDoc = allDoctorWradDocs.get(i);
+            Map<String, String> structureMap = lastWardDoc.getStructureMap();
+            String conditionRecord = structureMap.get("病情记录");
+            String treatmentPlan = structureMap.get("治疗计划和措施");
+            String title = structureMap.get("查房标题");
+            if (StringUtil.isBlank(title) || title.contains("病理报告")) {
+                continue;
+            }
+            conditionRecord = StringUtil.isBlank(conditionRecord) ? "" : conditionRecord;
+            treatmentPlan = StringUtil.isBlank(treatmentPlan) ? "" : treatmentPlan;
+            //主任或主治查房 标题需要包含“主任”或“主治”,内容需要包含“出院”
+            if ((conditionRecord.contains("出院") || treatmentPlan.contains("出院") || conditionRecord.contains("转上级医院"))
+                    && (CatalogueUtil.subTitle(title).contains(Content.attend)
+                    || CatalogueUtil.subTitle(title).contains(Content.director)
+                    || CatalogueUtil.subTitle(title).contains("主刀"))) {
+                status.set("0");
+                return;
+            }
+            //普通查房 内容需要包含“上级”和“出院”
+            if (StringUtil.isBlank(title)
+                    || (title.contains("日常查房记录") || title.contains("普通查房记录") || title.contains("日常病程记录"))
+                    && conditionRecord.contains("上级")
+                    && (conditionRecord.contains("出院") || treatmentPlan.contains("出院"))) {
+                status.set("0");
+                return;
+            }
         }
     }
 }

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

@@ -80,7 +80,7 @@ public class TaiZhouFirstCourseRecordDocTrans extends ModelDocTrans {
     private List<String> keyContrasts = Lists.newArrayList(
                         "本人姓名=姓名",
             "现病史- 发病情况=发病经过",
-            "医生=记录医师",
+            "医生=医师签名",
             "治疗计划和措施=治疗计划",
             "体温(耳)=体温耳",
             "体温(口)=体温口"

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

@@ -149,6 +149,8 @@ public class TaiZhouOperationDocTrans extends ModelDocTrans {
     private List<String> operationRecord_keyContrasts = Lists.newArrayList(
             "结束时间=手术结束时间",
             "开始时间=手术开始时间",
+            "手术医师=主刀医师",
+            "助手=一助",
             "本人姓名=姓名"
     );
 

+ 117 - 12
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouThreeLevelWardDocTrans.java

@@ -1,8 +1,13 @@
 package com.lantone.qc.trans.taizhou;
 
 import com.google.common.collect.Lists;
+import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
 import com.lantone.qc.dbanaly.lt.facade.ModelHospitalFacade;
+import com.lantone.qc.dbanaly.util.KernelConstants;
+import com.lantone.qc.dbanaly.util.SpecialStorageUtil;
 import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationRecordDoc;
 import com.lantone.qc.pub.model.doc.ward.AttendingDoctorWardDoc;
 import com.lantone.qc.pub.model.doc.ward.DirectorDoctorWardDoc;
 import com.lantone.qc.pub.model.doc.ward.GeneralDoctorWardDoc;
@@ -11,9 +16,11 @@ import com.lantone.qc.pub.util.SpringContextUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import com.lantone.qc.trans.ModelDocTrans;
 import com.lantone.qc.trans.comsis.OrdinaryAssistant;
-import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import lombok.Setter;
 import org.apache.commons.lang3.StringUtils;
 
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -22,9 +29,11 @@ import java.util.Map;
  * @author: rengb
  * @time: 2020/3/17 13:27
  */
+@Setter
 public class TaiZhouThreeLevelWardDocTrans extends ModelDocTrans {
 
     private List<String> recTitles;
+    private List<OperationDoc> operationDocs;
 
     @Override
     public List<ThreeLevelWardDoc> extract(MedrecVo medrecVo) {
@@ -97,13 +106,22 @@ public class TaiZhouThreeLevelWardDocTrans extends ModelDocTrans {
      */
     private DirectorDoctorWardDoc findDirectorDoctorWardDoc(Map<String, String> structureMap) {
         String title = structureMap.get("查房标题");
-        title = subTitle(title);    //标题有代字
-
+        String recordDateStr = structureMap.get("查房日期");
+        Date recordDate = StringUtil.parseDateTime(recordDateStr);
         DirectorDoctorWardDoc directorDoctorWardDoc = null;
-        if (StringUtils.isNotEmpty(title) && title.contains("主任")) {
-            directorDoctorWardDoc = new DirectorDoctorWardDoc();
-            directorDoctorWardDoc.setStructureMap(structureMap);
-            directorDoctorWardDoc.setPageData((Map) structureMap);
+        if (StringUtils.isNotEmpty(title)) {
+            if (title.contains("主刀")) {
+                String doctorTitle = getDoctorTitle(operationDocs, recordDate, "主刀医师");
+                title = title.replace("主刀", doctorTitle);
+            } else if (title.contains("一助")) {
+                String doctorTitle = getDoctorTitle(operationDocs, recordDate, "一助");
+                title = title.replace("一助", doctorTitle);
+            }
+            if (StringUtils.isNotEmpty(subTitle(title)) && subTitle(title).contains("主任")) {    //标题有代字)
+                directorDoctorWardDoc = new DirectorDoctorWardDoc();
+                directorDoctorWardDoc.setStructureMap(structureMap);
+                directorDoctorWardDoc.setPageData((Map) structureMap);
+            }
         }
         return directorDoctorWardDoc;
     }
@@ -115,12 +133,22 @@ public class TaiZhouThreeLevelWardDocTrans extends ModelDocTrans {
      */
     private AttendingDoctorWardDoc findAttendingDoctorWardDoc(Map<String, String> structureMap) {
         String title = structureMap.get("查房标题");
-        title = subTitle(title);    //标题有代字
+        String recordDateStr = structureMap.get("查房日期");
+        Date recordDate = StringUtil.parseDateTime(recordDateStr);
         AttendingDoctorWardDoc attendingDoctorWardDoc = null;
-        if (StringUtils.isNotEmpty(title) && title.contains("主治")) {
-            attendingDoctorWardDoc = new AttendingDoctorWardDoc();
-            attendingDoctorWardDoc.setStructureMap(structureMap);
-            attendingDoctorWardDoc.setPageData((Map) structureMap);
+        if (StringUtils.isNotEmpty(title)) {
+            if (title.contains("主刀")) {
+                String doctorTitle = getDoctorTitle(operationDocs, recordDate, "主刀医师");
+                title = title.replace("主刀", doctorTitle);
+            } else if (title.contains("一助")) {
+                String doctorTitle = getDoctorTitle(operationDocs, recordDate, "一助");
+                title = title.replace("一助", doctorTitle);
+            }
+            if (StringUtils.isNotEmpty(subTitle(title)) && subTitle(title).contains("主治")) {    //标题有代字)
+                attendingDoctorWardDoc = new AttendingDoctorWardDoc();
+                attendingDoctorWardDoc.setStructureMap(structureMap);
+                attendingDoctorWardDoc.setPageData((Map) structureMap);
+            }
         }
         return attendingDoctorWardDoc;
     }
@@ -140,4 +168,81 @@ public class TaiZhouThreeLevelWardDocTrans extends ModelDocTrans {
         return srcText;
     }
 
+    /**
+     * 获取主刀医师/一助职称(取距离查房记录时间最近的一次手术记录)
+     *
+     * @param operationDocs
+     * @return
+     */
+    public static String getDoctorTitle(List<OperationDoc> operationDocs, Date recordDate, String findTitle) {
+        String title = "";
+        SpecialStorageUtil specialStorageUtil = SpringContextUtil.getBean("specialStorageUtil");
+        Map<String, Object> surgeon = specialStorageUtil.getJsonStringValue(KernelConstants.HOSPITAL_DOCTOR_MAP);
+        if (surgeon == null) {
+            return title;
+        }
+        /* 用于存放手术结束时间距离查房时间最近的一次时间差 */
+        long timeDiff = 0L;
+        for (OperationDoc operationDoc : operationDocs) {
+            OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
+            if (operationRecordDoc == null) {
+                continue;
+            }
+            Map<String, String> structureMap = operationRecordDoc.getStructureMap();
+            String chiefSurgeon = structureMap.get(findTitle);
+            String operatorEndDateStr = structureMap.get("手术结束时间");
+
+            if (StringUtil.isBlank(chiefSurgeon) || StringUtil.isBlank(operatorEndDateStr)) {
+                continue;
+            }
+            Map<String, String> doctor = (Map) surgeon.get(chiefSurgeon);
+            if (doctor != null) {
+                String professor = doctor.get("professor");
+                Date operatorEndDate = StringUtil.parseDateTime(operatorEndDateStr);
+                if (operatorEndDate != null) {
+                    long timeDifference = timeDifference(operatorEndDate, recordDate);
+                    if (timeDifference == 0) {
+                        continue;
+                    }
+                    if (timeDiff == 0 || timeDiff > timeDifference) {
+                        /* 取距离此次主刀医师查房最近的一次手术时间 */
+                        timeDiff = timeDifference;
+                        title = professor;
+                    }
+                }
+            }
+        }
+        return title;
+    }
+
+    public static long timeDifference(Date firstDate, Date secondDate) {
+        long timeDifference = 0L;
+        if (firstDate == null || secondDate == null) {
+            return timeDifference;
+        }
+        boolean flag = false;
+        if (firstDate.before(secondDate)) {
+            flag = true;
+        }
+        Calendar calendarS = Calendar.getInstance();
+        Calendar calendarE = Calendar.getInstance();
+        long timeS, timeE;
+        try {
+            calendarS.setTime(firstDate);
+            calendarE.setTime(secondDate);
+
+            timeS = calendarS.getTimeInMillis();
+            timeE = calendarE.getTimeInMillis();
+
+            if (flag) {
+                timeDifference = (timeE - timeS) / (1000 * 60);
+            } else {
+                timeDifference = (timeS - timeE) / (1000 * 60);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return timeDifference;
+    }
+
 }

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

@@ -105,6 +105,7 @@ public class TaizhouDocTrans extends DocTrans {
                     break;
                 case "查房记录":
                     TaiZhouThreeLevelWardDocTrans threeLevelWardDocTrans = new TaiZhouThreeLevelWardDocTrans();
+                    threeLevelWardDocTrans.setOperationDocs(inputInfo.getOperationDocs());
                     inputInfo.setThreeLevelWardDocs(threeLevelWardDocTrans.extract(i));
                     break;
                 case "输血后效果评价":