瀏覽代碼

指标十九:出院患者病历归档完整率

chengyao 4 年之前
父節點
當前提交
9a4f76914a
共有 1 個文件被更改,包括 76 次插入2 次删除
  1. 76 2
      src/main/java/com/diagbot/facade/ConsoleFacade.java

+ 76 - 2
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -30,8 +30,7 @@ import java.text.DateFormat;
 import java.text.DecimalFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.time.Duration;
-import java.time.LocalDateTime;
+import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -2274,6 +2273,8 @@ public class ConsoleFacade {
         filterVO.setFlagStr("1");
                              entryCountMap = behospitalInfoFacade.getCountByEntry(filterVO);
         medQualityControlDTO = ruleIndexMethod(filterVO,medQualityControlDTO, baseIndex, entryCountMap);
+        //指标十九
+        medQualityControlDTO = getfileSecAmount(filterVO,medQualityControlDTO, baseIndex);
 
         return medQualityControlDTO;
     }
@@ -2304,6 +2305,79 @@ public class ConsoleFacade {
         return retData;
     };
 
+    private MedQualityControlDTO getfileSecAmount(FilterVO filterVO,MedQualityControlDTO medQualityControlDTO, Map<String, Object> baseIndex){
+        QueryWrapper<BehospitalInfo> query = new QueryWrapper<>();
+        DecimalFormat df = new DecimalFormat("0.0");
+        query.eq("hospital_id", filterVO.getHospitalId())
+                .eq("is_deleted", IsDeleteEnum.N)
+                // .eq("is_placefile", filterVO.getIsPlacefile())
+                .isNotNull("leave_hospital_date")
+                .ge("leave_hospital_date",filterVO.getStartDate())
+                .le("leave_hospital_date",filterVO.getEndDate());
+        List<BehospitalInfo> list = behospitalInfoFacade.list(query);
+
+                Iterator<BehospitalInfo> iterator = list.iterator();
+        while (iterator.hasNext()){
+            BehospitalInfo beh = iterator.next();
+            Boolean flag = getTrueSecFile(beh.getBehospitalDate(), beh.getLeaveHospitalDate());
+            //true删除元素
+            if(!flag){
+                iterator.remove();
+            }
+        }
+        double count = list.stream().distinct().map(BehospitalInfo::getBedCode).count();
+        if(StringUtils.isNotEmpty( baseIndex.get("firMouthNum").toString()) && ! baseIndex.get("firMouthNum").toString().equals("0") ){
+            double retNum =count* 100/Double.parseDouble(baseIndex.get("firMouthNum").toString());
+            double firGradeStr = Double.parseDouble(df.format(retNum));
+            medQualityControlDTO.setLeaveSecFileStr(firGradeStr+"%");
+        }
+
+
+        return medQualityControlDTO;
+    };
+
+    private Boolean getTrueSecFile(Date date1,Date date2){
+        Calendar cal1 = Calendar.getInstance();
+        Calendar cal2 = Calendar.getInstance();
+        //计算截止日期
+        Calendar cal3 = Calendar.getInstance();
+        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        DateTimeFormatter dateTimeFormatterThr = DateTimeFormatter.ofPattern("HH:mm:ss");
+        cal1.setTime(date1);
+        cal2.setTime(date2);
+        cal3.setTime(date1);
+        int holidays = 0;
+        //确定一个 大日期
+        if(cal1.compareTo(cal2) > 0){
+            Calendar temp = cal1;
+            cal1 = cal2;
+            cal2 = temp;
+            temp = null;
+        }
+        while(cal1.compareTo(cal2)<=0){
+            //将时间卡在周六和周天时候取出周末的日期
+            if(cal1.get(Calendar.DAY_OF_WEEK)==1||cal1.get(Calendar.DAY_OF_WEEK)==7){
+                holidays++;
+                System.out.println("周末:"+new SimpleDateFormat("yyyy-MM-dd").format(cal1.getTime()));
+            }
+            cal1.add(Calendar.DAY_OF_YEAR,1);
+        }
+        cal3.add(Calendar.DAY_OF_YEAR,holidays+2);
+        String format1 = new SimpleDateFormat("yyyy-MM-dd").format(cal3.getTime());
+        LocalDateTime of = LocalDateTime.of(1949, 10, 01, 16, 00,01);
+        String format2 = of.format(dateTimeFormatterThr);
+        String endTime = format1 +" "+ format2;
+        LocalDateTime ldt = LocalDateTime.parse(endTime,dateTimeFormatter);
+        ZoneId zone = ZoneId.systemDefault();
+        Instant instant = ldt.atZone(zone).toInstant();
+        Date endDate = Date.from(instant);
+        //true表示未截止
+       if(endDate.after(date1)){
+           return true;
+       }
+       return false;
+    }
+
 
      private MedQualityControlDTO ManageIndexMethod(MedQualityControlDTO medQualityControlDTO, Map<String, Object> baseIndex,FilterVO filterVO){
          QueryWrapper<MedManagementInfo> query = new QueryWrapper<>();