소스 검색

嵊州规则问题处理

wangsy 3 년 전
부모
커밋
f4a020e915

+ 32 - 15
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI03063.java

@@ -63,26 +63,43 @@ public class CLI03063 extends QCCatalogue {
                         .compareTo(o2.getStructureMap().get(key));
             }
         });
-        if (clinicalBloodDocs.size() != clinicBloodEffectDocs.size()) {
+        if (clinicalBloodDocs.size() > clinicBloodEffectDocs.size()) {
             status.set("-1");
             return;
         }
-        for (ClinicalBloodDoc clinicalBloodDoc : clinicalBloodDocs) {
-            for (ClinicBloodEffectDoc clinicBloodEffectDoc : clinicBloodEffectDocs) {
+
+        for (int i = 0; i < clinicalBloodDocs.size(); i++) {
+            if (CatalogueUtil.compareTime(
+                    StringUtil.parseDateTime(clinicalBloodDocs.get(i).getStructureMap().get(key)),
+                    StringUtil.parseDateTime(clinicBloodEffectDocs.get(i).getStructureMap().get(key)),
+                    Long.valueOf(1))) {//结果单时间要比申请单大的
                 if (CatalogueUtil.compareTime(
-                        StringUtil.parseDateTime(clinicalBloodDoc.getStructureMap().get(key)),
-                        StringUtil.parseDateTime(clinicBloodEffectDoc.getStructureMap().get(key)),
-                        Long.valueOf(1))) {//结果单时间要比申请单大的
-                    if (CatalogueUtil.compareTime(
-                            StringUtil.parseDateTime(clinicalBloodDoc.getStructureMap().get(key)),
-                            StringUtil.parseDateTime(clinicBloodEffectDoc.getStructureMap().get(key)),
-                            Long.valueOf(24 * 60))) {//未超过24小时
-                        status.set("-1");
-                        return ;
-                    }
+                        StringUtil.parseDateTime(clinicalBloodDocs.get(i).getStructureMap().get(key)),
+                        StringUtil.parseDateTime(clinicBloodEffectDocs.get(i).getStructureMap().get(key)),
+                        Long.valueOf(24 * 60))) {//未超过24小时
+                    status.set("-1");
+                    return;
                 }
             }
         }
+
+
+//        for (ClinicalBloodDoc clinicalBloodDoc : clinicalBloodDocs) {
+//            for (ClinicBloodEffectDoc clinicBloodEffectDoc : clinicBloodEffectDocs) {
+//                if (CatalogueUtil.compareTime(
+//                        StringUtil.parseDateTime(clinicalBloodDoc.getStructureMap().get(key)),
+//                        StringUtil.parseDateTime(clinicBloodEffectDoc.getStructureMap().get(key)),
+//                        Long.valueOf(1))) {//结果单时间要比申请单大的
+//                    if (CatalogueUtil.compareTime(
+//                            StringUtil.parseDateTime(clinicalBloodDoc.getStructureMap().get(key)),
+//                            StringUtil.parseDateTime(clinicBloodEffectDoc.getStructureMap().get(key)),
+//                            Long.valueOf(24 * 60))) {//未超过24小时
+//                        status.set("-1");
+//                        return;
+//                    }
+//                }
+//            }
+//        }
         /*
         if (clinicalBloodDocs != null && clinicalBloodDocs.size() > 0) {
             for (ClinicBloodEffectDoc cliB : clinicBloodEffectDocs) {
@@ -96,9 +113,9 @@ public class CLI03063 extends QCCatalogue {
 
          */
     }
+
     private String getKeyByHospitalId() {
-        switch (Content.hospital_Id)
-        {
+        switch (Content.hospital_Id) {
             case "7":               //厦门
             case "20":
                 return "病历日期";

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shengzhouyy/behospitalized/BEH0026.java

@@ -39,7 +39,7 @@ public class BEH0026 extends QCCatalogue {
             return;
         }
         String pastText = pastLabel.getText();
-        if (pastText.contains("食物过敏") || pastText.contains("食物、药物过敏史") || pastText.contains("食物药物过敏史")
+        if (pastText.contains("食物过敏") || pastText.contains("食物、药物过敏史") || pastText.contains("食物药物过敏史")
                 || pastText.contains("详见") || pastText.contains("见旧病历") || pastText.contains("见既往病历")) {
             status.set("0");
             return;

+ 79 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shengzhouyy/behospitalized/BEH02902.java

@@ -0,0 +1,79 @@
+package com.lantone.qc.kernel.catalogue.hospital.shengzhouyy.behospitalized;
+
+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.entity.PD;
+import com.lantone.qc.pub.model.entity.Pacs;
+import com.lantone.qc.pub.model.label.PacsLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @ClassName : BEH02902
+ * @Description : 辅助检查未注明地点
+ * @Author : 胡敬
+ * @Date: 2020-05-28 09:56
+ */
+@Component
+public class BEH02902 extends QCCatalogue {
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+
+        String pacsText = inputInfo.getBeHospitalizedDoc().getStructureMap().get("辅助检查");
+        if (StringUtil.isBlank(pacsText)) {
+            status.set("0");
+            return;
+        }
+
+        if (StringUtil.isNotBlank(pacsText) && (pacsText.contains("暂缺") || pacsText.contains("暂无"))) {
+            status.set("0");
+            return;
+        }
+
+        PacsLabel pacsLabel = inputInfo.getBeHospitalizedDoc().getPacsLabel();
+        if (pacsLabel == null || StringUtil.isBlank(pacsLabel.getText())) {
+            status.set("0");
+            return;
+        }
+        boolean findPlace = false;
+        pacsText = pacsLabel.getText();
+        List<Pacs> pacses = pacsLabel.getPacses();
+        if (pacses != null) {
+            for (Pacs pacs : pacses) {
+                /* 时间为入院检查的时间,模型输出处理后结构为 name为空,pd不为空 */
+                if (pacs.getName() == null && pacs.getPd() != null) {
+                    /* 模型先找到时间实体,找到后再从这个时间实体开始,往前往后找 */
+                    PD pd = pacs.getPd();
+                    String name = pd.getName();
+                    int timeIndex = pacsText.indexOf(name);
+                    String beforeTimeText = pacsText.substring(Math.max(timeIndex - 5, 0), timeIndex);
+                    String afterTimeText = pacsText.substring(timeIndex + name.length(), Math.min(timeIndex + name.length() + 10, pacsText.length()));
+                    if (beforeTimeText.contains("院") || afterTimeText.contains("院")) {
+                        findPlace = true;
+                        break;
+                    }
+                }
+            }
+        }
+
+        /* 如果模型没找到时间实体,则直接取辅助检查前20个字,判断有没有院字 */
+        if (!findPlace) {
+            String prefixText = pacsText.substring(0, Math.min(25, pacsText.length()));
+            if (prefixText.contains("院")) {
+                findPlace = true;
+            }
+        }
+
+        if (findPlace) {
+            status.set("0");
+            return;
+        }
+    }
+}

+ 126 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shengzhouyy/clinicalblood/CLI03063.java

@@ -0,0 +1,126 @@
+package com.lantone.qc.kernel.catalogue.hospital.shengzhouyy.clinicalblood;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.Content;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.ClinicBloodEffectDoc;
+import com.lantone.qc.pub.model.doc.ClinicalBloodDoc;
+import com.lantone.qc.pub.util.DateUtil;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * @ClassName : CLI0309
+ * @Description : 输血后效果评价未在24小时完成
+ * @Author : 王宇
+ * @Date: 2020-08-14 10:18
+ */
+@Component
+public class CLI03063 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();//输血记录
+        List<ClinicBloodEffectDoc> clinicBloodEffectDocs = inputInfo.getClinicBloodEffectDocs();//输血效果评价
+        if (ListUtil.isEmpty(clinicalBloodDocs)) {
+            return;
+        }
+        Iterator<ClinicalBloodDoc> clinicalBloodDocIterator = clinicalBloodDocs.iterator();
+        Iterator<ClinicBloodEffectDoc> clinicBloodEffectDocIterator = clinicBloodEffectDocs.iterator();
+        String key = getKeyByHospitalId();
+        while (clinicalBloodDocIterator.hasNext()) {
+            if (!CatalogueUtil.compareTime(
+                    StringUtil.parseDateTime(clinicalBloodDocIterator.next().getStructureMap().get(key)),
+                    StringUtil.parseDateTime(DateUtil.nowString()),
+                    Long.valueOf(24 * 60))) {//如果接收未超过24小时,规则不判断
+                clinicalBloodDocIterator.remove();
+            }
+        }
+        while (clinicBloodEffectDocIterator.hasNext()) {
+            if (!CatalogueUtil.compareTime(
+                    StringUtil.parseDateTime(clinicBloodEffectDocIterator.next().getStructureMap().get(key)),
+                    StringUtil.parseDateTime(DateUtil.nowString()),
+                    Long.valueOf(24 * 60))) {//如果接收未超过24小时,规则不判断
+                clinicBloodEffectDocIterator.remove();
+            }
+        }
+        Collections.sort(clinicalBloodDocs, new Comparator<ClinicalBloodDoc>() {
+            public int compare(ClinicalBloodDoc o1, ClinicalBloodDoc o2) {
+                return o1.getStructureMap().get(key)
+                        .compareTo(o2.getStructureMap().get(key));
+            }
+        });
+        Collections.sort(clinicBloodEffectDocs, new Comparator<ClinicBloodEffectDoc>() {
+            public int compare(ClinicBloodEffectDoc o1, ClinicBloodEffectDoc o2) {
+                return o1.getStructureMap().get(key)
+                        .compareTo(o2.getStructureMap().get(key));
+            }
+        });
+        if (clinicalBloodDocs.size() > clinicBloodEffectDocs.size()) {
+            status.set("-1");
+            return;
+        }
+
+        for (int i = 0; i < clinicalBloodDocs.size(); i++) {
+            if (CatalogueUtil.compareTime(
+                    StringUtil.parseDateTime(clinicalBloodDocs.get(i).getStructureMap().get(key)),
+                    StringUtil.parseDateTime(clinicBloodEffectDocs.get(i).getStructureMap().get(key)),
+                    Long.valueOf(1))) {//结果单时间要比申请单大的
+                if (CatalogueUtil.compareTime(
+                        StringUtil.parseDateTime(clinicalBloodDocs.get(i).getStructureMap().get(key)),
+                        StringUtil.parseDateTime(clinicBloodEffectDocs.get(i).getStructureMap().get(key)),
+                        Long.valueOf(24 * 60))) {//未超过24小时
+                    status.set("-1");
+                    return;
+                }
+            }
+        }
+
+
+//        for (ClinicalBloodDoc clinicalBloodDoc : clinicalBloodDocs) {
+//            for (ClinicBloodEffectDoc clinicBloodEffectDoc : clinicBloodEffectDocs) {
+//                if (CatalogueUtil.compareTime(
+//                        StringUtil.parseDateTime(clinicalBloodDoc.getStructureMap().get(key)),
+//                        StringUtil.parseDateTime(clinicBloodEffectDoc.getStructureMap().get(key)),
+//                        Long.valueOf(1))) {//结果单时间要比申请单大的
+//                    if (CatalogueUtil.compareTime(
+//                            StringUtil.parseDateTime(clinicalBloodDoc.getStructureMap().get(key)),
+//                            StringUtil.parseDateTime(clinicBloodEffectDoc.getStructureMap().get(key)),
+//                            Long.valueOf(24 * 60))) {//未超过24小时
+//                        status.set("-1");
+//                        return;
+//                    }
+//                }
+//            }
+//        }
+        /*
+        if (clinicalBloodDocs != null && clinicalBloodDocs.size() > 0) {
+            for (ClinicBloodEffectDoc cliB : clinicBloodEffectDocs) {
+                Map<String, String> cliBStructureMap = cliB.getStructureMap();
+                if (StringUtils.isEmpty(cliBStructureMap.get("输注后效果评价"))) {
+                    status.set("-1");
+                    break;
+                }
+            }
+        }
+
+         */
+    }
+
+    private String getKeyByHospitalId() {
+        switch (Content.hospital_Id) {
+            case "7":               //厦门
+            case "20":
+                return "病历日期";
+            default:
+                return "记录时间";
+        }
+    }
+}

+ 43 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shengzhouyy/leavehospital/LEA0156.java

@@ -0,0 +1,43 @@
+package com.lantone.qc.kernel.catalogue.hospital.shengzhouyy.leavehospital;
+
+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.DeathRecordDoc;
+import com.lantone.qc.pub.model.doc.LeaveHospitalDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @Description: 出院记录内容缺出院注意事项
+ * @author: rengb
+ * @time: 2020/3/10 13:53
+ */
+@Component
+public class LEA0156 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        LeaveHospitalDoc leaveHospitalDoc = inputInfo.getLeaveHospitalDoc();
+        if (leaveHospitalDoc == null) {
+            return;
+        }
+        DeathRecordDoc deathRecordDoc = inputInfo.getDeathRecordDoc();
+        if (deathRecordDoc == null || deathRecordDoc.getText() == null) {
+            Map<String, String> structureMap = leaveHospitalDoc.getStructureMap();
+            if (structureMap != null) {
+                if (StringUtil.isNotBlank(structureMap.get("出院注意事项"))) {
+                    return;
+                }
+                if (StringUtils.isBlank(structureMap.get("健康教育")) && StringUtils.isBlank(structureMap.get("出院医嘱"))
+                        && StringUtils.isBlank(structureMap.get("出院指导"))) {
+                    status.set("-1");
+                }
+            }
+        }
+    }
+}

+ 11 - 42
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shengzhouyy/operationdiscussion/OPE02930.java

@@ -25,8 +25,6 @@ import java.util.Map;
 public class OPE02930 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        //        boolean isOperativePatient = true;//是手术患者(暂时默认是)
-        //        if (isOperativePatient) {
         List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
         if (operationDocs == null || operationDocs.size() == 0) {
             status.set("0");
@@ -34,58 +32,29 @@ public class OPE02930 extends QCCatalogue {
         }
         for (OperationDoc operationDoc : operationDocs) {
             OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
-            if (operationRecordDoc == null) {
+            OperationDiscussionDoc operationDiscussionDoc = operationDoc.getOperationDiscussionDoc();
+            if (operationRecordDoc == null || operationDiscussionDoc == null) {
                 continue;
             }
             Map<String, String> operationRecordStructureMap = operationRecordDoc.getStructureMap();
-            String operationStartDateStr = operationRecordStructureMap.get("开始时间");
+            Map<String, String> structureMap = operationDiscussionDoc.getStructureMap();
             String operationEndDateStr = operationRecordStructureMap.get("结束时间");
-            if (StringUtil.isEmpty(operationStartDateStr) || StringUtil.isEmpty(operationEndDateStr)) {
+            String discussionRecordDateStr = structureMap.get("病历日期");
+            if (StringUtil.isEmpty(operationEndDateStr) || StringUtil.isBlank(discussionRecordDateStr)) {
                 continue;
             }
-            if (!isDate(operationStartDateStr) || !isDate(operationEndDateStr)) {
+            if (StringUtil.parseDateTime(operationEndDateStr) == null
+                    || StringUtil.parseDateTime(discussionRecordDateStr) == null) {
                 continue;
             }
-            Date operationStartDate = StringUtil.parseDateTime(operationStartDateStr);
             Date operationEndDate = StringUtil.parseDateTime(operationEndDateStr);
-            for (OperationDoc o : operationDocs) {
-                OperationDiscussionDoc operationDiscussionDoc = o.getOperationDiscussionDoc();
-                if (operationDiscussionDoc == null) {
-                    continue;
-                }
-                Map<String, String> structureMap = operationDiscussionDoc.getStructureMap();
-                String discussionRecordDateStr = structureMap.get("病历日期");
-                if (StringUtil.isBlank(discussionRecordDateStr)) {
-                    status.set("0");
-                    return;
-                }
-
-                if (!isDate(discussionRecordDateStr)) {
-                    status.set("0");
+            Date discussionRecordDate = StringUtil.parseDateTime(discussionRecordDateStr);
+            if (operationEndDate.before(discussionRecordDate) || DateUtils.isSameDay(operationEndDate, discussionRecordDate)) {
+                if (CatalogueUtil.compareTime(operationEndDate, discussionRecordDate, 2 * 60L)) {
+                    status.set("-1");
                     return;
                 }
-                Date discussionRecordDate = StringUtil.parseDateTime(discussionRecordDateStr);
-                if (operationEndDate.before(discussionRecordDate) || DateUtils.isSameDay(operationEndDate, discussionRecordDate)) {
-                    if (CatalogueUtil.compareTime(operationEndDate, discussionRecordDate, 2 * 60L)) {
-                        status.set("-1");
-                        return;
-                    }
-                }
             }
         }
     }
-
-    /**
-     * 判断是否为日期
-     *
-     * @param dateStr
-     */
-    private boolean isDate(String dateStr) {
-        try {
-            StringUtil.parseDateTime(dateStr);
-            return true;
-        } catch (IllegalArgumentException e) {
-            return false;
-        }
-    }
 }

+ 215 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shengzhouyy/threelevelward/THR0127.java

@@ -0,0 +1,215 @@
+package com.lantone.qc.kernel.catalogue.hospital.shengzhouyy.threelevelward;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.Content;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.MedicalRecordInfoDoc;
+import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.util.DateUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : THR0127
+ * @Description : 每周无2次副主任医师/主任医师查房记录
+ * @Author : 胡敬
+ * @Date: 2020-03-19 15:52
+ */
+@Component
+public class THR0127 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        MedicalRecordInfoDoc medicalRecordInfoDoc = inputInfo.getMedicalRecordInfoDoc();
+        if (medicalRecordInfoDoc != null && medicalRecordInfoDoc.getStructureMap() != null) {
+            //入院日期
+            String admisTime = medicalRecordInfoDoc.getStructureMap().get("behospitalDate");
+            //出院日期
+            String dischargeTime = medicalRecordInfoDoc.getStructureMap().get("leaveHospitalDate");
+            if (CatalogueUtil.isEmpty(admisTime)) {
+                return;
+            }
+            String presentTime = DateUtil.nowString();
+            //如果如果入院未超过7天则不判断该条规则
+            if (!CatalogueUtil.isEmpty(admisTime) && !CatalogueUtil.isEmpty(presentTime)) {
+                if (!CatalogueUtil.compareTime(StringUtil.parseDateTime(admisTime), StringUtil.parseDateTime(presentTime), (long) (7 * 24 * 60))) {
+                    return;
+                }
+            }
+            //如果住院天数小于7天则不判断该条规则
+            if (!CatalogueUtil.isEmpty(admisTime) && !CatalogueUtil.isEmpty(dischargeTime)) {
+                if (!CatalogueUtil.compareTime(StringUtil.parseDateTime(admisTime), StringUtil.parseDateTime(dischargeTime), (long) (7 * 24 * 60))) {
+                    return;
+                }
+            } else {
+                if (inputInfo.getThreeLevelWardDocs().size() == 0) {
+                    status.set("-1");
+                    return;
+                }
+            }
+
+            if (inputInfo.getBeHospitalizedDoc() != null && inputInfo.getThreeLevelWardDocs().size() > 0) {
+                if (CatalogueUtil.isEmpty(admisTime)) {
+                    return;
+                }
+                //开始时间(入院时间)
+                Date beginDate = StringUtil.parseDateTime(admisTime);
+                if (beginDate == null) {
+                    return;
+                }
+
+                ThreeLevelWardDoc threeLevelWardDoc = inputInfo.getThreeLevelWardDocs().get(0);
+                List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDoc.getAllDoctorWradDocs();
+                if (allDoctorWradDocs.size() == 0) {
+                    status.set("0");
+                    return;
+                }
+                Date lastRecordDate = getLastRecordDate(allDoctorWradDocs);
+                if (lastRecordDate == null) {
+                    return;
+                }
+                int hoursPerWeek = 7 * 24 * 60;
+                String roundRecordThisWeek = "";
+                List<String> roundRecordEveryWeek = new ArrayList<>();
+                beginDate = DateUtil.dateZeroClear(beginDate);//从入院记录当天0点开始算
+                int i = 1;
+                String lastWardDateRange = "";
+                List<String> lastWardDateRangeList = new ArrayList<>();
+                //每周的病历记录
+                while (i >= 1) {
+                    roundRecordThisWeek = extractWardRecord(inputInfo, allDoctorWradDocs, beginDate, hoursPerWeek, lastRecordDate);
+                    if (CatalogueUtil.isEmpty(roundRecordThisWeek)) {
+                        break;
+                    }
+                    //如果6天后日期大于出院日期,跳过
+                    if (StringUtil.isBlank(dischargeTime)) {
+                        dischargeTime = presentTime;
+                    }
+                    Date sixDate = DateUtil.addDate(beginDate, 7);
+                    if (StringUtil.parseDateTime(dischargeTime).before(sixDate)) {
+                        break;
+                    }
+                    lastWardDateRange = DateUtil.formatDate(beginDate) + "    ->    " + DateUtil.formatDate(sixDate);
+                    lastWardDateRangeList.add(lastWardDateRange);
+                    roundRecordEveryWeek.add(roundRecordThisWeek);
+                    beginDate = DateUtil.addDate(beginDate, 7);
+                    i++;
+                }
+                if (roundRecordEveryWeek.size() == 0) {
+                    status.set("0");
+                    return;
+                }
+                List<String> resultInfos = new ArrayList<>();
+                for (int j = 0; j < roundRecordEveryWeek.size(); j++) {
+                    int directorNum = CatalogueUtil.appearNumber(roundRecordEveryWeek.get(j).split(","), Content.director);
+                    int dept_doctorNum = CatalogueUtil.appearNumber(roundRecordEveryWeek.get(j).split(","), Content.dept_doctor);
+                    //三级医师查房算一次主任查房
+                    String key = getKeyByHospitalId();
+                    int threeDoctorNum = CatalogueUtil.appearNumber(roundRecordEveryWeek.get(j).split(","), key);
+                    //北仑内分泌科(主任携主任代主治)
+                    int endocrinologyTitleNum = endocrinologyTitleNum(roundRecordEveryWeek.get(j).split(","));
+                    int num = 2;
+                    if("7".equals(Content.hospital_Id)){num = 1;}
+                    if (directorNum + dept_doctorNum + threeDoctorNum + endocrinologyTitleNum < num) {
+                        //每周无2次主任医师查房记录/科主任查房记录
+                        status.set("-1");
+                        resultInfos.add(lastWardDateRangeList.get(j));
+                    }
+                }
+                if (resultInfos.size() > 0) {
+                    info.set(StringUtils.join(resultInfos.toArray(), ";"));
+                }
+            }
+        }
+    }
+    private String getKeyByHospitalId() {
+        switch (Content.hospital_Id)
+        {
+            case "7":               //厦门
+                return "多学科联合";
+            default:
+                return "三级";
+        }
+    }
+    /**
+     * 北仑内分泌科主任主治处理
+     *
+     * @param srcText
+     * @return
+     */
+    private int endocrinologyTitleNum(String[] srcText) {
+        int count = 0;
+        for (String title : srcText) {
+            String regex = ".*主任.*主任.*主治.*";
+            if (title.matches(regex)) {
+                count++;
+            }
+        }
+        return count;
+    }
+
+    private Date getLastRecordDate(List<ThreeLevelWardDoc> allDoctorWradDocs) {
+        ThreeLevelWardDoc threeLevelWardDoc = allDoctorWradDocs.get(allDoctorWradDocs.size() - 1);
+        Map<String, String> lastWardDocStructureMap = threeLevelWardDoc.getStructureMap();
+        String wardDateStr = lastWardDocStructureMap.get("查房日期");
+        if (StringUtil.isNotBlank(wardDateStr)) {
+            return StringUtil.parseDateTime(wardDateStr);
+        }
+        return null;
+    }
+
+    /**
+     * 抽取duration分钟内所有查房标题
+     * 抽取一周内所有查房标题,若一周内记录少于6天,则返回""
+     *
+     * @param threeLevelWardDocs
+     * @param admisDate
+     * @param duration
+     * @return
+     */
+    private static String extractWardRecord(InputInfo inputInfo, List<ThreeLevelWardDoc> threeLevelWardDocs, Date admisDate, int duration, Date maxRecordDate) {
+        String recordTime = "", recordTitle = "", title = "";
+        List<Date> dateList = new ArrayList();
+        for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
+            Map<String, String> threeLevelWardStructureMap = threeLevelWardDoc.getStructureMap();
+            recordTime = threeLevelWardStructureMap.get("查房日期");
+            title = threeLevelWardStructureMap.get("查房标题");
+            if (StringUtil.isBlank(recordTime) || StringUtil.isBlank(title)) {
+                continue;
+            }
+            Date recordDate = StringUtil.parseDateTime(recordTime);
+            if (recordDate == null) {
+                continue;
+            }
+            /* 替换查房标题中主刀/一助的职称 */
+            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+            if (title.contains("主刀") || title.contains("术后第")) {
+                String doctorTitle = CatalogueUtil.getDoctorTitle(operationDocs, recordDate, "主刀医师");
+                title = title.replace("主刀", doctorTitle).replace("术后第", doctorTitle);
+            } else if (title.contains("一助")) {
+                String doctorTitle = CatalogueUtil.getDoctorTitle(operationDocs, recordDate, "一助");
+                title = title.replace("一助", doctorTitle);
+            }
+            recordDate = DateUtil.dateZeroClear(recordDate);
+            if (admisDate.before(recordDate) && !CatalogueUtil.compareTime(admisDate, recordDate, Long.valueOf(duration))) {
+                recordTitle += title + ",";
+                dateList.add(recordDate);
+            }
+        }
+        if (dateList.size() > 0) {
+            //dateList.sort(Date::compareTo);
+            if (!maxRecordDate.equals(dateList.get(dateList.size() - 1)) || CatalogueUtil.compareTime(admisDate, dateList.get(dateList.size() - 1), Long.valueOf(6 * 24 * 60))) {
+                return recordTitle;
+            }
+        }
+        return "";
+    }
+}

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/shengzhouyy/ShengzhouyyDocTrans.java

@@ -159,7 +159,7 @@ public class ShengzhouyyDocTrans extends DocTrans {
                     inputInfo.getClinicBloodEffectDocs()
                             .stream()
                             .map(i -> i.getPageData())
-                            .sorted((map1, map2) -> OrdinaryAssistant.pageDataTimeSort(map1, map2, "记录时间", "yyyy-MM-dd HH:mm"))
+                            .sorted((map1, map2) -> OrdinaryAssistant.pageDataTimeSort(map1, map2, "病历日期", "yyyy年MM月dd日 HH时mm分"))
                             .collect(Collectors.toList()));
         }
         if (ListUtil.isNotEmpty(inputInfo.getCrisisValueReportDocs())) {