Sfoglia il codice sorgente

优化代码手术后没有连续记录3天

wangfeng 5 anni fa
parent
commit
682eb957e0

+ 69 - 52
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0587.java

@@ -1,85 +1,102 @@
 package com.lantone.qc.kernel.catalogue.operationdiscussion;
 
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
-import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 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.transferrecord.TransferOutDoc;
-import com.lantone.qc.pub.model.doc.transferrecord.TransferRecordDoc;
 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.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
 /**
- * @ClassName : THR0587
- * @Description : 术后病程录没有连续记录3天
- * @Author : 胡敬
- * @Date: 2020-03-30 16:17
+ * @author wangfeng
+ * @Description: 术后没有连续记录3天
+ * @date 2020-07-01 10:31
  */
 @Component
 public class OPE0587 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
         List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
-        List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
+        List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs().get(0).getAllDoctorWradDocs();
         if (ListUtil.isEmpty(operationDocs) || ListUtil.isEmpty(threeLevelWardDocs)) {
             return;
         }
-        //所有查房记录的日期天
-        List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDocs.get(0).getAllDoctorWradDocs();
-        List<Date> wardRecordDayList = getWardRecordDay(allDoctorWradDocs);
-        String OperationEndDateStr = "";
-        //转入日期后应该有的查房记录的日期天
-        List<Date> rollInDay = null;
-        for (OperationDoc operationDoc : operationDocs) {
-            OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
-            if (operationRecordDoc == null) {
-                continue;
-            }
-            Map<String, String> operationRecordStructureMap = operationRecordDoc.getStructureMap();
-            OperationEndDateStr = operationRecordStructureMap.get("手术结束时间");
-            if (CatalogueUtil.isEmpty(OperationEndDateStr)) {
-                continue;
-            }
-            Date OperationEndDate = StringUtil.parseDateTime(OperationEndDateStr);
-            rollInDay = new ArrayList<>();
-            for (int i = 1; i <= 3; i++) {
-                Date wardRecordDay = DateUtil.dateZeroClear(DateUtil.addDate(OperationEndDate, i));
-                rollInDay.add(wardRecordDay);
-            }
-            if (!wardRecordDayList.containsAll(rollInDay)) {
-                status.set("-1");
-                return;
-            }
+        if (inputInfo.getMedicalRecordInfoDoc() == null || inputInfo.getMedicalRecordInfoDoc().getStructureMap().size() == 0) {
+            return;
+        }
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+        //取出所有查房时间
+        List<String> roundsDate = new ArrayList<>();
+        for (ThreeLevelWardDoc t : threeLevelWardDocs) {
+            Date threeLevelDate = StringUtil.parseDateTime(t.getStructureMap().get("查房日期"));
+            roundsDate.add(formatter.format(threeLevelDate));
         }
-    }
 
-    /**
-     * 所有查房记录的日期天
-     *
-     * @param threeLevelWardDocs
-     */
-    private List<Date> getWardRecordDay(List<ThreeLevelWardDoc> threeLevelWardDocs) {
-        List<Date> dateRecordDay = new ArrayList<>();
-        String recordTime = "";
-        for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
-            Map<String, String> rescueStructureMap = threeLevelWardDoc.getStructureMap();
-            recordTime = rescueStructureMap.get("查房日期");
-            Date recordDate = StringUtil.parseDateTime(recordTime);
-            if (recordDate == null) {
-                continue;
+        //取出出院时间
+        Map<String, String> structureMaps = inputInfo.getFirstPageRecordDoc().getStructureMap();
+        String leaveHospitalDate = structureMaps.get("出院时间") == null ? null : structureMaps.get("出院时间");
+        Date leaveDate = StringUtil.parseDateTime(leaveHospitalDate);
+        //没有出院时间, 直接退出
+        if (leaveHospitalDate != null) {
+            //取出病程信息里的手术信息的所有 手术日期
+            List<String> operDateList = new ArrayList<>();
+            for (OperationDoc opera : operationDocs) {
+                OperationRecordDoc operationRecordDoc = opera.getOperationRecordDoc();
+                String operDate = operationRecordDoc.getStructureMap().get("手术日期");
+                if (StringUtil.isNotBlank(operDate)) {
+                    operDateList.add(operDate);
+                }
+            }
+            if (operDateList.size() > 0) {
+                for (String operDates : operDateList) {
+                    Date oper = StringUtil.parseDateTime(operDates);
+                    //手术时间 减去 出院时间
+                    long day = (leaveDate.getTime() - oper.getTime()) / (24 * 60 * 60 * 1000);
+                    //时间大于三天才能判断有没有连续三天查房
+                    if (day > 3) {
+                        List<String> operDatesNew = new ArrayList<>();
+                        //用手术时间加三天
+                        for (int i = 1; i < 4; i++) {
+                            Date firstTimeOfDay = DateUtil.getFirstTimeOfDay(DateUtil.addDay(oper, i));
+                            operDatesNew.add(formatter.format(firstTimeOfDay));
+                        }
+                        if (roundsDate.size() > 2) {//查房日期取出没有3天时间, 直接报错
+                            //去重
+                            List<String> listTemp = new ArrayList<String>();
+                            for (int i = 0; i < roundsDate.size(); i++) {
+                                if (!listTemp.contains(roundsDate.get(i))) {
+                                    listTemp.add(roundsDate.get(i));
+                                }
+                            }
+                            int i = 0;
+                            //循环两个时间List,
+                            for (String str : operDatesNew) {
+                                for (String s : listTemp) {
+                                    if (str.equals(s)) {
+                                        i++;
+                                    }
+                                }
+                            }
+                            if (i < 3) {
+                                status.set("-1");
+                            }
+                        } else {
+                            status.set("-1");
+                            return;
+                        }
+                    }
+                }
             }
-            dateRecordDay.add(DateUtil.dateZeroClear(recordDate));
         }
-        return dateRecordDay;
     }
-}
+}